Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,533Letters: 13Defects: 1,322counted just now
teppi

Server definition

Hash
sha256:2db4e34b16adcb61ee14c83abb953bccca7faf2d3511535af2f2a5a23c088bb6
What it is
What a remote MCP server returned when asked what it offers: 55 tools

The blob, as servednamed by its sha256

{ "instructions": "한국 부동산 질문 전반을 다루는 도구 모음이다 — 법원경매·공매, 아파트 실거래 시세·단지 분석,\n**청약 분양(공고 원문 + 분양가 적정성 계산)**, 규범 표, 지역 순위·인구·거시지표.\n이 서버가 잘하는 것은 웹검색이 못 하는 정형 조인·계산이다(분양가 대 실거래, 경매가 대 시세,\n단지·평형별 시계열, 공고 원문의 조건). 반대로 뉴스·정책 동향·특정 단지 평판처럼 이 데이터에\n없는 것은 웹검색이 맞다 — 도구를 억지로 끼워 맞추지 말고, 없는 값은 없다고 답하라.\n\n도구 지도 — 전체 55종이 9개 축에 있다. 축을 먼저 고르고 그 안에서 도구를 골라라.\n· **법원경매**(9) 민사집행법 경매 물건·사건·낙찰 통계(캠코 공매는 별도 축)\n search·fetch·realty_search_auctions·realty_get_auction_case·realty_auction_history·realty_auction_alerts·realty_auction_sale_rate·realty_compare_auction_vs_market·realty_small_deposit_check\n· **공매**(2) 온비드(캠코) 공매 물건·회차별 최저가·낙찰가율 — 법원경매와 별개 원장이다\n realty_search_onbid·realty_onbid_sale_rate\n· **실거래·단지**(10) 아파트 매매·전월세 실거래와 단지·평형별 시세\n realty_search_complexes·realty_complex_pyeong_price·realty_complex_rent_by_pyeong·realty_complex_report·realty_region_price_stats·realty_region_trend_basket·realty_area_price_bands·realty_nonapt_prices·realty_rental_yield·realty_predict_price\n· **청약·분양**(12) 분양 공고 원문·분양가 적정성·**공고 간 견주기(대지비 비중·옵션·중도금·층 프리미엄·㎡단가)**·경쟁률·자금계획·회사별 성적·공공임대 모집공고\n realty_presale·realty_presale_vs_market·realty_presale_cost·realty_presale_funding_plan·realty_presale_price_trend·realty_presale_context·realty_notice_facts·realty_notice_text·realty_subscription_odds·realty_subscription_score·realty_builder_presale_record·realty_public_rental_notices\n· **규범·계산**(6) 대출·세금·정비사업 규제의 표 조회와 조건 계산, **세대 개조 가능성(벽 헐기·욕실 이동)**\n realty_policy_rules·realty_remodel_feasibility·realty_loan_limit·realty_loan_eligibility·realty_capital_gains_tax·realty_member_transfer_check\n· **지역·거시·공급**(8) 지역 순위·인구·금리 등 거시지표·입주 물량·**시군구 수급 균형(입주 대 세대 증가)**\n realty_region_rankings·realty_compare_regions·realty_demographics·realty_macro_indicators·realty_market_signals·realty_move_in_supply·realty_supply_pipeline·realty_supply_demand_balance\n· **입지·인프라**(3) 최근접역 거리·반경 안 학교·정류장·병원 수 등 주변 시설 원시값(점수는 미검증 참고값)\n realty_location_scores·realty_poi_nearby·realty_poi_stats\n· **정비사업**(4) 재개발·재건축 구역과 분담금·투자위험\n realty_redevelopment·realty_reconstruction·realty_redevelopment_burden·realty_invest_risk\n· **제보**(1) 도구가 틀렸거나 없는 값을 만났을 때의 유일한 쓰기 경로\n report_issue\n\n**규범 표 색인 — realty_policy_rules(topic=…) 25종.** 아래 낱말이 질문에 보이면 그 표가 있다(기억·웹검색으로 때우지 마라 — 조문·시행일과 함께 나온다): 상품별 차이=axes·취득세=acquisition_tax·규제지역=regulated_area·주담대=loan_rules·개인회생=credit_rehab·개인회생 중인데 집 살 수 있나=credit_rehab_property·전월세=lease_rules·경매 권리분석=auction_rights·양도세=capital_gains_tax·청약통장=subscription_account·정비구역 지정=redevelopment_rules·재개발 입주권=redevelopment_entitlement·리모델링 조합=remodeling_rules·1세대1주택 비과세=one_home_exemption_map·종부세=comprehensive_real_estate_tax·증여세=gift_tax_and_funding_source·재산세=property_tax·전세자금대출=jeonse_loan_rules·중도금대출=interim_collective_loan·생활안정자금=living_expense_mortgage·전세퇴거자금=jeonse_return_mortgage·경락잔금대출=auction_balance_loan·자금조달계획서=funding_plan_report·방공제=room_deduction_and_mci·내력벽 철거=unit_alteration_rules. 낱말은 토픽마다 하나만 폈다 — 나머지 낱말과 각 표의 범위는 topic 파라미터 설명과 topic='list'에 있다.\n\n사건번호(case_no)는 법원 간 유일하지 않다. 물건은 반드시 법원명과 함께 특정한다.\n\n단지(\"○○아파트\") 질문은 realty_search_complexes부터 — 평형별 시세가 같이 오고,\n응답의 complex_key가 전월세·유료 단지 도구들의 입력 키다.\n\n빌라(다세대·연립)·오피스텔·단독주택 질문은 realty_nonapt_prices — 이 축은 **매매만** 있다.\n비아파트 전월세를 물으면 데이터가 없다고 답하라(아파트 전월세는 rental 축이 담당).\n\n티어: 경매·시세·단지·청약·순위·거시 기본 도구는 무료(IP당 일한도)다. 설명에 [유료]가 붙은\n도구(가격예측·단지 통합리포트·지역비교·수익률·입지·인프라통계·투자위험·시장신호·재건축·재개발)는\nAPI 키가 필요하다 — 키 없이 부르면 거절된다(유료 이용권: 현재 판매하지 않습니다 — 사업자등록·결제 개통 준비 중). 지금은 개통 알림 신청만 받는다.\n**키가 설정된 클라이언트에선 [유료] 도구도 즉시 동작하니 [유료] 표시를 이유로 회피하지 마라.**\n\n평수: 이 데이터의 평수는 전부 **전용면적 기준 실평수**다. 사용자가 말하는 \"34평\"은\n보통 분양평수(공급면적)이므로 그대로 넣으면 안 된다. 실평수 ≈ 분양평수 × 0.745\n(분양 34평 ≈ 전용 84㎡ ≈ 실평수 25.4평). 평수를 받는 도구는 `pyeong_supply`(분양)와\n`pyeong_exclusive`(전용)를 따로 받으므로 사용자가 쓴 쪽에 넣어라.\n\n**겹쳐 보이는 두 쌍 — 대체재가 아니라 부르는 법이 갈린다**:\n· `search`(자연어 한 줄) ↔ `realty_search_auctions`(구조화 인자). 지역·종류·감정가·유찰횟수를\n 이미 **값으로 알 때**는 뒤쪽이다. search는 최소 파서라 못 뽑은 조건을\n `unapplied_conditions`에 적으니, 비어 있지 않으면 realty_search_auctions로 다시 걸어라.\n· `fetch`(search가 준 `\"법원명|사건번호\"` id 그대로) ↔ `realty_get_auction_case`(사건번호+\n 법원명 따로). 앞은 **문서형 텍스트**, 뒤는 **구조화 필드**(rights·min_bid_source 등)다.\n\n**이름이 두 갈래인 것은 절충이지 실수가 아니다**(고치지 마라): `search`·`fetch`·\n`report_issue`만 `realty_` 접두가 없다 — 앞의 둘은 **ChatGPT 커넥터 규격이 요구하는 정확한\n이름**이라 바꾸면 그 유통 경로가 끊기고, `report_issue`는 유일한 쓰기 도구라 읽기 축과 이름\n부터 갈라 둔 것이다. **이미 나간 이름은 개명하지 않는다**(클라이언트가 도구 목록을 캐시한다).\n\n**\"경매\"는 두 제도다 — 이 서버는 둘 다 담고 있고, 갈라서 답해야 한다**.\n· **법원경매**(민사집행법·각급 법원·사건번호 `2025타경1234`) = realty_search_auctions 계열.\n· **공매**(국세징수법 등·캠코 온비드·물건관리번호 `2026-0600-031235`)\n = realty_search_onbid·realty_onbid_sale_rate.\n근거법·주관기관·**권리 인수 규칙**·저감 방식이 다르므로 **두 원장을 합쳐 세거나 낙찰가율을\n섞어 평균내지 마라.** 그냥 \"경매\"라고만 하면 어느 쪽인지 되물어라 — 번호에 '타경'이 있으면\n법원경매다. 임차인 권리(realty_policy_rules topic=auction_rights)는 **민사집행법 기준**이라\n공매에 그대로 옮기면 안 된다.\n공매 원장의 경계(반드시 함께 전하라): **부동산만**(자동차·동산 없음)·**낙찰 결과는 최근\n3개월분만**·**압류재산 주소는 번지 마스킹**(시군구까지만 유효)·**행이 물건이 아니라\n공매조건(회차)**·**최저입찰가에 '비공개'가 있고 그건 0이 아니라 null**. 공고 원문·감정평가서·\n권리분석은 없다 — 온비드(onbid.co.kr)에서 물건관리번호로 열어야 한다.\n\n청약 라우팅: 공고 목록 = realty_presale → \"넣을 만해?\" = realty_presale_vs_market\n(분양가×실거래 대조) → **공고 내용(전매제한·재당첨제한·거주의무·청약 자격·층별 분양가표·\n발코니 확장/유상옵션 가격·중도금 납부일정) = realty_notice_facts, 자격 세부·유의사항 원문 =\nrealty_notice_text** → 경쟁률·가점 커트라인 = realty_subscription_odds → 주변 시세 기준선 =\nrealty_region_price_stats. 공고 내용을 웹검색·추정으로 답하지 마라(원문 값이 쪽 번호와 함께 온다).\n\n금액 단위: 모든 `*_10k` 필드는 **만원** 단위다(283000=28억 3천만원).\n답변엔 맨 숫자 대신 **`*_text` 필드를 그대로 인용하라** — 억/만원\n표기와 원 단위 정확값이 함께 들어 있다(`min_bid_price_10k: 520.2` →\n`min_bid_price_10k_text: \"최저입찰가 약 520만원(=5,202,000원)\"`). 백엔드가 주는 `*_display`\n(\"0.05억원\"·\"21.70억원\")는 소수 2자리로 뭉갠 값이라 작은 금액은 0에 눌리고 큰 금액은\n소수점이 밀려 읽힌다 — 같은 값의 `*_text`가 정본이다.\n평당가는 특히 조심하라: `avg_price_per_py: 12095`는 **평당 1억 2,095만원**이지 1.2만원이\n아니다(단위 만원/평). 지역 시세 추이의 방향은 월 행을 눈으로 훑어 요약하지 말고\n`price_per_py_summary`(첫·최근·최저·최고 + 변화율 + 상승/하락/보합)를 인용하라.\n할인율은 분모가 둘이다 — `discount_rate`는 감정가 대비, `discount_vs_market_pct`는 시세\n대비이며 `min_bid_rate`는 할인율이 아니라 감정가 대비 **잔존 비율**이다. 각 값의 `*_text`에\n분모와 보수(補數)가 적혀 있으니 그대로 쓰라.\n\n대출·세금 규범 라우팅: \"지금 규제지역이야?\"·\"취득세율?\"·\"LTV 몇 %?\" 같은 **표 질문** =\nrealty_policy_rules(topic=regulated_area/acquisition_tax/loan_rules) → \"이 조건이면 얼마까지\n나와?\" 같은 **조건 계산** = realty_loan_limit(지역·시가·차주 유형을 선언하면 LTV·가액구간\n한도·만기·스트레스 DSR 중 뭐가 최종 상한인지 계산) → \"이 분양 당첨되면 내 돈으로 돼?\" =\nrealty_presale_funding_plan(공고 총소요×자기자금×규제 상한을 한 번에 — 계약금·중도금·잔금\n시점별 판정) → \"지금 팔면 양도세 얼마?\"·\"두 채 올해 같이 팔까 나눠 팔까?\" =\nrealty_capital_gains_tax(선언된 양도가·취득가·보유기간에 세율표 적용 + 합산 vs 연도분산 vs\n차손통산 시나리오 비교). **이 계산기는 1세대1주택 비과세·12억 초과 안분을 계산하지 않는다 —\n그렇다고 밖으로 내보내지 마라**: 갈림길 지도가 우리에게 있다. 비과세 가능성이 보이면\nrealty_policy_rules(topic='one_home_exemption_map')로 가라(5관문·5경로·확인 체크리스트 —\n\"2년 살면 비과세?\"·\"일시적 2주택인데 언제까지 팔아야?\"가 그 자리다). 그 지도의 관문을 다\n훑고도 사실판단이 남을 때만 세무사·홈택스 모의계산을 안내한다.\n→ \"투기과열지구 재개발 지금 사도 입주권 나와?\" =\nrealty_member_transfer_check(투기과열×사업유형×단계로 도시정비법 39조 판정 — 서울은 진행\n단계 자동 결합, 예외는 갈림길로만). 개인회생이 얽힌 질문은 **두 축으로 갈라 부른다** —\n신용·대출은 topic=credit_rehab(공공정보 등록·1년 성실변제 조기삭제·면책 규칙), **재산·주택은\ntopic=credit_rehab_property**(\"남편이 개인회생 중인데 집 살 수 있나\"·청산가치·가용소득·\n퇴직급여와 임차보증금의 압류금지 범위·인가 후 재산 증가·은닉의 경계). 생애최초·주택 수 해당 여부는 서버가\n판정하지 않으니 사용자에게 확인해 선언으로 넘겨라. 대출 규제 수치를 기억이나 웹검색으로\n때우지 마라 — 표가 근거·시행일과 함께 나온다.\n\n**\"이 아파트 내 마음대로 고칠 수 있나\" = realty_remodel_feasibility** (조문 전문은\nrealty_policy_rules topic=unit_alteration_rules). 두 축으로 갈라 답한다 — **벽**(내력벽을\n헐어 방을 틀 수 있나)과 **배관**(층상/층하 — 욕실·주방을 옮길 수 있나). \"벽식구조면\n리모델링 못 하죠?\"·\"내력벽 철거 2016년에 허용되지 않았나요?\"·\"욕실 위치 바꿀 수\n있나요?\"·\"인테리어 하는데 구청 가야 하나요?\"가 이 자리다.\n**이 축의 통설 둘은 틀렸고 도구가 조문으로 깬다** — ①내력벽 철거로 세대를 합치는 행위는\n지금도 금지다(주택법 시행령 [별표 4], 2017-02-13 개정판이 현행) ②\"벽식=개인 리모델링\n불가\"는 과장이다(세대 안 비내력벽은 철거 대상이 될 수 있다). 기억으로 답하지 마라 —\n조문 원문과 시행일이 값으로 나온다.\n**단지별 구조형식(벽식/라멘/무량판) 라벨은 이 서버에 없고 앞으로도 만들지 않는다.**\n건축물대장에 그 사실이 없기 때문이다(아파트 동 137,170개 중 라멘조 0건·자유서술 88%\n미기재). **준공연도로 추정하지도 마라** — 기둥식이 13.8%라 6~7건에 1건이 틀린다.\n단지 층은 2020~2026 분양 모집공고 인용뿐이고 **기존(준공된) 아파트는 0% 덮는다** —\n도구가 매 응답에 커버리지를 공시하니 그대로 전하고, 값이 없으면 unknown이라고 답하되\n응답의 how_to_find_out(관리사무소 설계도서·구청 행위허가 상담)으로 안내하라.\n", "tools": [ { "description": "search가 돌려준 id로 경매 사건의 전체 내용을 가져온다.\n\n id 형식은 \"법원명|사건번호\" (예: \"서울동부지방법원|2025타경51727\").\n 사건번호는 법원 간 중복되므로 법원명 없이 조회하면 후보 목록이 돌아올 수 있다.\n\n rights(매각물건명세서 요약)가 있으면 법원 공시의 전달로만 인용하고, 없으면(rights_note\n 참조) 권리관계를 지어내지 말 것 — 권리분석 판단은 이 도구의 데이터 밖이다.\n\n **이 축의 자리** — 사건 상세도 둘이고 입력과 응답 형태로 갈린다. 이 도구는 `search`가\n 준 `\"법원명|사건번호\"` 한 덩어리를 그대로 받아 **문서형 텍스트**를 돌려준다(ChatGPT\n 커넥터 규격). 사용자가 사건번호를 말로 불러줬거나, `rights`·`min_bid_source` 같은 필드를\n **값으로** 다뤄야 하면 `realty_get_auction_case`(사건번호·법원명을 따로 받는 구조화 응답)를\n 써라. 유찰 이력·기일별 저감은 어느 쪽도 아니고 `realty_auction_history`다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "id": { "description": "search가 돌려준 id를 **그대로** 넣는다 — `법원명|사건번호` 형식이다 (예: '서울동부지방법원|2025타경51727'). 파이프 앞은 정식 법원명이고 지원은 '진주지원'처럼 지원명만 오는 행도 있다. 파이프 뒤는 `2026타경3571` 꼴 (연도 4자리 + '타경' + 일련번호, 일련번호는 3~6자리). 법원명 없이 사건번호만 넣으면 사건번호가 법원 간 유일하지 않아 후보 목록이 돌아온다", "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "fetchArguments", "type": "object" }, "name": "fetch", "outputSchema": null }, { "description": "지역의 매매 시세를 평형대 4구간(소형/중소형/중형/대형, 전용면적 기준)으로 조회한다.\n \"○○구에서 무슨 평수대가 얼마쯤 해?\"류 질문용 — 특정 단지는 realty_search_complexes를 쓰라.\n\n **이 축의 자리(시세 도구 3종 중)**: 지역의 가격 **수준** 비교는 이게 기본값이다.\n 이상치 필터(계약해제 제외 + **직거래 중** 같은 평형대 중개거래 중앙값의 50% 미만만 제외)가\n 적용돼 realty_region_price_stats의 미필터 평균과\n 값이 다르며, **수준이 갈리면 이쪽을 우선하라**. 월별 **추이**가 필요하면\n region_price_stats, 단지가 특정되면 search_complexes.\n\n 구간 라벨의 평수는 **전용평**이다. 사용자의 분양평 감각으로는 소형<60㎡≈분양 24평 미만,\n 중소형 60~85㎡≈분양 24~34평, 중형 85~115㎡≈분양 34~47평, 대형 115㎡+≈분양 47평 이상.\n ", "inputSchema": { "additionalProperties": false, "properties": { "by_dong": { "default": false, "description": "법정동 × 평형대 중앙값을 함께 낸다. '이 구에서 어디가 싼가'류 질문의 자리다 — 실측(마포구 6개월, 전용 60~84㎡): 서교동 6.8억 ~ 용강동 27.1억으로 한 구 안에서 4배 갈린다. 표본 3건 이상 칸만 나온다", "title": "By Dong", "type": "boolean" }, "period_months": { "default": 3, "description": "집계 기간(개월) (허용 범위 1~24)", "maximum": 24, "minimum": 1, "title": "Period Months", "type": "integer" }, "region": { "description": "시군구명 (예: 마포구). **법정동까지 넣어도 된다**(예: '마포구 아현동') — 구 하나로 뭉치면 신도심·구도심이 한 값이 된다", "title": "Region", "type": "string" } }, "required": [ "region" ], "title": "realty_area_price_bandsArguments", "type": "object" }, "name": "realty_area_price_bands", "outputSchema": null }, { "description": "유찰이 쌓여 최저입찰가가 크게 떨어진 경매 물건을 골라낸다.\n\n 유찰이 누적돼 최저입찰가가 크게 떨어진 물건을 찾는다. \"○○에서 유찰 많은 물건\"은\n sido/sigungu로 좁혀라.\n\n 유찰이 많다는 건 싸다는 뜻이기도 하지만 권리관계·물건 하자 등 팔리지 않는 이유가\n 있다는 뜻이기도 하다. 결과를 추천으로 제시하지 말고 확인이 필요한 후보로 제시하라.\n\n **같은 축의 다른 문**: realty_search_auctions(min_fail_count)로도 유찰 물건을 거를 수\n 있다 — 조건 필터·목록이 목적이면 그쪽, 저감 큰 후보 발굴(극단 할인 컷 포함)이면 이쪽.\n 둘을 합쳐 세지 마라(같은 물건이 양쪽에 나온다).\n ", "inputSchema": { "additionalProperties": false, "properties": { "limit": { "default": 20, "description": "반환 개수 (최대 50) (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "max_discount_pct": { "default": 100, "description": "감정가 대비 최대 할인율(%) — 80%+ 극단 할인은 지분매각·대지권 없음 등 특수물건이 대부분이라, 실수요 후보를 찾을 땐 79 이하로 걸러라 (허용 범위 0~100)", "maximum": 100, "minimum": 0, "title": "Max Discount Pct", "type": "integer" }, "min_bid_count": { "default": 3, "description": "최소 유찰 횟수 (허용 범위 0~100)", "maximum": 100, "minimum": 0, "title": "Min Bid Count", "type": "integer" }, "min_discount_pct": { "default": 30, "description": "감정가 대비 최소 할인율(%) (허용 범위 0~100)", "maximum": 100, "minimum": 0, "title": "Min Discount Pct", "type": "integer" }, "sido": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 (예: 세종, 경기도) ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.", "title": "Sido" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 (예: 강남구, 수원시) ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.", "title": "Sigungu" }, "usage_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. 부분일치라 '빌라'는 '연립주택,다세대,빌라' 행에 걸린다(**표기를 바꾸지 않는다** — '다세대'로 자동 매핑하는 것은 낙찰가율 통계 realty_auction_sale_rate 쪽이다). '토지'는 이 원장에 없는 이름이라 거절된다 — 대지·임야·전답으로 나뉘어 있다. 비우면 전 종류", "title": "Usage Name" } }, "title": "realty_auction_alertsArguments", "type": "object" }, "name": "realty_auction_alerts", "outputSchema": null }, { "description": "경매 사건 하나의 유찰 이력·가격 변동·물건 사진을 조회한다.\n\n 경매 사건의 유찰 이력(기일별 최저가 저감 시계열)·가격 변동 이벤트·물건 사진 URL을\n 조회한다. \"몇 번 유찰됐어? 얼마나 떨어진 거야? 사진 있어?\"류 질문의 담당 도구.\n 사진은 법원 원천에서 기일 후 소멸해 **수집 시점 보존본만 존재**한다(국내 공개 API에 드문 축).\n\n court_schedule에서 result='유찰'인 행이 유찰 이력, min_bid_10k의 저감이 가격 흐름이다.\n result가 null인 행은 미래 기일이거나 미해독 법원 코드(result_code 원문 병기)다 —\n 의미를 지어내지 말고 그대로 전하라. **최저가(min_bid_10k)가 없는 행에는 `kind_note`가\n 붙는다 — 그 행은 입찰 기일이 아니다**(원천 전수에서 최저가·유찰 표기는 kind_code=01에만\n 붙는다). fail_count가 기일표의 유찰 행 수와 다르면 `fail_count_note`가 그 이유를 댄다\n (출처가 목록 원천 vs 기일표로 갈린다) — 둘을 합쳐 세지 마라. tracking·price_events는 2026-07-23 이후 일일\n 스냅샷 비교분이라 비어 있을 수 있다(비어 있음 ≠ 변동 없음, court_schedule이 정본).\n ⚠️ court_schedule이 빈 물건(기일표 미수집)의 `current_min_bid_10k`는 건별\n `min_bid_source`를 봐야 한다 — item_list면 낡았을 수 있어 min_bid_note가 함께 온다.\n 그 경우 현재 최저가를 단정하지 말고 note를 사용자에게 전하라(목록·상세와 같은 경고).\n ", "inputSchema": { "additionalProperties": false, "properties": { "case_no": { "description": "사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 3~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'·'3571'처럼 접두 없이 넣지 마라", "title": "Case No", "type": "string" }, "court_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "법원명 — '서울동부지방법원'·'인천지방법원'처럼 정식명으로 넣는다('진주지원'처럼 지원명만인 행도 있다). 사건번호는 법원 간 유일하지 않아(전국 평균 2.8개 법원에서 중복) 생략하면 후보 목록이 돌아온다", "title": "Court Name" } }, "required": [ "case_no" ], "title": "realty_auction_historyArguments", "type": "object" }, "name": "realty_auction_history", "outputSchema": null }, { "description": "\"이 지역 이 물건은 보통 감정가의 몇 %에 낙찰되나\"를 실제 매각결과로 답한다.\n\n 입찰가를 정할 때 쓰는 핵심 지표다. `by_fail_count`에 유찰 횟수별 분포가 들어 있어\n \"2회 유찰된 물건은 보통 몇 %에 낙찰되는가\"를 바로 읽을 수 있다.\n 낙찰가율 = 낙찰가 / 감정가 × 100. 100%를 넘으면 감정가보다 비싸게 팔린 것이다.\n\n **\"감정가 12억에 최저가 7.68억이면 몇 번 유찰됐나\"는 이 도구가 아니다** — 그건 낙찰 통계가\n 아니라 저감 산수다(최저가 = 감정가 × (1−저감률)^유찰횟수, 법원별 저감률 실측표와 예시는\n realty_policy_rules(topic='auction_rights', section='minimum_price_reduction')). 사건번호가\n 있으면 realty_auction_history의 기일별 이력이 정본이다(T-2026W34-353 피드백).\n\n 표본의 집계 기간은 응답의 `sample_period`(매각기일 min~max)에 있다 — \"요즘\"류\n 질문에는 이 범위를 함께 전하라. 기간을 좁히는 파라미터는 백엔드가 지원하지 않는다\n (요청해도 조용히 무시됨을 실측했다 — 그래서 노출하지 않는다).\n\n usage_name에 '빌라'를 넣으면 표준 분류인 '다세대'로 자동 매핑해 집계한다(원문\n '빌라'는 소수 비표준 표기 행만 잡혀 표본이 조용히 왜곡된다 — 응답에 매핑 사실이\n 공시된다). 연립주택 통계는 usage_name='연립주택'으로 따로 물어라.\n\n **평형을 섞지 마라(2026-08-16 축 신설)**: 응답의 `by_area_band`가 전용면적대별\n 낙찰가율이다. 실측(사건 중복 제거): 아파트 전국 전체 79.2%인데 전용 59㎡ 이하 75.7%,\n 60~84㎡ 82.2%, 서울은 88.9% vs 97.3%다. 대상 물건의 평형을 알면 `area_band`로 좁히고,\n 지역 요약 하나로 입찰가를 정하지 마라. '면적 미상' 밴드는 공고에 면적 표기가 없는\n 사건이지 0이 아니다.\n\n **이 축의 자리(경매 가격판단 3종 중)**: 이 %는 **감정가 대비** 통계다. 특정 물건이\n 실거래 **시세** 대비 싼지는 realty_compare_auction_vs_market이 자동 계산한다 —\n 분모가 다르니 두 %를 한 문장에 섞지 마라(감정가는 시세와 다른 시점·기준의 값이다).\n ", "inputSchema": { "additionalProperties": false, "properties": { "area_band": { "anyOf": [ { "enum": [ "59㎡이하", "60~84㎡", "85㎡초과" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "전용면적대로 좁힌다. 낙찰가율은 평형에 따라 갈린다 — 대상 물건의 평형을 알면 반드시 넣어라(응답의 by_area_band로도 확인된다)", "title": "Area Band" }, "bid_count_max": { "anyOf": [ { "maximum": 100, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "유찰 횟수 **상한**(이하). 예: 2를 주면 유찰 0·1·2회 물건의 매각결과만 집계한다. 유찰이 쌓일수록 낙찰가율이 내려가므로 대상 물건의 유찰 횟수에 맞춰 좁혀라. 비우면 유찰 횟수 무관 전체(응답의 by_fail_count에 횟수별 분포가 그대로 온다) (허용 범위 0~100)", "title": "Bid Count Max" }, "sido": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 — '서울'처럼 줄여 써도 되고 '서울특별시'도 된다(서버가 정식명으로 편다). 원장 표기는 서울특별시·경기도·부산광역시·세종특별자치시·강원특별자치도 같은 정식명이다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.", "title": "Sido" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 — 원장 표기 그대로 넣는다(예: '강남구', '평택시', '기장군'). 특례시·일반구는 '수원시 권선구'처럼 두 토막이다. 시도 이름을 여기 붙이지 마라('서울 강남구'는 안 맞는다) — 시도는 sido로 준다 ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.", "title": "Sigungu" }, "usage_name": { "default": "아파트", "description": "물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. '빌라'는 표준 분류가 아니라 서버가 '다세대'로 매핑하고 그 사실을 응답에 공시한다. 비우면 전 종류", "title": "Usage Name", "type": "string" } }, "title": "realty_auction_sale_rateArguments", "type": "object" }, "name": "realty_auction_sale_rate", "outputSchema": null }, { "description": "시공사·시행사별 분양 성적 — 공고 수·공급 세대·무순위(줍줍) 세대와 비율·청약 1순위 배수·미달 세대.\n\n \"○○건설 분양 성적\", \"GS건설 현장 무순위 많이 나왔나\", \"대전 시공사별 분양\", \"이 시행사 다른 현장은\"류\n 질문의 자리다. builder(또는 developer)를 주면 그 회사 행과 **현장 목록**(단지·지역·공고일·공급·\n 무순위·비율·시행사)을, 아무것도 안 주면 공급 상위 N개 회사 순위를, region(시도)을 주면 그 시도로 좁힌다.\n 행마다 같은 창의 **전국 비율(baseline)**이 비교 기준으로 붙는다.\n\n **결론에 반드시 옮길 것**(meta.disclosures):\n · 무순위 세대는 **최종 미분양이 아니다**(당첨 후 계약 포기분 재공급). 무순위 뒤 남은 것은 별도 필드.\n · 청약홈 밖 공급(지주택·자체분양·선착순·임의공급)은 없다 — 대구처럼 선착순으로 빼는 지역은 비율이 낮게 나온다.\n · **재무 건전성 판정이 아니다** — PF·부채·보증은 DART 영역. \"위험\"·\"부실\" 같은 낙인을 붙이지 말고\n 수치와 전국 비율만 전하라.\n · 공동시공은 각 사에 전량 귀속, 회사명 묶음은 우리 규칙, 무순위 연결률은 meta.match_rate.\n\n view='sites'는 \"무순위 청약에서도 신청이 모자란 단지\" 목록이다 — 최근 회차 미달 세대(청약 미달이지 미판매·\n 계약 결과가 아니다)와 시군구 미분양 추이. 그 뒤 선착순 판매 여부는 모른다(meta.disclosures).\n ", "inputSchema": { "additionalProperties": false, "properties": { "builder": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시공사명(부분일치, ㈜·주식회사 무시, '지에스건설'→GS건설 같은 별칭 흡수). 주면 그 회사 행 + 현장 목록", "title": "Builder" }, "developer": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시행사(사업주체)명(부분일치). builder와 같이 주면 그 시행사와 한 현장만 남긴다", "title": "Developer" }, "group": { "default": "시공사", "description": "순위 모드의 묶음 단위", "enum": [ "시공사", "시행사" ], "title": "Group", "type": "string" }, "min_shortfall": { "default": 1, "description": "sites: 최근 회차 미달 세대 하한 (허용 범위 0~100000)", "maximum": 100000, "minimum": 0, "title": "Min Shortfall", "type": "integer" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도로 좁힌다(예: '대전', '경기') — 시군구는 받지 않는다", "title": "Region" }, "since": { "default": "2024-07", "description": "본공고 공고월 하한 YYYY-MM(기본 2024-07)", "pattern": "^20\\d{2}-(0[1-9]|1[0-2])$", "title": "Since", "type": "string" }, "sort": { "default": "shortfall", "description": "sites 정렬", "enum": [ "shortfall", "ratio", "recent" ], "title": "Sort", "type": "string" }, "top_n": { "default": 20, "description": "회사를 안 줬을 때 순위 모드의 행 수(공급 세대 내림차순) (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Top N", "type": "integer" }, "view": { "default": "companies", "description": "sites=무순위 청약 미달 단지 목록(최근 회차 △N, since는 최근 회차 월)", "enum": [ "companies", "sites" ], "title": "View", "type": "string" } }, "title": "realty_builder_presale_recordArguments", "type": "object" }, "name": "realty_builder_presale_record", "outputSchema": null }, { "description": "선언된 양도가·취득가·필요경비·보유기간에 **양도소득세 세율표를 결정론으로 적용**한다\n — 기본·단기·분양권 세율, 장특공제 표1, 기본공제, 다주택 중과(선언), 지방소득세 10%.\n 두 번째 자산을 주면 **같은 해 합산 vs 연도분산 vs 차손통산**을 비교해 어느 쪽이 유리한지\n 산출한다. \"지금 팔면 양도세 얼마?\"·\"두 채를 올해 같이 팔까 나눠 팔까?\"의 자리다.\n\n 경계를 지켜라: ① 입력 전부 **선언**이다 — 보유기간 기산·주택 수·조정대상지역 해당은\n 사실판단이라 서버가 판정하지 않는다. ② **1세대1주택 비과세·12억 초과 고가주택 안분·\n 감면 특례는 계산하지 않는다**(not_curated) — 이 결과는 양도 전액이 과세된다는 전제다.\n **그렇다고 사용자를 밖으로 내보내지 마라 — 계산기가 없을 뿐 갈림길 지도는 우리에게\n 있다**: `realty_policy_rules(topic='one_home_exemption_map')`이 5관문(세대·1주택·\n 보유2년·조정지역 거주2년·12억)과 5경로(일시적2주택·상속·합가·부득이한 사유·상생임대)를\n 확인 체크리스트와 함께 준다. 비과세 가능성이 보이면 **거기부터** 가고, 그 관문을 다 훑고도\n 사실판단이 남을 때 비로소 홈택스 모의계산·세무사를 안내하라. ③ 세율표·필요경비 분류·중과\n 경과조치의 원문·근거 조문은 realty_policy_rules(topic=capital_gains_tax)가 진실원이고,\n 조정대상지역 지정 현황은 topic=regulated_area다.\n 응답의 traps·pending_legislation·disclaimer를 함께 전하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "acquisition_price_10k": { "description": "취득가액(만원). 증여받은 자산은 이월과세(10년)로 증여자 원취득가가 될 수 있다 — 응답 traps 확인", "exclusiveMinimum": 0, "title": "Acquisition Price 10K", "type": "integer" }, "asset2_acquisition_price_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "두 번째 자산의 취득가액(만원)", "title": "Asset2 Acquisition Price 10K" }, "asset2_asset_type": { "default": "주택", "description": "두 번째 자산의 종류", "enum": [ "주택", "조합원입주권", "분양권", "주택외부동산" ], "title": "Asset2 Asset Type", "type": "string" }, "asset2_expenses_10k": { "default": 0, "description": "두 번째 자산의 필요경비(만원)", "minimum": 0, "title": "Asset2 Expenses 10K", "type": "integer" }, "asset2_holding_years": { "anyOf": [ { "maximum": 100, "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "두 번째 자산의 보유기간(년) — **transfer_year 기준**이다. 연도분산 시나리오는 이 자산을 다음 해에 파는 가정이라 서버가 보유기간을 +1년으로 다시 계산한다(응답 scenarios.split_years.asset2_recomputed에 실토) (허용 범위 0~100)", "title": "Asset2 Holding Years" }, "asset2_multi_home_surcharge": { "default": "없음", "description": "두 번째 자산의 중과 선언 — 첫 자산 매도 후 주택 수가 줄어 지위가 달라질 수 있다. 시나리오별 지위 변화도 선언 그대로 쓴다(서버는 판정하지 않는다)", "enum": [ "없음", "2주택_조정대상지역", "3주택이상_조정대상지역" ], "title": "Asset2 Multi Home Surcharge", "type": "string" }, "asset2_transfer_price_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "두 번째 자산의 양도가액(만원) — 주면 '올해 같이 팔기 vs 내년으로 나누기' 시나리오를 비교한다. asset2_acquisition_price_10k·asset2_holding_years와 함께 줘야 한다", "title": "Asset2 Transfer Price 10K" }, "asset_type": { "default": "주택", "description": "자산 종류 — 단기세율·장특공제가 갈린다. 분양권은 보유 2년이 넘어도 60%다", "enum": [ "주택", "조합원입주권", "분양권", "주택외부동산" ], "title": "Asset Type", "type": "string" }, "holding_years": { "description": "보유기간(년, 소수 허용 — 예: 1.5). 취득일~양도일이며 상속·증여 기산 특례는 사실판단이라 호출자가 확정해 선언한다 (허용 범위 0~100)", "maximum": 100, "minimum": 0, "title": "Holding Years", "type": "number" }, "multi_home_surcharge": { "default": "없음", "description": "다주택 중과 **선언** — 양도 시점에 그 주택이 조정대상지역 안이고(현재 지정 현황은 topic=regulated_area) 세대 주택 수가 2/3+인 경우. 주택 수 판정(분양권·입주권 가산, 지방 저가주택 제외)은 사실판단이라 서버가 하지 않는다", "enum": [ "없음", "2주택_조정대상지역", "3주택이상_조정대상지역" ], "title": "Multi Home Surcharge", "type": "string" }, "necessary_expenses_10k": { "default": 0, "description": "필요경비 합계(만원) — 취득·양도 부대비용과 자본적 지출만. 도배·싱크대 같은 수익적 지출은 불인정이다(경계·증빙 요건은 topic=capital_gains_tax 원문)", "minimum": 0, "title": "Necessary Expenses 10K", "type": "integer" }, "share_pct": { "default": 100, "description": "본인 지분율(%, 공동명의면 예: 50). 양도세는 인별 과세라 본인 지분만 계산하고 기본공제 250만원도 각자 받는다 — 배우자 몫은 배우자 지분으로 따로 호출하라. 두 자산 모두에 같은 지분을 적용한다 (허용 범위 0 초과~100)", "exclusiveMinimum": 0, "maximum": 100, "title": "Share Pct", "type": "number" }, "transfer_price_10k": { "description": "양도가액(만원, 예: 90000=9억). 예정이면 예상 매도가를 선언", "exclusiveMinimum": 0, "title": "Transfer Price 10K", "type": "integer" }, "transfer_year": { "description": "양도(예정) 연도. 2027 이후는 계류 중인 세제개편안이 결과를 뒤집을 수 있어 응답에 실토가 붙는다. 2025 이전 과거 양도는 당시 규칙(중과 유예 등)이라 다루지 않는다 (허용 범위 2026~2035)", "maximum": 2035, "minimum": 2026, "title": "Transfer Year", "type": "integer" } }, "required": [ "transfer_price_10k", "acquisition_price_10k", "holding_years", "transfer_year" ], "title": "realty_capital_gains_taxArguments", "type": "object" }, "name": "realty_capital_gains_tax", "outputSchema": null }, { "description": "경매 물건의 최저입찰가를 같은 단지 실거래 시세와 대조해 할인율·표면수익률을 낸다.\n 기본은 **오늘 이후 기일 물건만**이다(지난 기일이 섞여 나오던 결함 수리, 2026-08-08).\n\n 주소·단지명 정규화 정확매칭으로 붙이며, 감정가가 기준선의 50~150% 범위인 건만 비교한다\n (지분경매·특수물건을 배제하기 위함). 결과의 `signal`은 주의/관심/보통/낮음/판정보류다.\n **시세 기준선은 같은 단지의 같은 면적대(±10%) 실거래 평균이다**(2026-08-16 수리 — 종전엔\n 단지 전 평형 혼합 평균이라 대형·소형이 섞인 단지에서 할인율이 통째로 어긋났다).\n 면적을 맞추지 못하면 `discount_vs_market_pct`는 **null**이고 signal은 '판정보류'다 —\n 그 자리를 `discount_vs_all_types_pct`(혼합평균 대비)로 대신 채워 말하지 마라.\n ⚠️ 유찰 물건은 `auction.min_bid_source`를 확인하라 — item_list면 최저가가 낡았을 수\n 있고(`min_bid_note` 동봉) 그 최저가로 계산된 할인율·수익률도 함께 틀어진다.\n 이 도구는 다른 도구보다 느리다(출처 조회 포함 2~4초).\n\n **이 축의 자리(경매 가격판단 3종 중)**: \"이 물건 싸?\"는 이게 1차다(시세 자동 조인).\n 입찰가 책정은 realty_auction_sale_rate(감정가 대비 실제 낙찰가율)와 함께 쓰되,\n 이 도구의 할인율(시세 대비)과 낙찰가율(감정가 대비)은 **분모가 달라 섞으면 안 된다**.\n 기준 시세를 손으로 잡을 땐 realty_area_price_bands(수준)/region_price_stats(추이).\n ", "inputSchema": { "additionalProperties": false, "properties": { "case_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "특정 사건 하나만 비교할 때 — `2026타경3571` 꼴(연도 4자리 + '타경' + 일련번호). 주면 지역 조건 대신 이 사건만 보고, 기일 제한도 걸지 않는다. 사건번호는 법원 간 중복되니 court_name을 반드시 함께 주라", "title": "Case No" }, "court_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "법원명 — case_no와 함께 쓴다. 사건번호는 법원 간 유일하지 않아(평균 2.8배 중복) 이걸 빼면 다른 법원 물건이 섞이고 최저가 출처도 확정되지 않는다", "title": "Court Name" }, "include_past": { "default": false, "description": "지난 기일 물건 포함 여부 — 기본은 오늘 이후 기일만(입찰 가능 후보). case_no 특정 조회는 이 값과 무관하게 기일 제한이 없다", "title": "Include Past", "type": "boolean" }, "limit": { "default": 10, "description": "비교할 물건 수 (최대 50) (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "sido": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 — '서울'처럼 줄여 써도 되고 '서울특별시'도 된다(서버가 정식명으로 편다). 원장 표기는 서울특별시·경기도·부산광역시·세종특별자치시·강원특별자치도 같은 정식명이다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.", "title": "Sido" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 — 원장 표기 그대로 넣는다(예: '강남구', '평택시', '기장군'). 특례시·일반구는 '수원시 권선구'처럼 두 토막이다. 시도 이름을 여기 붙이지 마라('서울 강남구'는 안 맞는다) — 시도는 sido로 준다 ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.", "title": "Sigungu" }, "usage_name": { "default": "아파트", "description": "물건 종류 — 이 도구는 같은 단지 실거래와 붙이므로 '아파트'가 기본이다. 오피스텔·다세대·연립주택도 되지만 단지 매칭률이 떨어진다. 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·근린시설·상가", "title": "Usage Name", "type": "string" } }, "title": "realty_compare_auction_vs_marketArguments", "type": "object" }, "name": "realty_compare_auction_vs_market", "outputSchema": null }, { "description": "[유료] 여러 지역의 매매·전세 시세와 추이를 나란히 비교한다. 갈아타기·투자처 비교용.\n\n \"어디가 제일 ○○해?\"류 순위·탐색 질문은 무료 realty_region_rankings로 먼저 좁혀라 —\n 이 도구는 비교 대상이 정해졌을 때 쓴다.\n\n ⚠️ 지역별 `warning_baseline`·`warning_dispersion`을 avg_price보다 먼저 읽어라 —\n 이 소스는 이상치 미필터·단지급 혼합이라 avg_price를 그대로 \"그 지역 시세\"로 인용하면\n 특정 단지와의 비교 결론이 뒤집힌다(realty_region_price_stats와 같은 공시다).\n ", "inputSchema": { "additionalProperties": false, "properties": { "months": { "default": 12, "description": "추이 개월 수 (허용 범위 1~60)", "maximum": 60, "minimum": 1, "title": "Months", "type": "integer" }, "regions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "description": "비교할 시군구 2개 이상 — 배열(['강남구','서초구']) 또는 쉼표 문자열('강남구,서초구')", "title": "Regions" } }, "required": [ "regions" ], "title": "realty_compare_regionsArguments", "type": "object" }, "name": "realty_compare_regions", "outputSchema": null }, { "description": "특정 단지·특정 평형의 **최근 6개월 매매 실거래**를 건별(계약일·층·가격)로 조회한다.\n 평형별 시세 요약만 필요하면 realty_search_complexes의 prices_by_area로 충분하다.\n\n 응답에는 **층 밴드별 시세 집계 `price_by_floor_band`**(저층~초고층 밴드별 평균가·건수·\n 최저 밴드 대비 프리미엄 %)가 함께 온다 — \"저층 사면 손해야?\", \"고층 프리미엄 얼마야?\"류\n **층별 시세 질문은 이 도구가 담당**이다(층 밴드 축은 다른 도구에 없다).\n\n transactions는 **계약일 내림차순**이고, average_price·median_price는 그 정렬 기준\n 최근 5건(summary_basis에 그 5건을 그대로 싣는다)이다. 이상 거래는 지우지 않고\n `outlier=true`로 표시만 하며(판정 근거는 outliers.method), 층 밴드에는 이상치 제외 값을\n `*_ex_outliers`로 병기한다 — **밴드 프리미엄이 몇 건의 산물인지 확인하고 말하라.**\n\n **이름이 더 긴 이웃 단지는 분리해서 뺀다**(0.58.0) — 백엔드가 단지를 이름 부분일치로\n 찾아 '○○센트레빌' 조회에 '○○센트레빌Ⅱ'가 섞여 들던 자리다. 무엇을 뺐는지·못 가른\n 면적이 무엇인지는 `meta.complex_isolation`에 그대로 실린다. **못 가른 것은 빼지 않고\n 못 갈랐다고 적는다** — 그 평형 수치는 단정하지 말고 그 사실을 함께 전하라.\n\n **면적은 사용자가 말한 단위 그대로 넣어라 — 환산은 서버가 한다**(2026-08-22 제보:\n \"잠실엘스 34평형=전용 84㎡\" 질문에서 84가 pyeong_exclusive로 갔다):\n - ㎡로 말했으면 → area_m2_exclusive(전용 84㎡ → 84) / area_m2_supply(공급 112.8㎡ → 112.8)\n - 평으로 말했으면 → pyeong_supply(분양 \"34평\") / pyeong_exclusive(전용 실평수 25.4평)\n **평형을 모르면 면적 없이 불러라** — 거절하지 않고 이 단지의 평형별 요약과 평형마다\n 다시 부를 인자를 준다(평형을 추측해 넣지 마라). ㎡ 값을 평 인자에 넣으면 조용히 환산하지 않고 사유와 두\n 방향 출구를 값으로 적어 거절한다 — 조용한 환산은 사용자의 말을 바꿔치기하는 것이다.\n 이 도구는 매매 전용이다 — 전월세는 realty_complex_rent_by_pyeong을 쓴다. 매매 창이 얇은\n 신축은 분양권·입주권 전매 거래를 `presale_rights_trades`에 **따로** 싣는다(전매가 — 매매 시세 아님).\n ", "inputSchema": { "additionalProperties": false, "properties": { "area_m2_exclusive": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 500, "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적을 **㎡ 그대로** 받는다(예: 84, 59, 114.98). 사용자가 '전용 84㎡'라고 말했으면 환산하지 말고 84를 여기 넣어라 — 서버가 평으로 환산하고 그 사실을 응답에 적는다. pyeong_exclusive와 동시에 주면 거절한다 (허용 범위 0 초과~500)", "title": "Area M2 Exclusive" }, "area_m2_supply": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 800, "type": "number" }, { "type": "null" } ], "default": null, "description": "공급(분양)면적을 **㎡ 그대로** 받는다(예: 112.8). pyeong_supply와 동시에 주면 거절한다 (허용 범위 0 초과~800)", "title": "Area M2 Supply" }, "complex_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "정확한 단지 키 — realty_search_complexes·complex_ambiguous 후보가 돌려주는 complex_key. 주면 이름·지역보다 우선한다. **같은 동에 같은 이름의 다른 단지**(키 끝 '(1995)' 등)는 이름으로는 못 가르므로 이 인자로만 부를 수 있다", "title": "Complex Key" }, "complex_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 (예: 마포래미안푸르지오2단지). complex_key를 주면 생략해도 된다", "title": "Complex Name" }, "limit": { "default": 10, "description": "개별 거래 내역 수 (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "pyeong_exclusive": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 400, "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적 기준 **실평수(평)** — ㎡가 아니다. 전용 84㎡면 25.4를 넣는다. **사용자가 ㎡로 말했으면 area_m2_exclusive를 쓰라** — ㎡ 값을 여기 넣으면 서버가 조용히 환산하지 않고 사유를 대고 거절한다(1평=3.3058㎡) (허용 범위 0 초과~400)", "title": "Pyeong Exclusive" }, "pyeong_supply": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 400, "type": "number" }, { "type": "null" } ], "default": null, "description": "분양평수(공급면적, **평**) — 사용자가 말하는 '34평'이 보통 이것이다. **㎡로 말했으면 여기가 아니라 area_m2_supply를 쓰라** (허용 범위 0 초과~400)", "title": "Pyeong Supply" }, "quoted_price_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "사용자가 **들은 가격**(호가·중개사 제시가·매물 가격, 만원). 주면 실거래 분포와 대조해 `quote_check`로 돌려준다. 이 서버는 **호가 데이터가 없다** — 실거래(MOLIT)뿐이라 '호가가 비싸다/싸다'를 판정하는 게 아니라 **실거래 어디쯤인지 위치만** 알려준다. 사용자가 가격을 말했는데 이 인자를 안 주면 모델이 그 값을 검증 없이 전제로 삼게 된다", "title": "Quoted Price 10K" }, "quoted_prices_10k": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "사용자가 **매물 목록에서 복사·다운로드해 온 호가 여러 개**(만원 배열). 값이 2개 이상이면 단일 대조 대신 **호가 분포 ↔ 실거래 분포**를 비교한다(중위 대 중위, 두 구간이 겹치는지). 호가는 사용자가 가져온 것이라 서버는 **출처·수집시점·중복 매물 여부를 모른다** — 그 한계도 함께 응답에 싣는다", "title": "Quoted Prices 10K" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "동명 단지 구분용 시군구명 (예: 마포구)", "title": "Region" } }, "title": "realty_complex_pyeong_priceArguments", "type": "object" }, "name": "realty_complex_pyeong_price", "outputSchema": null }, { "description": "단지의 평형별 전세 보증금·월세 중앙값을 조회한다. 전세가율(전세÷매매) 계산의 전세 축이다.\n\n complex_key·complex_name 중 하나는 필수. 부분일치는 동명 단지가 섞일 수 있으니\n 가능하면 realty_search_complexes로 complex_key를 먼저 특정하라.\n 행 키 supply_pyeong은 **분양평**(전용㎡ ÷ 3.305 ÷ 0.745 반올림) 기준이다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "compare_sale": { "default": true, "description": "같은 12개월 창의 **매매가를 함께 뽑아 전세가율·전월세 전환율·갭을 계산**한다(기본 켬). 종전엔 note가 '매매를 period_months=12로 따로 불러 나눠라'라고만 지시해 호출자가 손으로 했고, 창을 안 맞추면 전세가율이 수 %p 왜곡됐다 — 그 계산을 서버가 진다", "title": "Compare Sale", "type": "boolean" }, "complex_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key", "title": "Complex Key" }, "complex_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "키를 모를 때 단지명 부분일치", "title": "Complex Name" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "동명 단지를 가르는 지역 — 시군구나 **동**까지(예: '강동구', '방화동'). complex_ambiguous가 돌아오면 이 인자로 좁혀 다시 부르라", "title": "Region" } }, "title": "realty_complex_rent_by_pyeongArguments", "type": "object" }, "name": "realty_complex_rent_by_pyeong", "outputSchema": null }, { "description": "[유료] 단지 하나의 시세·전세·기본정보를 통합 조회한다.\n\n 입지는 **location.facts(원시값)로 답하라** — 최근접역 이름·직선거리, 반경 500m·1km 안\n 정류장·병원·마트 수와 1km 안 초·중·고 수를 poi 원장에서 직접 센 값이다. location.overall_score·scores는\n 미검증 참고값이라(location.score_demotion) 순위·비교·'입지 좋음' 판정에 쓰지 마라.\n 응답에 좌표(latitude/longitude)와 complex_key가 들어 있다 — 이어서\n realty_poi_nearby(시설 목록)·realty_predict_price(예측)에 그대로 넣어 심층 분석하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "complex_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "정확한 단지 키", "title": "Complex Key" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 (예: 반포자이)", "title": "Name" } }, "title": "realty_complex_reportArguments", "type": "object" }, "name": "realty_complex_report", "outputSchema": null }, { "description": "지역 인구·가구·고령화·순유입 통계를 조회한다.\n\n 지역 인구통계를 조회한다 — \"인구 줄고 있어?\", \"1인 가구 비율은?\", \"고령화 심해?\",\n \"순유입 되는 동네야?\"류 질문용.\n\n 응답 meta.data_as_of가 실제 최신 시점이다 — warning이 있으면 그대로 사용자에게 전달하고,\n 밀린 수치를 \"지금 인구\"로 단정하지 말 것. 연간 계열(households·age)은 기준연도를 밝혀라.\n households만 동명 시군구(중구·서구 등)를 거절한다(원천 단명 수집 결함) — 그 경우\n population·migration(정식 명칭 수집)으로 대신 조회하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "metric": { "description": "population=월별 인구·세대수 / households=연별 가구원수별 가구(1인가구 등) / age=연령대(5세 구간) 분포·고령화 — 시도 단위만 / migration=월별 전입·전출·순이동", "enum": [ "population", "households", "age", "migration" ], "title": "Metric", "type": "string" }, "months": { "default": 12, "description": "population·migration 시계열 창(개월) — 최대 60(5년)이고 더 긴 창은 이 도구로 못 받는다. 연간 계열엔 미적용 (허용 범위 1~60)", "maximum": 60, "minimum": 1, "title": "Months", "type": "integer" }, "region": { "description": "시도(예: 서울)나 시군구(예: 강남구, 수원시). age는 시도 단위만 제공. age에 한해 '전국'도 가능", "title": "Region", "type": "string" } }, "required": [ "metric", "region" ], "title": "realty_demographicsArguments", "type": "object" }, "name": "realty_demographics", "outputSchema": null }, { "description": "사건번호로 경매 물건의 상세를 조회한다.\n\n 사건번호는 법원 간 유일하지 않다(전국 평균 2.8개 법원에서 중복). court_name을 생략하면\n 중복 시 오류와 함께 후보 법원 목록이 돌아오니, 그걸 보고 법원을 지정해 다시 호출하라.\n\n `rights` = 매각물건명세서 핵심(최선순위 설정·인수되는 권리 원문·위험 플래그·배당요구종기).\n 이것은 법원 공시의 전달이지 권리분석 판단이 아니다 — 답할 때 rights.disclaimer를 함께\n 전하고, 등기부·임차인 현황 전체가 아님을 밝혀라. rights가 null이면 명세서 미수집\n 상태(rights_note에 사유)이므로 권리관계를 절대 지어내지 말 것.\n ⚠️ `rights.claim_amt_10k`는 **경매신청 채권자의 청구금액**(만원)이다 — 임차인\n 보증금이 아니다(claim_amt_note 참조). 보증금 액수는 이 데이터에 없다.\n `min_bid_source`가 item_list면 최저가가 낡았을 수 있다 — 함께 오는 `min_bid_note`를\n 사용자에게 전하고 단정하지 마라(목록 도구와 같은 경고다).\n 유찰 이력·기일별 저감·사진은 realty_auction_history가 담당이다.\n\n **이 축의 자리** — 사건번호·법원명을 **따로 받아 구조화 필드**로 돌려주는 상세가 이\n 도구다. `search` 결과의 id(`\"법원명|사건번호\"`)를 그대로 들고 있다면 `fetch`가 그 덩어리를\n 쪼개지 않고 받아 문서형 텍스트로 준다 — 둘은 대체재가 아니라 입력·응답 형태가 다른\n 짝이다. 조건으로 여러 건을 훑는 것은 `realty_search_auctions`다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "case_no": { "description": "사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 3~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'처럼 하이픈으로 써도 서버가 '타경'으로 펴고 무엇을 폈는지 응답에 적는다. 다만 '3571'처럼 **연도가 없으면 못 편다**(연도를 지어내면 다른 사건이 된다) — 사용자에게 연도를 물어라", "title": "Case No", "type": "string" }, "court_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "법원명 — '서울동부지방법원'·'인천지방법원'처럼 정식명으로 넣는다('진주지원'처럼 지원명만인 행도 있다). '의정부지법'처럼 줄여 넣어도 서버가 정식명으로 편다. 사건번호는 법원 간 유일하지 않아(전국 평균 2.8개 법원에서 중복) 생략하면 후보 목록이 돌아온다. **여기 넣은 법원에 그 사건이 없으면 서버가 법원 없이 한 번 더 찾아보고**, 그래도 없으면 원인 셋(표기·법원·수록범위)을 갈라 돌려준다", "title": "Court Name" } }, "required": [ "case_no" ], "title": "realty_get_auction_caseArguments", "type": "object" }, "name": "realty_get_auction_case", "outputSchema": null }, { "description": "[유료] 지역의 투자 위험도를 변동성·유동성·공급압력 축으로 점수화한다.\n\n 응답의 disclaimer(통계 요약이며 투자 권유 아님)를 사용자에게 반드시 함께 전달하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "region": { "description": "시군구명 (예: 강남구)", "title": "Region", "type": "string" } }, "required": [ "region" ], "title": "realty_invest_riskArguments", "type": "object" }, "name": "realty_invest_risk", "outputSchema": null }, { "description": "내 조건에서 쓸 수 있는 대출 상품을 상품별로 나란히 판정한다.\n\n **\"내 조건이면 어떤 대출을 쓸 수 있나\"**를 상품별로 나란히 낸다 — 사용자가 어느 규칙 토픽을\n 물어야 할지 몰라도 되게 하는 라우터다.\n\n 이 도구가 존재하는 이유: 대출 규칙이 상품별 토픽 7곳에 흩어져 있어서, 지금까지는 **호출자가\n 어느 토픽을 물어야 할지 알아야** 했다(2026-08-14). 용도·지역·주택수만 주면 **쓸 수 있는 상품과\n 못 쓰는 이유**를 함께 낸다.\n\n 경계: ① **주택 수·생애최초·신혼은 선언**이다(서버가 사실판정하지 않는다) ② **한도 금액을\n 계산하는 건 구입 목적의 은행권뿐**이고 그건 realty_loan_limit이 한다 — 이 도구는 **자격 대조와\n 라우팅**이다 ③ 전세·중도금은 보증기관·사업장이 지배해 **한도를 계산하지 않는다**, 전세반환은\n **경과조치 해당 여부가 서류로 보는 사실판단**이라 계산하지 않는다 ④ 규칙의\n 근거·불확실성은 각 상품 토픽(응답의 `topic`)에 있으니 함께 읽어라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "annual_income_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "부부합산 연소득(만원) — 정책상품 소득요건 대조에 쓴다", "title": "Annual Income 10K" }, "homes_owned": { "anyOf": [ { "maximum": 9, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "**세대 기준** 보유 주택 수(선언) — 0=무주택, 1, 2+=다주택. 명의가 갈려도 세대로 센다. 서버는 주택 수를 판정하지 않는다 (허용 범위 0~9)", "title": "Homes Owned" }, "house_price_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "대상 주택 가격(만원) — 정책상품 가격요건 대조에 쓴다", "title": "House Price 10K" }, "is_first_time": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "생애최초 해당 여부(**선언** — 서버는 판정하지 않는다)", "title": "Is First Time" }, "is_newlywed": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "신혼 해당 여부(선언)", "title": "Is Newlywed" }, "purpose": { "description": "자금 용도 — **같은 담보라도 용도가 규제를 가른다**(구입=LTV·가액구간 한도, 생활안정=1억 한도·다주택 금지, **전세반환=세입자에게 보증금 돌려주는 목적(퇴거자금) — 원칙 1억이지만 6·27 이전 계약분 경과조치가 붙는 유일한 축**, 전세=세입자로 들어갈 때 쓰는 전세자금대출, 중도금=집단대출). ⚠️ **'전세'와 '전세반환'을 섞지 마라** — 방향이 반대다. 모르면 물어라", "enum": [ "구입", "전세", "생활안정", "전세반환", "중도금" ], "title": "Purpose", "type": "string" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "소재지(시군구까지, 예: '서울 마포구'·'세종특별자치시') — 수도권·규제지역 판정에 쓴다", "title": "Region" }, "total_assets_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "총자산(만원) — **버팀목 전세는 자산 요건이 핵심 관문**이라 전세 문의면 받아라", "title": "Total Assets 10K" } }, "required": [ "purpose" ], "title": "realty_loan_eligibilityArguments", "type": "object" }, "name": "realty_loan_eligibility", "outputSchema": null }, { "description": "선언한 조건으로 주택담보대출 규제 상한을 결정론으로 계산한다.\n\n 선언된 조건(지역·시가·차주 유형·소득)에 대해 **주담대 규제 상한**을 결정론으로\n 계산한다 — LTV 상한액, 수도권·규제지역 가액구간 한도(6/4/2억), 만기 상한(30년),\n 스트레스 DSR 반영 최대 대출액과 **어느 규제가 최종 상한인지**(binding). \"10억 집,\n 생애최초, 연소득 8천이면 얼마까지 나와?\"류 질문의 자리다.\n\n 경계를 지켜라: ① 차주 유형은 **선언**이다 — 생애최초·주택 수 해당 여부는 사실판단이라\n 서버가 판정하지 않는다(응답 inputs_declared가 그 선언을 에코한다). ② 결과는 규제\n 상한이지 **대출 승인·확약이 아니다** — 은행 심사(소득 인정·방공제·신용도)로 더 줄 수\n 있다. ③ **DSR 상한은 금리유형(rate_type)에 따라 크게 갈린다** — 기본값 '변동'은\n 스트레스 금리 전액 가산이라 가장 작은 값이다. 사용자가 상품을 안 정한 상태면\n `dsr.by_rate_type` 비교표를 함께 전하고 \"N억까지만 된다\"고 단정하지 마라. ③ 규칙 원표·근거는 realty_policy_rules(topic=loan_rules), 규제지역 지정 현황은\n topic=regulated_area, 생애최초 취득세 감면의 세율표 본체는 topic=acquisition_tax.\n 특정 분양 공고에 대한 시점별(계약금·중도금·잔금) 자금 판정은\n realty_presale_funding_plan. 응답의 uncertainties·disclaimer를 사용자에게 함께 전하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "annual_income_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "연소득(만원) — interest_rate_pct와 함께 주면 DSR 상한 대출액까지 계산", "title": "Annual Income 10K" }, "borrower": { "description": "차주 유형 — **사용자 선언**이다(서버는 생애최초·주택 수를 판정하지 않는다). 생애최초=본인·배우자 모두 주택 소유 이력 없음, 1주택_처분조건부=6개월 내 기존주택 처분 약정, 서민실수요=우대 요건 충족을 선언한 경우", "enum": [ "무주택", "생애최초", "서민실수요", "1주택_처분조건부", "1주택_보유", "다주택" ], "title": "Borrower", "type": "string" }, "credit_loan_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "신용대출 잔액 또는 받을 예정액(만원). **직접 연 원리금을 계산해 넣지 마라** — 산정만기 5년 강제·산식 두 갈래·스트레스 1억 문턱이 전부 함정이라 서버가 계산한다. existing_annual_debt_payment_10k와 함께 주면 둘 다 합산한다", "title": "Credit Loan 10K" }, "credit_loan_rate_pct": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 20, "type": "number" }, { "type": "null" } ], "default": null, "description": "신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수다(이자 없이는 원리금을 못 낸다) (허용 범위 0 초과~20)", "title": "Credit Loan Rate Pct" }, "desired_loan_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "받으려는 주담대 금액(만원). 주면 '이만큼 되나'를 판정하고, DSR에 막히면 **무엇을 얼마나 바꾸면 들어가는지**(금리유형·만기·신용대출 축소·금리)를 함께 낸다. '4억 받으려는데 되나요'류 질문의 자리 — 최대치만 받아 모델이 역산하게 두지 마라. credit_loan_rate_pct를 함께 주면 **이 주담대를 먼저 받은 뒤 남는 신용대출 추가 여력**(desired.credit_room_after_mortgage)까지 계산한다 — credit_loan_10k를 주면 그 잔액을 기존 신용대출로 보고 추가분만 센다", "title": "Desired Loan 10K" }, "existing_annual_debt_payment_10k": { "default": 0, "description": "기존 대출의 연간 원리금 상환액 합계(만원) — DSR 계산에서 차감", "minimum": 0, "title": "Existing Annual Debt Payment 10K", "type": "integer" }, "house_price_10k": { "description": "주택 시가(만원 단위, 예: 100000=10억). 가액구간 한도가 '시가' 기준이라 분양가·공시가가 아닌 시세를 넣는다", "exclusiveMinimum": 0, "title": "House Price 10K", "type": "integer" }, "interest_rate_pct": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 20, "type": "number" }, { "type": "null" } ], "default": null, "description": "약정금리 가정(%, 예: 4.2) — DSR 계산에 필요. 없으면 DSR 금액 계산은 생략된다 (허용 범위 0 초과~20)", "title": "Interest Rate Pct" }, "is_metro": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "수도권(서울·경기·인천) 여부 직접 선언 — region 대신/우선 적용", "title": "Is Metro" }, "is_regulated": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "규제지역(투기과열·조정대상) 여부 직접 선언 — region 대신/우선 적용", "title": "Is Regulated" }, "lender": { "default": "은행", "description": "업권 — DSR 한도가 은행 40% / 제2금융권 50%로 갈린다", "enum": [ "은행", "제2금융권" ], "title": "Lender", "type": "string" }, "loan_term_years": { "default": 30, "description": "희망 만기(년). 수도권·규제지역은 30년 상한으로 조정되며 조정 사실을 응답에 싣는다 (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Loan Term Years", "type": "integer" }, "rate_fixed_years": { "anyOf": [ { "maximum": 50, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "혼합형의 고정금리 기간 또는 주기형의 금리변동주기(년). 미지정이면 시중은행 통상인 5년으로 가정하고 가정 사실을 응답에 싣는다. 변동·순수고정에는 무의미 (허용 범위 0~50)", "title": "Rate Fixed Years" }, "rate_type": { "default": "변동", "description": "주담대 금리유형 — **스트레스 금리 적용비율이 갈리는 축이다**(변동 100%, 혼합형·주기형은 고정기간 비중별 차등, 순수고정 미적용). 기본값 '변동'은 최악 가정이라 한도가 가장 작게 나온다. 사용자가 상품을 안 정했으면 응답의 by_rate_type 비교표를 함께 전하라. 혼합형=고정기간 후 변동, 주기형=N년 주기로 금리 재산정, 순수고정=만기까지 고정", "enum": [ "변동", "혼합형", "주기형", "순수고정" ], "title": "Rate Type", "type": "string" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "주택 소재지(시군구까지, 예: '서울 마포구'·'성남시 분당구'·'부산 해운대구'). 규제지역·수도권 판정에 쓴다. 해석이 모호하면 후보를 돌려주니 is_regulated·is_metro로 직접 선언해도 된다", "title": "Region" }, "stress_stage": { "default": "현행", "description": "스트레스 금리 단계 가정. 기본 '현행'. **지방(비수도권 비규제) 주담대만** 갈린다 — 지방은 2026-12-31까지 한시 2단계(0.75%p)이고 이후 연장 여부는 미정이다. '3단계'를 주면 유예가 끝나 3단계(1.5%p×적용비율 3단계)가 그대로 적용되는 가정으로 계산한다. 수도권·규제지역은 이미 3단계라 값이 같다", "enum": [ "현행", "3단계" ], "title": "Stress Stage", "type": "string" } }, "required": [ "house_price_10k", "borrower" ], "title": "realty_loan_limitArguments", "type": "object" }, "name": "realty_loan_limit", "outputSchema": null }, { "description": "단지 입지를 **원시값**으로 답한다 — \"역세권이야? 학군 어때? 병원 가까워?\" 담당.\n\n **답은 행마다 맨 앞의 location_facts로 하라**: 최근접 지하철역 이름·노선·직선거리(m,\n 상한 없음 — 시골 단지는 30km도 그대로 나온다), 반경 500m·1km 안 역·버스 정류장 수,\n 1km 안 초·중·고 수와 최근접 초등학교 거리, 반경 안 병원(전 의료기관·병원급 분해)·마트\n 수. 전부 poi 원장에서 직접 센 값이라 재현할 수 있다. \"역세권이야?\"는\n subway.nearest_distance_m와 walk_band로, \"초품아야?\"는 schools.nearest_elementary로 답하라.\n\n 같은 행의 transit_score·school_score는 **미검증 참고값**이다(응답 score_demotion) —\n transit 90점 이상이 86.7%이고 역이 5km 넘게 떨어진 단지도 90점이 나와 변별력이 없다.\n **점수로 순위를 매기거나 '역세권·학군 좋음'을 판정하지 마라.** 점수가 null이면 미측정이지\n 0점이 아니다. 학군 점수는 학원가 강도 지표이지 학교 배정·수준이 아니다.\n\n complex_key/complex_name이면 단지 행(원시값은 앞 5개 단지), region만 주면 지역 집계 +\n 점수 상위 5 단지(점수 순이라 순위로 인용 금지). 점수가 없는 단지도 색인에 좌표가 있으면\n 원시값을 준다. 없는 단지는 not_found — 지어내지 말고 realty_search_complexes로 실존부터\n 확인하라. complex_key는 공백 1칸으로 정규화돼 다른 도구에 그대로 넣을 수 있다.\n 시설 **목록**(이름별 거리)이 필요하면 [유료] realty_poi_nearby.\n ", "inputSchema": { "additionalProperties": false, "properties": { "complex_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key", "title": "Complex Key" }, "complex_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 일부 (부분일치)", "title": "Complex Name" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "지역명 — 단독이면 지역 집계+상위 단지, complex_name과 함께면 검색 범위", "title": "Region" } }, "title": "realty_location_scoresArguments", "type": "object" }, "name": "realty_location_scores", "outputSchema": null }, { "description": "한국 기준금리·KOSPI·M2, 미 연준금리·S&P500 등 거시 지표의 월별 시계열을 조회한다.\n \"금리가 집값에 어떤 영향?\"류 배경 분석용.\n\n ⚠️ 계열마다 신선도가 다르다 — meta.series_as_of가 계열별 실제 최신 시점이다(예: 미\n 연준금리·S&P·코인은 최신인데 한국 기준금리·KOSPI는 2024-12 정지, ECOS 재수집 대기).\n 밀린 계열을 \"지금 금리\"로 인용하지 말고 반드시 그 계열의 시점을 함께 밝혀라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "indicators": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "쉼표 구분 지표명: bok_base_rate(한국 기준금리 %), kospi(월말 종가), korea_m2(M2 평잔·원계열, 조원), fed_rate(미 연준금리 월평균 %), us_m2(미 M2 계절조정 $B), sp500, btc_usd, eth_usd(월말 종가). 비우면 전체. 목록에 없는 이름은 거절한다(조용히 버리지 않는다)", "title": "Indicators" }, "months": { "default": 24, "description": "최근 몇 개월치 (허용 범위 1~240)", "maximum": 240, "minimum": 1, "title": "Months", "type": "integer" } }, "title": "realty_macro_indicatorsArguments", "type": "object" }, "name": "realty_macro_indicators", "outputSchema": null }, { "description": "[유료] 미분양 추이와 시장심리지수를 한 번에 조회한다. 매수 타이밍 판단의 거시 신호.\n 준공후 미분양(unsold_completed, 지역 합계)도 같은 모양으로 싣는다.\n sigungu를 주면 시군구 미분양 추이(unsold_sigungu)를 별도 키로 덧붙인다.\n\n 기본 창은 **6개월**이다(방향 판단에 필요한 최소). 더 긴 추이가 필요하면 months를\n 올리되, 전국 조회에서 창을 넓히면 오래된 달부터 예산에 맞춰 떨어지고 그 사실이\n meta.truncated·meta.truncated_note에 값으로 실린다 — region을 지정하면 전 창이 온다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "months": { "default": 6, "description": "시계열 개월 수 (기본 6). 전국(region 미지정)에서 창을 넓히면 시도 18곳×월 행이 곱으로 늘어 응답이 도구 결과 한계에 걸린다 — 긴 창이 필요하면 region으로 지역을 좁혀라 (허용 범위 1~36)", "maximum": 36, "minimum": 1, "title": "Months", "type": "integer" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "지역명 (예: 서울). 비우면 전국", "title": "Region" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구명 (예: 창원시·수원시·중구). 주면 그 시군구의 미분양 추이를 unsold_sigungu에 **따로** 싣는다 — 시도 배열(unsold)과 합산하지 마라(이중계상). 같은 이름이 여러 시도에 있으면(중구·동구 등) region으로 시도를 함께 줘라. 심리지수·준공후 미분양은 시도 단위라 시군구로 안 좁혀진다", "title": "Sigungu" } }, "title": "realty_market_signalsArguments", "type": "object" }, "name": "realty_market_signals", "outputSchema": null }, { "description": "투기과열지구 정비사업 물건을 지금 사면 조합원 지위를 승계받는지 판정한다.\n\n 투기과열지구에서 재건축·재개발 물건을 **지금 사면 조합원 지위를 승계받을 수 있는지**를\n 도시정비법 39조 2항으로 결정론 판정한다 — 투기과열지구 여부(regulated_area) × 사업 유형 ×\n 진행 단계(서울은 정보몽땅 목록에서 자동 결합). \"한남3구역 지금 사도 입주권 나와?\"의 자리다.\n\n 경계를 지켜라: ① 판정은 **원칙 제한 여부**까지다 — 예외(양도인의 근무·질병·상속·해외이주,\n 10년 소유+5년 거주 등)는 양도인 사정의 사실판단이라 갈림길로만 주고, **사업지연 예외\n 3종은 인가일·착공일 데이터가 없어 판정 불가를 실토한다**. ② 재개발엔 부칙 함정(2018-01-25\n 이전 사업시행인가 신청 구역은 제한 밖)이 있어 선언 없이는 단정하지 않는다. ③ 제한이 없어도\n **토지거래허가구역은 별개 제도**다(서울 전역 지정 중 — 실거주 의무 등). ④ 조문 원문·예외\n 전체 목록은 realty_policy_rules(topic=redevelopment_rules), 투기과열 지정 현황은\n topic=regulated_area, 분양자격 자체가 불확실하면 topic=redevelopment_entitlement,\n 사업장 목록·단계 열람은 realty_redevelopment. 응답의 exceptions·disclosures를 함께 전하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "first_approval_application_after_20180125": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "**재개발 부칙 선언** — 이 구역의 최초 사업시행계획인가 신청이 2018-01-25(법률 제14943호 시행일) 이후인가. 이전이면 관리처분인가 후에도 지위양도가 가능하다(서울 22개 구역 실재). 모르면 비워두라 — 서버가 미확인으로 실토한다", "title": "First Approval Application After 20180125" }, "is_speculation_zone": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "투기과열지구 여부 직접 선언 — region 대신/우선 적용", "title": "Is Speculation Zone" }, "project_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "사업장·구역 이름(예: '한남3구역') — 서울이면 정비사업 목록에서 진행 단계를 자동으로 잇는다(유일 매치만). 서울 밖은 목록이 없어 project_stage 선언이 필요하다", "title": "Project Name" }, "project_stage": { "anyOf": [ { "enum": [ "관리처분인가", "구역해제", "도시계획심의", "분양", "사업계획승인", "사업시행인가", "안전진단", "안전진단(1차)", "이전고시", "정비계획 수립", "정비구역지정", "조합규약작성", "조합설립인가", "조합원 모집신고", "조합창립총회", "조합청산", "조합해산", "준공인가", "지구단위계획수립/건축심의/교통심의", "착공", "철거", "철거 및 착공", "청산 및 조합해산", "추진위구성", "추진위원회승인" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "진행 단계 직접 선언 — project_name 조회 대신/우선 적용. 허용값은 서울 정비사업 목록(정보몽땅)의 실측 어휘 전량이라, **자동 조회가 돌려준 stage를 그대로 다시 넣으면 같은 판정이 재현된다**(예: '철거'·'철거 및 착공'·'추진위구성')", "title": "Project Stage" }, "project_type": { "description": "사업 유형 — 제한 개시 시점이 갈린다(재건축=조합설립인가 후, 재개발=관리처분인가 후). 가로주택·소규모재건축 등 소규모정비사업은 별도 법제라 이 도구가 판정하지 않는다", "enum": [ "재건축", "재개발" ], "title": "Project Type", "type": "string" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "사업장 소재지(시군구까지, 예: '서울 용산구'·'성남시 수정구') — 투기과열지구 판정과 (서울이면) 단계 자동 조회에 쓴다. 모호하면 후보를 돌려주니 is_speculation_zone을 직접 선언해도 된다", "title": "Region" } }, "required": [ "project_type" ], "title": "realty_member_transfer_checkArguments", "type": "object" }, "name": "realty_member_transfer_check", "outputSchema": null }, { "description": "지역의 입주 예정 물량을 연월별로 집계한다.\n\n 지역의 입주 예정 물량을 연월별로 집계한다 — \"○○ 입주장 리스크 있어?\", \"내년에\n 입주 물량 얼마나 쏟아져?\"류 질문용. 입주 몰림은 전세가 하락·역전세 압력 신호다.\n\n **기본 창은 오늘부터 앞이다** — from_ym을 안 주면 이번 달에서 시작하므로 months=12는\n \"앞으로 12개월\"이지 \"최근 12개월\"이 아니다. **과거를 물었으면 from_ym을 과거로 줘라**\n (최근 12개월 = from_ym='YYYYMM'(12개월 전) + months=12). 응답 meta.window_direction이\n 그 회차의 창이 과거인지 미래인지를 라벨로 실토하니 결론에 기간을 그대로 밝혀라.\n\n **하한 집계다** — 청약홈 공고(2020-02 이후) 기반이라 공고 없는 공급(민간임대·후분양\n 일부)이 빠지고, 무엇보다 **공고는 입주 평균 30개월 전에 난다**(전국 실측). 그래서\n 조회 구간이 오늘+30개월을 넘어가면 그 구간 입주분은 아직 공고조차 안 된 것이 대부분이다.\n 실사고: 세종 2028~2030 조회에 676세대가 나오자 \"입주장 리스크 없음\"으로 답했으나\n 실제 계획은 그 6배였다.\n\n 응답의 **`reading` 문장을 결론에 그대로 반영하라** — `interpretation`이 `lower_bound`면\n \"물량 없음/적음\"이라 말하지 말고 \"공고된 것만 N세대(하한)\"라고 답해야 한다.\n `coverage.region_recent_annual_rate`(그 지역 최근 공고 실적)와 비교해 값이 크게 낮으면\n 공급이 끊긴 게 아니라 공고 시차다. **그때는 realty_supply_pipeline을 이어서 불러라** —\n 사업승인은 났지만 아직 공고 안 난 물량이 거기 있다(세종 실측: 이 도구 676세대 →\n 파이프라인 3,483세대). 단 **두 축의 세대수를 더하지 마라**(이중계상) — 공고가 난\n 단지는 승인 목록에도 남아 양쪽에 다 잡힌다. 파이프라인 쪽 값이 상위 집합에 가깝다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "from_ym": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "조회 창의 **시작** 월, YYYYMM 6자리(예: 202508). 생략하면 **이번 달**이라 창이 전부 미래가 된다 — 이 도구의 기본 방향은 '입주 **예정**'이라서다. **'최근 N개월'·'지난해'처럼 지나간 물량을 물었으면 여기를 과거로 줘라**: 최근 12개월 = from_ym='202508' + months=12, 작년 한 해 = from_ym='202501' + months=12. 과거 조회도 그대로 된다(원장은 2020-02 공고분부터)", "title": "From Ym" }, "months": { "anyOf": [ { "maximum": 120, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "from_ym부터 **앞으로 몇 개월**을 볼지 — to_ym 대신 쓰는 간편 인자(예: 24). **뒤로 세지 않는다** — months=12만 주면 from_ym이 이번 달이라 '앞으로 12개월'이 되고, '최근 12개월'을 원했다면 from_ym을 12개월 전으로 함께 줘야 한다. to_ym과 함께 주면 오류다(둘 중 하나만) (허용 범위 1~120)", "title": "Months" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "**시도만** (예: 서울, 경기, 세종, 부산). 시군구('강남구')는 sigungu에 넣어라 — region에 넣으면 서버가 sigungu로 옮겨 조회하고 그 사실을 meta.unapplied_conditions에 적는다(시군구 어휘에 없는 이름은 옮기지 못하고 역시 거기 적는다). realty_supply_pipeline의 region은 시군구·동도 받는다 — 두 도구의 계약이 다르다", "title": "Region" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 정확한 이름 (예: 수원시, 강남구)", "title": "Sigungu" }, "to_ym": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "조회 창의 **끝** 월, YYYYMM 6자리(기본 from_ym+36개월). months와 같은 축이라 둘 중 하나만 준다", "title": "To Ym" } }, "title": "realty_move_in_supplyArguments", "type": "object" }, "name": "realty_move_in_supply", "outputSchema": null }, { "description": "빌라·오피스텔·단독주택·토지의 매매 실거래가를 조회한다(아파트는 이 도구가 아니다).\n\n **아파트는 이 도구가 아니다.** 빌라(다세대·연립)·오피스텔·단독주택·토지 **전용**\n 실거래 **매매가** 조회다 — 응답 = 최근 거래(recent) + 집계(stats: 표본 수·가격·상위 구성).\n\n 질문에 '아파트'가 있으면 여기서 멈추고 아파트 축으로 가라 — 지역·법정동 월별 추이는\n realty_region_price_stats, 단지·평형별 시세는 realty_search_complexes, 단지 평형의\n 건별 내역(계약일·층·가격)은 realty_complex_pyeong_price다. **셋 다 region에\n '강남구 대치동'처럼 법정동을 그대로 받는다** — 동 단위로 좁히려고 이 도구로 오지 마라.\n property_type 네 값 중 아파트에 가까운 것은 없고, 아무거나 고르면 **응답은 200이고\n 행도 채워져 나오므로 틀린 줄 모른다**(2026-08-23 PlayMCP QA 실측: '강남구 대치동\n 아파트 최근 실거래가'에 villa 5건이 아파트로 답해졌다).\n\n **매매 데이터만 있다** — 전월세를 물으면 이 축엔 데이터가 없다고 답하라(추정 금지).\n **도시형생활주택은 property_type에 없고 가를 수도 없다** — 원천에 유형 코드가 없어\n 아파트·연립다세대·오피스텔 신고에 섞여 있다. villa/officetel 값을 도시형생활주택\n 시세로 부르지 말고 섞여 있다고 밝혀라(응답 urban_housing_notice).\n 면적 기준: villa/officetel은 전용면적(area_m2·area_pyeong), house는 대지(land_*)와\n 건물(building_*) 분리, land는 계약면적·지목(land_category)·용도지역(zoning)이 온다.\n land의 share_type='지분' 행은 필지 일부 거래라 면적당 가격 비교에 쓰지 말 것(집계는\n 지분·해제 제외 — 응답 note 참조).\n ", "inputSchema": { "additionalProperties": false, "properties": { "area_band": { "anyOf": [ { "enum": [ "40㎡미만", "40~59㎡", "60~84㎡", "85㎡이상" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "전용면적대로 좁힌다(빌라·오피스텔만 — 단독주택은 전용면적 개념이 없다). 비아파트는 같은 동네에서도 면적 편차가 커서 지역 평균 하나로는 답이 안 된다. 안 넣어도 stats.by_area_band로 밴드별 분포가 온다", "title": "Area Band" }, "limit": { "default": 10, "description": "최근 거래 행 수 (허용 범위 1~30)", "maximum": 30, "minimum": 1, "title": "Limit", "type": "integer" }, "price_max": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "최대 매매가(만원)", "title": "Price Max" }, "price_min": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "최소 매매가(만원)", "title": "Price Min" }, "property_type": { "description": "villa=다세대·연립(빌라), officetel=오피스텔, house=단독·다가구, land=토지. **이 네 값에 아파트는 없다** — 사용자가 아파트를 물었으면 아무 값이나 고르지 말고 이 도구를 부르지 마라(realty_search_complexes·realty_region_price_stats가 그 자리다). 2026-08-23 실측: '강남구 대치동 아파트 최근 실거래가'가 villa로 와 빌라 5건이 아파트로 답해졌다", "enum": [ "villa", "officetel", "house", "land" ], "title": "Property Type", "type": "string" }, "region": { "description": "지역명 부분일치 (예: 관악구, 서울특별시 강남구, 강남구 역삼동). **법정동까지 되는 것은 이 도구만이 아니다** — 아파트 축의 realty_region_price_stats·realty_search_complexes도 '강남구 대치동'을 그대로 받는다. 동 단위로 좁히려고 이 도구를 고르지 마라", "title": "Region", "type": "string" } }, "required": [ "property_type", "region" ], "title": "realty_nonapt_pricesArguments", "type": "object" }, "name": "realty_nonapt_prices", "outputSchema": null }, { "description": "입주자모집공고 원문에서 추출·검증한 팩트시트를 항목별로 준다.\n\n 입주자모집공고 **원문**에서 추출·검증한 팩트시트 — 전매제한·재당첨제한·거주의무·\n 거주요건, 청약 일정, 층별 분양가표(대지비·건축비·회차별 납부액), 특별공급 배정,\n 발코니 확장·유상옵션 가격, 중도금 회차 일정, 예비입주자 규칙.\n\n 전매제한 기간, 재당첨 제한, 거주의무, 특별공급 자격·배정, 층/타입별 분양가,\n 발코니 확장비·유상옵션 금액, 중도금 회차와 납부일 — 이 값들을 묻는 질문이 이 도구의\n 자리다(추정하거나 웹에서 찾을 필요 없이 공고 원문 값이 나온다). 모든 값에 공고 쪽\n 번호(`p`)가 붙으니 답변에 notice_version(공고 판본)과 쪽 번호를 함께 제시하라.\n\n 팩트시트 미추출 공고는 원문 앞쪽(단지 주요정보 표) 텍스트를 unverified_source_text로\n 준다 — 수치 인용 시 \"공고 원문 기준·미검증\"을 명시하라. 상세 조항 전문(특공 소득기준,\n 부적격 처리 등)은 realty_notice_text로 원문 쪽을 직접 읽어라. 여기 없는 값은 지어내지 말 것.\n\n ⚠️ 큰 공고는 팩트시트 전체가 도구 결과 한계(64KiB)를 넘는다. 그때 **큰 절부터 떼어**\n 보내고 `meta.truncated`·`meta.omitted_sections`(절 이름·크기·되부르는 인자)에 그 사실을\n 적는다 — 뗀 절은 `section='분양가'`처럼 이름을 지정해 전문으로 받아라. **팩트시트에\n 없다고 공고에 없다고 답하지 마라**(못 봄 ≠ 없음).\n ", "inputSchema": { "additionalProperties": false, "properties": { "house_manage_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "공고 관리번호 (realty_presale 응답의 house_manage_no)", "title": "House Manage No" }, "keyword": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 일부 (예: '우미린' — 공백 무관 매칭)", "title": "Keyword" }, "section": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "팩트시트의 한 절만 전문으로 받는다 (예: '분양가', '공급'). 비우면 전체 — 다만 전체가 도구 결과 한계를 넘으면 큰 절부터 떼어 내고 뗀 절 이름을 meta.omitted_sections에 적는다. 그때 이 인자로 되받아라.", "title": "Section" } }, "title": "realty_notice_factsArguments", "type": "object" }, "name": "realty_notice_facts", "outputSchema": null }, { "description": "입주자모집공고문 원문을 쪽 단위로 읽어 준다.\n\n 입주자모집공고문 원문을 쪽 단위로 읽는다 — 팩트시트에 없는 세부(특별공급 소득·자산 기준,\n 부적격 처리, 계약 유의사항, 옵션 품목 상세)는 이 도구로 원문을 직접 확인하라.\n 표가 있는 쪽은 pdftotext 특성상 정렬이 깨질 수 있다 — 열 해석이 애매하면 단정하지 말 것.\n\n 여러 낱말은 AND로 묶인다('가점제 추첨제'→둘 다 있는 쪽). 0쪽이면 막다르지 않고 낱말별\n 히트 쪽과 부분일치 상위 쪽을 함께 돌려주니 그걸로 좁혀라(match='any'로 넓힐 수도 있다).\n **쪽을 모를 땐 pages_only=true로 먼저 훑어라** — 전문은 한 번에 수만 자다.\n 전문 응답은 최대 6쪽이고, meta.matching_pages에 일치 쪽 전체 목록이 늘 들어 있다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "house_manage_no": { "description": "공고 관리번호 (realty_presale·realty_notice_facts로 특정)", "title": "House Manage No", "type": "string" }, "match": { "default": "all", "description": "여러 낱말 처리 — all=모두 포함(기본), any=하나라도 포함(넓게 훑을 때)", "enum": [ "all", "any" ], "title": "Match", "type": "string" }, "pages": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "쪽 범위 직접 지정 (예: '1-3', '44'). **query와 택일이며 함께 주면 거절한다**(error='query_and_pages_conflict') — 종전엔 query를 조용히 버렸다. pages와 함께 준 pages_only는 무의미하므로 무시하고 meta.pages_only_ignored로 실토한다", "title": "Pages" }, "pages_only": { "default": false, "description": "참이면 본문 없이 일치 쪽 번호+발췌만 준다 — 먼저 이걸로 쪽을 고르고 pages로 좁혀 재호출하면 왕복·토큰이 크게 준다", "title": "Pages Only", "type": "boolean" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "찾을 키워드. 공백으로 나눈 낱말을 모두 포함하는 쪽을 찾는다(AND, 공백 무관 매칭) — 예 '가점제 추첨제', '신혼부부 소득'", "title": "Query" } }, "required": [ "house_manage_no" ], "title": "realty_notice_textArguments", "type": "object" }, "name": "realty_notice_text", "outputSchema": null }, { "description": "공매가 \"보통 감정가의 몇 %에 낙찰되나\"와 \"얼마나 유찰되나\"를 실제 개찰 결과로 답한다.\n\n **법원경매의 realty_auction_sale_rate와 같은 이름의 다른 지표다.** 분모가 둘 다\n 감정가지만 평가 주체·저감 규칙·매물 성격이 달라 **두 %를 한 문장에 섞으면 안 된다**.\n \"경매 낙찰가율\"을 물었으면 어느 쪽인지 확인하라.\n\n **이 축의 자리** — 공매 축 2종 중 통계 쪽이다. 개별 물건과 회차별 최저가는\n realty_search_onbid다. 낙찰가율은 재산구분별로 갈라 읽어라(`by_property_type`).\n\n ⚠️ **표본은 최근 3개월 개찰분이고, 그중 '낙찰' 건만 낙찰가율에 든다.** 온비드 전체\n 입찰결과 688,264건 중 우리가 받은 것은 113,673건이고, 그 안에서 낙찰은 3,824건이다\n (나머지는 유찰·취소·개찰중). `outcome_mix`가 그 분포이고 여기서 나온 낙찰 비율은\n **성립률이지 낙찰가율이 아니다**.\n\n ⚠️ **낙찰가율은 원천이 준 값을 그대로 쓴다**(`apslPrcCtrsScfbPrcRto` = 감정가 대비\n 낙찰가율). 낙찰 3,824건 중 이 값이 있는 것은 2,896건이다 — 나머지는 감정가가 원장에\n 없는 건이라 **모르는 것이지 0이 아니다**(`ratio_missing`).\n\n ⚠️ **평균이 아니라 중앙값을 인용하라.** 지분·산지 물건이 감정가의 386%에 팔린 사례가\n 실제로 있어(공유자 경합) 평균이 위로 끌린다. `median_pct`가 정본이고 `p25_pct`·\n `p75_pct`로 폭을 함께 전하라.\n\n ⚠️ **지역은 물건명에서 되찾은 것이다.** 입찰결과 원장에 지역 컬럼이 아예 없어서,\n 물건 목록과 붙여 보려 했으나 **낙찰 3,824건 중 물건 목록에서 찾아지는 것은 83건\n (2.2%)뿐이다** — 물건 목록은 현재 진행분 스냅샷이라 이미 팔린 물건이 빠져 있다.\n 그래서 물건명 접두의 시도·시군구 표기를 파싱해 쓴다(전체 96.1%·낙찰 90.0%에서 잡힌다).\n 파싱이 안 된 건은 지역 필터에서 **조용히 빠지므로** 응답의 `region_basis`를 함께 전하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "property_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "재산구분. **이 축을 빼고 하나의 낙찰가율을 말하면 거의 틀린다** — 실측 중앙값이 압류재산 31.6% vs 국유재산 106.3%로 3배 넘게 갈린다.", "title": "Property Type" }, "sido": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도. **주의: 결과 원장에는 지역 컬럼이 없다** — 물건명 접두에서 되찾은 값으로 거른다(커버리지는 응답의 region_basis에 실린다). ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.", "title": "Sido" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구. 물건명에서 시도 다음 한 토막을 뽑은 것이라 '고양시 덕양구'는 '고양시'로만 잡힌다 — 자치구까지 좁히려면 이 원장으로는 안 된다. ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.", "title": "Sigungu" }, "usage_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "용도 부분일치(대·중·소 3단). 원장 값 예: 주거용건물·아파트·토지·근린생활시설. 표본이 **입찰결과 원장**이라 물건 목록과 어휘가 미세하게 갈린다 — 없는 이름은 거절하며 이 원장의 쓸 수 있는 값을 준다.", "title": "Usage Name" } }, "title": "realty_onbid_sale_rateArguments", "type": "object" }, "name": "realty_onbid_sale_rate", "outputSchema": null }, { "description": "[유료] 좌표 주변의 지하철·학교·병원·마트 등 입지 요소를 거리순으로 조회한다.\n\n 단지 좌표는 realty_complex_report가 준다. \"역세권인가\", \"초품아인가\" 판단용.\n 최근접역 거리·반경 안 개수만 필요하면 무료 realty_location_scores의 location_facts로\n 충분하다 — 이 도구는 시설 **목록**(이름별 거리)이 필요할 때 쓴다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "lat": { "description": "위도 — realty_complex_report의 latitude를 쓰라", "title": "Lat", "type": "number" }, "lng": { "description": "경도", "title": "Lng", "type": "number" }, "poi_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "subway | hospital | school — 쉼표로 조합 가능(예: 'subway,school'), 비우면 전체. 이 3종만 좌표 검색을 지원한다(마트·약국 등은 지역 통계 realty_poi_stats로)", "title": "Poi Type" }, "radius_m": { "default": 1000, "description": "반경(미터) (허용 범위 100~3000)", "maximum": 3000, "minimum": 100, "title": "Radius M", "type": "integer" } }, "required": [ "lat", "lng" ], "title": "realty_poi_nearbyArguments", "type": "object" }, "name": "realty_poi_nearby", "outputSchema": null }, { "description": "[유료] 시군구별 병원·학교·지하철역 개수 통계를 조회한다. 지역 간 인프라 비교용.\n\n 지역 키는 '시도축약 시군구' 2토큰이다(예: '서울 마포구', 세종은 1토큰). 병원·지하철은\n 수집 범위가 수도권·광역시 중심이라 지방 시군구는 0으로 나올 수 있다 — 0을 \"없다\"로\n 단정하지 말고 수집 범위 밖일 수 있다고 말하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "limit": { "default": 20, "description": "(허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "지역명 — 시도는 정식명·축약 모두 받는다(예: 서울, 경상남도 고성군, 경남 고성군, 마포구). 토큰 정확일치라 '남구'에 강남구가 섞이지 않는다. 비우면 전국 전체", "title": "Region" } }, "title": "realty_poi_statsArguments", "type": "object" }, "name": "realty_poi_stats", "outputSchema": null }, { "description": "단지에 종속되지 않는 일반 규범(세율·규제·대출·임대차)을 근거 조문과 함께 준다.\n\n 단지에 종속되지 않는 **일반 규범**을 근거 조문·확인일과 함께 준다 — 취득세율표,\n 규제지역 **현재** 지정 현황, 주담대 규제 원표, 개인회생×대출, 주택임대차 갱신(갱신권·\n 5% 상한·매수인 실거주 거절), 양도세(세율·필요경비·중과·개편 계류), 청약통장·가점\n 배점표, 정비구역 요건·조합원 지위양도, 재개발 분양자격 갈림길(서울). \"취득세 얼마야?\",\n \"갱신권 썼는데 집주인이 팔면?\", \"지금 팔면 중과야?\"류 질문의 자리다. 특정 조건의\n 상한 **계산**은 realty_loan_limit, 가점 점수 계산은 realty_subscription_score,\n 비례율·분담금 계산은 realty_redevelopment_burden, 양도세 시나리오 계산은\n realty_capital_gains_tax, 조합원 지위양도 가능 판정은 realty_member_transfer_check —\n 이 표가 그 계산기들의 진실원이다.\n\n 클라이언트에 세율을 하드코딩하지 마라 — \"85㎡ 이하 1.1%\"는 6억 이하일 때만 맞고,\n 9억 초과에 그대로 쓰면 수천만원 틀린다(실측: 16.9억 84타입에서 3,700만원 차).\n\n **판정은 하지 않는다**: \"이 사람이 1주택인가\"는 분양권·상속지분·일시적 2주택 특례가\n 얽힌 사실판단이다 — 표의 applicable_if·exceptions를 보고 사용자에게 확인 질문을\n 던져라. 개별 공고의 규제 플래그(공고일 스냅샷)는 realty_presale, 공고 원문 값은\n realty_notice_facts, 이 표를 써서 총 소요자금까지 계산하는 건 realty_presale_cost.\n 응답의 uncertainties(확인 못 한 것)와 disclaimer를 함께 전하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "**자유문으로 토픽을 찾는다** — 어느 topic인지 모를 때 사용자 말을 그대로 넣어라(예: '종부세 얼마부터 내요'→topic='comprehensive_real_estate_tax', '부모님이 보태주는 돈'→topic='gift_tax_and_funding_source', '전입은 빠른데 확정일자가 늦으면'→topic='auction_rights'). 이름 25개를 외워 고르는 대신 이걸 쓰면 된다. topic 없이 query만 주면 **후보 토픽 목록**이 오고, 후보가 하나면 그 토픽 본문까지 함께 온다. topic과 함께 주면 그 토픽을 그대로 주되 다른 후보가 있으면 알려준다. **아무것도 안 걸리면 지어내지 않고 0건이라고 답한다** — 그때는 이 서버에 그 축이 없는 것이니 표를 추측하지 마라", "title": "Query" }, "section": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "**토픽의 하위 항목만 골라 받는다** — 미지정이면 종전과 같이 토픽 전체가 온다. 큰 토픽(auction_rights·unit_alteration_rules·loan_rules)에서 필요한 축만 집을 때 쓴다. 예: topic='auction_rights', section='assumed_regardless_of_rank' → 순위 무관 인수(유치권·법정지상권)만. 쉼표로 여러 개(section='tenant_opposing_power,tenant_priority_payment')도 된다. **없는 이름을 주면 조용히 무시하지 않고 거절하며 유효 목록을 값으로 돌려준다** — 이름을 모르면 section 없이 한 번 부르면 응답 meta.sections_available에 전 목록이 있다. topic='list'에는 하위 항목이 없다", "title": "Section" }, "topic": { "default": "list", "description": "**어느 표를 볼지 고른다 — 사용자가 쓰는 말로 찾아라.** axes=상품별 차이·6·27이 뭐에 걸리나·DSR 6축·수도권/규제지역 축 | **횡단 사실의 진실원**(6·27 상품별 적용·DSR 6축·수도권/규제지역·세대/인별/물건 기준 충돌). '어느 상품이 뭐가 다른가'류는 여기부터 — 상품 토픽과 어긋나면 이 표가 맞다, acquisition_tax=취득세·취득세율·다주택 중과·농특세·지방교육세·생애최초 감면 | 취득세율표(표준 구간·중과·부가세목·예외/특례·과표 논점·취득시기), regulated_area=규제지역·조정대상지역·투기과열지구·분양가상한제·토지거래허가 | **현재** 지정 현황, loan_rules=주담대·LTV·DSR·대출한도·스트레스 금리·생애최초 | 주담대 규제 원표(LTV·가액구간 한도·만기·DSR·스트레스 금리·생애최초 절차) — 조건별 판정·계산은 realty_loan_limit, credit_rehab=개인회생·신용회복·면책·공공정보 등록 | 개인회생×신용·대출 규칙 — 공공정보 등록·조기삭제(1년 성실변제, 2025-07)·면책, 기산점(개시≠인가) 함정. **재산·주택 축은 credit_rehab_property**, credit_rehab_property=개인회생 중인데 집 살 수 있나·배우자 명의로 주택 취득·청산가치·가용소득·퇴직금 압류금지·퇴직연금 압류금지 범위·주택임차보증금 압류금지·재산 은닉·인가 후 재산이 늘면 | **개인회생×부동산** — 개인회생재단의 범위(개시 vs 인가 시점)·청산가치 보장원칙이 묶는 것·압류금지라 재단에서 빠지는 재산(퇴직연금 전액 vs 퇴직금 1/2)·부부 명의 축·은닉과 정상 거래의 경계. **판정은 안 한다**, 신용·대출 축은 credit_rehab, lease_rules=전월세·임대차·계약갱신청구권·5% 상한·묵시적 갱신·집주인 실거주 | 주택임대차 갱신 — 갱신요구권(행사기간·거절사유·1회 2년)·5% 증액상한·갱신 후 해지권(3개월)·매수인 실거주 거절 판례(2021다266631), auction_rights=경매 권리분석·말소기준권리·대항력·확정일자·최우선변제·배당요구·유찰 횟수 역산·최저가 저감률(법원별 20%/30%)·인도명령·명도소송 | 민사집행법 91조 인수/소멸·주임법 대항력·우선변제권·배당요구·배당순위 — '낙찰받으면 보증금 물어주나'가 여기다. 낙찰 후 명도(제136조 인도명령 6개월·명도소송 갈림)도 여기다. **판정은 안 한다**, 금액표는 realty_small_deposit_check, capital_gains_tax=양도세·양도소득세·세율표·장특공제·필요경비·다주택 중과·이월과세·양도세 신고·신고기한·예정신고·확정신고·기한후신고·가산세·분납·지방소득세 신고 | 세율표·필요경비 자본적/수익적 분류·중과 현황·2026 개편 계류 + **신고·납부 기한과 가산세**(예정 2개월·확정 5월·지방소득세 +2개월·분납·감면·비과세면 신고 의무가 없는가) — 세액 계산은 realty_capital_gains_tax, **비과세 갈림길은 one_home_exemption_map**, subscription_account=청약통장·청약 가점·배점표·납입 인정·예치금 전환 | 청약통장·가점 규칙(배점표 84점·기산 함정·월 25만원 인정·미납/선납·예부금 전환 2027-09-30 한시, 2026-09-23 1년 재연장) — 점수 계산은 realty_subscription_score, redevelopment_rules=정비구역 지정·노후도 요건·조합원 지위양도·비례율·재건축진단 | 재개발·재건축 — 노후도 60%·서울 조례 지표·39조 지위양도 제한과 예외·비례율 산식. 지위양도 가능 판정은 realty_member_transfer_check, redevelopment_entitlement=재개발 입주권·분양자격·권리산정기준일·뚜껑·도로 지분 | 재개발 분양자격 갈림길 지도(서울 한정) — 5경로·권리산정기준일 3층 경계·확인 체크리스트. 판정은 안 한다, remodeling_rules=리모델링 조합·15년 연한·수직증축·1기 신도시·증축 한도 | 공동주택 리모델링(**주택법** — 도시정비법과 별개 법제): 전용 85㎡ 미만 40%/이상 30%·세대수 15%·수직증축·39조 적용 밖·1기 신도시 특례. redevelopment_rules와 섞으면 오답, one_home_exemption_map=1세대1주택 비과세·2년 보유·2년 거주·12억·일시적 2주택·상속주택·동거봉양·상생임대·부속토지만 양도·매매특약 멸실 | **양도세 비과세 갈림길 지도** — 5관문·5경로+확인 체크리스트. **판정은 안 하지만 무엇을 확인해야 하는지는 다 있다** — 비과세 가능성이 보이면 세무사로 보내기 전에 여기다, comprehensive_real_estate_tax=종부세·종합부동산세·공시가격 문턱·공동명의·보유세 | **종부세 과세 문턱과 명의 축** — 인별 과세라 단독/공동명의가 갈리는 자리. 공시가 기준 문턱·공동명의 특례·2026 개편안(계류). **세액 계산은 안 한다**, gift_tax_and_funding_source=증여세·자금출처·자금출처조사·부모님이 보태주는 돈·차용증·공동명의 지분 | 증여재산공제 문턱 + 소명 — 10년 합산·배우자 6억·직계존속 5천만·혼인출산 1억 통합한도·지분≠기여도면 증여. **세액 계산·절세 설계는 안 한다**, property_tax=재산세·6월 1일 기준일·공시가격 과세표준·보유세 | **재산세(주택분) 구조·기준일·명의 축** — **물건별 과세라 공동명의여도 총액이 같다**(종부세와 반대). 6월 1일 기준일 함정·1주택 특례(2026 일몰). **계산은 안 한다**, jeonse_loan_rules=전세자금대출·버팀목·전세대출 DSR·중소기업 청년 전세 | 자격 + DSR 취급 — 구입자금과 다른 상품군이라 loan_rules 표를 갖다 쓰면 오답. **원금이 DSR에 안 잡히고 이자만**(정책분은 아예 제외). 한도 계산은 안 한다, interim_collective_loan=중도금대출·집단대출·잔금대출 전환·이자후불제 | **분양 중도금(집단)대출 구조·DSR·6억 한도 취급** — 중도금은 DSR 밖이지만 **다른 대출을 받을 땐 내 DSR에 잡히고, 잔금 전환 시 DSR·6억 한도가 걸린다**(계약 통과≠잔금 통과), living_expense_mortgage=생활안정자금·생활자금 대출·보유 주택 담보(구입 아님) | 이미 가진 집을 담보로 — **구입 목적이 아니다**. 수도권·규제지역 **1주택 1억 한도(기존분 합산)·다주택 전면 금지**, DSR은 구입자금과 똑같이 걸린다, jeonse_return_mortgage=전세퇴거자금·전세보증금 반환 대출·세입자 내보낼 돈 | 원칙 1억이지만 **6·27 이전 임대차계약 + 소유권 취득분은 경과조치로 초과 가능**(LTV 70%). 경과조치는 **DSR 예외가 아니다**, auction_balance_loan=경락잔금대출·낙찰 잔금·대금지급기한 | **경락잔금대출**(경매 낙찰 잔금) — 대금지급기한에 대출 실행이 묶이는 구조. 방공제·MCI는 room_deduction_and_mci, funding_plan_report=자금조달계획서·입주계획서·증빙·30일 기한 | **주택취득자금 조달 및 입주계획서** — 제출 대상·증빙·30일 기한과 가족 차용을 적을 때 걸리는 자리, room_deduction_and_mci=방공제·MCI·MCG·실제 대출가능액이 깎이는 이유 | **방공제·MCI/MCG**(매매·경매 공통) — 규제 상한과 별개로 실제 대출가능액을 깎는 구조. 'MCI 되면 4.3억, 안 되면 3.9억'류와 '왜 계약 전에 확정을 못 해주나'의 근거, unit_alteration_rules=내력벽 철거·벽 헐기·욕실 이동·인테리어 허가·층상배관 | 이 집을 내 마음대로 고칠 수 있나 — 내력벽 철거 가부('2016년 유예로 허용'은 통설이고 조문이 깬다)·행위허가 동의율·경미한 행위·층상/층하 배관. 단지별 값은 realty_remodel_feasibility, list=제공 항목 안내(토픽 목차)", "enum": [ "axes", "acquisition_tax", "regulated_area", "loan_rules", "credit_rehab", "credit_rehab_property", "lease_rules", "auction_rights", "capital_gains_tax", "subscription_account", "redevelopment_rules", "redevelopment_entitlement", "remodeling_rules", "one_home_exemption_map", "comprehensive_real_estate_tax", "gift_tax_and_funding_source", "property_tax", "jeonse_loan_rules", "interim_collective_loan", "living_expense_mortgage", "jeonse_return_mortgage", "auction_balance_loan", "funding_plan_report", "room_deduction_and_mci", "unit_alteration_rules", "list" ], "title": "Topic", "type": "string" } }, "title": "realty_policy_rulesArguments", "type": "object" }, "name": "realty_policy_rules", "outputSchema": null }, { "description": "[유료] 단지의 **다음 달** 평균 매매가를 평형대별로 예측한다 (XGBoost v4_clean).\n\n complex_name 또는 complex_key 중 하나는 필수. 동명 단지가 여러 지역에 있으면\n 먼저 realty_complex_report로 단지를 특정한 뒤 complex_key로 호출하라.\n 예측 지평은 1개월(익월) 고정 — 그 너머는 모델이 검증되지 않아 제공하지 않는다.\n 커버리지 밖은 정직하게 거절된다(지어내지 않음) — ①최근 3개월 내 월 거래 3건 미만이거나\n ②과거 거래 이력이 없는 신축 첫 달(모델이 지역·평형 평균을 토해 2~4배 틀린다, 실측).\n 예측이 없을 뿐 시세 데이터는 있으니 그때는 실거래 도구로 답하라.\n 응답 predictions[].caution이 있으면 반드시 함께 전달하라 — 예측 대상이 '익월에 거래된\n 매물들의 평균가'라, 시세가 그대로여도 거래 구성이 바뀌면 흔들린다(실측 16.3%가 ±10% 초과).\n 응답의 as_of_ym(기준월)·disclaimer(검증 MAPE)를 사용자 답변에 반드시 함께 전달하라 —\n 예측은 참고 지표이지 투자 보장이 아니다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "complex_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "정확한 단지 키 — realty_complex_report가 돌려주는 complex_key", "title": "Complex Key" }, "complex_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 (예: 반포자이)", "title": "Complex Name" }, "months": { "default": 1, "description": "(구버전 호환) 예측 지평은 1개월 고정 — 이 값은 무시되고 응답이 그 사실을 실토한다 (허용 범위 1~12)", "maximum": 12, "minimum": 1, "title": "Months", "type": "integer" } }, "title": "realty_predict_priceArguments", "type": "object" }, "name": "realty_predict_price", "outputSchema": null }, { "description": "아파트 청약(분양) 공고를 조회한다 — 분양가·청약 접수 일정·당첨자 발표일·입주 예정·위치.\n \"다음 달 청약 넣을 만한 데 있어?\", \"○○에 분양하는 아파트 있어?\"류 질문용.\n\n **\"오늘/지금 접수 가능한 청약\"은 status='접수중'이다.** upcoming=true는 접수 **시작 전**만\n 주므로 그 질문에 쓰면 정확히 **오늘 못 넣는 공고들**을 받는다(2026-08-22 실사고: 접수가\n 이틀 뒤 시작하는 공고를 \"현재 접수 가능\"으로 답했다). 행마다 오늘 기준 판정\n `apply_status`(접수중/접수예정/접수마감/일정미상)와 `apply_status_text`가 붙고, 그 기준일은\n meta.today다 — **날짜를 직접 비교해 상태를 다시 판정하지 말고 이 값을 그대로 전하라.**\n \"넣을 만해?/적정가야?\"까지 물으면 이어서 realty_presale_vs_market으로 분양가를\n 실거래 시세와 대조하라(응답의 house_manage_no가 그 도구의 입력이다).\n\n price_min/price_max는 주택형별 분양 최고가의 최소·최대(만원)다 — 한 공고에 여러\n 주택형(house_type_count)이 있다. 청약 자격·순위 요건은 이 데이터에 없다(지어내지 말 것).\n 경쟁률·당첨 가점 커트라인은 realty_subscription_odds 도구에 있다.\n\n 무순위(줍줍)·취소재공급이 돈 공고에는 `unsold_history`(회차·세대)가 붙는다 — 접수\n 경쟁률이 높아도 무순위가 돌았다면 \"당첨 후 계약이 안 된\" 시장이다. 없다고 이력이\n 없던 건 아니다(meta.unsold_note의 연결 한계 참조). 같은 지역 공고들의 분양가가\n 올라온 추이(\"기다림의 비용\")는 realty_presale_price_trend.\n\n 규제지역 플래그: speculation_zone(투기과열지구)·adjustment_area(조정대상지역)·\n price_cap_applied(분양가상한제), Y/N — **모집공고일(announced_on) 기준 스냅샷**이라\n 이후 지정·해제가 바뀔 수 있다. \"현재 규제지역\"으로 단정하지 말고 공고일과 함께 전하라.\n 전매제한·거주의무 기간은 이 데이터에 없다(플래그에서 유추 금지) —\n realty_notice_facts가 공고 원문 값을 쪽 번호와 함께 준다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "keyword": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명·공급 주소 부분일치 (예: '우미린', '5-2생활권', '다솜동') — 생활권·동 단위 질의는 이걸로", "title": "Keyword" }, "limit": { "default": 20, "description": "공고 수 — 주택형별 분양가·순위별 일정이 붙어 행이 무겁다. 요청분을 다 실으면 응답이 크기 상한을 넘는 경우 **실제 반환 수를 줄이고 meta.size_capped**에 총계·좁혀 부르는 법을 값으로 싣는다 — 조용히 자르지 않는다 (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 (예: 서울, 경기, 세종, 부산)", "title": "Region" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 정확한 이름 (예: 수원시, 강남구). ⚠️세종은 이 필드가 동·생활권·도로명으로 오염돼 있으니 쓰지 말고 keyword를 쓰라", "title": "Sigungu" }, "status": { "default": "전체", "description": "오늘(KST) 기준 접수 상태로 거른다. **'오늘/지금 접수 가능한', '지금 넣을 수 있는' 질문은 '접수중'이다** — '접수예정'은 아직 못 넣는 것들이다. '다음 달 청약'처럼 앞으로를 묻는 질문만 '접수예정'. 기본 '전체'.", "enum": [ "전체", "접수중", "접수예정", "접수마감" ], "title": "Status", "type": "string" }, "upcoming": { "default": false, "description": "⚠️True면 접수 **시작 전**(시작일이 오늘 이후) 공고만 — **오늘 접수 가능한 공고는 여기 없다**. 오늘 넣을 수 있는 것을 찾는다면 status='접수중'을 써라. status와 함께 쓰지 말 것(status가 이것을 대체한다).", "title": "Upcoming", "type": "boolean" } }, "title": "realty_presaleArguments", "type": "object" }, "name": "realty_presale", "outputSchema": null }, { "description": "이 분양 공고를 같은 시군구·같은 평형의 다른 공고들과 5축으로 견준다.\n\n 이 분양 공고를 **같은 시군구·같은 평형 공고들과 견줘** 읽는다 — 청약홈 API에 없고\n **공고문 원문에만 있는 5축**으로: ①대지비 비중(분양가에서 땅값이 얼마인가) ②유상옵션\n (사실상 필수인 발코니확장 절대금액) ③중도금 무이자 여부와 회차 ④층 프리미엄(최저 층구간\n 대비 최상 층구간) ⑤㎡당 분양가(전용면적 기준).\n\n \"이 분양가가 비싼가\"는 실거래 대조만으로는 반쪽이다 — 같은 값이라도 대지비 비중이\n 70%인 공고와 25%인 공고는 다른 물건이고, 발코니확장 3천만원은 광고 분양가에 안 잡힌다.\n 공고를 지정하면 그 공고의 5축 값과 **분포에서의 위치(percentile)**를 주고, 지정하지\n 않으면 시군구·평형 슬라이스의 분포만 준다.\n\n 읽는 법(그대로 지켜야 값이 거짓이 되지 않는다):\n · **셀 표본이 3건 미만이면 분위를 안 낸다** — 그때 `verdict`가 '표본 부족'이고,\n 그것이 답이다. **시도 값(background)으로 갈아타지 마라**(D-2026W33-40).\n · **연도를 자르지 않은 시계열을 그리지 마라** — 팩트시트 커버율이 연도마다 20배 이상\n 갈린다(meta.coverage.by_year). 연도 간 분양가 추이는 realty_presale_price_trend다.\n · 중도금 `unknown`은 '이자 있음'이 아니라 '판정 못 했다'다(n_known/n_unknown이 갈려 있다).\n · ㎡당 분양가는 **전용면적** 기준이라 공급면적 평당가와 같은 축에 놓으면 안 된다.\n\n 이 축의 자리: 개별 공고의 값 자체(전매제한·자격·층별 표 전문)는 realty_notice_facts,\n 원문 조항은 realty_notice_text, 분양가 대 실거래 적정성은 realty_presale_vs_market,\n 연도별 분양가 추이는 realty_presale_price_trend — 이 도구는 **공고끼리의 횡단면**이다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "exclusive_m2_max": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적 상한(㎡) — 국평만 보려면 85", "title": "Exclusive M2 Max" }, "exclusive_m2_min": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적 하한(㎡) — 국평만 보려면 80. 지정하면 모든 셀에 같은 필터가 걸린다", "title": "Exclusive M2 Min" }, "house_manage_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "공고 관리번호 (realty_presale·realty_notice_facts 응답의 house_manage_no, 예 '2026000383')", "title": "House Manage No" }, "keyword": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 일부 (예: '우미린' — 공백 무관 매칭). house_manage_no와 택일이며 여럿이면 후보 목록을 돌려준다", "title": "Keyword" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 (예: 경기, 서울, 경남). **시도 분포는 배경일 뿐 결론 근거가 아니다**(D-2026W33-40) — 결론은 시군구·평형대 셀에서 읽어라", "title": "Region" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구를 원장 어휘 그대로 (예: '천안시 서북구', '평택시', '서울 동작구' — 특별·광역시는 '서울 동작구'처럼 시도 접두가 붙는다). 공고를 지정하지 않고 그 지역 분포만 볼 때 쓴다", "title": "Sigungu" } }, "title": "realty_presale_contextArguments", "type": "object" }, "name": "realty_presale_context", "outputSchema": null }, { "description": "분양 한 건의 층별 총 소요자금(분양가·발코니·중도금이자·취득세)을 계산한다.\n\n 공고 원문(팩트시트) 기반 **결정론 계산**: 층별 분양가 + 발코니 확장비 + 회차별\n 중도금 이자(일할) + 취득세(표준세율) = 층별 총 소요자금. \"이 분양 실제로 얼마 드나\"의\n 자리다 — 클라이언트마다 손계산하면 입주일 가정 하나로 백만원대가 갈린다(실측 124만원).\n\n 경계(신고 #43의 선 그대로): 여기까지가 \"공고+세법에서 결정론적으로 나오는 것\"이다.\n 월 상환액·매수 vs 전세 손익분기는 개인 파라미터가 지배하므로 계산하지 않는다 — 전세\n 시세는 realty_complex_rent_by_pyeong으로 받아 클라이언트가 개인 가정을 얹어라.\n 자기자금·차주 조건을 **선언**받아 필요 대출액과 규제 상한 통과까지 판정하는 건\n realty_presale_funding_plan이 한다. 세율표 자체는 realty_policy_rules가 근거 조문과 함께 준다(중과·감면 등\n 이 계산이 가정으로 제친 것들이 거기 있다 — assumptions를 반드시 사용자에게 전하라).\n ", "inputSchema": { "additionalProperties": false, "properties": { "extra_options_krw": { "default": 0, "description": "발코니 외 유상옵션 합계(원) — realty_notice_facts의 옵션가에서 골라 넣어라", "minimum": 0, "title": "Extra Options Krw", "type": "integer" }, "house_manage_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "공고 관리번호 (realty_presale의 house_manage_no)", "title": "House Manage No" }, "house_ty": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "주택형 (예: '59', '84B') — 생략 시 공고의 주택형 목록을 돌려준다", "title": "House Ty" }, "keyword": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 일부 (공백 무관)", "title": "Keyword" }, "mid_rate_pct": { "default": 5, "description": "중도금 대출 연이율 %(기본 5.0 — 실제 금리는 공고·은행마다 다르다) (허용 범위 0 초과~20)", "exclusiveMinimum": 0, "maximum": 20, "title": "Mid Rate Pct", "type": "number" }, "movein_ym": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "입주 년월 YYYYMM 덮어쓰기 — 공고에 입주예정이 없거나 다른 가정을 쓸 때", "title": "Movein Ym" } }, "title": "realty_presale_costArguments", "type": "object" }, "name": "realty_presale_cost", "outputSchema": null }, { "description": "분양 한 건이 내 자기자금과 대출로 닫히는지 시점별로 판정한다.\n\n 공고 하나에 대해 **\"내 자기자금으로 닫히는가\"**를 결정론으로 판정한다 — 시점별\n (계약금→중도금 회차→잔금) 필요액, 잔금 시점의 필요 대출액, 그 대출이 규제 상한\n (LTV·가액구간 한도·DSR — realty_loan_limit과 같은 엔진) 안에 드는지, 부족하면\n 얼마가 부족한지. \"이 분양 당첨되면 진행 가능해?\"류 질문의 자리다.\n\n 경계: ① 차주 유형·소득은 **선언**이다(서버는 판정하지 않는다). ② 판정은 **현행\n 규제·현재 자기자금 기준**이다 — 잔금 시점(수년 뒤)의 규제·금리·저축 증가는 반영하지\n 않으며 그 사실을 assumptions에 싣는다. ③ 승인·확약이 아니다. ④ 저축 계획·갈아타기\n 전략·매수 적정성 판단은 이 도구 밖이다 — 시세 비교는 realty_presale_vs_market,\n 규칙 원표는 realty_policy_rules. 응답의 assumptions·uncertainties를 함께 전하라.\n ⑤ 입주시 시세·전세보증금도 **선언**이다 — 선언하면 각각 시세 기준 잔금대출 시나리오\n (scenario_at_expected_price)와 전세 잔금 시나리오(jeonse_scenario — 거주의무·대출\n 병행 불가 게이트)를 병렬로 준다. 서버는 미래 시세·전세가를 추정하지 않는다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "annual_income_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "차주 연소득(만원) — 주면 잔금대출의 DSR 상한까지 반영해 판정한다", "title": "Annual Income 10K" }, "borrower": { "description": "잔금대출 차주 유형(사용자 선언 — realty_loan_limit과 동일 계약). 계약자 명의 기준으로 선언하라", "enum": [ "무주택", "생애최초", "서민실수요", "1주택_처분조건부", "1주택_보유", "다주택" ], "title": "Borrower", "type": "string" }, "credit_loan_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "신용대출 잔액·예정액(만원) — realty_loan_limit과 동일 계약(서버가 산정만기 5년 규제식으로 계산한다). 직접 연 원리금을 계산해 넣지 마라", "title": "Credit Loan 10K" }, "credit_loan_rate_pct": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 20, "type": "number" }, { "type": "null" } ], "default": null, "description": "신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수 (허용 범위 0 초과~20)", "title": "Credit Loan Rate Pct" }, "existing_annual_debt_payment_10k": { "default": 0, "description": "기존 대출 연간 원리금(만원)", "minimum": 0, "title": "Existing Annual Debt Payment 10K", "type": "integer" }, "expected_price_at_movein_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "입주(잔금) 시점 예상 시세 선언(만원) — 잔금대출 LTV는 실무상 입주시 시세·감정가 기준이라, 선언하면 그 값 기준 판정을 병렬로 준다. 서버는 미래 시세를 추정하지 않는다(선언 없으면 분양가 기준만)", "title": "Expected Price At Movein 10K" }, "extra_options_krw": { "default": 0, "description": "발코니 외 유상옵션 합계(원)", "minimum": 0, "title": "Extra Options Krw", "type": "integer" }, "floor_zone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "층 구분(예: '5~9층') — 생략하면 첫 밴드로 계산하고 나머지 밴드 총액을 병기한다", "title": "Floor Zone" }, "house_manage_no": { "description": "공고 관리번호 (realty_presale의 house_manage_no)", "title": "House Manage No", "type": "string" }, "house_ty": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "주택형 (예: '59', '84B')", "title": "House Ty" }, "interest_rate_pct": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 20, "type": "number" }, { "type": "null" } ], "default": null, "description": "잔금대출 약정금리 가정(%) (허용 범위 0 초과~20)", "title": "Interest Rate Pct" }, "is_metro": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "수도권 여부 직접 선언", "title": "Is Metro" }, "is_regulated": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "규제지역 여부 직접 선언", "title": "Is Regulated" }, "jeonse_deposit_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "입주 시점 예상 전세보증금 선언(만원) — 주면 '세입자 보증금으로 잔금 치르기' 시나리오를 판정한다(거주의무·대출 병행 불가 게이트 포함). 시세 확인은 realty_complex_rent_by_pyeong·region_price_stats(metric=rental)", "title": "Jeonse Deposit 10K" }, "lender": { "default": "은행", "description": "업권", "enum": [ "은행", "제2금융권" ], "title": "Lender", "type": "string" }, "loan_term_years": { "default": 30, "description": "잔금대출 만기(년) (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Loan Term Years", "type": "integer" }, "mid_rate_pct": { "default": 5, "description": "중도금 대출 연이율 %(기본 5.0) (허용 범위 0 초과~20)", "exclusiveMinimum": 0, "maximum": 20, "title": "Mid Rate Pct", "type": "number" }, "movein_ym": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "입주 년월 YYYYMM 덮어쓰기 — 공고에 입주예정이 없으면 이걸 안 주는 한 총 소요자금이 계산되지 않아 자금 판정도 못 한다(realty_presale_cost와 같은 계약·같은 이름). 후보는 realty_presale의 move_in_ym", "title": "Movein Ym" }, "own_funds_10k": { "description": "동원 가능한 자기자금(만원) — 계약금부터 잔금까지 전액 투입 가정으로 계산한다. 0도 유효하다(전액 대출 시나리오 — 계약금 게이트에서 정직하게 걸린다)", "minimum": 0, "title": "Own Funds 10K", "type": "integer" }, "rate_fixed_years": { "anyOf": [ { "maximum": 50, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "혼합형 고정기간 또는 주기형 변동주기(년) — 미지정 시 5년 가정 (허용 범위 0~50)", "title": "Rate Fixed Years" }, "rate_type": { "default": "변동", "description": "잔금대출 금리유형 — realty_loan_limit과 동일 계약. 기본 '변동'은 스트레스 금리 전액 가산이라 가장 보수적이다(안 닫힌다는 판정이 유형 때문일 수 있다)", "enum": [ "변동", "혼합형", "주기형", "순수고정" ], "title": "Rate Type", "type": "string" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "규제 판정용 지역 덮어쓰기 — 생략하면 공고 소재지로 판정한다", "title": "Region" } }, "required": [ "house_manage_no", "own_funds_10k", "borrower" ], "title": "realty_presale_funding_planArguments", "type": "object" }, "name": "realty_presale_funding_plan", "outputSchema": null }, { "description": "같은 지역 분양 공고들의 연도별 평당 분양가 추이를 낸다.\n\n 같은 지역 분양 공고들의 **연도별 평당 분양가 추이**를 낸다 — \"지금 넣을까,\n 기다릴까\"에서 **기다림의 비용**(다음 공고가 얼마에 나올까)을 정량화하는 축이다.\n 재당첨 제한이 걸린 결정(분양가상한제 10년 등)에서 특히 판단을 가른다.\n\n 기준(답변에 그대로 전달): **공급면적(분양평) 평당 최고 분양가**(만원/평), 발코니\n 확장·유상옵션 미포함. 연도별 주택형 믹스가 다르면 중앙값이 흔들린다 —\n announcements가 1~2건인 연도는 추이로 읽지 말고, 평형대를 고정하려면\n exclusive_m2_min/max(국평=80~85)를 써라.\n\n 이 축의 자리: 개별 공고의 적정성(분양가 vs 실거래)은 realty_presale_vs_market,\n 실거래 가격 추이는 realty_region_price_stats — 이 도구는 **분양가끼리의 시계열**이다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "exclusive_m2_max": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적 상한(㎡) — 국평만 보려면 85", "title": "Exclusive M2 Max" }, "exclusive_m2_min": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적 하한(㎡) — 국평만 보려면 80", "title": "Exclusive M2 Min" }, "keyword": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명·공급 주소 부분일치 (예: '고덕', '동탄') — 동네·지구 단위 추이는 이걸로", "title": "Keyword" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 (예: 서울, 경기, 세종)", "title": "Region" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 정확한 이름 (예: 평택시). ⚠️세종은 오염돼 있으니 keyword를 쓰라", "title": "Sigungu" } }, "title": "realty_presale_price_trendArguments", "type": "object" }, "name": "realty_presale_price_trend", "outputSchema": null }, { "description": "청약(분양) 공고의 분양가가 주변 실거래 시세 대비 싼지/비싼지를 주택형별로 계산한다.\n \"이 청약 넣을 만해?\", \"분양가 적정해?\"류 질문의 정량 근거 — 웹검색으로는 못 하는\n 분양가×실거래 조인 계산이 이 도구의 존재 이유다.\n\n 공고 특정: house_manage_no가 없으면 region+keyword로 검색하고, 여러 건이면\n 후보 목록을 돌려주니 하나를 골라 다시 호출하라(추측해서 고르지 않는다).\n 기준선: 평형 행의 gap_pct는 gap_basis가 말하는 기준 대비다 — 인근 비교단지가 충분하면\n **공고 좌표 반경·준공 연도 조건·같은 평형대 비교군**(nearby_baseline) 대비이고, 아니면\n 지역(공고 시군구, 없으면 시도) 실거래 평균(구축·외곽 포함, 이상치 미필터) 대비다. 지역 평균 대비 값은\n gap_pct_region_avg에 늘 따로 있고, 두 기준선이 크게 갈리면 baseline_divergence가\n 붙는다 — 그때 지역 평균 대비 수치로 '비싸다'를 말하지 마라. 청약 경쟁률·당첨 가점\n 커트라인은 realty_subscription_odds에 있다(\"넣을 만해?\"엔 둘을 같이 써라).\n 지역 수준 교차확인은 realty_area_price_bands(이상치 필터·중앙값)로 하라.\n 이 도구는 **현재 공고 1건의 적정성**이다 — 같은 지역 공고들의 분양가 시계열\n (\"기다릴수록 얼마씩 올랐나\")은 realty_presale_price_trend.\n ", "inputSchema": { "additionalProperties": false, "properties": { "house_manage_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "realty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확", "title": "House Manage No" }, "keyword": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명·주소 부분일치 (예: '우미린', '5-2생활권', '다솜동')", "title": "Keyword" }, "months": { "default": 12, "description": "실거래 비교 창(개월) (허용 범위 3~24)", "maximum": 24, "minimum": 3, "title": "Months", "type": "integer" }, "pyeong": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "대조할 전용평(정수)을 직접 고른다 — 예: [26]이면 국민평형 84㎡만. 안 주면 **세대수 많은 순 상위 5개** 평형을 자동으로 고른다. comparison_truncated에 빠졌다고 적힌 평형은 이 인자로 되받아 부르면 된다(공시만 하고 길이 없으면 막다른 골목이다)", "title": "Pyeong" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 (예: 서울, 경기, 세종)", "title": "Region" } }, "title": "realty_presale_vs_marketArguments", "type": "object" }, "name": "realty_presale_vs_market", "outputSchema": null }, { "description": "마감 전 공공임대 모집공고(접수 예정 포함) — LH 행복주택·국민임대·영구임대·통합공공임대·공공임대·매입임대·전세임대.\n\n \"행복주택 모집 공고 있어?\", \"서울 청년 전세임대 지금 신청돼?\", \"경기 매입임대 모집\", \"LH 임대 공고\"류\n 질문의 자리다. 공고마다 유형·지역·진행상태·마감일·남은 일수와 **원문 공고 주소(source_url)**를 준다.\n 마감 임박 순이고 총계(meta.total_matched)·잘림(meta.truncated)이 함께 나온다.\n\n **결론에 반드시 옮길 것**:\n · 원천은 LH 공고(+마이홈의 LH 밖 공급기관 일부)다. **SH·GH·iH 등 지방공사 자체 공고와 장기전세는 없다**\n — 0건이나 적은 건수를 '모집이 없다'로 말하지 마라(meta.coverage.not_covered).\n · 자격(소득·자산·무주택) 판정은 하지 않는다 — 신청 가능 여부는 source_url 공고문으로 안내하라.\n · 수집 시각은 meta.freshness다 — 캐시라 그 뒤 공고는 없다.\n · 마감 전이면 **접수 시작 전 공고도 든다**(LH 공고중·status 접수예정) — '지금 신청 가능'으로 말하지 말고\n 접수 기간은 공고문으로 확인하라. 지금 접수 중이 확실한 것은 status 접수중뿐이다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "keyword": { "anyOf": [ { "maxLength": 40, "type": "string" }, { "type": "null" } ], "default": null, "description": "공고명·지역 표기 부분일치(공백 무시) — '청년'·'신혼'·시군구 등. LH는 시군구 필드가 없어 공고명에 적힌 것만 잡힌다(meta.keyword_scope)", "title": "Keyword" }, "limit": { "default": 20, "description": "돌려줄 공고 수(마감 임박 순) (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "offset": { "default": 0, "description": "건너뛸 공고 수 — meta.next_offset을 그대로 넣는다 (허용 범위 0~5000)", "maximum": 5000, "minimum": 0, "title": "Offset", "type": "integer" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도(예: '서울', '경기', '전남'). 시군구·단지명은 keyword로 준다. '광주'는 광주광역시다(경기 광주시는 region='경기', keyword='광주'). 전국 단위 공고는 어느 시도에도 함께 실린다", "title": "Region" }, "rental_type": { "default": "전체", "description": "임대 유형. 장기전세(SH 상품)는 이 원천에 없어 0건과 함께 그 사실을 돌려준다", "enum": [ "전체", "행복주택", "국민임대", "영구임대", "통합공공임대", "공공임대", "매입임대", "전세임대", "집주인임대", "장기전세" ], "title": "Rental Type", "type": "string" } }, "title": "realty_public_rental_noticesArguments", "type": "object" }, "name": "realty_public_rental_notices", "outputSchema": null }, { "description": "[유료] 건령·거래활성 기반 재건축 **후보 스크리닝** 상위 단지를 조회한다.\n\n 점수 = 건령(최대 70, 30년 연한 기준) + 최근 12개월 거래활성 전국 백분위(최대 30).\n 사업성(용적률·대지지분·안전진단·조합 단계)은 반영되지 않는다 — 후보 발굴용이지\n 투자 판단 근거가 아니며, 응답의 disclaimer를 사용자에게 그대로 전하라.\n (구버전 점수 포화로 2026-07-30 보류했다가 산식 v2 재계산 검증 후 재개 — DATA-060)\n ", "inputSchema": { "additionalProperties": false, "properties": { "district": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "지역명 (예: 서울, 구로구). 비우면 전국 상위", "title": "District" }, "limit": { "default": 20, "description": "(허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "지역명 — 다른 도구와 같은 인자 이름. district와 같은 뜻이다(둘 중 하나만)", "title": "Region" } }, "title": "realty_reconstructionArguments", "type": "object" }, "name": "realty_reconstruction", "outputSchema": null }, { "description": "[유료] 서울시 정비사업(재개발·재건축·가로주택) 사업장 목록을 조회한다.\n\n [유료] 서울시 정비사업(재개발·재건축·가로주택 등) 사업장 목록 — 사업명·유형·\n 진행 단계·위치. \"○○구 재개발 어디까지 진행됐어?\"·\"면목동 재개발 어디 있어?\"류 질문용.\n 구(region)·동(dong)·유형(project_type)·진행 단계(stage)로 거를 수 있다.\n\n **커버리지는 서울 한정**(정보몽땅 원천) — 타 시도는 이 도구로 답할 수 없다고 밝혀라.\n 세대수·준공예정은 원천 목록이 제공하지 않아 null이다(지어내지 말 것). 원천이 진행\n 단계를 비워 둔 사업장이 있다(약 2%) — stage가 빈 행은 '단계 미상'이지 '진행 없음'이 아니다.\n 재건축 **유망도 점수**는 이 도구가 아니라 realty_reconstruction이 담당하고,\n \"지금 사면 조합원 지위 승계돼?\"는 realty_member_transfer_check(무료)가 담당한다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "dong": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "법정동 (예: 면목동·신길동) — 사업장 주소로 거른다. 구를 함께 주면 빠르다", "title": "Dong" }, "limit": { "default": 30, "description": "(허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "offset": { "default": 0, "description": "페이지네이션 오프셋", "minimum": 0, "title": "Offset", "type": "integer" }, "project_type": { "anyOf": [ { "enum": [ "reconstruction", "housing_redevelopment", "urban_redevelopment", "street_housing", "small_reconstruction", "small_redevelopment", "regional_housing", "remodeling" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "reconstruction=재건축, housing_redevelopment=재개발(주택정비형), urban_redevelopment=재개발(도시정비형), street_housing=가로주택정비, small_reconstruction=소규모재건축, small_redevelopment=소규모재개발, regional_housing=지역주택, remodeling=리모델링. 비우면 전체", "title": "Project Type" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 (예: 강남구) — 다른 도구와 같은 인자 이름. sigungu와 같은 뜻이다", "title": "Region" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 (예: 강남구). 비우면 서울 전체. region과 같은 뜻의 옛 이름(둘 중 하나만)", "title": "Sigungu" }, "stage": { "anyOf": [ { "enum": [ "plan_establishment", "zone_designation", "safety_assessment", "committee_approval", "union_establishment", "project_approval", "disposal_approval", "sale", "construction_start", "completion", "relocation_notice", "union_dissolution" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "진행 단계 필터 — plan_establishment=정비계획 수립, zone_designation=정비구역지정, safety_assessment=안전진단, committee_approval=추진위원회승인, union_establishment=조합설립인가, project_approval=사업시행인가, disposal_approval=관리처분인가, sale=분양, construction_start=착공, completion=준공인가, relocation_notice=이전고시, union_dissolution=조합해산. 비우면 전체. 원천이 단계 코드를 안 준 사업장(조합청산·조합원 모집신고 등)은 이 필터에 안 걸린다", "title": "Stage" } }, "title": "realty_redevelopmentArguments", "type": "object" }, "name": "realty_redevelopment", "outputSchema": null }, { "description": "재개발·재건축 조합원의 권리가액과 추가 분담금을 계산한다.\n\n 재개발·재건축 조합원의 권리가액과 추가 분담금(또는 환급금)을 결정론으로 계산한다 —\n 권리가액 = 종전자산 감정평가액 × 비례율, 분담금 = 조합원분양가 − 권리가액.\n \"감정평가 3억에 비례율 98%면 얼마 더 내?\"의 자리다.\n\n 경계를 지켜라: ① 입력 전부 **선언**이다 — 감정평가액·비례율은 조합 자료에서 가져와야\n 하고 서버는 검증하지 않는다. ② 이 산식은 법정 산식이 아니라 통용 실무 산식이며,\n 비례율은 관리처분인가 전엔 추정치라 준공까지 계속 변한다 — 응답의 sensitivity(비례율\n ±10%p 스윙)와 disclosures를 반드시 함께 전하라. ③ 산식 출처·변동 함정의 원문은\n realty_policy_rules(topic=redevelopment_rules)의 proportion_formula가 진실원이다.\n 분양자격 자체가 불확실하면 topic=redevelopment_entitlement(갈림길 지도)부터.\n ", "inputSchema": { "additionalProperties": false, "properties": { "member_sale_price_10k": { "description": "받으려는 주택형의 조합원분양가(만원)", "exclusiveMinimum": 0, "title": "Member Sale Price 10K", "type": "integer" }, "prev_asset_value_10k": { "description": "조합원 종전자산 감정평가액(만원) — 감정평가 결과이지 시세가 아니다", "exclusiveMinimum": 0, "title": "Prev Asset Value 10K", "type": "integer" }, "proportion_rate_pct": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 300, "type": "number" }, { "type": "null" } ], "default": null, "description": "비례율(%, 예: 102.5) — 조합 총회 자료·관리처분계획의 값을 선언. 없으면 아래 사업 전체 3종으로 계산한다 (허용 범위 0 초과~300)", "title": "Proportion Rate Pct" }, "total_post_asset_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "종후자산 평가총액=분양수입 총액(만원) — 비례율을 직접 계산할 때", "title": "Total Post Asset 10K" }, "total_prev_asset_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "종전자산 평가총액(만원) — 비례율을 직접 계산할 때", "title": "Total Prev Asset 10K" }, "total_project_cost_10k": { "anyOf": [ { "exclusiveMinimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "총사업비(만원) — 비례율을 직접 계산할 때", "title": "Total Project Cost 10K" } }, "required": [ "prev_asset_value_10k", "member_sale_price_10k" ], "title": "realty_redevelopment_burdenArguments", "type": "object" }, "name": "realty_redevelopment_burden", "outputSchema": null }, { "description": "지역의 아파트 실거래 시세 **추이**(월별)를 조회한다. 경매가가 싼지 판단하는 기준선이 된다.\n\n **이 축의 자리(시세 도구 3종 중)**: 월별 흐름·방향이 필요할 때 이걸 쓴다. 지역의\n 가격 **수준**을 인용할 거면 realty_area_price_bands를 쓰라 — 이 축은 이상치(지분·\n 증여성 직거래)가 필터되지 않아 평균이 눌리며, **두 도구 값이 갈리면 bands 쪽이\n 정상 매매에 가깝다**(세종 소형 실측 4,400만원 차). 단지가 특정된 질문(\"○○아파트\n 얼마야\")은 realty_search_complexes가 기본이다 — 지역 평균은 단지 간 편차(같은 동\n 같은 평형에서 단지 평균 24% 차)를 뭉갠다.\n\n region은 시군구명(예: '강남구') 또는 **법정동까지**(예: '강남구 대치동',\n '세종특별자치시 나성동') — 세종처럼 시군구가 하나인 도시는 동 단위로 좁혀야 신도심·\n 구도심이 섞이지 않는다(2026-08-08, 8/7 테스터 제안 수용). 동명 지역이 여럿이면\n 시도를 앞에 붙여라 — 안 붙이면 **고르지 않고 거절**하며(region_ambiguous) 토큰이\n 정확히 같은 후보를 준다(그 목록을 사용자에게 되묻고, 고른 이름을 그대로 다시 넣어라).\n 지역은 토큰 정확일치로만 맞춘다 — '동구'는 '남동구', '서구'는 '달서구'가 아니다.\n metric: price(매매) | rental(전월세). rental도 **months 창 월별 추이**(monthly_trend:\n 전세 평균·중앙, 월세 보증금·월세, 건수 분리)를 준다 — \"전세 떨어지는 중이야?\",\n 역전세 판단용(입주 물량은 realty_move_in_supply와 조합). 상단 필드는 최신월 스냅샷.\n **rental엔 평형 인자가 안 먹는다** — 전월세 통계는 평형별로 나뉘어 있지 않아\n pyeong_exclusive·pyeong_supply·area_m2_* 를 줘도 전체 평형 기준 값이 오고\n warning_pyeong_fallback으로 실토한다(값이 잘못 나가는 게 아니라 **다른 모수**다).\n 평형별 전월세가 필요하면 단지 단위 realty_complex_rent_by_pyeong으로 가라.\n\n **면적은 사용자가 말한 단위 그대로 넣어라 — 환산은 서버가 한다**(2026-08-22 제보):\n - ㎡로 말했으면 → area_m2_exclusive(전용 84㎡ → 84) / area_m2_supply(공급 112.8㎡ → 112.8)\n - 평으로 말했으면 → pyeong_supply(분양 \"34평\") / pyeong_exclusive(전용 실평수 25.4평)\n ㎡ 값을 평 인자에 넣으면 조용히 환산하지 않고 사유와 두 방향 출구를 적어 거절한다.\n\n **가격순 '목록'이 필요하면 top_n을 준다**(2026-09-07 외부 신고 T-2026W34-352):\n \"강남구 신고가 상위 5개\"·\"제일 비싸게 팔린 아파트\"처럼 개별 거래를 나열하는 질문은\n 이 인자 없이는 답이 안 나온다 — 종전엔 그런 질문이 이 도구로 라우팅된 뒤 집계\n (최고/평균/중앙)만 받고 목록을 못 줬다. top_transactions에 단지·평형·금액·계약일·층이\n 온다. **다만 그것은 '창 안의 고가 거래'이지 신고가(역대 최고가 경신)가 아니다** —\n 그 경계는 top_n을 준 응답이 같은 블록에서 적는다(이 도구 설명은 필드 이름을 대지\n 않는다 — 조건부로만 실리는 키를 설명이 무조건 지목하면 top_n 없이 부른 응답에서\n 없는 이름을 찾게 만든다, S364).\n ", "inputSchema": { "additionalProperties": false, "properties": { "area_m2_exclusive": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 500, "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적을 **㎡ 그대로** 받는다(예: 84, 59, 114.98). 사용자가 '전용 84㎡'라고 말했으면 환산하지 말고 84를 여기 넣어라 — 서버가 평으로 환산하고 그 사실을 응답에 적는다. pyeong_exclusive와 동시에 주면 거절한다 **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. (허용 범위 0 초과~500)", "title": "Area M2 Exclusive" }, "area_m2_supply": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 800, "type": "number" }, { "type": "null" } ], "default": null, "description": "공급(분양)면적을 **㎡ 그대로** 받는다(예: 112.8). pyeong_supply와 동시에 주면 거절한다 **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. (허용 범위 0 초과~800)", "title": "Area M2 Supply" }, "by_dong": { "default": false, "description": "metric='rental'에서 **법정동 × 전용면적대(60㎡ 미만·60~85㎡·85㎡ 초과) 전세 보증금 중앙값**을 함께 받는다(by_dong). '세종 어느 동이 전세 2.3억 이하야'처럼 한 시군구 안에서 동을 고르는 질문의 자리다 — 세종은 시군구가 하나라 이 인자 없이는 동별 전세를 못 가른다. 표본 3건 이상 칸만 나온다. 매매 동별은 realty_area_price_bands(by_dong=true)", "title": "By Dong", "type": "boolean" }, "metric": { "default": "price", "description": "price=매매, rental=전월세. **평형 인자(pyeong_exclusive·pyeong_supply·area_m2_exclusive·area_m2_supply)는 price에서만 먹는다** — 전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다(전체 평형 값이 오고 warning_pyeong_fallback으로 실토한다). 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라", "enum": [ "price", "rental" ], "title": "Metric", "type": "string" }, "months": { "default": 12, "description": "조회 개월 수 (허용 범위 1~60)", "maximum": 60, "minimum": 1, "title": "Months", "type": "integer" }, "pyeong_exclusive": { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "전용면적 기준 **실평수(평)** — ㎡가 아니다. 전용 84㎡면 25.4를 넣는다. **사용자가 ㎡로 말했으면 이 인자가 아니라 area_m2_exclusive를 쓰라** (㎡ 값을 여기 넣으면 60평 초과로 거절된다). 1평=3.3058㎡ **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라.", "title": "Pyeong Exclusive" }, "pyeong_supply": { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "분양평수(공급면적, 평) — 흔히 말하는 '34평'이 이것이다. 내부에서 ×0.745로 전용 실평수로 환산한다. **㎡로 말했으면 area_m2_supply를 쓰라** **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라.", "title": "Pyeong Supply" }, "region": { "description": "지역명 — 시군구까지(예: '강남구', '수원시 권선구') 또는 **법정동까지**(예: '강남구 대치동', '세종특별자치시 나성동'). 시도 약칭은 서버가 정식명으로 펴지만('서울 마포구' → '서울특별시 마포구'), 동명 지역이 여럿이면 시도를 앞에 붙여라 — 안 붙이면 **고르지 않고 거절**하며 이름이 정확히 같은 후보 목록을 준다('동구'는 '남동구'가 아니다). 단지명은 여기 넣지 마라(단지는 realty_search_complexes·realty_complex_pyeong_price 담당)", "title": "Region", "type": "string" }, "top_n": { "anyOf": [ { "maximum": 20, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "**가격순 상위 거래 '목록'을 함께 받는다**(1~20). '신고가 상위 5개', '제일 비싸게 팔린 아파트', '고가 거래 목록'처럼 **개별 거래를 나열**하는 질문이 이 인자다 — 안 주면 이 도구는 평균·중앙·최고 같은 **집계만** 답하고 목록은 못 준다. 행에 단지·전용면적·평형·금액·계약일·층이 실린다(top_transactions). metric='price'에서만 동작한다 (허용 범위 1~20)", "title": "Top N" } }, "required": [ "region" ], "title": "realty_region_price_statsArguments", "type": "object" }, "name": "realty_region_price_stats", "outputSchema": null }, { "description": "시군구 순위를 가격·상승률·전세가율 같은 축으로 조회한다.\n\n 지역(시군구) 순위를 조회한다 — \"제일 비싼 동네 어디야?\", \"요즘 많이 오른 지역은?\",\n \"전세가율 높은 곳은?\"류 질문용.\n\n price=거래량 가중 전용 평당가(최소 5건, 최신월은 집계 진행 중일 수 있음) ·\n growth=전용 60-85㎡ 고정 YoY(평형 구성 왜곡 제거). 응답 methodology의 산식·단위를\n 답변에 반영하라. investment=전세가율(시군구×전용평 셀로 매매·전세를 **같은 평형끼리** 짝지어\n 산출, 전 행이 같은 기준월·짝지은 건수 공시). 같은 평형·단지 수준은 realty_rental_yield.\n **transit·school도 보류다**(2026-09-26, D-2026W39-16) — 입지 점수는 90점 이상이 86.7%라\n 변별력이 없어 지역 순위를 내지 않는다. \"교통 좋은 동네\"는 단지를 특정해\n realty_location_scores의 location_facts(최근접역 거리·반경 안 정류장·학교 수)로 답하라.\n 비교 대상이 두어 곳으로 정해진 질문(\"A vs B 어디가 나아?\")은 [유료]\n realty_compare_regions가 시세·추이를 나란히 준다 — 이 도구는 순위·탐색용이다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "limit": { "default": 20, "description": "(허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "metric": { "description": "price=전용 평당가 / growth=연간 상승률 / investment=전세가율·갭투자 / transit·school=**보류**(입지 점수가 미검증 참고값이라 순위를 내지 않는다 — 호출하면 대안 안내)", "enum": [ "price", "growth", "investment", "transit", "school" ], "title": "Metric", "type": "string" }, "order": { "default": "desc", "description": "desc=상위부터, asc=하위부터", "enum": [ "desc", "asc" ], "title": "Order", "type": "string" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도명(예: 부산)이면 그 시도 안 순위, 시군구명이면 해당 지역 필터. 비우면 전국", "title": "Region" } }, "required": [ "metric" ], "title": "realty_region_rankingsArguments", "type": "object" }, "name": "realty_region_rankings", "outputSchema": null }, { "description": "지역 가격 추이를 **양쪽 창에 모두 거래가 있는 동일 단지들로만** 계산한다.\n\n **왜 필요한가**: 구 월평균 추이는 '가격이 변한 것'과 '팔린 단지가 바뀐 것'을 구분하지\n 못한다. 표본이 얇으면 후자가 지배하는데, 그걸 시세 변동으로 읽으면 오답이다\n (2026-08-14 실사고: 용산 33평 월 1~7건 표본으로 '전년 대비 −9.6%'를 만들었다).\n\n 이 도구는 **naive(전체 평균 변화)와 basket(동일 단지 변화)을 나란히** 주고 그 차이를\n `composition_effect`로 보여준다 — 차이가 크면 그 지역 평균 추이는 구성 잡음이다.\n 단지별 값은 **평당가**라 단지 안의 평형 구성 변화도 흡수한다.\n\n 한계를 반드시 함께 전하라: 바스켓이 얇으면(단지 수가 적으면) 이 값도 못 믿는다.\n 취소·직거래는 제외했고, 단지 내 동·층 구성 변화까지는 보정하지 못한다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "min_tx_per_complex": { "default": 1, "description": "바스켓에 넣을 단지의 창당 최소 거래 건수 — 1이면 바스켓이 커지지만 단지별 값이 한 건에 좌우된다 (허용 범위 1~10)", "maximum": 10, "minimum": 1, "title": "Min Tx Per Complex", "type": "integer" }, "pyeong_band": { "default": 3, "description": "pyeong_supply 기준 허용 폭(±평). 넓히면 바스켓이 커지고 평형 혼합이 늘어난다 (허용 범위 1~10)", "maximum": 10, "minimum": 1, "title": "Pyeong Band", "type": "integer" }, "pyeong_supply": { "anyOf": [ { "maximum": 200, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "분양평(사용자가 말하는 '34평') 필터 — ±3평 창으로 거른다. **좁힐수록 바스켓이 얇아져** 고정 바스켓의 이점이 사라지니 응답의 바스켓 단지 수를 반드시 확인하라 (허용 범위 1~200)", "title": "Pyeong Supply" }, "region": { "description": "시군구명 (예: 용산구, 성동구). **여러 시도에 같은 이름이 있는 시군구**(중구·동구·서구·남구·북구·강서구)는 시도를 함께 주라(예: '서울 중구') — 안 주면 합치지 않고 후보를 실토하며 거절한다", "title": "Region", "type": "string" }, "window_months": { "default": 6, "description": "비교 창 하나의 길이(개월). 최근 N개월 vs 그 직전 N개월을 비교한다 (허용 범위 1~12)", "maximum": 12, "minimum": 1, "title": "Window Months", "type": "integer" } }, "required": [ "region" ], "title": "realty_region_trend_basketArguments", "type": "object" }, "name": "realty_region_trend_basket", "outputSchema": null }, { "description": "이 아파트를 벽·배관 기준으로 고칠 수 있는지 판단할 재료를 준다.\n\n **\"이 아파트를 내가 원하는 대로 고칠 수 있나\"**에 답하는 자리 — 두 축이다:\n **①벽**(내력벽을 헐어 방을 틀 수 있나) **②배관**(층상/층하 — 욕실·주방을 옮길 수 있나).\n\n \"벽식구조면 리모델링 못 하죠?\"·\"내력벽 철거 2016년에 허용되지 않았나요?\"·\"욕실 위치\n 바꿀 수 있나요?\"·\"인테리어 하는데 구청 가야 하나요?\"가 이 도구의 질문이다.\n **모델이 학습 데이터로 자신 있게 틀리는 자리**라 조문 원문을 값으로 준다 —\n 통설 둘(\"2016년 유예로 내력벽 철거 허용\", \"벽식=개인 리모델링 불가\")이 **둘 다 틀렸고**,\n 이 도구가 그것을 조문으로 깬다.\n\n 답은 두 층으로 온다. **①규범 층은 커버리지 100%**(근거=법령 원문·시행일)이고 단지를\n 몰라도 답이 된다 — 전문은 realty_policy_rules(topic='unit_alteration_rules').\n **②단지 층은 분양 모집공고 원문 인용**이며 커버리지가 희박하다: 아카이브 2,851건 중\n 쪽 원문 보유 2,294건, 그중 구조형식 언급 258건(11.2%)·배관방식 선언 221건·가변성 등급\n 34건뿐이고 **2020~2026 분양 한정이라 기존(준공된) 아파트는 0% 덮는다.**\n 커버리지는 매 응답에 실린다 — 그대로 사용자에게 전하라.\n\n **없으면 unknown이고, unknown은 '아니다'가 아니다.** 준공연도로 구조형식을 추정하지\n 마라(모집단 비율을 개별 사실로 둔갑시키는 것이다). 값이 없을 때는 막다르게 두지 말고\n 응답의 how_to_find_out(관리사무소 설계도서·구청 행위허가 상담 등 실제로 확인 가능한\n 경로)을 안내하라 — 그것이 이 도구의 값어치다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "axis": { "default": "both", "description": "both=벽+배관(기본), wall=내력벽·평면 변경만, plumbing=상하수도·욕실 이동만", "enum": [ "both", "wall", "plumbing" ], "title": "Axis", "type": "string" }, "complex_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지·공고명 일부 (공백 무관 매칭). **없어도 된다** — 비우면 법령 규범 층만 답한다(그것만으로도 통설 오답을 막는다)", "title": "Complex Name" }, "house_manage_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "공고 관리번호 (realty_presale·realty_notice_facts 응답의 house_manage_no)", "title": "House Manage No" } }, "title": "realty_remodel_feasibilityArguments", "type": "object" }, "name": "realty_remodel_feasibility", "outputSchema": null }, { "description": "[유료] 시군구별 월세 수익률·평균 매매가·평균 월세를 조회한다. 수익형 투자 스크리닝용.\n\n 기본 응답은 최신 완결월 1개월치를 수익률 내림차순으로 자른 것이다 — 전체 기간·전체\n 지역이 아니다(truncated 필드 확인). 특정 월은 year_month로 조회하라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "limit": { "default": 30, "description": "반환 행 수 — 수익률 내림차순 상위 N (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "pyeong_supply": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "분양평수(예: 25·34) — 서버가 ×0.745로 전용평으로 환산해 **전용평 구간**(S·M·L·XL·XXL)을 고른다(분양 25평→S, 34평→M)", "title": "Pyeong Supply" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도(예: 서울특별시) 또는 시군구(예: 강남구). 세종은 시 단위로 나온다", "title": "Region" }, "year_month": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "YYYYMM (기본 최신 완결월)", "title": "Year Month" } }, "title": "realty_rental_yieldArguments", "type": "object" }, "name": "realty_rental_yield", "outputSchema": null }, { "description": "법원경매 물건을 지역·종류·감정가·유찰횟수로 필터링해 조회한다.\n\n **이 축의 자리** — 조건을 **값으로 아는** 검색이 이 도구다. 사용자의 자연어 한 줄밖에\n 없으면 `search`가 먼저다(질의에서 조건을 뽑아 준다). 개별 사건의 상세는 여기가 아니라\n `realty_get_auction_case`(사건번호+법원명)·`fetch`(search가 준 id)다.\n\n **이 도구는 법원경매(민사집행법·각급 법원)만 조회한다 — 공매는 여기가 아니다.**\n 공매(국세징수법·국유재산법 등, 한국자산관리공사 온비드)는 **이 서버에 따로 있다**:\n 물건은 `realty_search_onbid`, 낙찰가율은 `realty_onbid_sale_rate`\n (2026-08-22 적재 — 물건 25,669개 · 최근 3개월 개찰 결과 113,673행).\n 여기서 안 나온다고 \"그런 물건 없다\"고 답하지 말고 **공매 도구로 다시 걸어라.**\n 구분 신호는 번호 형식이다 — 법원 사건번호는 `2025타경1234`, 공매 물건관리번호는\n `2026-0600-031235`(하이픈 세 토막·'타경' 없음)다.\n **두 원장을 합쳐 세거나 낙찰가율을 섞어 평균내지 마라** — 근거법·주관기관·권리 인수\n 규칙·저감 방식이 다르다.\n\n 감정가(min_price_10k/max_price_10k)는 **만원** 단위다 — 5억은 50000.\n 유찰이 많을수록 최저입찰가가 감정가 대비 낮아진다(`min_bid_rate`가 그 비율).\n\n ⚠️ **이 목록에는 매각기일이 이미 지난 행이 섞여 있다**(백엔드가 기일로 걸러주지\n 않는다 — 인천 아파트 3억 이하 실측 48건 중 43건이 지난 기일). 지난 기일 행에는\n `past_auction_note`가 붙고 응답의 `past_auction_count`가 그 페이지의 건수다.\n \"지금 살 수 있어?\"류 질문이면 `exclude_past=true`로 걸러라 — 지난 기일 물건은\n 매각·취하됐거나 다음 기일이 아직 반영되지 않은 것이라 현재 매물로 인용하면 오답이다.\n\n ⚠️ **`sort=date_asc`(기일 임박 순)는 지난 기일이 목록 앞쪽을 통째로 차지한다**\n (2026-08-21 실측 94,279건 중 앞 57,241건=60.7%). `exclude_past=true`면 서버가 그\n 접두를 건너뛰고 읽으므로 첫 호출부터 실물이 온다 — 건너뛴 행 수는\n `meta.past_prefix_skipped`, 실제로 읽은 자리는 응답의 `offset`(요청값은\n `requested_offset`)이다. **items가 비어도 `has_more`가 true면 '조건에 맞는 물건이\n 없다'는 뜻이 아니다** — 그 창이 전부 지난 기일이었을 뿐이니 `next_offset`으로\n 이어서 호출하라. note가 둘 중 어느 쪽인지 매번 말한다.\n\n ⚠️ **최저입찰가는 출처를 반드시 확인해라** — 건별 `min_bid_source`가 붙는다.\n · `court_schedule` — 법원 기일표 정본이다. 그대로 믿어도 된다(활성의 28.8%).\n · `item_list` — 물건목록값이다. 유찰이 있으면 **저감 한 단계만큼 낡아 실제보다\n 높을 수 있다**(2026-08-04 실측: 유찰 1회 이상에서 정본과 3%만 일치, 25~43% 과대).\n 이 경우 `min_bid_note`가 함께 온다. 사용자에게 단정적으로 말하지 말고 그 한계를\n 전해라. 저감률로 역산해 추정하지 마라 — 재감정으로 최저가가 **오르는** 사건도 있다.\n 응답의 `min_bid_stale_risk_count`가 그 페이지에서 낡았을 수 있는 건수다.\n 회차별 정확한 가격은 realty_auction_history의 court_schedule에 있다.\n\n 목록에는 요약 필드만 담긴다. 특정 물건의 전체 정보(면적·법원 계·주소 상세 등)는\n 돌아온 id로 realty_get_auction_case를 호출해 받아라.\n \"유찰 많이 돼 싸진 물건 찾아줘\"류 발굴 질문은 realty_auction_alerts가 지름길이다\n (min_fail_count로 여기서 걸러도 같은 축 — 결과를 합쳐 세지 마라).\n ", "inputSchema": { "additionalProperties": false, "properties": { "exclude_past": { "default": false, "description": "매각기일이 이미 지난 행 제외 여부. 기본 False(전체 반환 — 지난 기일 행에는 past_auction_note 플래그가 붙는다). '지금 입찰 가능한 물건' 질문이면 True로 호출하라 — 오늘 이후 기일(기일 미정 포함)만 남는다.", "title": "Exclude Past", "type": "boolean" }, "limit": { "default": 20, "description": "반환 개수 (최대 50) (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "max_price_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "최대 감정가, **만원** 단위", "title": "Max Price 10K" }, "min_bid_count": { "anyOf": [ { "maximum": 100, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "최소 유찰 횟수. 유찰이 쌓일수록 최저입찰가가 내려간다. (허용 범위 0~100)", "title": "Min Bid Count" }, "min_price_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "최소 감정가, **만원** 단위 (5억이면 50000)", "title": "Min Price 10K" }, "offset": { "default": 0, "description": "페이지 오프셋. has_more가 true면 next_offset으로 다시 호출하라.", "minimum": 0, "title": "Offset", "type": "integer" }, "sido": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도. '서울'처럼 줄여 써도 되고 '서울특별시'도 된다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.", "title": "Sido" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 (예: 강남구, 성남시) ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.", "title": "Sigungu" }, "sort": { "default": "date_desc", "description": "정렬 기준", "enum": [ "date_desc", "date_asc", "price_asc", "price_desc", "bid_count_desc" ], "title": "Sort", "type": "string" }, "usage_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. 부분일치라 '빌라'는 '연립주택,다세대,빌라' 행에 걸린다. **'토지'는 이 원장에 없는 이름이다** — 대지·임야·전답으로 나뉘어 있어 그대로 넣으면 서버가 사유와 유효값 목록을 들어 거절한다. 비우면 전 종류", "title": "Usage Name" } }, "title": "realty_search_auctionsArguments", "type": "object" }, "name": "realty_search_auctions", "outputSchema": null }, { "description": "아파트 단지를 이름·지역으로 검색하고 **평형별 실거래 시세**를 함께 돌려준다.\n \"○○아파트 34평 얼마야\"류 단지 질문의 1차 도구다. query·region 중 하나는 필수.\n\n **이 축의 자리(시세 도구 3종 중)**: 단지가 특정되면 **이게 기본**이다. 지역 평균\n 도구들(realty_region_price_stats·realty_area_price_bands)은 단지 간 편차를 뭉개므로\n 단지 질문에 쓰지 마라 — 같은 동 같은 평형에서 단지 평균이 24% 벌어진 실측이 있다\n (동 평균 3.96억으로 답했다가 대장 단지 호가와 1억 어긋난 사고). 반대로 지역 전체의\n 수준·추이 질문이면 저 둘로 가라.\n\n prices_by_area가 평형별 시세다 — pyeong_exclusive(전용평)와 pyeong_supply_est(분양평\n 어림)를 병기하므로, 사용자가 말한 \"34평\"(보통 분양평)은 pyeong_supply_est로 맞춰 답하라.\n 단지 수준 avg_price는 전 평형이 섞인 평균이니 평수 질문에 쓰지 말 것.\n 층별(저층/고층/RR) 시세·프리미엄 질문은 realty_complex_pyeong_price로 —\n 거기 층 밴드별 집계(price_by_floor_band)가 있다(이 도구엔 층 축이 없다).\n 응답의 complex_key는 realty_complex_rent_by_pyeong·[유료] 단지 도구들에 그대로 넣는 키다.\n\n **단지끼리 급을 견줄 때는 price_per_exclusive_m2(전용 ㎡당 실거래 단가)를 축으로 쓰라**\n — 행마다 실리고, **sort='unit_price'로 그 순서대로 받을 수 있다**(백엔드에 없는 축이라\n 이 응답에 실린 행만 다시 세운 것이다 — sort_applied.scope 참조). 행의 scores\n (composite·convenience)는 걸어서 닿는 **시설의 개수**이지 선호도가 아니다(직선거리만\n 세어 간선도로 횡단 같은 보행 장벽을 못 본다) — 그 점수로 단지에 줄을 세워 추천하지\n 마라. 입지 점수는 **미검증 참고값**이다(scores_meaning.status — transit 90점 이상 86.7%).\n \"역세권이야?\"는 행의 nearest_station·subway_distance_m(직선 m)으로 답하라.\n 응답의 scores_meaning·unit_price_axis에 근거가 있다.\n\n **견줄 때는 조건을 맞춰라 — 두 인자가 그 수단이다.** ㎡단가는 평형이 작을수록,\n 준공이 새로울수록 높다(⚠️ **전국 중앙값 이야기다** — 서울은 구축이 더 비싼 동이 28.0%다).\n `area_band_m2=59`면 각 단지의 대표 단가가 **전용 59±3㎡ 행만으로** 다시 계산되고,\n `construction_year_band=2018`이면 2013~2023년 준공 단지가 비교군으로 표시된다\n (in_year_band). 연식이 더 지배적이다 — 법정동 안 ρ 중앙값이 연식 +0.7298 대\n 평형 +0.2245라, 연식이 섞인 ㎡단가 순위는 **사실상 신축 순**이 되기 쉽다. 두 인자 모두\n **가격 계산·비교군 표시에만** 걸리고 단지 검색을 거르지 않는다(못 잰 단지는 목록에\n 남고 값이 null + 사유다). 몇 개를 쟀고 몇 개를 못 쟀는지는 응답의 coverage가 적는다.\n\n **0.84.0부터 scores.composite는 school + convenience다**(transit을 뺐다 — 전국 실측에서\n 고유값의 86.8%가 90~100에 몰려 변별력이 없고, 합산에 넣으면 법정동 격자 ρ 중앙값이\n 0.0825→0.0654로 떨어졌다). 백엔드 원장의 옛 가중평균 값은 **composite_legacy로 병기**하니 이전 응답과\n 견줄 때 그쪽을 쓰라 — 두 값은 척도가 다르다(가중평균 대 단순합).\n\n **세대수 조건은 min_households·max_households가 받는다**(2026-09-07 외부 신고\n T-2026W34-351): \"500세대 이상\", \"1,000세대 넘는 대단지\", \"300세대 이하 소규모\"는\n 이 인자로 넣어라 — 종전엔 전달할 자리가 없어 그 질문이 통째로 실패했다. 행마다\n households가 실린다. **households가 null인 단지는 세대수가 원장에 없는 것이지\n 작은 단지가 아니다** — 그래서 세대수 조건을 걸면 그 단지들은 크든 작든 제외되고,\n 몇 건이 그렇게 빠졌는지는 meta.households_scope가 적는다.\n\n **'3억 이하 오래된 아파트'는 max_trade_price_10k·max_construction_year·sort='year_asc'가\n 받는다**(2026-10-01, PlayMCP 외부 질문 T-2026W40-87): 예) region='노원구',\n max_trade_price_10k=30000, max_construction_year=1996, sort='year_asc', period_months=12.\n 거래가 상한은 평균가가 아니라 **창 안 최저 실거래가**로 판정한다(행의 min_trade_price).\n '재개발 호재'는 이 도구 축이 아니다 — 정비사업 구역은 realty_redevelopment(전체 표면).\n ", "inputSchema": { "additionalProperties": false, "properties": { "area_band_m2": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 500, "type": "number" }, { "type": "null" } ], "default": null, "description": "**평형을 고정해 단지끼리 견줄 때** 넣는다(전용면적 ㎡ — 분양면적이 아니다). 예: '59㎡대로 맞춰서 비교' → 59. 전용 ±3.0㎡ 근사 매칭이고(원장 면적이 59.224·59.9처럼 단지마다 달라 정확 일치는 대부분 0건이다), 각 단지의 price_per_exclusive_m2가 **그 밴드 안 평형 행만으로 다시 계산된다**. ⚠️ 이 인자는 **가격 계산에만** 걸리고 단지 검색을 거르지 않는다 — 밴드에 거래가 없는 단지도 목록에 그대로 실리고 그 값은 null + 사유다. 밴드에 든 행에는 in_area_band=true가 붙는다 (허용 범위 0 초과~500)", "title": "Area Band M2" }, "construction_year_band": { "anyOf": [ { "maximum": 2100, "minimum": 1900, "type": "integer" }, { "type": "null" } ], "default": null, "description": "**연식을 맞춰 단지끼리 견줄 때** 넣는 기준 준공연도. 예: 2018 → 2013~2023년 준공(±5년, 폭 10년)이 비교군이 된다. **연식은 ㎡단가를 가장 강하게 끄는 축이다** — 법정동 안에서 준공연도와 ㎡단가의 순위상관 ρ 중앙값이 +0.7298로 평형(+0.2245)·입지점수(+0.0707)보다 지배적이라, 연식이 섞인 비교는 사실상 '신축 순'이 되기 쉽다(⚠️ 방향은 지역마다 반대일 수 있다 — **서울은 ρ +0.3833이고 구축이 더 비싼 동이 28.0%, 세종은 36.8%**다. 재건축 기대가 가격에 들어간 U자 구간이다). ⚠️ 이 인자도 검색을 거르지 않는다 — 밴드 밖 단지는 목록에 남고 행마다 in_year_band로 갈라 적힌다(준공연도가 원장에 없으면 null: **판정 불가이지 구식이 아니다**). area_band_m2와 함께 주면 둘 다 걸린다 (허용 범위 1900~2100)", "title": "Construction Year Band" }, "limit": { "default": 5, "description": "단지 수 — 평형별 시세가 포함돼 응답이 무겁다. 최대 20이고 더 받으려면 limit을 올리지 말고 **page를 넘겨** 이어 받아라(응답의 total이 전체 건수다 — 다만 서버가 지역 토큰을 뒤에서 검증한 경로에서는 total이 null이고 meta.total_unavailable이 사유를 적는다. 그리고 **sort='unit_price'로 받은 응답이 잘렸으면 page로 이어받을 수 없다** — sort_applied.page_continuation이 그 사실을 값으로 싣는다). 요청분을 다 실으면 응답이 크기 상한을 넘는 경우 **실제 반환 수를 줄이고 meta.size_capped**에 총계·이어받는 호출을 값으로 싣는다 — 조용히 자르지 않는다 (허용 범위 1~20)", "maximum": 20, "minimum": 1, "title": "Limit", "type": "integer" }, "max_construction_year": { "anyOf": [ { "maximum": 2100, "minimum": 1900, "type": "integer" }, { "type": "null" } ], "default": null, "description": "**준공연도 상한** — '오래된 아파트'·'30년 넘은 단지'를 거를 때(예: 준공 30년 이상 = 올해-30). **이 인자는 검색을 거른다**(construction_year_band는 표시만 한다). 준공연도가 원장에 없는 단지는 판정 불가라 빠지고 그 건수를 meta.price_year_scope에 싣는다. 연한은 재건축 **자격의 하나**일 뿐 사업성·구역 지정·'호재'가 아니다 (허용 범위 1900~2100)", "title": "Max Construction Year" }, "max_households": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "세대수 상한 — '300세대 이하 소규모'처럼 위쪽을 자를 때. min_households와 함께 주면 구간이 된다", "title": "Max Households" }, "max_trade_price_10k": { "anyOf": [ { "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "**거래가 상한(만원)** — '3억 이하로 살 수 있는 단지'는 30000. 집계 창 안에 이 금액 **이하 실거래가 1건 이상** 있었던 단지만 남긴다(평균가가 아니다 — 소형 평형만 3억대인 단지도 잡힌다; 행의 min_trade_price가 그 최저 거래가). **이 인자는 검색을 거른다.** 창 안 거래가 없는 단지는 판정 불가라 빠지고 그 건수를 meta.price_year_scope에 싣는다. '지금 3억 매물'이 아니라 '창 안에 3억 이하로 팔린 적이 있다'다 — 호가·매물은 없다. 최근 시세로 보려면 period_months=12를 함께 줘라", "title": "Max Trade Price 10K" }, "min_households": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "**세대수 하한** — '500세대 이상', '대단지'를 여기에 넣는다(예: 500). 세대수가 원장에 없는 단지는 이 조건에서 제외되고 그 건수를 meta.households_scope로 실토한다(미상 ≠ 소규모)", "title": "Min Households" }, "page": { "default": 0, "description": "0부터 시작하는 페이지 번호", "minimum": 0, "title": "Page", "type": "integer" }, "period_months": { "anyOf": [ { "maximum": 24, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "가격 집계 기간(개월). 비우면 2024-01 이후 전체 (허용 범위 1~24)", "title": "Period Months" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명 일부 (예: 래미안, 마포래미안푸르지오)", "title": "Query" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구명 (예: 마포구, 서울특별시 마포구). **법정동까지 넣어도 된다**(예: '강남구 대치동') — 백엔드는 동으로 거르고 나머지 토큰은 서버가 검증해 note에 적는다. 종전 설명이 시군구만 적어 **이 도구가 못 하는 일로 읽혔고**, 동 단위를 원한 모델이 비아파트 도구로 새던 자리다(2026-08-23 PlayMCP QA)", "title": "Region" }, "sort": { "default": "name", "description": "name=이름순(거래량 많은 순), price=평균가 **높은** 순(전 평형 혼합 평균이라 큰 평형이 많은 단지가 앞에 온다), year=준공연도 **최신순(내림차순 — 신축이 먼저)**, **year_asc=준공연도 오래된 순(오름차순 — 구축이 먼저, 연도 미상은 맨 뒤)** — '오래된 아파트'·'재건축 연한 단지'를 찾을 때는 이것이다, **unit_price=전용 ㎡당 실거래 단가 높은 순** — 단지 간 급·선호를 견주는 축이다(못 잰 단지는 맨 뒤). ⚠️ unit_price는 백엔드에 없는 축이라 **이 응답에 실린 행만** 다시 세운 것이다 — total이 이 페이지보다 크면 '이 지역 ㎡단가 상위 N'으로 인용하지 마라(sort_applied.scope='page_only'가 그 사실을 값으로 싣는다). ⚠️ '오래된 단지'·'재건축 후보'에 sort='year'를 쓰면 정확히 반대 결과가 온다 — sort='year_asc'를 써라. 준공연도는 사업성(용적률·안전진단·구역 지정) 판정이 아니다(정비사업 축은 realty_reconstruction·realty_redevelopment)", "enum": [ "name", "price", "year", "year_asc", "unit_price" ], "title": "Sort", "type": "string" } }, "title": "realty_search_complexesArguments", "type": "object" }, "name": "realty_search_complexes", "outputSchema": null }, { "description": "한국자산관리공사 **온비드 공매** 물건을 지역·용도·재산구분·감정가로 조회한다.\n\n 법원경매가 아니다. 공매는 국세징수법(압류재산)·국유재산법·공유재산법에 따른 처분이고\n 주관은 캠코다 — 아래 '이 축의 자리'와 응답의 `not_court_auction`을 반드시 함께 전하라.\n\n **이 축의 자리** — 공매 축은 도구가 둘뿐이다. 물건을 찾고 회차별 최저가 일정을 보는\n 것이 이 도구, \"보통 감정가의 몇 %에 낙찰되나\"는 realty_onbid_sale_rate다.\n **법원경매를 물었다면 여기가 아니라 realty_search_auctions**이고, 사건번호에 '타경'이\n 들어 있으면 그쪽이다. 사용자가 그냥 \"경매\"라고만 했으면 **어느 쪽인지 되물어라** —\n 둘을 합쳐 세거나 섞어 평균내면 그 답은 틀린다.\n\n **행이 물건이 아니다.** 원장의 한 행은 물건이 아니라 **공매조건(회차)**이다 — 한 물건이\n 1~10회차 입찰 일정을 미리 갖고 회차마다 최저입찰가가 내려간다(실측: 물건당 3.51행).\n 이 도구는 **물건 단위로 접어서** 돌려준다: `rounds_total`(전체 회차)·`rounds_remaining`\n (마감 전 회차)·`next_round`(다음 입찰 회차의 기간과 최저입찰가)·`last_round`(마지막\n 예정 회차 = 더 안 팔리면 도달하는 바닥값). 응답의 `condition_rows`가 접기 전 행 수다 —\n **행 수를 물건 수로 인용하지 마라**(71% 과대).\n\n ⚠️ **최저입찰가 '비공개'** — 원문이 숫자가 아니라 '비공개'인 회차가 있다(529행).\n 그 회차의 금액은 **null**이지 0이 아니다. `min_bid_undisclosed_rounds`가 그 수이고,\n 평균·최저값 계산에서 빠져 있다.\n\n ⚠️ **압류재산 주소는 번지가 가려진다** — 결과 원장 기준 압류재산의 61.7%가\n '강원특별자치도 춘천시 ***********' 꼴이다. 물건 목록 쪽은 번지까지 나오지만\n (실측 마스킹 0건), 같은 물건을 결과에서 다시 찾을 때는 시군구까지만 유효하다.\n\n ⚠️ **시도 표기를 우리가 손봤다** — 원천에 '전남광주통합특별시' 같은 통합 표기가 7,757행\n 있어 시군구로 분해해 `sido`에 넣었다. 손보기 전 원문은 `sido_source`, 분해 근거는\n `sido_basis`('as_is' = 원문 그대로 / 'split_by_sgg' = 시군구로 갈랐다)에 있다.\n\n 권리분석·감정평가서·공고 원문은 이 원장에 없다. 공매의 권리 인수 규칙은 법원경매와\n 다르므로 realty_policy_rules(민사집행법 기준)의 답을 여기에 옮기지 마라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "cltr_mng_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "물건관리번호(예 '2026-0600-031235')로 한 물건만. **이것이 상세 조회다** — 이 원장은 행이 물건이 아니라 회차라, 한 물건의 상세는 곧 그 물건의 회차 전부이고 그때 `rounds`에 회차별 최저입찰가 일정이 실린다. 법원 사건번호(2025타경…)는 여기 넣지 마라.", "title": "Cltr Mng No" }, "limit": { "default": 20, "description": "반환 **물건** 수 (최대 50) (허용 범위 1~50)", "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" }, "max_price_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "최대 감정가, **만원** 단위", "title": "Max Price 10K" }, "min_price_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "최소 감정가, **만원** 단위 (5억이면 50000)", "title": "Min Price 10K" }, "offset": { "default": 0, "description": "페이지 오프셋. has_more면 next_offset으로 다시 호출하라.", "minimum": 0, "title": "Offset", "type": "integer" }, "open_only": { "default": true, "description": "입찰 마감이 아직 안 지난 회차가 남은 물건만. 기본 True — 원장에는 이미 끝난 회차 행이 함께 들어 있어서(물건 25,669개 중 마감 전 회차가 남은 것은 10,327개), 끄면 지금 입찰할 수 없는 물건이 섞인다. cltr_mng_no로 특정 물건을 볼 때는 무시된다.", "title": "Open Only", "type": "boolean" }, "property_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "재산구분 — 공매에서 가장 중요한 축이다. 압류재산(체납처분·국세징수법)·국유재산·공유재산·기타일반재산·수탁재산·불용품. **성격이 완전히 다르다**: 압류재산은 체납자 재산의 강제매각이고 나머지는 공공이 가진 재산의 처분·임대다.", "title": "Property Type" }, "sido": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도. '서울'처럼 줄여 써도 되고 '서울특별시'도 된다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.", "title": "Sido" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 (예: 춘천시, 강남구). 부분일치다 — '고양시'는 '고양시 덕양구'도 잡는다. ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.", "title": "Sigungu" }, "sort": { "default": "deadline", "description": "deadline=마감 임박순 · price_asc/desc=감정가순 · discount=감정가 대비 최저가가 낮은 순(저감 많이 된 순)", "enum": [ "deadline", "price_asc", "price_desc", "discount" ], "title": "Sort", "type": "string" }, "usage_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "용도 부분일치(대·중·소 3단을 한꺼번에 건다). 중분류 5종은 토지·주거용건물·상가용및업무용건물·용도복합용건물·산업용및기타특수용건물이고 소분류는 91종이다. **'아파트'는 소분류라 중분류로는 안 걸린다** — 넓게 보려면 '주거용건물'. 원장 값 예: 주거용건물·아파트·다세대주택·대지·상가주택. 경매 어휘 '전답'은 여기 없다(전·답으로 갈렸다) — 없는 이름은 거절하며 쓸 수 있는 값을 준다.", "title": "Usage Name" } }, "title": "realty_search_onbidArguments", "type": "object" }, "name": "realty_search_onbid", "outputSchema": null }, { "description": "소액임차인 최우선변제의 **금액표를 고르는 도구**다 — 판정기가 아니다.\n\n \"최우선변제금 얼마까지 나와요?\"에 현행표를 읊으면 틀린다. 적용되는 표는 **최선순위\n 담보물권을 취득한 날이 속한 시행령 판**이고(부칙 경과조치), 2008-08-21 이후 7개 판이\n 서로 다르다. 2015년 근저당이 붙은 서울 주택이면 지금 경매라도 2014-01-01 판\n (9,500만원 이하 / 3,200만원)으로 잰다 — 현행표(1억6,500 / 5,500)를 쓰면 소액임차인이\n 아닌 사람을 소액임차인이라 답하게 된다.\n\n 경계를 지켜라: ① **범위에 든다 ≠ 받는다.** 경매개시결정등기 전 대항요건·배당요구종기까지\n 배당요구·주택가액 1/2 한도·다수 임차인 안분·임차권등기 후 임차인 제외가 전부 남아 있다\n (응답 `not_a_conclusion`). ② `security_right_date`가 없으면 **표를 고르지 않는다** —\n 현행표를 기본값으로 주는 순간 이 도구가 막으려던 오답이 된다. **그렇다고 날짜를\n 지어내지도 마라**(2026-08-22 제보: 사용자가 연도만 줬는데 클라이언트가 `2019-01-01`을\n 생성했다). 연도만 안다면 `security_right_year`에 그 연도만 넣어라 — 그 해 전체가 한\n 판 안이면 서버가 날짜 없이 답하며 **\"연도로 판을 골랐다\"를 응답에 명시**하고, 판이\n 갈리는 해면 표를 고르지 않고 등기 접수일을 되묻는다. ③ 시 안에서 동에 따라\n 과밀억제권역이 갈리는 곳(인천·남양주·시흥)은 구간을 **안 고르고** 별표 원문을 낸다.\n ④ **주택만**이다 — 상가는 상가건물임대차보호법으로 금액표가 다르다. ⑤ 배당액 계산·\n 말소기준권리 판정·인수 여부는 하지 않는다. 규칙 전체와 갈림길은\n realty_policy_rules(topic=auction_rights)가 진실원이다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "deposit_10k": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "임차보증금(**만원**). 주면 그 판의 '소액임차인 범위' 상한과 대조해 **범위에 드는지의 산수**만 한다 — 최우선변제를 받는다는 판정이 아니다", "title": "Deposit 10K" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "물건 소재지. '서울', '경기도 부천시', '부산광역시 기장군'처럼 시도를 붙이면 확실하다. 비우면 그 판의 **전 구간 표**를 그대로 준다", "title": "Region" }, "security_right_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "**최선순위 담보물권(근저당 등)의 설정일** YYYY-MM-DD. 금액표를 고르는 기준일이다 — '오늘'도 '임대차계약일'도 아니다(각 개정 시행령 부칙 경과조치: '이 영 시행 전에 임차주택에 대하여 담보물권을 취득한 자에 대해서는 종전의 규정에 따른다'). 등기부 을구에서 확인한다. **모르면 비워 두라 — 서버가 현행표를 답인 척 주지 않는다**. ⚠️ **연도만 아는 경우 날짜를 지어내지 마라** — '2019년'만 들었으면 '2019-01-01'을 만들지 말고 security_right_year=2019를 쓰라. 그 해 전체가 한 시행령 판 안이면 서버가 날짜 없이 답하고, 판이 갈리는 해면 월·일을 되묻는다", "title": "Security Right Date" }, "security_right_year": { "anyOf": [ { "maximum": 2200, "minimum": 1900, "type": "integer" }, { "type": "null" } ], "default": null, "description": "**최선순위 담보물권 설정 '연도'만** 알 때 쓴다(예: 2019). 사용자가 연도만 말했을 때 security_right_date에 임의의 날짜를 지어 넣는 대신 여기에 연도를 그대로 넣어라 — 그 해 전체가 한 시행령 판 안에 있으면 월·일 없이도 표가 정해지고(응답이 그 근거를 밝힌다), 판이 갈리는 해면 표를 고르지 않고 등기 접수일을 되묻는다 (허용 범위 1900~2200)", "title": "Security Right Year" } }, "title": "realty_small_deposit_checkArguments", "type": "object" }, "name": "realty_small_deposit_check", "outputSchema": null }, { "description": "청약 경쟁률과 **실제 당첨 가점 커트라인**을 낸다 — \"나 가점 52점인데 당첨될까?\"의 정량 근거.\n 가점 자체를 모르는 사용자는 realty_subscription_score(무주택·부양가족·가입기간 선언 →\n 배점표 적용)로 먼저 점수를 만들어 my_score로 넘겨라.\n\n **비어 있으면 왜 비었는지부터 읽어라(2026-08-20 축 신설).** 이 축의 원천은 주 1회 전량 수집\n 이라 \"아직 공표가 안 됐다\"와 \"공표는 됐는데 우리가 아직 안 걷었다\"가 똑같이 빈 배열로\n 보인다 — 실측(공고 2026000323)에서 청약홈엔 1순위 경쟁률 4.33·12.90·15.55가 이미\n 공표됐는데 우리 응답은 by_house_type=[]였다. `freshness_verdict.verdict`가 그 둘을\n 가른다(아래 큰따옴표는 **필드가 아니라 그 필드의 값**이다): \"not_yet_published\"(접수가\n 안 끝났다 — 없는 게 정상) · \"not_yet_collected\"(**우리 미수집이다. 절대 '경쟁률이 없다'고\n 답하지 말고 check_url로 안내하라**) · \"unknown\"(못 가른다) · \"not_published\" ·\n \"collected\". 대조 재료인 접수 종료일은\n announcement.rcept_endde·freshness_verdict.apply_end에 있다.\n result_status의 뜻은 응답의 `result_status_legend`가 정본이다(`special_only`는 일반공급\n 결과가 아직인데 특별공급 신청현황만 온 상태 — '결과 없음'이 아니다).\n\n **없는 공고는 '미발표'가 아니다(2026-09-08, T-2026W37-81).** house_manage_no가 경쟁률 원장에도\n 분양 공고 원장에도 없으면 `error` 응답(`result` 값 \"not_found\")으로 거절하고 벤치마크를\n 내지 않는다 — 종전엔 어떤 번호를 넣어도 \"not_published\"+\"아직 발표되지 않았다\"가 나가\n 오타·가상 번호가 '접수 전 공고'로 둔갑했다. 원장 조회 자체가 실패하면(404 아닌 오류·\n 시간 초과) 그것도 \"not_published\"가 아니라 거절 응답이다 — 거절에는 정상 응답에 **없는**\n `error`·`result` 두 키가 붙고 그 값이 \"lookup_failed\"다.\n **여기서 백틱은 필드 이름이고 큰따옴표는 값이다** — \"lookup_failed\"·\"not_found\"라는\n 이름의 키는 어느 응답에도 없다(찾지 마라). 지역 벤치마크만 필요하면 house_manage_no\n 없이 region·sigungu로 부르라.\n\n **지역별 경쟁률의 분모는 추정하지 말고 `allocated_households_rank1_local`을 써라\n (2026-08-21 신설).** 공표 경쟁률은 (그 지역구분 신청 ÷ 배정 세대수)라 분모를 되돌릴 수\n 있고, 해당지역 1순위 행의 98.3%에서 그 분모가 정수 하나로 특정된다(전수 실측). 되찾지\n 못한 행은 그 값이 null이고 `allocated_households_basis.range`에 구간만 있다 —\n 그때는 세대수로 단정하지 마라. 공고 원문 비율로 만든 `regional_priority.\n estimated_allocation.est_*`는 **실측이 있는 행에서 쓰면 안 된다**(실측과 어긋나면\n `estimate_superseded`가 붙는다 — 실측 2026000323 084.9165A: 추정 47 vs 실측 78세대).\n\n 두 가지 경로를 자동으로 고른다:\n 1) 결과가 발표된 공고 → 그 단지의 주택형별 1순위 해당지역 경쟁률·당첨 최저/평균/최고 가점.\n 2) 아직 접수 전이라 결과가 없는 단지 → 같은 지역 최근 공고들의 실제 커트라인 분포\n (regional_benchmark). **다른 단지의 실적이다** — 질의 단지의 예상 커트라인이\n 아니라는 점을 반드시 함께 말하라. 분위수를 인용하기 전에\n distinct_complex_count·samples_by_complex를 먼저 보라 — 단지가 1~2곳이면\n 그건 지역 분포가 아니라 한 단지 안의 주택형 편차다\n (warning_sample_concentration이 붙는다).\n\n **시도 하나로 답하지 마라(2026-08-16 축 신설).** 아파트는 시군구·평형·시기·가격대로 갈린다 —\n 실측(서울 최근 2년): 은평 전용 59㎡ 커트라인 중앙 45점 vs 강남 59㎡ 74점(29점 차),\n 연도별 중앙값 2022년 50점 → 2025년 69점, 2025년 분기별 69/66.5/56/70.\n 그래서 \"내 가점으로 어디까지 되나\"류에는 breakdown='sigungu'(+ area_band, 예산이 있으면\n budget_max_10k)를, \"언제가 쌌나\"류에는 breakdown='quarter'|'year'를 써라.\n 사용자가 예산을 말했는데 budget_max_10k를 안 넣으면 **살 수 없는 단지가 섞인 답**이 나간다.\n\n 지어내지 말 것: 이 도구는 당첨 확률을 계산하지 않는다(가점 동점자 처리·특별공급 비율·\n 추첨제 물량은 데이터에 없다). 낼 수 있는 건 \"과거 커트라인 대비 내 점수의 위치\"까지다.\n 커트라인이 null인 칸은 0점이 아니라 당첨자 없음/가점제 미적용이다(score_status 참조).\n 분양가가 적정한지까지 물으면 realty_presale_vs_market을 이어서 쓰라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "area_band": { "anyOf": [ { "enum": [ "59㎡이하", "60~84㎡", "85㎡초과" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "전용면적대로 좁힌다. 같은 구 안에서도 평형이 바뀌면 커트라인이 움직인다(실측: 노원 59㎡ 58.5점 vs 60~84㎡ 59점, 동작은 반대로 84㎡ 62점·59㎡ 64점)", "title": "Area Band" }, "breakdown": { "anyOf": [ { "enum": [ "sigungu", "area_band", "quarter", "year" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "분포를 쪼갤 축. **시도 하나로 답하지 마라** — 서울 은평 전용 59㎡ 커트라인 중앙 45점, 강남 59㎡ 74점으로 같은 시도 안에서 29점이 갈린다. '어디까지 되나'류 질문에는 sigungu, '언제가 쌌나'는 quarter·year를 쓴다", "title": "Breakdown" }, "budget_max_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "예산 상한 — 분양 최고가(만원) 기준. 사용자가 '9억까지'라고 하면 90000. 가점만으로 답하면 살 수 없는 단지가 섞인다", "title": "Budget Max 10K" }, "budget_min_10k": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "예산 하한(만원)", "title": "Budget Min 10K" }, "house_manage_no": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "realty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확", "title": "House Manage No" }, "keyword": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "단지명·주소 부분일치 (예: '월계 중흥')", "title": "Keyword" }, "my_score": { "anyOf": [ { "maximum": 84, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "내 청약 가점(0~84점). 주면 실제 커트라인과 점수 차를 계산해 준다 (허용 범위 0~84)", "title": "My Score" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시도 (예: 서울, 경기, 세종)", "title": "Region" }, "sigungu": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "시군구 정확한 이름 (예: 노원구, 수원시). 벤치마크를 좁힐 때 쓴다 — 표본이 0이면 시도 단위로 넓혀라", "title": "Sigungu" }, "since_years": { "default": 3, "description": "지역 벤치마크에 쓸 최근 기간(년). 커트라인은 시장 사이클을 타므로 기본 3년 (허용 범위 1~6)", "maximum": 6, "minimum": 1, "title": "Since Years", "type": "integer" } }, "title": "realty_subscription_oddsArguments", "type": "object" }, "name": "realty_subscription_odds", "outputSchema": null }, { "description": "민영주택 일반공급 청약 가점(만점 84)을 배점표로 계산한다.\n\n 민영주택 일반공급 가점제 점수(만점 84)를 **선언된 값**에 배점표를 적용해 계산한다 —\n 무주택기간 32 + 부양가족 35 + 통장 가입기간 17. \"내 청약 가점 몇 점이야?\"의 자리다.\n\n 경계를 지켜라: ① 세 입력 전부 **선언**이다 — 기산점·부양가족 인정은 등본·혼인관계\n 사실판단이라 서버가 판정하지 않고, 응답 traps(오기입=부적격 당첨 취소 사유)를 반드시\n 함께 전하라. ② 산출 점수는 realty_subscription_odds의 my_score로 넘겨 당첨 커트라인과\n 비교하는 것이 다음 수다. ③ 배점표 원문·기산 규칙은\n realty_policy_rules(topic=subscription_account)가 진실원이다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "account_years": { "description": "청약통장 가입기간(년, 소수 허용 — 예: 0.4=약 5개월). 전환 통장은 종전 통장 최초 가입일 기준 (허용 범위 0~60)", "maximum": 60, "minimum": 0, "title": "Account Years", "type": "number" }, "dependents_count": { "description": "부양가족 수(본인 제외). 직계존속 3년 동거·30세 이상 미혼자녀 1년 동거 등 인정 요건은 사실판단 — 확정해 선언한다 (허용 범위 0~20)", "maximum": 20, "minimum": 0, "title": "Dependents Count", "type": "integer" }, "is_homeowner": { "default": false, "description": "현재 유주택 여부 — True면 무주택기간 점수가 0점이 된다(소형·저가주택 등 무주택 간주 예외 해당 여부는 사실판단이라 호출자가 반영해 선언)", "title": "Is Homeowner", "type": "boolean" }, "no_house_years": { "description": "무주택기간(년, 소수 허용 — 예: 7.5). 기산점(만 30세 vs 혼인신고일, 유주택 이력 재기산)은 사실판단이라 호출자가 확정해 선언한다 — 응답의 traps를 함께 전하라 (허용 범위 0~60)", "maximum": 60, "minimum": 0, "title": "No House Years", "type": "number" }, "under30_unmarried": { "default": false, "description": "만 30세 미만 미혼 여부 — True면 무주택기간 점수가 0점이 된다(무주택기간 기산 전)", "title": "Under30 Unmarried", "type": "boolean" } }, "required": [ "no_house_years", "dependents_count", "account_years" ], "title": "realty_subscription_scoreArguments", "type": "object" }, "name": "realty_subscription_score", "outputSchema": null }, { "description": "시군구마다 앞으로 들어올 아파트와 늘어나는 세대를 같은 창으로 나눠 수급을 판정한다.\n\n \"○○ 공급 과잉이야?\", \"세종 대전 서울 경기 수급\", \"어디가 입주 대비 수요가 많아?\"류 질문의\n 자리 — 입주(청약홈 공고, 향후 N개월)를 연 단위로 환산해 최근 12개월 세대 증가로 나눈\n **비율**과 판정(과잉 >1.5 · 공급 우위 1~1.5 · 균형 0.5~1 · 부족 <0.5 · 세대 감소 중)을 주고,\n 같은 행에 교차검증 신호(순이동·매매 거래량 증감·전세/월세 증감과 월세 비중·1순위 경쟁률·\n 낙찰가율·미분양)를 싣는다. 판정과 신호가 엇갈리면 `conflict`에 적는다.\n\n **결론에 반드시 옮길 것**:\n · 입주는 **하한**이다 — 정비사업 조합원분이 공고에 없어 서울처럼 재건축 비중이 큰 곳은\n '부족'이 실제보다 과장된다. `meta.disclosures`를 그대로 전하라.\n · `permit_pipeline_households`(사업승인 기준)는 **입주에 더하지 마라**(이중계상).\n · `denominator_unstable=true`면 비율이 분모 탓에 흔들린다 — 배수를 단정하지 마라.\n · 판정 구간은 **우리 규칙**이지 공식 기준이 아니다. 호가 매물·비아파트는 데이터에 없다.\n · 지표마다 기준 시점이 다르다 — `meta.series_as_of`로 밝혀라.\n ", "inputSchema": { "additionalProperties": false, "properties": { "horizon_months": { "default": 24, "description": "입주를 **다음 달부터 몇 개월** 볼지(기본 24). 비율은 이 창을 연 단위로 환산해 12개월 세대 증가와 나눈다. 30개월을 넘기면 뒤쪽은 아직 공고 전이라 과소로 나온다 (허용 범위 6~60)", "maximum": 60, "minimum": 6, "title": "Horizon Months", "type": "integer" }, "region": { "description": "시도(예: '경기', '서울', '세종') 또는 시군구(예: '평택시', '서울 강남구'). 시도를 주면 소속 시군구 표 + 시도 합계, 시군구를 주면 그 행 + 시도 합계. 동명 시군구('중구')는 시도를 붙여라 — 안 붙이면 후보를 돌려준다. '광주'는 광역시·경기 광주시가 갈려 '광주광역시' 또는 '광주시'로 줘라", "title": "Region", "type": "string" } }, "required": [ "region" ], "title": "realty_supply_demand_balanceArguments", "type": "object" }, "name": "realty_supply_demand_balance", "outputSchema": null }, { "description": "아직 공고가 안 난 예정 공급을 사업계획승인 기준으로 본다.\n\n **아직 분양 공고가 안 난** 예정 공급을 사업계획승인 기준으로 본다 — \"지금 넣을까,\n 다음 걸 기다릴까\", \"이 동네 앞으로 입주 폭탄 있나\"류 질문의 자리.\n\n 청약홈(realty_presale·realty_move_in_supply)은 **모집공고일에야** 등록되므로 공고 전\n 물량이 구조적으로 안 보인다. 이 도구의 원천은 주택법 **사업계획승인**이라 공고 2~3년\n 전 단계가 잡힌다: 사업명·세대수·승인일·착공예정일·사용검사 예정일(=예상 입주).\n\n 재당첨 제한(분양가상한제 단지는 10년)·전매제한이 걸린 결정에서는 **대안 정보가 없으면\n \"지금 아니면 끝\"이라는 잘못된 압박**이 생긴다 — 청약 상담이면 이 도구를 함께 불러라.\n\n 두 축을 **더하지 마라**(이중계상) — 이미 공고가 난 단지도 승인 목록에 남아 있다.\n **이미 모집공고가 난 사업**은 블록 표기가 겹치면 행에 `announced_notice`가 붙는다 —\n 그 행은 '다음 분양'이 아니라 realty_presale·realty_subscription_odds의 영역이다.\n 표식이 없어도 기공고일 수 있다(meta.announced_cross_check 참조).\n 승인 전(지구계획·공모) 물량은 여기에도 없으니 이 값도 하한이다(`interpretation`).\n\n **층수 축(2026-08-20 신설 · 3차 수집=동별개요)**: `max_floor`는 사업계획승인 시점의\n **계획** 층수다(변경승인으로 움직인다 — 준공 확정층수가 아니다). 값이 비면\n **'저층'으로 읽지 말고 미상으로 읽어라.**\n 최저층·출처·부재사유는 **3차 수집이 붙은 회차에만** 함께 실린다 —\n `min_floor`가 있으면 그 사업에 **실제로 그 층수의 동이 있다**는 뜻이라 저층\n 선호(고소공포)·고층 조망 상담의 근거가 되고, `max_floor_source`가 있으면 그 층수를\n 어디서 가져왔는지, `max_floor_absent_reason`이 있으면 왜 비었는지를 말해 준다.\n **독스트링은 고정값이라 지금 원장 상태를 말할 수 없다** — 2026-08-20~09-07에는 이\n 안내만 먼저 나가고 필드를 만드는 백엔드 절반이 20일간 안 붙어 있었다(T-2026W33-68).\n 그러니 **이번 회차에 무엇이 실렸는지는 응답의 `meta.floor_axis`를 보라.** 그 문구는\n 응답을 보고 갈린다 — 거기서 \"없다\"고 하면 정말 없는 것이니 찾지 마라.\n `business_body`(사업주체·시공사)는 미준공 구간에서 **구조적으로 빈다** —\n 준공 후 등록되는 원장에만 있어 3차로도 안 메워진다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "from_ym": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "YYYYMM (기본 이번 달)", "title": "From Ym" }, "limit": { "default": 30, "description": "사업 목록 상한 (기본 30) (허용 범위 1~100)", "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" }, "months": { "anyOf": [ { "maximum": 120, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "from_ym부터 **몇 개월**을 볼지 — to_ym 대신 쓰는 간편 인자(예: 24). to_ym과 함께 주면 오류다(realty_move_in_supply와 같은 계약) (허용 범위 1~120)", "title": "Months" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "지역 — 시도·시군구·동 부분일치 (예: '세종', '세종특별자치시 합강동', '수원시'). ⚠️ 짝 도구 realty_move_in_supply의 region은 **시도 전용**이다 — 인자를 그대로 옮겨 부르지 마라", "title": "Region" }, "to_ym": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "YYYYMM (기본 from_ym+60개월)", "title": "To Ym" } }, "title": "realty_supply_pipelineArguments", "type": "object" }, "name": "realty_supply_pipeline", "outputSchema": null }, { "description": "답이 틀렸을 때 신고하거나(kind='결함'), **원문 질문을 넘겨 축을 확인받는다**(kind='질문기록').\n\n **결함**: 사용자가 \"그거 틀렸다\", \"이상하다\", \"숫자가 안 맞는다\"고 하면 **먼저 이 도구를\n 호출한 뒤** 정정 답변을 하라. 신고는 서버 운영자에게 전달되어 실제 수정에 쓰인다.\n 사용자가 지적하지 않았는데 추측으로 부르지는 말 것.\n\n **질문기록**: 사용자의 원문 질문을 그대로 넘기면 서버가 **그 자리에서 라우팅을 돌려준다**\n (응답의 `routing`) — 어느 축·어느 도구로 가야 하는지, 그 축의 라우팅 규칙, **우리 데이터\n 밖이면 그 사실과 대신 볼 곳**, 지역명이 모호하면 후보까지. 판정은 결정론이라 같은 질문이면\n 같은 답이 나오고, **못 고르면 `axis: null`과 사유를 준다**(추측으로 채우지 않는다).\n 직전 호출 기록과 대조해 **엉뚱한 축을 부르고 있으면 그것도 알려 준다** — 이건 모델이 적은\n 기억이 아니라 서버가 가진 호출 기록이라, 도구를 스무 번 부르며 헤매는 것을 앞에서 끊는다.\n\n 같은 호출이 기록도 한다: 이 서버는 클라이언트가 이미 도구 호출로 번역한 뒤를 보므로\n **사용자의 원문 질문을 볼 수 없고**, 우리가 무엇을 못 담고 있는지는 그 원문으로만 알 수\n 있다(질문은행·로드맵의 원천). **개인 식별 조합은 반드시 일반형으로 바꿔서** 넣는다.\n\n 두 종류가 한 도구인 이유: 무인증 공개 서버라 쓰기 표면을 하나로 묶어 상한을 함께 건다\n (CLAUDE.md 규칙 2). 시간당 상한도 공유한다.\n\n **이 도구는 일일 조회 한도(quota) 밖이다** — 다른 도구가 `quota_exceeded`로 막혀도\n 신고는 접수된다(2026-08-18 수리). 한도를 다 쓴 사람의 신고가 못 오면 우리는 우리가\n 못 본 것을 영영 모른다. 남용 방지는 시간당 상한(전체 60건·발신자당 20건)이 진다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "answered_fully": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "kind='질문기록' 전용 — 이 서버 도구만으로 질문에 **완결된 답**을 했는가. false면 missing_axis에 무엇이 없었는지 적어라(질문은행의 ●/◐/○ 판정에 그대로 쓰인다)", "title": "Answered Fully" }, "expected": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "사용자가 맞다고 본 값이 있으면", "title": "Expected" }, "kind": { "default": "결함", "description": "'결함'=답이 틀렸다는 신고(기본). '질문기록'=**사용자 원문 질문을 넘겨 어디로 가야 하는지 확인받는 값**. 원문을 주면 응답의 `routing`으로 ①질문이 9개 도구 축 중 어디인지와 그 축의 도구 이름 ②산문 지침에만 있던 라우팅 규칙(공고 질문에 추정 금지, 비아파트는 매매만, 청약·대출 갈림 등) ③**우리 데이터 밖이면 그 사실과 대신 볼 곳** ④지역명이 모호하면 후보를 돌려준다. **못 고르면 `axis: null`과 사유를 준다 — 추측으로 채우지 않는다.** 확신이 안 서거나 여러 축에 걸치는 질문이면 **도구를 여러 번 부르기 전에** 먼저 여기에 원문을 넣는 편이 답이 정확해진다. 서버는 클라이언트가 번역한 도구 호출만 보고 원문 질문을 볼 수 없어서, 이게 원문이 우리에게 닿는 유일한 통로이기도 하다", "enum": [ "결함", "질문기록" ], "title": "Kind", "type": "string" }, "missing_axis": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "answered_fully=false일 때 **없어서 못 답한 축**(예: '단지별 구조형식(벽식/라멘) 라벨 없음', '경기 정비사업 단계 조회 불가 — 서울 한정'). 로드맵의 원천이 된다", "title": "Missing Axis" }, "problem": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "무엇이 틀렸는지. 사용자가 지적한 말을 그대로 옮겨도 된다. kind='결함'이면 필수, kind='질문기록'이면 비워도 된다.", "title": "Problem" }, "question": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "사용자의 **원래 질문**(kind='질문기록'이면 필수). ⚠️ **개인 식별 조합은 일반형으로 치환해서 넣어라** — 소득·보유자산·보유단지·거주지 중 **둘 이상이 겹치면** 그대로 적지 말 것(예: '○○아파트 33평 보유 + 주식 10억 + 잠실 거주' → '1주택 보유(대출 없음), 인근 재건축 단지로 갈아타기'). 계산에 꼭 필요한 수치 하나(연소득 등)는 남겨도 된다. 무인증 공개 서버의 로그다", "title": "Question" }, "tool_used": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "문제가 된 답을 만든 도구 이름", "title": "Tool Used" }, "wrong_value": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "틀린 수치·문장", "title": "Wrong Value" } }, "title": "report_issueArguments", "type": "object" }, "name": "report_issue", "outputSchema": null }, { "description": "법원경매 물건을 자연어 문장으로 검색한다(경매 전용 — 청약·시세는 다른 도구다).\n\n 법원경매 물건을 자연어로 검색한다. **경매 전용** — 청약·분양 공고는 realty_presale,\n 분양가 적정성은 realty_presale_vs_market, 시세 통계는 realty_region_price_stats.\n\n 지역·물건종류·유찰횟수·감정가를 질의에서 뽑아 필터링한다.\n 예: \"서울 강남구 아파트\", \"유찰 2회 이상인 경기도 오피스텔\", \"서울 아파트 감정가 5억 이하\".\n\n 이 파서는 최소 어댑터라 못 쓰는 축(면적·기일·층 등)이 있다. 못 쓴 조건은 응답의\n `unapplied_conditions`에 적히므로, 그게 비어 있지 않으면 결과 범위를 좁게 오인하지 말고\n `realty_search_auctions`로 조건을 직접 지정해 다시 조회하라.\n\n 각 결과의 id는 이어서 fetch(id)에 그대로 넣으면 상세를 볼 수 있다.\n\n **이 축의 자리** — 경매 검색은 둘이고 입력 형태로 갈린다. 사용자의 말을 문장 그대로\n 넘길 때가 이 도구(`search`)이고, 지역·종류·감정가·유찰횟수를 **값으로 이미 알 때**는\n `realty_search_auctions`다(면적·기일·층 등 이 파서가 못 쓰는 축도 거기서 지정한다).\n 상세는 `fetch`로 이어간다 — 여기 나온 id를 그대로 넣으면 된다.\n ", "inputSchema": { "additionalProperties": false, "properties": { "query": { "description": "경매 물건을 찾는 **자연어 한 줄**. 예: '서울 강남구 아파트' · '유찰 2회 이상인 경기도 오피스텔' · '서울 아파트 감정가 5억 이하'. 이 파서가 읽는 축은 넷뿐이다 — 지역(시도는 '서울'·'서울특별시' 둘 다 되고, 시군구는 '강남구'·'평택시'처럼 원장 표기, 특례시는 '수원시 권선구'), 물건종류(아파트·오피스텔·다세대·연립주택·단독주택·근린시설·상가·대지·임야·전답 등), 유찰횟수, 감정가(억/만원 표기). 면적·기일·층은 못 읽고 unapplied_conditions로 실토하니 그 축이 필요하면 realty_search_auctions를 쓰라. 사건번호를 이미 아는 경우는 검색이 아니라 realty_get_auction_case다", "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "searchArguments", "type": "object" }, "name": "search", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:2db4e34b16adcb61ee14c83abb953bccca7faf2d3511535af2f2a5a23c088bb6 | sha256sum