[
  {
    "name": "arxiv_search",
    "description": "Search arXiv (cs/math/physics/stat preprints). Returns title, authors, summary, pdfUrl, categories. No API key",
    "required": ["query", "maxResults", "start", "sortBy", "sortOrder"],
    "properties": {
      "query": {
        "type": "string",
        "description": "arXiv search query using Lucene syntax. Field prefixes: ti, au, abs, cat, all."
      },
      "category": {
        "type": "string",
        "enum": [
          "cs.AI",
          "cs.CL",
          "cs.LG",
          "cs.CV",
          "cs.DB",
          "cs.DS",
          "cs.IR",
          "cs.RO",
          "math",
          "physics",
          "stat",
          "q-bio",
          "econ"
        ],
        "description": "Filter by arXiv category (appended as AND cat:<category>)."
      },
      "maxResults": {
        "type": "integer",
        "default": 10,
        "minimum": 1,
        "maximum": 100,
        "description": ""
      },
      "start": {
        "type": "integer",
        "default": 0,
        "minimum": 0,
        "maximum": 9007199254740991,
        "description": ""
      },
      "sortBy": {
        "type": "string",
        "enum": ["relevance", "lastUpdatedDate", "submittedDate"],
        "default": "relevance",
        "description": ""
      },
      "sortOrder": {
        "type": "string",
        "enum": ["ascending", "descending"],
        "default": "descending",
        "description": ""
      }
    }
  },
  {
    "name": "weather_short_forecast",
    "description": "KMA(기상청) 단기예보 — 위경도 입력 → 24~72h 예보. 격자좌표 자동 변환. 카테고리: TMP·SKY·POP·PTY 등. PUBLIC_API_KMA_WEATHER_KEY 필요.",
    "required": ["latitude", "longitude", "hours"],
    "properties": {
      "latitude": {
        "type": "number",
        "minimum": 33,
        "maximum": 43,
        "description": "위도 (한국 범위: 33~43). 예: 서울 37.5665"
      },
      "longitude": {
        "type": "number",
        "minimum": 124,
        "maximum": 132,
        "description": "경도 (한국 범위: 124~132). 예: 서울 126.978"
      },
      "hours": {
        "type": "integer",
        "default": 24,
        "minimum": 1,
        "maximum": 72,
        "description": ""
      }
    }
  },
  {
    "name": "weather_ultra_now",
    "description": "KMA 초단기실황 — 현재 시점 8개 항목 실측값 (기온 T1H, 강수 RN1, 습도 REH, 풍향·풍속, 강수형태 PTY 등). \"지금 비 와?\" / \"현재 기온?\" 같은 즉시성 질의용. 매시 정",
    "required": ["latitude", "longitude"],
    "properties": {
      "latitude": {
        "type": "number",
        "minimum": 33,
        "maximum": 43,
        "description": "위도 (한국 33~43). 예: 서울 37.5665"
      },
      "longitude": {
        "type": "number",
        "minimum": 124,
        "maximum": 132,
        "description": "경도 (한국 124~132). 예: 서울 126.978"
      }
    }
  },
  {
    "name": "weather_ultra_forecast",
    "description": "KMA 초단기예보 — 6시간 시간 단위 예보 (T1H 기온, RN1 강수, SKY 하늘, PTY 강수형태, REH 습도, 바람 UUU/VVV/VEC/WSD, LGT 낙뢰). \"1시간 후 우산?\" /",
    "required": ["latitude", "longitude", "hours"],
    "properties": {
      "latitude": {
        "type": "number",
        "minimum": 33,
        "maximum": 43,
        "description": "위도 (한국 33~43). 예: 서울 37.5665"
      },
      "longitude": {
        "type": "number",
        "minimum": 124,
        "maximum": 132,
        "description": "경도 (한국 124~132). 예: 서울 126.978"
      },
      "hours": {
        "type": "integer",
        "default": 6,
        "minimum": 1,
        "maximum": 6,
        "description": ""
      }
    }
  },
  {
    "name": "weather_mid_land",
    "description": "KMA 중기육상예보 — 4~10일치 광역(서울·인천·경기 / 강원영서·영동 / 충북·충남 / 전북·전남 / 경북·경남 / 제주 등) 하늘상태 + 강수확률. 발표 06:00, 18:00 일 2회. r",
    "required": ["region"],
    "properties": {
      "region": {
        "type": "string",
        "description": "예보구역 (자연어 또는 8자리 코드). 예: \"서울.인천.경기\" / \"강원영서\" / \"11B00000\". getMidLandFcst는 A 타입(육상광역) 18개만"
      },
      "tmFc": {
        "type": "string",
        "description": "발표시각 (YYYYMMDD0600 또는 YYYYMMDD1800). 미지정 시 24h 내 가장 최근 발표."
      }
    }
  },
  {
    "name": "weather_mid_temperature",
    "description": "KMA 중기기온예보 — 4~10일치 도시별 최저·최고 기온 (오차범위 Low/High 포함). region: 광역(서울·인천·경기) 또는 도시(서울·수원·인천 등) 자연어/8자리 코드. 발표 06:",
    "required": ["region"],
    "properties": {
      "region": {
        "type": "string",
        "description": "예보구역 (자연어 또는 8자리 코드). 예: \"서울\"(=11B10101) / \"수원\"(=11B20601) / \"11B10101\". getMidTa는 A(광역) +"
      },
      "tmFc": {
        "type": "string",
        "description": "발표시각 (YYYYMMDD0600 또는 YYYYMMDD1800). 미지정 시 24h 내 가장 최근 발표."
      }
    }
  },
  {
    "name": "weather_mid_summary",
    "description": "KMA 중기기상전망 — 4~10일 기간 종합 텍스트 (강수·기온·주말전망·변동성). stnId 자연어 또는 3자리 숫자 (전국=108, 서울=109, 제주도=184 등). 발표 06:00·18:00",
    "required": ["stnId"],
    "properties": {
      "stnId": {
        "type": "string",
        "default": "108",
        "description": "KMA 지점번호 (자연어 또는 3자리 숫자). 예: \"전국\"=108 / \"서울\"=109 / \"제주도\"=184. 미지정 시 전국(108)."
      },
      "tmFc": {
        "type": "string",
        "description": "발표시각 (YYYYMMDD0600 또는 YYYYMMDD1800). 미지정 시 24h 내 가장 최근."
      }
    }
  },
  {
    "name": "air_quality_sido",
    "description": "에어코리아 시도별 실시간 대기오염 측정정보. 17개 시도의 모든 측정소 PM10/PM2.5/O₃/NO₂/SO₂/CO + 통합대기환경지수(CAI). 실시간 갱신.",
    "required": ["sido", "numOfRows"],
    "properties": {
      "sido": {
        "type": "string",
        "enum": [
          "전국",
          "서울",
          "부산",
          "대구",
          "인천",
          "광주",
          "대전",
          "울산",
          "경기",
          "강원",
          "충북",
          "충남",
          "전북",
          "전남",
          "경북",
          "경남",
          "제주",
          "세종"
        ],
        "default": "서울",
        "description": "시도명 (한글). 전국 또는 17개 시도 중 하나."
      },
      "numOfRows": {
        "type": "integer",
        "default": 50,
        "minimum": 1,
        "maximum": 200,
        "description": ""
      }
    }
  },
  {
    "name": "air_quality_forecast",
    "description": "에어코리아 대기오염 예보 — 오늘·내일·모레 PM10/PM2.5/O₃ 권역별 등급(좋음·보통·나쁨·매우나쁨), 발생 원인 텍스트, 행동 요령. 1일 4회 발표(05·11·17·23시).",
    "required": ["informCode"],
    "properties": {
      "searchDate": {
        "type": "string",
        "description": "검색 기준일 (YYYY-MM-DD). 비우면 오늘 날짜 사용."
      },
      "informCode": {
        "type": "string",
        "enum": ["PM10", "PM25", "O3", "ALL"],
        "default": "ALL",
        "description": "통보 코드 필터 — PM10(미세먼지) / PM25(초미세먼지) / O3(오존) / ALL(전체). 주의: 에어코리아 API는 InformCode 파라미터를 무시"
      }
    }
  },
  {
    "name": "air_quality_station",
    "description": "에어코리아 측정소별 실시간 시계열 — 특정 측정소 1개의 24시간(또는 1·3개월) PM10/PM2.5/O₃/NO₂/SO₂/CO + 통합지수 추이. stationName 예: \"종로구\", \"강남대로",
    "required": ["stationName", "dataTerm", "numOfRows"],
    "properties": {
      "stationName": {
        "type": "string",
        "description": "측정소명. 예: \"종로구\", \"강남대로\", \"한강대로\". 미일치 시 totalCount=0 반환됨. 정확한 명칭은 별도 측정소 목록 조회 필요."
      },
      "dataTerm": {
        "type": "string",
        "enum": ["DAILY", "MONTH", "3MONTH"],
        "default": "DAILY",
        "description": "조회 기간 — DAILY(24시간) / MONTH(1개월) / 3MONTH(3개월)."
      },
      "numOfRows": {
        "type": "integer",
        "default": 24,
        "minimum": 1,
        "maximum": 100,
        "description": ""
      }
    }
  },
  {
    "name": "air_quality_week_forecast",
    "description": "에어코리아 주간 미세먼지 예보 — 4일 후까지 권역별 등급(낮음/보통/높음/매우높음) + 신뢰도 + 변화 경향. 매일 발표되지 않으므로 자동 7일 역순 폴백.",
    "required": [],
    "properties": {
      "searchDate": {
        "type": "string",
        "description": "검색 기준일 (YYYY-MM-DD). 비우면 오늘부터 7일 역순 자동 폴백."
      }
    }
  },
  {
    "name": "apartment_rent_search",
    "description": "국토부 아파트 전월세 실거래가. 시군구 법정동 코드(LAWD_CD 5자리) + 거래년월(YYYYMM) → 실거래 목록. 보증금/월세(만원), 전용면적, 층, 단지명 반환. 전세/월세 자동 분류.",
    "required": ["lawdCd", "dealYmd", "numOfRows", "pageNo"],
    "properties": {
      "lawdCd": {
        "type": "string",
        "description": "LAWD_CD · 5자리 법정동 시군구 코드 (예: 11680 강남구, 26350 부산해운대)"
      },
      "dealYmd": {
        "type": "string",
        "description": "DEAL_YMD · YYYYMM (예: 202603)"
      },
      "numOfRows": {
        "type": "integer",
        "default": 20,
        "minimum": 1,
        "maximum": 100,
        "description": ""
      },
      "pageNo": {
        "type": "integer",
        "default": 1,
        "minimum": 1,
        "maximum": 9007199254740991,
        "description": ""
      }
    }
  },
  {
    "name": "apartment_trade_search",
    "description": "국토부 아파트 매매 실거래가. 시군구 법정동 코드(LAWD_CD 5자리) + 거래년월(YYYYMM) → 실거래 목록. 거래금액(만원), 전용면적(㎡), 층, 단지명, 거래유형(중개/직거래), 매수자",
    "required": ["lawdCd", "dealYmd", "numOfRows", "pageNo"],
    "properties": {
      "lawdCd": {
        "type": "string",
        "description": "LAWD_CD · 5자리 법정동 시군구 코드 (예: 11680 강남구, 26350 부산해운대)"
      },
      "dealYmd": {
        "type": "string",
        "description": "DEAL_YMD · YYYYMM (예: 202603)"
      },
      "numOfRows": {
        "type": "integer",
        "default": 20,
        "minimum": 1,
        "maximum": 100,
        "description": ""
      },
      "pageNo": {
        "type": "integer",
        "default": 1,
        "minimum": 1,
        "maximum": 9007199254740991,
        "description": ""
      }
    }
  },
  {
    "name": "kosis_stat",
    "description": "KOSIS 통계청 — 통계표 데이터 조회 (인구·물가·고용 등). orgId(기관)+tblId(통계표)+itmId(항목) 입력. 예: orgId=101, tblId=DT_1B040A3, itmId=",
    "required": ["orgId", "tblId", "itmId", "objL1", "prdSe", "newEstPrdCnt"],
    "properties": {
      "orgId": {
        "type": "string",
        "description": "기관 ID. 예: 101(통계청) / 116(국토교통부) / 410(통계청 인구). KOSIS 사이트에서 조회 가능."
      },
      "tblId": {
        "type": "string",
        "description": "통계표 ID. 예: DT_1B040A3 (행정구역별 인구). KOSIS 사이트 → 검색 → 통계표 코드."
      },
      "itmId": {
        "type": "string",
        "default": "ALL",
        "description": "항목 ID. 다건 시 \"+\"로 결합. 예: \"T20+T21+T22\". 기본 ALL."
      },
      "objL1": {
        "type": "string",
        "default": "ALL",
        "description": "분류 1단계. ALL=전체. 예: 시도코드."
      },
      "objL2": {
        "type": "string",
        "description": ""
      },
      "objL3": {
        "type": "string",
        "description": ""
      },
      "prdSe": {
        "type": "string",
        "enum": ["Y", "M", "Q", "H", "IR", "D"],
        "default": "Y",
        "description": "시점 종류 — Y/M/Q/H/IR/D"
      },
      "newEstPrdCnt": {
        "type": "integer",
        "default": 5,
        "minimum": 1,
        "maximum": 100,
        "description": "최근 N개 시점만 (1~100, default 5)"
      }
    }
  },
  {
    "name": "library_loan_popular",
    "description": "도서관 정보나루 — 기간별 인기대출도서 ranking. startDt/endDt(YYYY-MM-DD) 입력. 옵션: gender(0=남성/1=여성), kdc(분류), region(지역코드).",
    "required": ["startDt", "endDt", "pageSize", "pageNo"],
    "properties": {
      "startDt": {
        "type": "string",
        "description": "조회 시작일 (YYYY-MM-DD)."
      },
      "endDt": {
        "type": "string",
        "description": "조회 종료일 (YYYY-MM-DD)."
      },
      "pageSize": {
        "type": "integer",
        "default": 10,
        "minimum": 1,
        "maximum": 100,
        "description": "페이지 크기 (1~100)."
      },
      "pageNo": {
        "type": "integer",
        "default": 1,
        "minimum": 1,
        "maximum": 9007199254740991,
        "description": "페이지 번호."
      },
      "gender": {
        "type": "string",
        "enum": ["0", "1"],
        "description": "성별 필터: 0=남성, 1=여성. 미지정 전체."
      },
      "kdc": {
        "type": "string",
        "description": "KDC 한국십진분류 (예: \"8\"=문학)"
      },
      "region": {
        "type": "string",
        "description": "지역 코드 (예: \"11\"=서울)"
      }
    }
  },
  {
    "name": "korean_dict_search",
    "description": "국립국어원 우리말샘 — 한국어 단어 검색. 단어별 의미·품사·예문 링크 반환. q(검색어) 필수. num은 최소 10 (API 제약).",
    "required": ["q", "num", "start"],
    "properties": {
      "q": {
        "type": "string",
        "description": "검색어 (단어)"
      },
      "num": {
        "type": "integer",
        "default": 10,
        "minimum": 10,
        "maximum": 100,
        "description": "결과 수 (최소 10)"
      },
      "start": {
        "type": "integer",
        "default": 1,
        "minimum": 1,
        "maximum": 9007199254740991,
        "description": "시작 위치 (1-based)."
      }
    }
  },
  {
    "name": "semantic_scholar_search",
    "description": "Semantic Scholar — 논문 검색 (제목·요약 free-text). 결과: 제목·저자·연도·요약·인용수·OA PDF URL. Rate limit 1 req/sec (자동 throttle ",
    "required": ["query", "limit", "offset", "fields"],
    "properties": {
      "query": {
        "type": "string",
        "description": "검색어 (논문 제목/요약 free text)."
      },
      "limit": {
        "type": "integer",
        "default": 10,
        "minimum": 1,
        "maximum": 100,
        "description": "결과 수 (1~100)."
      },
      "offset": {
        "type": "integer",
        "default": 0,
        "minimum": 0,
        "maximum": 9007199254740991,
        "description": "페이지 offset."
      },
      "fields": {
        "type": "string",
        "default": "title,authors,year,abstract,citationCount,openAccessPdf,venue",
        "description": "반환 필드 (콤마 분리)."
      }
    }
  },
  {
    "name": "assembly_bill_list",
    "description": "열린국회정보 — 의안 목록 조회. age(국회 회기, 22=제22대) + 페이지. 각 의안: id/번호/명칭/위원회/제안일/제안자/링크.",
    "required": ["age", "pIndex", "pSize"],
    "properties": {
      "age": {
        "type": "integer",
        "default": 22,
        "minimum": 1,
        "maximum": 99,
        "description": "국회 회기 (제22대=22)."
      },
      "pIndex": {
        "type": "integer",
        "default": 1,
        "minimum": 1,
        "maximum": 9007199254740991,
        "description": "페이지 번호."
      },
      "pSize": {
        "type": "integer",
        "default": 20,
        "minimum": 1,
        "maximum": 1000,
        "description": "페이지 크기 (1~1000)."
      }
    }
  },
  {
    "name": "exchange_rate",
    "description": "KEXIM 한국수출입은행 환율 조회 — 일자별 매매기준율/매입율/매도율 (USD·EUR·JPY 등 23개 통화). searchdate(YYYYMMDD) 미지정 시 당일. 영업일 아니면 빈 배열.",
    "required": ["data"],
    "properties": {
      "searchdate": {
        "type": "string",
        "description": "조회 일자 (YYYYMMDD). 미지정 시 당일. 영업일 아니면 빈 배열 반환."
      },
      "data": {
        "type": "string",
        "enum": ["AP01", "AP02", "AP03"],
        "default": "AP01",
        "description": "AP01=환율 / AP02=대출금리 / AP03=국제금리"
      }
    }
  }
]
