korea-realty
Server Details
Korean real estate: court auctions, 10M+ MOLIT records, subscription notice facts, loan/DSR rules
- Status
- Healthy
- Uptime
- 99.8% over 64 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- sallim-app/korea-realty
- GitHub Stars
- 0
- Server Listing
- korea-realty
TDQS
Scored across 56 tools
Nearly every tool description explicitly states its '자리' and names the sibling tool to use instead, which resolves heavy overlap in the price (bands/region_stats/search_complexes) and auction (search/search_auctions/fetch/get_auction_case/history) families. Remaining risk is real but narrow: `fetch` vs `realty_get_auction_case` and `search` vs `realty_search_auctions` differ only by input/response shape, and the free-vs-paid report/scores/POI tools overlap materially. An agent that reads only descriptions without the full preamble will still misselect occasionally.
53 of 56 tools share a `realty_` snake_case prefix with readable descriptive names, so the family is predictable. The three unprefixed tools (`search`, `fetch`, `report_issue`) are exactly the primary auction entry points, which is an unfortunate inconsistency in an agent's global tool list. Style mixes verbs (search_/get_/compare_) with noun phrases (policy_rules, demographics, macro_indicators) but stays internally coherent.
56 tools is far beyond the practical selection range and exceeds even the 'heavy' band (16-25), forcing the agent to distinguish dozens of near-neighbors by long Korean prose. The domain is genuinely broad (court auction, onbid, presale notices, price stats, taxes, loans, policy, redevelopment, POI, demographics), so most tools do earn their place, but the set would benefit from consolidation (e.g., free/paid report variants, ranking vs compare vs trend-basket).
Coverage is unusually deep: auction + onbid lifecycles, presale announcement/facts/original text/cost/funding, price level/trend/basket, rentals and yields, tax and loan calculators, policy rule truth-source, redevelopment, POI, demographics, vacancy, supply pipeline. Gaps are documented rather than hidden (no area/floor/date-range filters in auction search, Seoul-only redevelopment coverage, no court-auction 승계/낙찰 listing, limited official vacant-house source), so agents can work around them.
Available Tools
56 toolsfetch경매 사건 상세ARead-onlyIdempotentInspect
search가 돌려준 id로 경매 사건의 전체 내용을 가져온다.
id 형식은 "법원명|사건번호" (예: "서울동부지방법원|2025타경51727").
사건번호는 법원 간 중복되므로 법원명 없이 조회하면 후보 목록이 돌아올 수 있다.
rights(매각물건명세서 요약)가 있으면 법원 공시의 전달로만 인용하고, 없으면(rights_note
참조) 권리관계를 지어내지 말 것 — 권리분석 판단은 이 도구의 데이터 밖이다.
**이 축의 자리** — 사건 상세도 둘이고 입력과 응답 형태로 갈린다. 이 도구는 `search`가
준 `"법원명|사건번호"` 한 덩어리를 그대로 받아 **문서형 텍스트**를 돌려준다(ChatGPT
커넥터 규격). 사용자가 사건번호를 말로 불러줬거나, `rights`·`min_bid_source` 같은 필드를
**값으로** 다뤄야 하면 `realty_get_auction_case`(사건번호·법원명을 따로 받는 구조화 응답)를
써라. 유찰 이력·기일별 저감은 어느 쪽도 아니고 `realty_auction_history`다.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | search가 돌려준 id를 **그대로** 넣는다 — `법원명|사건번호` 형식이다 (예: '서울동부지방법원|2025타경51727'). 파이프 앞은 정식 법원명이고 지원은 '진주지원'처럼 지원명만 오는 행도 있다. 파이프 뒤는 `2026타경3571` 꼴 (연도 4자리 + '타경' + 일련번호, 일련번호는 1~6자리). 법원명 없이 사건번호만 넣으면 사건번호가 법원 간 유일하지 않아 후보 목록이 돌아온다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds real behavioral context beyond that: the return is document-form text rather than structured data, and a court-name-less lookup degrades to a candidate list. Only the exact return content remains thinly described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and id contract are front-loaded in the first three lines and the routing rule is clearly separated. The '이 축의 자리' framing adds some meta-verbosity that slightly dilutes an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden and does so adequately by declaring document-form text output and the candidate-list fallback. Combined with the rights-citation constraint, an agent has enough to call and interpret it correctly, though the exact response shape stays vague.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself already documents the pipe-delimited format, court-name prefix, and case-number shape. The description largely restates this, adding only the firm constraint to pass the id through unchanged and the candidate-list consequence — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('search가 돌려준 id로 경매 사건의 전체 내용을 가져온다') and explicitly positions itself against the two closest siblings, realty_get_auction_case and realty_auction_history, by input/response form. An agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: use realty_get_auction_case when the user speaks the case number or structured fields are needed, and realty_auction_history for foreclosure history/discount schedules. It also states a bound on use — do not fabricate rights relationships if rights is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_area_price_bands지역 평형대별 시세 구간ARead-onlyIdempotentInspect
지역의 매매 시세를 평형대 4구간(소형/중소형/중형/대형, 전용면적 기준)으로 조회한다. "○○구에서 무슨 평수대가 얼마쯤 해?"류 질문용 — 특정 단지는 realty_search_complexes를 쓰라.
**이 축의 자리(시세 도구 3종 중)**: 지역의 가격 **수준** 비교는 이게 기본값이다.
이상치 필터(계약해제 제외 + **직거래 중** 같은 평형대 중개거래 중앙값의 50% 미만만 제외)가
적용돼 realty_region_price_stats의 미필터 평균과
값이 다르며, **수준이 갈리면 이쪽을 우선하라**. 월별 **추이**가 필요하면
region_price_stats, 단지가 특정되면 search_complexes.
구간 라벨의 평수는 **전용평**이다. 사용자의 분양평 감각으로는 소형<60㎡≈분양 24평 미만,
중소형 60~85㎡≈분양 24~34평, 중형 85~115㎡≈분양 34~47평, 대형 115㎡+≈분양 47평 이상.
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | 시군구명 (예: 마포구). **법정동까지 넣어도 된다**(예: '마포구 아현동') — 구 하나로 뭉치면 신도심·구도심이 한 값이 된다 | |
| by_dong | No | 법정동 × 평형대 중앙값을 함께 낸다. '이 구에서 어디가 싼가'류 질문의 자리다 — 실측(마포구 6개월, 전용 60~84㎡): 서교동 6.8억 ~ 용강동 27.1억으로 한 구 안에서 4배 갈린다. 표본 3건 이상 칸만 나온다 | |
| period_months | No | 집계 기간(개월) (허용 범위 1~24) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds substantive behavioral context: the outlier filter (excludes contract cancellations and direct trades below 50% of the band's brokered median), which explains why its values differ from region_price_stats' unfiltered average. It does not describe the output/pagination shape, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in the first sentence and each following block (question routing, tool positioning, filter methodology, alternative routing, band-label semantics) earns its place. It is dense and somewhat long, which slightly hurts scannability, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry return semantics; it explains the 4 bands, the exclusive-pyeong vs presale-pyeong mapping, the outlier filter, and the footnotes switch. This covers what an agent needs to call and interpret the tool, though exact response field names are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents region, by_dong, period_months and include_footnotes (including the min-3-sample rule and a worked example). The description mostly adds band-label and pyeong-conversion semantics, which are output concepts rather than parameter guidance, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (regional sale prices in 4 exclusive-area bands) and explicitly separates itself from siblings, naming realty_search_complexes for specific complexes and realty_region_price_stats for trends. An agent can distinguish this tool from the other two price tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use this by default for regional price *level* comparison, use region_price_stats for monthly trends, and search_complexes when a specific complex is identified. It even states the tie-break rule ('수준이 갈리면 이쪽을 우선하라') for when this and region_price_stats diverge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_auction_alerts급매 경매 물건ARead-onlyIdempotentInspect
유찰이 쌓여 최저입찰가가 크게 떨어진 경매 물건을 골라낸다.
유찰이 누적돼 최저입찰가가 크게 떨어진 물건을 찾는다. "○○에서 유찰 많은 물건"은
sido/sigungu로 좁혀라.
유찰이 많다는 건 싸다는 뜻이기도 하지만 권리관계·물건 하자 등 팔리지 않는 이유가
있다는 뜻이기도 하다. 결과를 추천으로 제시하지 말고 확인이 필요한 후보로 제시하라.
**같은 축의 다른 문**: realty_search_auctions(min_bid_count)로도 유찰 물건을 거를 수
있다 — 조건 필터·목록이 목적이면 그쪽, 저감 큰 후보 발굴(극단 할인 컷 포함)이면 이쪽.
둘을 합쳐 세지 마라(같은 물건이 양쪽에 나온다).
| Name | Required | Description | Default |
|---|---|---|---|
| sido | No | 시도 (예: 세종, 경기도) ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라. | |
| limit | No | 반환 개수 (최대 50) (허용 범위 1~50) | |
| sigungu | No | 시군구 (예: 강남구, 수원시) ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다. | |
| usage_name | No | 물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. 부분일치라 '빌라'는 '연립주택,다세대,빌라' 행에 걸린다(**표기를 바꾸지 않는다** — '다세대'로 자동 매핑하는 것은 낙찰가율 통계 realty_auction_sale_rate 쪽이다). '토지'는 이 원장에 없는 이름이라 거절된다 — 대지·임야·전답으로 나뉘어 있다. 비우면 전 종류 | |
| min_bid_count | No | 최소 유찰 횟수 (허용 범위 0~100) | |
| max_discount_pct | No | 감정가 대비 최대 할인율(%) — 80%+ 극단 할인은 지분매각·대지권 없음 등 특수물건이 대부분이라, 실수요 후보를 찾을 땐 79 이하로 걸러라 (허용 범위 0~100) | |
| min_discount_pct | No | 감정가 대비 최소 할인율(%) (허용 범위 0~100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuine context beyond that: many failed bids signal rights/hazard problems, and results should be framed as candidates needing verification, not recommendations. It does not cover auth needs, rate limits, or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first two sentences are near-duplicates ('유찰이 쌓여 최저입찰가가 크게 떨어진 경매 물건을 골라낸다' vs '유찰이 누적돼 최저입찰가가 크게 떨어진 물건을 찾는다'), which is redundant. The useful routing and caveat content is front-loaded but preceded by that repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, no-output-schema tool, the description covers purpose, caveats, regional narrowing, and the key sibling distinction. It is largely complete; only return-format nuances (which the schema does not provide) are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the schema carries the heavy parameter detail. The description still adds useful guidance by tying sido/sigungu to the region-narrowing use case, slightly above the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it selects auction properties whose minimum bid price has dropped sharply due to accumulated failed bids. It explicitly names the sibling realty_search_auctions and the axis distinguishing them, so an agent can separate them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('조건 필터·목록이 목적이면 그쪽, 저감 큰 후보 발굴이면 이쪽') plus a concrete warning not to combine the two because items overlap. It also instructs how to narrow ('○○에서 유찰 많은 물건' → sido/sigungu).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_auction_history경매 유찰 이력·가격 저감·사진ARead-onlyIdempotentInspect
경매 사건 하나의 유찰 이력·가격 변동·물건 사진을 조회한다.
경매 사건의 유찰 이력(기일별 최저가 저감 시계열)·가격 변동 이벤트·물건 사진 URL을
조회한다. "몇 번 유찰됐어? 얼마나 떨어진 거야? 사진 있어?"류 질문의 담당 도구.
사진은 법원 원천에서 기일 후 소멸해 **수집 시점 보존본만 존재**한다(국내 공개 API에 드문 축).
court_schedule에서 result='유찰'인 행이 유찰 이력, min_bid_10k의 저감이 가격 흐름이다.
result가 null인 행은 미래 기일이거나 미해독 법원 코드(result_code 원문 병기)다 —
의미를 지어내지 말고 그대로 전하라. **최저가(min_bid_10k)가 없는 행에는 `kind_note`가
붙는다 — 그 행은 입찰 기일이 아니다**(원천 전수에서 최저가·유찰 표기는 kind_code=01에만
붙는다). fail_count가 기일표의 유찰 행 수와 다르면 `fail_count_note`가 그 이유를 댄다
(출처가 목록 원천 vs 기일표로 갈린다) — 둘을 합쳐 세지 마라. tracking·price_events는 2026-07-23 이후 일일
스냅샷 비교분이라 비어 있을 수 있다(비어 있음 ≠ 변동 없음, court_schedule이 정본).
⚠️ court_schedule이 빈 물건(기일표 미수집)의 `current_min_bid_10k`는 건별
`min_bid_source`를 봐야 한다 — item_list면 낡았을 수 있어 min_bid_note가 함께 온다.
그 경우 현재 최저가를 단정하지 말고 note를 사용자에게 전하라(목록·상세와 같은 경고).
| Name | Required | Description | Default |
|---|---|---|---|
| case_no | Yes | 사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 1~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'·'3571'처럼 접두 없이 넣지 마라 | |
| court_name | No | 법원명 — '서울동부지방법원'·'인천지방법원'처럼 정식명으로 넣는다('진주지원'처럼 지원명만인 행도 있다). 사건번호는 법원 간 유일하지 않아(전국 평균 2.8개 법원에서 중복) 생략하면 후보 목록이 돌아온다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the read-only/idempotent annotations: it warns that photos exist only as collection-time preserved copies because court originals are destroyed after the hearing date, that null result rows are future hearings or undecoded court codes, that kind_note marks non-bid rows, that fail_count_note explains count mismatches, and that min_bid_source=item_list may be stale. These are exactly the non-obvious traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the dense remainder is operational caveats rather than filler. It is long and crowded with bolded warnings, which makes it harder to scan, but almost every clause carries actionable meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the full burden of return-value semantics — and it does, defining what fail_count, min_bid_10k, kind_note, fail_count_note, min_bid_source, and the tracking/price_events emptiness each mean and how they should be relayed. An agent would not misstate results after reading this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the two parameters (case_no format rules, court_name uniqueness) are already fully documented in the schema. The description adds no independent parameter guidance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource set — retrieves a single auction case's failed-bid history, price-change timeline, and property photo URLs. The question-type framing ("몇 번 유찰됐어? 얼마나 떨어진 거야? 사진 있어?") pins down the intent precisely. It does not explicitly distinguish itself from the closest sibling realty_get_auction_case, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the situations this tool owns (failed-bid counts, price-drop history, photos) and explains what to do when sub-sources are empty (tracking/price_events may be blank; court_schedule is authoritative). It gives no explicit when-not or named alternative such as realty_get_auction_case or realty_search_auctions, so it is context-rich but not routing-complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_auction_sale_rate낙찰가율 통계ARead-onlyIdempotentInspect
"이 지역 이 물건은 보통 감정가의 몇 %에 낙찰되나"를 실제 매각결과로 답한다.
입찰가를 정할 때 쓰는 핵심 지표다. `by_fail_count`에 유찰 횟수별 분포가 들어 있어
"2회 유찰된 물건은 보통 몇 %에 낙찰되는가"를 바로 읽을 수 있다.
낙찰가율 = 낙찰가 / 감정가 × 100. 100%를 넘으면 감정가보다 비싸게 팔린 것이다.
**"감정가 12억에 최저가 7.68억이면 몇 번 유찰됐나"는 이 도구가 아니다** — 그건 낙찰 통계가
아니라 저감 산수다(최저가 = 감정가 × (1−저감률)^유찰횟수, 법원별 저감률 실측표와 예시는
realty_policy_rules(topic='auction_rights', section='minimum_price_reduction')). 사건번호가
있으면 realty_auction_history의 기일별 이력이 정본이다(T-2026W34-353 피드백).
표본의 집계 기간은 응답의 `sample_period`(매각기일 min~max)에 있다 — "요즘"류
질문에는 이 범위를 함께 전하라. 기간을 좁히는 파라미터는 백엔드가 지원하지 않는다
(요청해도 조용히 무시됨을 실측했다 — 그래서 노출하지 않는다).
usage_name에 '빌라'를 넣으면 표준 분류인 '다세대'로 자동 매핑해 집계한다(원문
'빌라'는 소수 비표준 표기 행만 잡혀 표본이 조용히 왜곡된다 — 응답에 매핑 사실이
공시된다). 연립주택 통계는 usage_name='연립주택'으로 따로 물어라.
**평형을 섞지 마라(2026-08-16 축 신설)**: 응답의 `by_area_band`가 전용면적대별
낙찰가율이다. 2026-10-17 실측(사건 중복 제거): 아파트 전국 전체 78.8%인데 전용 59㎡ 이하
75.7%, 60~84㎡ 81.4%, 서울은 82.4% vs 98.1%다. 대상 물건의 평형을 알면 `area_band`로 좁히고,
지역 요약 하나로 입찰가를 정하지 마라. '면적 미상' 밴드는 공고에 면적 표기가 없거나 공고
원장에 사건이 없어 면적을 못 붙인 사건이지 0이 아니다.
**이 축의 자리(경매 가격판단 3종 중)**: 이 %는 **감정가 대비** 통계다. 특정 물건이
실거래 **시세** 대비 싼지는 realty_compare_auction_vs_market이 자동 계산한다 —
분모가 다르니 두 %를 한 문장에 섞지 마라(감정가는 시세와 다른 시점·기준의 값이다).
| Name | Required | Description | Default |
|---|---|---|---|
| sido | No | 시도 — '서울'처럼 줄여 써도 되고 '서울특별시'도 된다(서버가 정식명으로 편다). 원장 표기는 서울특별시·경기도·부산광역시·세종특별자치시·강원특별자치도 같은 정식명이다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라. | |
| sigungu | No | 시군구 — 원장 표기 그대로 넣는다(예: '강남구', '평택시', '기장군'). 특례시·일반구는 '수원시 권선구'처럼 두 토막이다. 시도 이름을 여기 붙이지 마라('서울 강남구'는 안 맞는다) — 시도는 sido로 준다 ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다. | |
| area_band | No | 전용면적대로 좁힌다. 낙찰가율은 평형에 따라 갈린다 — 대상 물건의 평형을 알면 반드시 넣어라(응답의 by_area_band로도 확인된다) | |
| usage_name | No | 물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. '빌라'는 표준 분류가 아니라 서버가 '다세대'로 매핑하고 그 사실을 응답에 공시한다. 비우면 전 종류 | 아파트 |
| bid_count_max | No | 유찰 횟수 **상한**(이하). 예: 2를 주면 유찰 0·1·2회 물건의 매각결과만 집계한다. 유찰이 쌓일수록 낙찰가율이 내려가므로 대상 물건의 유찰 횟수에 맞춰 좁혀라. 비우면 유찰 횟수 무관 전체(응답의 by_fail_count에 횟수별 분포가 그대로 온다) (허용 범위 0~100) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly/idempotent/openWorld/non-destructive); the description adds non-obvious behavior the agent could not infer: period-narrowing parameters are silently ignored by the backend (so none are exposed), '빌라' is silently remapped to '다세대' with the mapping disclosed in the response, and the '면적 미상' band is missing data rather than zero. These are exactly the quirks that prevent wrong conclusions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core definition and formula are front-loaded, then exclusions, then caveats — a logical funnel with bold anchors for scanning. It runs long, and the 2026-10-17 measurement figures are illustrative evidence rather than instruction, but nearly every line carries actionable content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return contract itself: sample_period (매각기일 min~max) for recency framing, by_fail_count distribution, by_area_band, and the include_footnotes toggle. Combined with the denominator warning against sibling tools, an agent has everything needed to call it and to interpret the numbers correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds rationale the schema lacks — why area_band should '반드시' be used (78.8% national vs 75.7%/81.4% by band, 서울 82.4% vs 98.1%), why bid_count_max should match the subject's fail count, and why no period parameter exists. It does not, however, restate or extend sido/sigungu disambiguation beyond what their schema entries already say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource ('이 지역 이 물건은 보통 감정가의 몇 %에 낙찰되나'를 실제 매각결과로 답한다) and pins the metric with an explicit formula (낙찰가/감정가×100). It actively distinguishes itself from siblings with the same domain — realty_policy_rules, realty_auction_history, realty_compare_auction_vs_market — so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-not guidance is given ('감정가 12억에 최저가 7.68억이면 몇 번 유찰됐나'는 이 도구가 아니다) with the correct alternative named and even sub-arguments (realty_policy_rules topic='auction_rights', section='minimum_price_reduction'). The '경매 가격판단 3종 중' paragraph also states when to prefer realty_compare_auction_vs_market, including the reason (different denominator).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_builder_presale_record시공사·시행사별 분양 성적 — 공급·무순위·청약 배수ARead-onlyIdempotentInspect
시공사·시행사별 분양 성적 — 공고 수·공급 세대·무순위(줍줍) 세대와 비율·청약 1순위 배수·미달 세대.
"○○건설 분양 성적", "GS건설 현장 무순위 많이 나왔나", "대전 시공사별 분양", "이 시행사 다른 현장은"류
질문의 자리다. builder(또는 developer)를 주면 그 회사 행과 **현장 목록**(단지·지역·공고일·공급·
무순위·비율·시행사)을, 아무것도 안 주면 공급 상위 N개 회사 순위를, region(시도)을 주면 그 시도로 좁힌다.
행마다 같은 창의 **전국 비율(baseline)**이 비교 기준으로 붙는다.
**결론에 반드시 옮길 것**(meta.disclosures):
· 무순위 세대는 **최종 미분양이 아니다**(당첨 후 계약 포기분 재공급). 무순위 뒤 남은 것은 별도 필드.
· 청약홈 밖 공급(지주택·자체분양·선착순·임의공급)은 없다 — 대구처럼 선착순으로 빼는 지역은 비율이 낮게 나온다.
· **재무 건전성 판정이 아니다** — PF·부채·보증은 DART 영역. "위험"·"부실" 같은 낙인을 붙이지 말고
수치와 전국 비율만 전하라.
· 공동시공은 각 사에 전량 귀속, 회사명 묶음은 우리 규칙, 무순위 연결률은 meta.match_rate.
view='sites'는 "무순위 청약에서도 신청이 모자란 단지" 목록이다 — 최근 회차 미달 세대(청약 미달이지 미판매·
계약 결과가 아니다)와 시군구 미분양 추이. 그 뒤 선착순 판매 여부는 모른다(meta.disclosures).
**브랜드명(자이·래미안)으로 공고 개수를 세는 질문은 이 도구가 아니다** — realty_notice_facts(keyword).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | sites 정렬 | shortfall |
| view | No | sites=무순위 청약 미달 단지 목록(최근 회차 △N, since는 최근 회차 월) | companies |
| group | No | 순위 모드의 묶음 단위 | 시공사 |
| since | No | 본공고 공고월 하한 YYYY-MM(기본 2024-07) | 2024-07 |
| top_n | No | 회사를 안 줬을 때 순위 모드의 행 수(공급 세대 내림차순) (허용 범위 1~50) | |
| region | No | 시도로 좁힌다(예: '대전', '경기') — 시군구는 받지 않는다 | |
| builder | No | 시공사명(부분일치, ㈜·주식회사 무시, '지에스건설'→GS건설 같은 별칭 흡수). 주면 그 회사 행 + 현장 목록 | |
| developer | No | 시행사(사업주체)명(부분일치). builder와 같이 주면 그 시행사와 한 현장만 남긴다 | |
| min_shortfall | No | sites: 최근 회차 미달 세대 하한 (허용 범위 0~100000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description layers on genuinely useful out-of-band caveats (무순위 ≠ 최종 미분양, 청약홈 밖 공급 미포함, co-construction full attribution, meta.match_rate, not a financial-soundness ruling). However, much of this is result-interpretation guidance rather than invocation behavior, and it discloses no auth/rate-limit/pagination traits, so it exceeds the annotation bar without being fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence, then usage patterns, then disclosure caveats, then the exclusion — a sensible order for a 9-parameter tool. It is long and the disclosure block repeats material that also lives in parameter descriptions, but nearly every sentence carries non-redundant caveat value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it describes the company row, the attached site list columns, the top-N ranking shape, and the per-row national baseline for comparison. Combined with the disclosure caveats, an agent has enough to call the tool and interpret its response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter already carries a substantive inline description (aliases, partial matching, ranges, defaults), so the baseline is 3. The description adds the interaction rule for builder+developer and the effect of region, but that overlaps heavily with what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (시공사·시행사별 분양 성적) and enumerates the exact measures returned (공고 수·공급 세대·무순위 세대·비율·청약 1순위 배수·미달 세대). It explicitly distinguishes itself from a sibling by ruling out brand-name notice counting and routing that to realty_notice_facts(keyword).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Enumerates the exact user-question shapes it answers ('○○건설 분양 성적', 'GS건설 현장 무순위 많이 나왔나', '대전 시공사별 분양'). It also states the argument-driven behaviors (builder/developer → company row + site list; no arg → top-N ranking; region → narrowed) and names the alternative tool for the excluded case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_capital_gains_tax양도세 계산 — 선언된 양도·취득·보유에 세율표 적용, 합산/연도분산/차손통산 비교ARead-onlyIdempotentInspect
선언된 양도가·취득가·필요경비·보유기간에 양도소득세 세율표를 결정론으로 적용한다 — 기본·단기·분양권 세율, 장특공제 표1, 기본공제, 다주택 중과(선언), 지방소득세 10%. 두 번째 자산을 주면 같은 해 합산 vs 연도분산 vs 차손통산을 비교해 어느 쪽이 유리한지 산출한다. "지금 팔면 양도세 얼마?"·"두 채를 올해 같이 팔까 나눠 팔까?"의 자리다.
경계를 지켜라: ① 입력 전부 **선언**이다 — 보유기간 기산·주택 수·조정대상지역 해당은
사실판단이라 서버가 판정하지 않는다. ② **1세대1주택 비과세·12억 초과 고가주택 안분·
감면 특례는 계산하지 않는다**(not_curated) — 이 결과는 양도 전액이 과세된다는 전제다.
**그렇다고 사용자를 밖으로 내보내지 마라 — 계산기가 없을 뿐 갈림길 지도는 우리에게
있다**: `realty_policy_rules(topic='one_home_exemption_map')`이 5관문(세대·1주택·
보유2년·조정지역 거주2년·12억)과 5경로(일시적2주택·상속·합가·부득이한 사유·상생임대)를
확인 체크리스트와 함께 준다. 비과세 가능성이 보이면 **거기부터** 가고, 그 관문을 다 훑고도
사실판단이 남을 때 비로소 홈택스 모의계산·세무사를 안내하라. ③ 세율표·필요경비 분류·중과
경과조치의 원문·근거 조문은 realty_policy_rules(topic=capital_gains_tax)가 진실원이고,
조정대상지역 지정 현황은 topic=regulated_area다.
응답의 traps·pending_legislation·disclaimer를 함께 전하라.
| Name | Required | Description | Default |
|---|---|---|---|
| share_pct | No | 본인 지분율(%, 공동명의면 예: 50). 양도세는 인별 과세라 본인 지분만 계산하고 기본공제 250만원도 각자 받는다 — 배우자 몫은 배우자 지분으로 따로 호출하라. 두 자산 모두에 같은 지분을 적용한다 (허용 범위 0 초과~100) | |
| asset_type | No | 자산 종류 — 단기세율·장특공제가 갈린다. 분양권은 보유 2년이 넘어도 60%다. 비사업용토지=기본세율+10%p(제104조①8호). 부동산취득권리=분양권·입주권 외 권리(관리처분인가 전 예비조합원 지위 등) — 장특 없음 | 주택 |
| holding_years | Yes | 보유기간(년, 소수 허용 — 예: 1.5). 취득일~양도일이며 상속·증여 기산 특례는 사실판단이라 호출자가 확정해 선언한다 (허용 범위 0~100) | |
| transfer_year | Yes | 양도(예정) 연도. 2027 이후는 계류 중인 세제개편안이 결과를 뒤집을 수 있어 응답에 실토가 붙는다. 2025 이전 과거 양도는 당시 규칙(중과 유예 등)이라 다루지 않는다 (허용 범위 2026~2035) | |
| asset2_asset_type | No | 두 번째 자산의 종류 | 주택 |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 | |
| transfer_price_10k | Yes | 양도가액(만원, 예: 90000=9억). 예정이면 예상 매도가를 선언 | |
| asset2_expenses_10k | No | 두 번째 자산의 필요경비(만원) | |
| asset2_holding_years | No | 두 번째 자산의 보유기간(년) — **transfer_year 기준**이다. 연도분산 시나리오는 이 자산을 다음 해에 파는 가정이라 서버가 보유기간을 +1년으로 다시 계산한다(응답 scenarios.split_years.asset2_recomputed에 실토) (허용 범위 0~100) | |
| multi_home_surcharge | No | 다주택 중과 **선언** — 양도 시점에 그 주택이 조정대상지역 안이고(현재 지정 현황은 topic=regulated_area) 세대 주택 수가 2/3+인 경우. 주택 수 판정(분양권·입주권 가산, 지방 저가주택 제외)은 사실판단이라 서버가 하지 않는다. 중과 대상인데 그 기간 취득이면 마지막 값=기본세율·장특 배제(소득세법 부칙 제14조) | 없음 |
| acquisition_price_10k | Yes | 취득가액(만원). 증여받은 자산은 이월과세(10년)로 증여자 원취득가가 될 수 있다 — 응답 traps 확인 | |
| necessary_expenses_10k | No | 필요경비 합계(만원) — 취득·양도 부대비용과 자본적 지출만. 도배·싱크대 같은 수익적 지출은 불인정이다(경계·증빙 요건은 topic=capital_gains_tax 원문) | |
| asset2_transfer_price_10k | No | 두 번째 자산의 양도가액(만원) — 주면 '올해 같이 팔기 vs 내년으로 나누기' 시나리오를 비교한다. asset2_acquisition_price_10k·asset2_holding_years와 함께 줘야 한다 | |
| rights_pre_approval_years | No | 위 입주권의 기존건물 취득일~관리처분인가일 기간(년) — 장특 보유기간(시행령 제166조⑤1) (허용 범위 0~100) | |
| asset2_multi_home_surcharge | No | 두 번째 자산의 중과 선언 — 첫 자산 매도 후 주택 수가 줄어 지위가 달라질 수 있다. 시나리오별 지위 변화도 선언 그대로 쓴다(서버는 판정하지 않는다) | 없음 |
| asset2_acquisition_price_10k | No | 두 번째 자산의 취득가액(만원) | |
| rights_pre_approval_gain_10k | No | 원조합원 조합원입주권만: 관리처분인가 전 양도차익(만원, 종전 평가액−취득가−경비, 시행령 제166조①). 주면 장특 표1을 이 차익에만 적용(제95조②). 승계취득이면 주지 마라 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly/idempotent/non-destructive, and the description goes well beyond them: all inputs are declared (the server does not adjudicate holding-period start, home count, or regulated-area status), exemptions are explicitly out of scope, and the response is stated to carry traps, pending_legislation and disclaimer fields. That is the kind of boundary disclosure annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core capability is front-loaded in the first sentence, followed by scope and then boundaries. It runs long and dense across two paragraphs, but each block (capability, declared-input boundary, exemption boundary, routing) carries distinct information, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter, no-output-schema tool this is thorough: it covers the declaration philosophy, the not_curated exemption gap, the escape hatch to realty_policy_rules, and the response fields (traps/pending_legislation/disclaimer). An agent has enough to both invoke it correctly and avoid over-promising on exemption cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the 17 parameter descriptions are already unusually detailed (asset_type tax split, share_pct per-person taxation, asset2 holding-year recomputation). The description adds only the general 'everything is declared' framing rather than per-parameter meaning beyond the schema, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource — applying the capital gains tax rate table deterministically to declared transfer/acquisition/expense/holding values — and adds the multi-asset comparison scope (합산 vs 연도분산 vs 차손통산). It also distinguishes itself from siblings by naming realty_policy_rules as the statute source of truth rather than repeating it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the two questions it answers ('지금 팔면 양도세 얼마?' / '두 채를 올해 같이 팔까 나눠 팔까?') and states what it does NOT do (1세대1주택 비과세, 12억 초과 안분, 감면 특례 = not_curated). It then routes the agent to a concrete alternative, realty_policy_rules(topic='one_home_exemption_map'), with a prescribed order of operations before falling back to 홈택스/세무사.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_compare_auction_vs_market경매가 vs 실거래 시세 비교ARead-onlyIdempotentInspect
경매 물건의 최저입찰가를 같은 단지 실거래 시세와 대조해 할인율·표면수익률을 낸다. 기본은 오늘 이후 기일 물건만이다(지난 기일이 섞여 나오던 결함 수리, 2026-08-08).
주소·단지명 정규화 정확매칭으로 붙이며, 감정가가 기준선의 50~150% 범위인 건만 비교한다
(지분경매·특수물건을 배제하기 위함). 결과의 `signal`은 주의/관심/보통/낮음/판정보류다.
**시세 기준선은 같은 단지의 같은 면적대(±10%) 실거래 평균이다**(2026-08-16 수리 — 종전엔
단지 전 평형 혼합 평균이라 대형·소형이 섞인 단지에서 할인율이 통째로 어긋났다).
면적을 맞추지 못하면 `discount_vs_market_pct`는 **null**이고 signal은 '판정보류'다 —
그 자리를 `discount_vs_all_types_pct`(혼합평균 대비)로 대신 채워 말하지 마라.
⚠️ 유찰 물건은 `auction.min_bid_source`를 확인하라 — item_list면 최저가가 낡았을 수
있고(`min_bid_note` 동봉) 그 최저가로 계산된 할인율·수익률도 함께 틀어진다.
이 도구는 다른 도구보다 느리다(출처 조회 포함 2~4초).
**이 축의 자리(경매 가격판단 3종 중)**: "이 물건 싸?"는 이게 1차다(시세 자동 조인).
입찰가 책정은 realty_auction_sale_rate(감정가 대비 실제 낙찰가율)와 함께 쓰되,
이 도구의 할인율(시세 대비)과 낙찰가율(감정가 대비)은 **분모가 달라 섞으면 안 된다**.
기준 시세를 손으로 잡을 땐 realty_area_price_bands(수준)/region_price_stats(추이).
| Name | Required | Description | Default |
|---|---|---|---|
| sido | No | 시도 — '서울'처럼 줄여 써도 되고 '서울특별시'도 된다(서버가 정식명으로 편다). 원장 표기는 서울특별시·경기도·부산광역시·세종특별자치시·강원특별자치도 같은 정식명이다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라. | |
| limit | No | 비교할 물건 수 (최대 50) (허용 범위 1~50) | |
| case_no | No | 특정 사건 하나만 비교할 때 — `2026타경3571` 꼴(연도 4자리 + '타경' + 일련번호). 주면 지역 조건 대신 이 사건만 보고, 기일 제한도 걸지 않는다. 사건번호는 법원 간 중복되니 court_name을 반드시 함께 주라 | |
| sigungu | No | 시군구 — 원장 표기 그대로 넣는다(예: '강남구', '평택시', '기장군'). 특례시·일반구는 '수원시 권선구'처럼 두 토막이다. 시도 이름을 여기 붙이지 마라('서울 강남구'는 안 맞는다) — 시도는 sido로 준다 ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다. | |
| court_name | No | 법원명 — case_no와 함께 쓴다. 사건번호는 법원 간 유일하지 않아(평균 2.8배 중복) 이걸 빼면 다른 법원 물건이 섞이고 최저가 출처도 확정되지 않는다 | |
| usage_name | No | 물건 종류 — 이 도구는 같은 단지 실거래와 붙이므로 '아파트'가 기본이다. 오피스텔·다세대·연립주택도 되지만 단지 매칭률이 떨어진다. 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·근린시설·상가 | 아파트 |
| include_past | No | 지난 기일 물건 포함 여부 — 기본은 오늘 이후 기일만(입찰 가능 후보). case_no 특정 조회는 이 값과 무관하게 기일 제한이 없다 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial non-obvious behavior: default is today-or-later dates only, exact address/complex normalization, a 50–150% appraisal-value filter that excludes 지분경매/특수물건, the ±10% same-area baseline rule, null + '판정보류' fallback when area can't be matched, a warning about stale min_bid_source on failed auctions, and an explicit 2–4s latency disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose is front-loaded and bold section headers organize the axis/alternative guidance well. However the two date-stamped repair notes (2026-08-08, 2026-08-16) read as changelog noise that a calling agent does not need, slightly bloating an otherwise tight description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by explaining the returned signal values (주의/관심/보통/낮음/판정보류), the meaning of a null discount_vs_market_pct, the footnotes toggle, and the stale-min_bid caveat. Nothing needed to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters including the sido/sigungu/case_no/court_name relationships. The description reinforces the date-scoping and area-matching semantics but adds little parameter syntax beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: compares an auction item's minimum bid against same-complex real transaction prices to produce a discount rate and surface yield. It also positions itself explicitly within the '경매 가격판단 3종' axis and names the sibling it must not be confused with (realty_auction_sale_rate), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: '이 물건 싸?'는 이게 1차다, use realty_auction_sale_rate together for bid pricing but never mix the two denominators, and use realty_area_price_bands/region_price_stats when setting a manual baseline. Both when-to-use and when-not-to-mix conditions are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_compare_regions[유료] 지역 비교ARead-onlyIdempotentInspect
[유료] 여러 지역의 매매·전세 시세와 추이를 나란히 비교한다. 갈아타기·투자처 비교용.
"어디가 제일 ○○해?"류 순위·탐색 질문은 무료 realty_region_rankings로 먼저 좁혀라 —
이 도구는 비교 대상이 정해졌을 때 쓴다.
⚠️ 지역별 `warning_baseline`·`warning_dispersion`을 avg_price보다 먼저 읽어라 —
이 소스는 이상치 미필터·단지급 혼합이라 avg_price를 그대로 "그 지역 시세"로 인용하면
특정 단지와의 비교 결론이 뒤집힌다(realty_region_price_stats와 같은 공시다).
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | 추이 개월 수 (허용 범위 1~60) | |
| regions | Yes | 비교할 시군구 2개 이상 — 배열(['강남구','서초구']) 또는 쉼표 문자열('강남구,서초구') | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description still adds high-value interpretive context: warning_baseline/warning_dispersion must be read before avg_price, because the source is outlier-unfiltered and mixes complex-level data, so citing avg_price as the regional price can flip a comparison conclusion. That is exactly the kind of non-obvious caveat annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly: purpose sentence, then routing rule, then caveat. Every block is load-bearing, though the warning paragraph is somewhat long and references a sibling source in a way that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description partially compensates by naming return-side fields (warning_baseline, warning_dispersion, avg_price, footnotes) and their interpretation. It does not describe overall return shape or pagination, but for a comparison tool the critical interpretive guidance is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (regions format, months range 1-60, include_footnotes behavior are all documented in the schema). The description adds no syntax or format detail beyond that, so the baseline 3 applies; it does visually surface the footnotes/warning fields but not the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: it compares multiple regions' 매매·전세 시세와 추이 side by side, and adds the use case (갈아타기·투자처 비교). An agent can distinguish it from realty_region_price_stats and realty_region_rankings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes ranking/exploratory questions ('어디가 제일 ○○해?') to the free realty_region_rankings first and states the exact condition for using this tool instead ('비교 대상이 정해졌을 때'). This is a when/when-not/alternative rule stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_complex_pyeong_price단지 평형별 매매 실거래 내역ARead-onlyIdempotentInspect
특정 단지·특정 평형의 최근 6개월 매매 실거래를 건별(계약일·층·가격)로 조회한다. 평형별 시세 요약만 필요하면 realty_search_complexes의 prices_by_area로 충분하다.
응답에는 **층 밴드별 시세 집계 `price_by_floor_band`**(저층~초고층 밴드별 평균가·건수·
최저 밴드 대비 프리미엄 %)가 함께 온다 — "저층 사면 손해야?", "고층 프리미엄 얼마야?"류
**층별 시세 질문은 이 도구가 담당**이다(한 단지·건별). 여러 단지 층 분해·기준일 전후 비교·
6개월 넘는 창은 realty_region_price_stats(compare_from) 한 번으로.
transactions는 **계약일 내림차순**이고, average_price·median_price는 그 정렬 기준
최근 5건(summary_basis에 그 5건을 그대로 싣는다)이다. 이상 거래는 지우지 않고
`outlier=true`로 표시만 하며(판정 근거는 outliers.method), 층 밴드에는 이상치 제외 값을
`*_ex_outliers`로 병기한다 — **밴드 프리미엄이 몇 건의 산물인지 확인하고 말하라.**
**이름이 더 긴 이웃 단지는 분리해서 뺀다**('○○센트레빌'에서 '○○센트레빌Ⅱ'). 무엇을 뺐는지·못 가른
면적이 무엇인지는 `meta.complex_isolation`에 그대로 실린다. **못 가른 것은 빼지 않고
못 갈랐다고 적는다** — 그 평형 수치는 단정하지 말고 그 사실을 함께 전하라.
**면적은 사용자가 말한 단위 그대로 넣어라 — 환산은 서버가 한다**:
- ㎡로 말했으면 → area_m2_exclusive(전용 84㎡ → 84) / area_m2_supply(공급 112.8㎡ → 112.8)
- 평으로 말했으면 → pyeong_supply(분양 "34평") / pyeong_exclusive(전용 실평수 25.4평)
**평형을 모르면 면적 없이 불러라** — 거절하지 않고 이 단지의 평형별 요약과 평형마다
다시 부를 인자를 준다(평형을 추측해 넣지 마라). '최근 거래 있었나'는 그 요약의 latest_contract로 답한다. ㎡ 값을 평 인자에 넣으면 조용히 환산하지 않고 사유와 두
방향 출구를 값으로 적어 거절한다.
이 도구는 매매 전용이다 — 전월세는 realty_complex_rent_by_pyeong을 쓴다. 매매 창이 얇은
신축은 분양권·입주권 전매 거래를 `presale_rights_trades`에 **따로** 싣는다(전매가 — 매매 시세 아님).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 개별 거래 내역 수 (허용 범위 1~50) | |
| since | No | 이 날짜(YYYY-MM-DD, 31일 전까지) 이후 바뀐 것만 — 예약 실행에서 '어제 이후'면 since=어제. 기준·지연은 응답에 | |
| region | No | 동명 단지 구분용 시군구명 (예: 마포구) | |
| compare | No | 단지 2~5개(complex_key·단지명 배열)를 같은 면적으로 나란히 — 면적 필수. 행마다 실제 면적 범위·거래 수가 다르니 함께 전하라. 단지 간 평균·순위는 없다. 단지 수만큼 한도를 쓴다 | |
| question | No | (선택) 이 조회를 하게 된 사용자 질문 한 문장 — 맞는 다른 축·도구를 question_routing으로 돌려준다. 이름·연락처는 빼라 | |
| complex_key | No | 정확한 단지 키 — realty_search_complexes·complex_ambiguous 후보가 돌려주는 complex_key. 주면 이름·지역보다 우선한다. **같은 동에 같은 이름의 다른 단지**(키 끝 '(1995)' 등)는 이름으로는 못 가르므로 이 인자로만 부를 수 있다 | |
| complex_name | No | 단지명 (예: 마포래미안푸르지오2단지). complex_key를 주면 생략해도 된다 | |
| pyeong_supply | No | 분양평수(공급면적, **평**) — 사용자가 말하는 '34평'이 보통 이것이다. **㎡로 말했으면 여기가 아니라 area_m2_supply를 쓰라** (허용 범위 0 초과~400) | |
| area_m2_supply | No | 공급(분양)면적을 **㎡ 그대로** 받는다(예: 112.8). pyeong_supply와 동시에 주면 거절한다 (허용 범위 0 초과~800) | |
| pyeong_exclusive | No | 전용면적 기준 **실평수(평)** — ㎡가 아니다. 전용 84㎡면 25.4를 넣는다. **사용자가 ㎡로 말했으면 area_m2_exclusive를 쓰라** — ㎡ 값을 여기 넣으면 서버가 조용히 환산하지 않고 사유를 대고 거절한다(1평=3.3058㎡) (허용 범위 0 초과~400) | |
| quoted_price_10k | No | 사용자가 **들은 가격**(호가·중개사 제시가·매물 가격, 만원). 주면 실거래 분포와 대조해 `quote_check`로 돌려준다. 이 서버는 **호가 데이터가 없다** — 실거래(MOLIT)뿐이라 '호가가 비싸다/싸다'를 판정하는 게 아니라 **실거래 어디쯤인지 위치만** 알려준다. 사용자가 가격을 말했는데 이 인자를 안 주면 모델이 그 값을 검증 없이 전제로 삼게 된다 | |
| area_m2_exclusive | No | 전용면적을 **㎡ 그대로** 받는다(예: 84, 59, 114.98). 사용자가 '전용 84㎡'라고 말했으면 환산하지 말고 84를 여기 넣어라 — 서버가 평으로 환산하고 그 사실을 응답에 적는다. pyeong_exclusive와 동시에 주면 거절한다 (허용 범위 0 초과~500) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 | |
| quoted_prices_10k | No | 사용자가 **매물 목록에서 복사·다운로드해 온 호가 여러 개**(만원 배열). 값이 2개 이상이면 단일 대조 대신 **호가 분포 ↔ 실거래 분포**를 비교한다(중위 대 중위, 두 구간이 겹치는지). 호가는 사용자가 가져온 것이라 서버는 **출처·수집시점·중복 매물 여부를 모른다** — 그 한계도 함께 응답에 싣는다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly/idempotent/non-destructive), yet the description adds substantial behavior: price_by_floor_band aggregation with *_ex_outliers, transactions sorted by contract date descending with average/median over the recent 5, outliers flagged not deleted, longer-named neighbor complexes split out and logged in meta.complex_isolation, unit-mismatch rejections instead of silent conversion, and presale rights carried separately in presale_rights_trades.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the primary alternative are front-loaded, but the body is very long and much of the unit-handling and reject behavior duplicates what the schema descriptions already state. For a 14-param tool length is partly justified, yet several bolded asides repeat structured content instead of adding new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 14 params and no output schema, the description carries the return-value burden and does so thoroughly: it explains price_by_floor_band, transactions ordering, outlier handling, meta.complex_isolation, quote_check, and presale_rights_trades. An agent has everything needed to call it and interpret the response correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds cross-parameter rules beyond the schema: mixing ㎡ and 평 args is rejected rather than converted, and quoted_price_10k is framed as preventing the model from treating a user-stated price as an unverified premise (quote_check). It consolidates and contextualizes the unit arguments rather than merely restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetch item-level (contract date, floor, price) recent-6-month sale transactions for a specific complex and specific pyeong. It explicitly distinguishes itself from siblings by naming realty_search_complexes.prices_by_area for summaries and realty_region_price_stats for multi-complex floor breakdowns, so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('층별 시세 질문은 이 도구가 담당'), when-not ('평형별 시세 요약만 필요하면 realty_search_complexes'), and named alternatives for adjacent needs (realty_region_price_stats.compare_from for multi-complex/6mo+ windows, realty_complex_rent_by_pyeong for rent). It even instructs what to do when pyeong is unknown (call without area) and how to answer 'any recent trades' via latest_contract.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_complex_rent_by_pyeong단지 평형별 전월세 시세ARead-onlyIdempotentInspect
단지의 평형별 전세 보증금·월세 중앙값을 조회한다. 전세가율(전세÷매매) 계산의 전세 축이다.
complex_key·complex_name 중 하나는 필수. 부분일치는 동명 단지가 섞일 수 있으니
가능하면 realty_search_complexes로 complex_key를 먼저 특정하라.
행 키 supply_pyeong은 **분양평**(전용㎡ ÷ 3.3058 ÷ 0.745 반올림) 기준이다.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 동명 단지를 가르는 지역 — 시군구나 **동**까지(예: '강동구', '방화동'). complex_ambiguous가 돌아오면 이 인자로 좁혀 다시 부르라 | |
| complex_key | No | 정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key | |
| compare_sale | No | 같은 12개월 창의 **매매가를 함께 뽑아 전세가율·전월세 전환율·갭을 계산**한다(기본 켬). 종전엔 note가 '매매를 period_months=12로 따로 불러 나눠라'라고만 지시해 호출자가 손으로 했고, 창을 안 맞추면 전세가율이 수 %p 왜곡됐다 — 그 계산을 서버가 진다 | |
| complex_name | No | 키를 모를 때 단지명 부분일치 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: compare_sale defaults on and the server now performs the sale-side fetch in the same 12-month window to avoid ratio distortion, and include_footnotes controls whether full derivation text or a one-line summary is returned. That is substantive disclosure a caller could not infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then routing guidance, then the row-key caveat. Every line carries information, though the compare_sale paragraph's historical aside ('종전엔 note가 ... 호출자가 손으로 했고') is longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry return-shape information — it identifies the row key (supply_pyeong as 분양평), states that compare_sale adds 전세가율/전환율/갭 values, and explains footnotes verbosity. Minor gaps remain (pagination, whether missing complexes return an empty set), but the essentials for a correct call are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not carry — notably the row-key definition that supply_pyeong is 분양평, derived as 전용㎡ ÷ 3.3058 ÷ 0.745 rounded. It also restates the complex_key/complex_name at-least-one requirement and the compare_sale computation semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('단지의 평형별 전세 보증금·월세 중앙값을 조회한다') and immediately scopes itself as the jeonse axis of the jeonse-to-sale ratio, which separates it from the sale-side sibling realty_complex_pyeong_price. An agent can tell what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite path: '가능하면 realty_search_complexes로 complex_key를 먼저 특정하라', and explains that partial matching with complex_name risks mixing same-named complexes. The region parameter's role in disambiguation is covered in the schema. No explicit when-not-to-use, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_complex_report[유료] 단지 통합 리포트ARead-onlyIdempotentInspect
[유료] 단지 하나의 시세·전세·기본정보를 통합 조회한다.
입지는 **location.facts(원시값)로 답하라** — 최근접역 이름·직선거리, 반경 500m·1km 안
정류장·병원·마트 수와 1km 안 초·중·고 수를 poi 원장에서 직접 센 값이다. location.overall_score·scores는
미검증 참고값이라(location.score_demotion) 순위·비교·'입지 좋음' 판정에 쓰지 마라.
응답에 좌표(latitude/longitude)와 complex_key가 들어 있다 — 이어서
realty_poi_nearby(시설 목록)·realty_predict_price(예측)에 그대로 넣어 심층 분석하라.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | 단지명 (예: 반포자이) | |
| complex_key | No | 정확한 단지 키 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/destructive=false, but the description adds real value beyond them: it flags the tool as paid ('[유료]'), names the data source (poi 원장), and warns that score_demotion makes certain scores unverified reference values. It also discloses that the response carries latitude/longitude and complex_key, which an agent needs for chaining.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, followed by interpretation rules and chaining advice, with bold emphasis aiding scanability. It is somewhat dense and multi-clause, but every sentence carries actionable content (do-not-use warning, follow-up tool names).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partly compensates by naming key response fields (location.facts contents, coordinates, complex_key) and their reliability caveat. For a two-optional-param paid report tool this is largely complete, though it leaves other returned sections (전세/시세 detail shape) unmentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name ('단지명, e.g. 반포자이') and complex_key are already documented in the schema, establishing the baseline of 3. The description only incidentally notes that complex_key appears in the response for reuse, adding no lookup semantics or precedence rules between the two optional, mutually-substitutable parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: an integrated lookup of 시세·전세·기본정보 for a single complex, with '[유료]' scope and '단지 하나' narrowing. This differentiates it from sibling specialists like realty_complex_pyeong_price or realty_complex_rent_by_pyeong by its aggregated nature, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete qualitative guidance: answer location questions using location.facts, do NOT use overall_score/scores for ranking or 'good location' judgments, and feed the returned coordinates/complex_key into realty_poi_nearby and realty_predict_price. It covers how to use the output and which tools to chain, but does not state when to pick this tool over the other complex-level siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_demographics인구통계 (인구·가구·연령·인구이동)ARead-onlyIdempotentInspect
지역 인구·가구·고령화·순유입 통계를 조회한다.
지역 인구통계를 조회한다 — "인구 줄고 있어?", "1인 가구 비율은?", "고령화 심해?",
"순유입 되는 동네야?"류 질문용.
응답 meta.data_as_of가 실제 최신 시점이다 — warning이 있으면 그대로 사용자에게 전달하고,
밀린 수치를 "지금 인구"로 단정하지 말 것. 연간 계열(households·age)은 기준연도를 밝혀라.
households만 동명 시군구(중구·서구 등)를 거절한다(원천 단명 수집 결함) — 그 경우
population·migration(정식 명칭 수집)으로 대신 조회하라.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | population=월별 인구·세대수 / households=연별 가구원수별 가구(1인가구 등) / age=연령대(5세 구간) 분포·고령화 — 시도 단위만 / migration=월별 전입·전출·순이동 | |
| months | No | population·migration 시계열 창(개월) — 최대 60(5년)이고 더 긴 창은 이 도구로 못 받는다. 연간 계열엔 미적용 (허용 범위 1~60) | |
| region | Yes | 시도(예: 서울)나 시군구(예: 강남구, 수원시). age는 시도 단위만 제공. age에 한해 '전국'도 가능 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic safety profile (readOnly, openWorld, idempotent, non-destructive). The description adds genuinely non-obvious behavior: meta.data_as_of is the authoritative recency, warnings must be surfaced to the user, stale figures must not be asserted as 'current population', annual series require disclosing the base year, and households uniquely rejects same-name districts (중구·서구) due to a source-data defect. That is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by trigger examples, then the recency/caveat block — good ordering with each sentence doing work. Minor redundancy between the opening line and the second paragraph, which restate the same 'query regional demographics' purpose, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, no-output-schema tool this covers what an agent needs: metric-specific applicability, region granularity, the data-recency contract, how to handle warnings, and the one known hard failure with a prescribed alternative. Nothing material to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, and the schema already documents the metric enum, months window (1–60), and region granularity. The description still adds a cross-parameter constraint not in the schema: households' region rejection and the required fallback to population/migration (which use official names), plus the annual-vs-monthly applicability of the base-year disclosure. Marginal but real added value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource scope ('지역 인구·가구·고령화·순유입 통계를 조회한다') and the four metric families named (population, households, aging, migration) map cleanly onto the enum. An agent can distinguish this from price/auction siblings like realty_region_price_stats or realty_region_trend_basket without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete user-question triggers ('인구 줄고 있어?', '1인 가구 비율은?', '순유입 되는 동네야?') that map to specific metrics, and explicitly routes around the households failure case to population·migration. It stops short of stating when NOT to use this tool versus demographic-adjacent siblings (e.g. compare_regions, location_scores), so it is clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_get_auction_case경매 사건 상세 조회ARead-onlyIdempotentInspect
사건번호로 경매 물건의 상세를 조회한다.
재매각 사건의 입찰보증금처럼 **사건마다 다른 매각조건** 질문도 사건을 특정하는 여기서 시작한다.
사건번호는 법원 간 유일하지 않다(전국 평균 2.8개 법원에서 중복). court_name을 생략하면
중복 시 오류와 함께 후보 법원 목록이 돌아오니, 그걸 보고 법원을 지정해 다시 호출하라.
`rights` = 매각물건명세서 핵심(최선순위 설정·인수되는 권리 원문·위험 플래그·배당요구종기).
이것은 법원 공시의 전달이지 권리분석 판단이 아니다 — 답할 때 rights.disclaimer를 함께
전하고, 등기부·임차인 현황 전체가 아님을 밝혀라. rights가 null이면 명세서 미수집
상태(rights_note에 사유)이므로 권리관계를 절대 지어내지 말 것.
⚠️ `rights.claim_amt_10k`는 **경매신청 채권자의 청구금액**(만원)이다 — 임차인
보증금이 아니다(claim_amt_note 참조). 보증금 액수는 이 데이터에 없다.
`min_bid_source`가 item_list면 최저가가 낡았을 수 있다 — 함께 오는 `min_bid_note`를
사용자에게 전하고 단정하지 마라(목록 도구와 같은 경고다).
유찰 이력·기일별 저감·사진은 realty_auction_history가 담당이다.
재매각 보증금 비율은 법원이 사건마다 정하는 특별매각조건이라 규범 표에 없다 — 응답에 그 값이
없으면 매각물건명세서·매각기일 공고에서 확인하라고 전하라(비율을 기억으로 단정하지 말 것).
**이 축의 자리** — 사건번호·법원명을 **따로 받아 구조화 필드**로 돌려주는 상세가 이
도구다. `search` 결과의 id(`"법원명|사건번호"`)를 그대로 들고 있다면 `fetch`가 그 덩어리를
쪼개지 않고 받아 문서형 텍스트로 준다 — 둘은 대체재가 아니라 입력·응답 형태가 다른
짝이다. 조건으로 여러 건을 훑는 것은 `realty_search_auctions`다.
| Name | Required | Description | Default |
|---|---|---|---|
| case_no | Yes | 사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 1~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'처럼 하이픈으로 써도 서버가 '타경'으로 펴고 무엇을 폈는지 응답에 적는다. 다만 '3571'처럼 **연도가 없으면 못 편다**(연도를 지어내면 다른 사건이 된다) — 사용자에게 연도를 물어라 | |
| question | No | (선택) 이 조회를 하게 된 사용자 질문 한 문장 — 맞는 다른 축·도구를 question_routing으로 돌려준다. 이름·연락처는 빼라 | |
| court_name | No | 법원명 — '서울동부지방법원'·'인천지방법원'처럼 정식명으로 넣는다('진주지원'처럼 지원명만인 행도 있다). '의정부지법'처럼 줄여 넣어도 서버가 정식명으로 편다. 사건번호는 법원 간 유일하지 않아(전국 평균 2.8개 법원에서 중복) 생략하면 후보 목록이 돌아온다. **여기 넣은 법원에 그 사건이 없으면 서버가 법원 없이 한 번 더 찾아보고**, 그래도 없으면 원인 셋(표기·법원·수록범위)을 갈라 돌려준다 | |
| market_context | No | 기본 true — 같은 단지(빌라는 같은 동·면적대) 시세 대비 비율과 지역 낙찰가율을 `market_context`로 함께 싣는다(+2~4초). 사건 정보만 필요하면 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so safety and repeat-safety are covered structurally. The description still adds genuinely behavioral context: rights may be null (spec sheet uncollected, never fabricate), claim_amt_10k is the applicant creditor's claim not a tenant deposit, and min_bid_source=item_list means a possibly stale minimum bid requiring min_bid_note. These are real caveats, but they lean toward output interpretation rather than undisclosed operational traits like auth or rate limits, so a 3 fits against an already-covered annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the duplicate-court workflow are front-loaded in the first paragraph, and the rest is organized around return-field caveats. It is dense and longer than most definitions, but nearly every sentence carries a distinct warning or routing rule rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return values, and it does: rights contents and disclaimer, null-rights meaning, claim_amt_10k semantics, min_bid_source/min_bid_note staleness, and the market_context payload. Nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly echoes the schema (case_no is not unique across courts, omitting court_name returns candidates), but it adds actionable semantics by framing those parameters as a retry loop and warning against inventing a year for a bare case number. That is marginal added meaning above a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource (look up auction property details by case number), and the closing paragraph explicitly distinguishes this tool from its siblings: realty_search_auctions handles condition-based sweeps, realty_auction_history owns price-reduction history and photos, and fetch returns the id blob as document text. An agent can route between all three without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to start here (per-case sale conditions like re-auction deposit ratios), gives an explicit recovery workflow when court_name is omitted (error plus candidate court list, then re-call with a court), and names the alternative tools for the queries it does not serve. When-not and alternative coverage is unusually complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_invest_risk[유료] 지역 투자위험 분석ARead-onlyIdempotentInspect
[유료] 지역의 투자 위험도를 변동성·유동성·공급압력 축으로 점수화한다.
응답의 disclaimer(통계 요약이며 투자 권유 아님)를 사용자에게 반드시 함께 전달하라.
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | 시군구명 (예: 강남구) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe, read-only, idempotent profile, so the description's job is to add traits beyond that — and it does: it flags the tool as [유료] (cost-bearing) and discloses that the response carries a disclaimer field the agent must relay. That is genuine behavioral context beyond the structured annotations. It stops short of describing output shape or limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and axes, then a single operational instruction. Two short sentences with no filler; the only minor cost is that the paid/disclaimer notes are interleaved with purpose rather than separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with no output schema, the description conveys what is computed (three axes), that the result is a score, and an important response-side obligation (disclaimer). What is missing is any hint at the return structure or how scores should be interpreted, which matters slightly more given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single well-described 'region' parameter (시군구명 예: 강남구), so the schema already carries the semantics. The description adds no parameter-level detail (e.g., accepted granularity or edge cases) beyond the schema, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (점수화한다 / scores) and resource (지역 투자 위험도 / regional investment risk) and even enumerates the scoring axes (변동성·유동성·공급압력 / volatility, liquidity, supply pressure). This is clear on its own, but it does nothing to distinguish itself from plausible siblings like realty_market_signals, realty_supply_demand_balance, or realty_location_scores, so it stays below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many adjacent risk/market tools, nor any prerequisites or exclusions. The only guidance provided is a post-call instruction about relaying a disclaimer, which is not usage guidance for selecting the tool. The [유료] marker signals cost but not applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_loan_eligibility쓸 수 있는 대출 상품 나열 — 용도×지역×주택수 교차 판정ARead-onlyIdempotentInspect
내 조건에서 쓸 수 있는 대출 상품을 상품별로 나란히 판정한다.
**"내 조건이면 어떤 대출을 쓸 수 있나"**를 상품별로 나란히 낸다 — 사용자가 어느 규칙 토픽을
물어야 할지 몰라도 되게 하는 라우터다.
이 도구가 존재하는 이유: 대출 규칙이 상품별 토픽 7곳에 흩어져 있어서, 지금까지는 **호출자가
어느 토픽을 물어야 할지 알아야** 했다(2026-08-14). 용도·지역·주택수만 주면 **쓸 수 있는 상품과
못 쓰는 이유**를 함께 낸다.
경계: ① **주택 수·생애최초·신혼은 선언**이다(서버가 사실판정하지 않는다) ② **한도 금액을
계산하는 건 구입 목적의 은행권뿐**이고 그건 realty_loan_limit이 한다 — 이 도구는 **자격 대조와
라우팅**이다 ③ 전세·중도금은 보증기관·사업장이 지배해 **한도를 계산하지 않는다**, 전세반환은
**경과조치 해당 여부가 서류로 보는 사실판단**이라 계산하지 않는다 ④ 규칙의
근거·불확실성은 각 상품 토픽(응답의 `topic`)에 있으니 함께 읽어라.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 소재지(시군구까지, 예: '서울 마포구'·'세종특별자치시') — 수도권·규제지역 판정에 쓴다 | |
| purpose | Yes | 자금 용도 — **같은 담보라도 용도가 규제를 가른다**(구입=LTV·가액구간 한도, 생활안정=1억 한도·다주택 금지, **전세반환=세입자에게 보증금 돌려주는 목적(퇴거자금) — 원칙 1억이지만 6·27 이전 계약분 경과조치가 붙는 유일한 축**, 전세=세입자로 들어갈 때 쓰는 전세자금대출, 중도금=집단대출). ⚠️ **'전세'와 '전세반환'을 섞지 마라** — 방향이 반대다. 모르면 물어라 | |
| homes_owned | No | **세대 기준** 보유 주택 수(선언) — 0=무주택, 1, 2+=다주택. 명의가 갈려도 세대로 센다. 서버는 주택 수를 판정하지 않는다 (허용 범위 0~9) | |
| is_newlywed | No | 신혼 해당 여부(선언) | |
| is_first_time | No | 생애최초 해당 여부(**선언** — 서버는 판정하지 않는다) | |
| house_price_10k | No | 대상 주택 가격(만원) — 정책상품 가격요건 대조에 쓴다 | |
| total_assets_10k | No | 순자산(만원, 자산−부채 — 부채가 더 많으면 음수) — 버팀목·디딤돌 자산 요건은 **순자산가액** 기준이다. **버팀목 전세는 자산 요건이 핵심 관문**이라 전세 문의면 받아라 | |
| annual_income_10k | No | 부부합산 연소득(만원) — 정책상품 소득요건 대조에 쓴다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavioral context on top: inputs like homes_owned/first-time/newlywed are declarations the server does not fact-judge, limits are deliberately not calculated here, and rule uncertainty lives in each product `topic`. This is substantive disclosure well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and each boundary clause carries useful information. It is somewhat verbose, with bold markup and meta-narrative (the pinned date, '이 도구가 존재하는 이유') that could be trimmed, but the structure remains readable and front-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what comes back (usable products plus reasons for exclusion, and the `topic` pointer for rule basis/uncertainty). All 8 parameters are documented in the schema, and the read-only safety profile is covered by annotations, so an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the per-parameter descriptions are already extremely rich (defining 세대 기준, 순자산, 전세 vs 전세반환 direction). The description only restates that purpose/region/homes are the judgment axes and adds no syntax or format detail beyond the schema. Baseline 3 is correct when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (side-by-side eligibility judgment) on a specific resource (loan products), with the exact axes (purpose × region × homes owned). It explicitly names the sibling it is not (realty_loan_limit) and explains its router role, so an agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (the caller does not know which of the 7 rule topics to ask), an explicit alternative (realty_loan_limit handles limit amounts for purchase-purpose bank loans), and explicit when-NOT-to-expect-calculations (jeonse/mid-payment governed by guarantee agencies, jeonse-return being document-based). Routing guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_loan_limit주담대 규제 상한 판정 — LTV·한도·만기·DSR (선언 조건 기준)ARead-onlyIdempotentInspect
선언한 조건으로 주택담보대출 규제 상한을 결정론으로 계산한다.
선언된 조건(지역·시가·차주 유형·소득)에 대해 **주담대 규제 상한**을 결정론으로
계산한다 — LTV 상한액, 수도권·규제지역 가액구간 한도(6/4/2억), 만기 상한(30년),
스트레스 DSR 반영 최대 대출액과 **어느 규제가 최종 상한인지**(binding). "10억 집,
생애최초, 연소득 8천이면 얼마까지 나와?"류 질문의 자리다.
경계를 지켜라: ① 차주 유형은 **선언**이다 — 생애최초·주택 수 해당 여부는 사실판단이라
서버가 판정하지 않는다(응답 inputs_declared가 그 선언을 에코한다). ② 결과는 규제
상한이지 **대출 승인·확약이 아니다** — 은행 심사(소득 인정·방공제·신용도)로 더 줄 수
있다. ③ **DSR 상한은 금리유형(rate_type)에 따라 크게 갈린다** — 기본값 '변동'은
스트레스 금리 전액 가산이라 가장 작은 값이다. 사용자가 상품을 안 정한 상태면
`dsr.by_rate_type` 비교표를 함께 전하고 "N억까지만 된다"고 단정하지 마라. ③ 규칙 원표·근거는 realty_policy_rules(topic=loan_rules), 규제지역 지정 현황은
topic=regulated_area, 생애최초 취득세 감면의 세율표 본체는 topic=acquisition_tax.
특정 분양 공고에 대한 시점별(계약금·중도금·잔금) 자금 판정은
realty_presale_funding_plan. 응답의 uncertainties·disclaimer를 사용자에게 함께 전하라.
| Name | Required | Description | Default |
|---|---|---|---|
| lender | No | 업권 — DSR 한도가 은행 40% / 제2금융권 50%로 갈린다 | 은행 |
| region | No | 주택 소재지(시군구까지, 예: '서울 마포구'·'성남시 분당구'·'부산 해운대구'). 규제지역·수도권 판정에 쓴다. 해석이 모호하면 후보를 돌려주니 is_regulated·is_metro로 직접 선언해도 된다 | |
| borrower | Yes | 차주 유형 — **사용자 선언**이다(서버는 생애최초·주택 수를 판정하지 않는다). 생애최초=본인·배우자 모두 주택 소유 이력 없음, 1주택_처분조건부=6개월 내 기존주택 처분 약정, 서민실수요=우대 요건 충족을 선언한 경우 | |
| is_metro | No | 수도권(서울·경기·인천) 여부 직접 선언 — region 대신/우선 적용 | |
| rate_type | No | 주담대 금리유형 — **스트레스 금리 적용비율이 갈리는 축이다**(변동 100%, 혼합형·주기형은 고정기간 비중별 차등, 순수고정 미적용). 기본값 '변동'은 최악 가정이라 한도가 가장 작게 나온다. 사용자가 상품을 안 정했으면 응답의 by_rate_type 비교표를 함께 전하라. 혼합형=고정기간 후 변동, 주기형=N년 주기로 금리 재산정, 순수고정=만기까지 고정 | 변동 |
| is_regulated | No | 규제지역(투기과열·조정대상) 여부 직접 선언 — region 대신/우선 적용 | |
| stress_stage | No | 스트레스 금리 단계 가정. 기본 '현행'. **지방(비수도권 비규제) 주담대만** 갈린다 — 지방은 2026-12-31까지 한시 2단계(0.75%p)이고 이후 연장 여부는 미정이다. '3단계'를 주면 유예가 끝나 3단계(1.5%p×적용비율 3단계)가 그대로 적용되는 가정으로 계산한다. 수도권·규제지역은 이미 3단계라 값이 같다 | 현행 |
| credit_loan_10k | No | 신용대출 잔액 또는 받을 예정액(만원). **직접 연 원리금을 계산해 넣지 마라** — 산정만기 5년 강제·산식 두 갈래·스트레스 1억 문턱이 전부 함정이라 서버가 계산한다. existing_annual_debt_payment_10k와 함께 주면 둘 다 합산한다 | |
| house_price_10k | Yes | 주택 시가(만원 단위, 예: 100000=10억). 가액구간 한도가 '시가' 기준이라 분양가·공시가가 아닌 시세를 넣는다 | |
| loan_term_years | No | 희망 만기(년). 수도권·규제지역은 30년 상한으로 조정되며 조정 사실을 응답에 싣는다 (허용 범위 1~50) | |
| desired_loan_10k | No | 받으려는 주담대 금액(만원). 주면 '이만큼 되나'를 판정하고, DSR에 막히면 **무엇을 얼마나 바꾸면 들어가는지**(금리유형·만기·신용대출 축소·금리)를 함께 낸다. '4억 받으려는데 되나요'류 질문의 자리 — 최대치만 받아 모델이 역산하게 두지 마라. credit_loan_rate_pct를 함께 주면 **이 주담대를 먼저 받은 뒤 남는 신용대출 추가 여력**(desired.credit_room_after_mortgage)까지 계산한다 — credit_loan_10k를 주면 그 잔액을 기존 신용대출로 보고 추가분만 센다 | |
| rate_fixed_years | No | 혼합형의 고정금리 기간 또는 주기형의 금리변동주기(년). 미지정이면 시중은행 통상인 5년으로 가정하고 가정 사실을 응답에 싣는다. 변동·순수고정에는 무의미 (허용 범위 0~50) | |
| annual_income_10k | No | 연소득(만원) — interest_rate_pct와 함께 주면 DSR 상한 대출액까지 계산 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 | |
| interest_rate_pct | No | 약정금리 가정(%, 예: 4.2) — DSR 계산에 필요. 없으면 DSR 금액 계산은 생략된다 (허용 범위 0 초과~20) | |
| credit_loan_rate_pct | No | 신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수다(이자 없이는 원리금을 못 낸다) (허용 범위 0 초과~20) | |
| existing_annual_debt_payment_10k | No | 기존 대출의 연간 원리금 상환액 합계(만원) — DSR 계산에서 차감 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description still adds real behavioral context: borrower type is a user declaration the server does not adjudicate (echoed in inputs_declared), the output is a ceiling that banks may cut further, DSR swings sharply with rate_type (default '변동' being the worst case), and the agent must relay uncertainties/disclaimer rather than assert 'N억까지만 된다'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the boundary list is dense and useful for a 17-parameter domain tool, so the length is largely earned. Minor flaws: the circled-number marker ③ is used twice and the third bullet restates guidance already present in the schema, adding slight redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well: it names expected response pieces (inputs_declared echo, dsr.by_rate_type comparison table, desired.credit_room_after_mortgage, footnotes, uncertainties, disclaimer) and explains what changes appear in the output (e.g., maturity adjustment surfaced in the response). An agent has enough to call it and to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the per-parameter semantics (rate_type axis, stress_stage limited to non-metro, credit_loan_10k traps, desired_loan_10k judging) are already carried by the schema. The description largely restates those same caveats rather than adding new parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource (deterministically computing the mortgage regulatory cap) and enumerates the concrete outputs: LTV cap, metro/regulated-area price-band caps (6/4/2억), 30-year maturity cap, stressed-DSR max loan, and which rule is binding. It even anchors the canonical user question ('10억 집, 생애최초, 연소득 8천이면 얼마까지 나와?'), and names the siblings it is not (realty_policy_rules, realty_presale_funding_plan).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing: this is the seat for 'how much can I get' questions, while rule tables go to realty_policy_rules, regulated-area status to topic=regulated_area, acquisition-tax rates to topic=acquisition_tax, and time-phased presale funding to realty_presale_funding_plan. It also states a clear exclusion — the result is a regulatory ceiling, not an approval or commitment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_location_scores단지 입지 원시값(역 거리·주변 학교·정류장 수) + 참고 점수ARead-onlyIdempotentInspect
단지 입지를 원시값으로 답한다 — "역세권이야? 학군 어때? 병원 가까워?" 담당.
**답은 행마다 맨 앞의 location_facts로 하라**: 최근접 지하철역 이름·노선·직선거리(m,
상한 없음 — 시골 단지는 30km도 그대로 나온다), 반경 500m·1km 안 역·버스 정류장 수,
1km 안 초·중·고 수와 최근접 초등학교 거리, 반경 안 병원(전 의료기관·병원급 분해)·마트
수. 전부 poi 원장에서 직접 센 값이라 재현할 수 있다. "역세권이야?"는
subway.nearest_distance_m와 walk_band로, "초품아야?"는 schools.nearest_elementary로 답하라.
같은 행의 transit_score·school_score는 **미검증 참고값**이다(응답 score_demotion) —
transit 90점 이상이 82%(2026-10-17)이고 역이 5km 넘게 떨어진 단지도 90점이 나와 변별력이 없다.
**점수로 순위를 매기거나 '역세권·학군 좋음'을 판정하지 마라.** 점수가 null이면 미측정이지
0점이 아니다. 학군 점수는 진학률·학원·학교 수 합성(v5)이지 학교 배정이 아니다.
complex_key/complex_name이면 단지 행(원시값은 앞 5개 단지), region만 주면 지역 집계 +
점수 상위 5 단지(점수 순이라 순위로 인용 금지). 여러 단지는 단지마다 부르지 말고
realty_search_complexes 한 번으로 받되 순위는 price_per_exclusive_m2로. 점수가 없는 단지도 색인에 좌표가 있으면
원시값을 준다. 없는 단지는 not_found — 지어내지 말고 realty_search_complexes로 실존부터
확인하라. complex_key는 공백 1칸으로 정규화돼 다른 도구에 그대로 넣을 수 있다.
시설 **목록**(이름별 거리)이 필요하면 [유료] realty_poi_nearby.
**거주 후기·평판("살기 좋대?"·"주민들 평 어때?")은 이 데이터에 없다** — 시설 개수는 평판의
대용이 아니니 그런 질문에는 이 도구를 부르지 말고 데이터에 없다고 답하라.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 지역명 — 단독이면 지역 집계+상위 단지, complex_name과 함께면 검색 범위 | |
| complex_key | No | 정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key | |
| complex_name | No | 단지명 일부 (부분일치) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read-only/idempotent profile, but the description adds substantial behavioral context: scores are labeled unverified reference values with 82% of transit scores ≥90 and no discriminative power, null means unmeasured (not 0), school score is a v5 composite not school assignment, complex_key is normalized to a single space, and missing complexes yield not_found with a no-fabrication rule.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the bolded 'location_facts first' directive leads, followed by field contents, caveats, and sibling routing. Some parenthetical asides (30km rural examples, v5 composition) add length, but nearly every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and delivers: it names the response container (location_facts), the specific sub-fields, the score_demotion flag, and the fallback behavior. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond the schema — it explains the region-alone case (region aggregate + top-5 complexes by score, with ranking citation forbidden) versus complex_key/complex_name (complex rows, raw values for the first 5), which the schema only states tersely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (returns raw location facts — nearest subway name/line/distance, station/bus-stop counts, school counts, hospital/mart counts) and explicitly contrasts itself with the unverified reference scores in the same row. An agent can distinguish it from realty_poi_nearby and realty_search_complexes without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use realty_search_complexes once for multiple complexes (rank by price_per_exclusive_m2), use [paid] realty_poi_nearby for facility name-level lists, and do NOT call this tool for reputation/resident reviews. It also states when-not (no ranking by score, no '역세권/학군 좋음' verdicts) and the not_found fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_macro_indicators거시 지표 (기준금리·KOSPI·M2 시계열)ARead-onlyIdempotentInspect
한국 기준금리·KOSPI·M2, 미 연준금리·S&P500 등 거시 지표의 월별 시계열을 조회한다. "금리가 집값에 어떤 영향?"류 배경 분석용.
⚠️ 계열마다 신선도가 다르다 — meta.series_as_of가 계열별 실제 최신 시점이다(예: 미
연준금리·S&P·코인은 최신인데 한국 기준금리·KOSPI는 2024-12 정지, ECOS 재수집 대기).
밀린 계열을 "지금 금리"로 인용하지 말고 반드시 그 계열의 시점을 함께 밝혀라.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | 최근 몇 개월치 (허용 범위 1~240) | |
| indicators | No | 쉼표 구분 지표명: bok_base_rate(한국 기준금리 %), kospi(월말 종가), korea_m2(M2 평잔·원계열, 조원), fed_rate(미 연준금리 월평균 %), us_m2(미 M2 계절조정 $B), sp500, btc_usd, eth_usd(월말 종가). 비우면 전체. 목록에 없는 이름은 거절한다(조용히 버리지 않는다) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses a critical behavioral trait: per-series data freshness differs, meta.series_as_of is the real latest timestamp, and some series (KR base rate, KOSPI) are frozen at 2024-12 pending ECOS re-harvest. It even instructs the agent to state each series' timestamp rather than quoting stale data as current — exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, usage context second, and the staleness caveat last as a warning block. It is appropriately sized, with only mild redundancy in restating specific indicator names already given in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by revealing the meta.series_as_of field and warning about per-series staleness — the main correctness trap for this tool. Combined with the 100%-covered parameter schema, an agent has what it needs, though it never notes pagination/volume limits for up to 240 months across eight series.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: months and indicators are both fully described in the schema, including the comma-separated indicator names and the reject-unknown-names behavior. The description adds nothing parameter-specific beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (조회한다) and an enumerated resource (KR base rate, KOSPI, M2, US Fed rate, S&P500 monthly series), so an agent can immediately tell it returns macro time series rather than property-level data. It does not, however, name or differentiate itself from the potentially confusable sibling realty_market_signals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete usage context — background analysis for questions like 'how do interest rates affect home prices?' — which tells the agent when this tool fits. It offers no explicit exclusions or named alternative tools, so the routing guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_market_signals[유료] 시장 신호 (미분양·심리지수)ARead-onlyIdempotentInspect
[유료] 미분양 추이와 시장심리지수를 한 번에 조회한다. 매수 타이밍 판단의 거시 신호. 준공후 미분양(unsold_completed, 지역 합계)도 같은 모양으로 싣는다. sigungu를 주면 시군구 미분양 추이(unsold_sigungu)를 별도 키로 덧붙인다.
기본 창은 **6개월**이다(방향 판단에 필요한 최소). 더 긴 추이가 필요하면 months를
올리되, 전국 조회에서 창을 넓히면 오래된 달부터 예산에 맞춰 떨어지고 그 사실이
meta.truncated·meta.truncated_note에 값으로 실린다 — region을 지정하면 전 창이 온다.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | 시계열 개월 수 (기본 6). 전국(region 미지정)에서 창을 넓히면 시도 18곳×월 행이 곱으로 늘어 응답이 도구 결과 한계에 걸린다 — 긴 창이 필요하면 region으로 지역을 좁혀라 (허용 범위 1~36) | |
| region | No | 지역명 (예: 서울). 비우면 전국 | |
| sigungu | No | 시군구명 (예: 창원시·수원시·중구). 주면 그 시군구의 미분양 추이를 unsold_sigungu에 **따로** 싣는다 — 시도 배열(unsold)과 합산하지 마라(이중계상). 같은 이름이 여러 시도에 있으면(중구·동구 등) region으로 시도를 함께 줘라. 심리지수·준공후 미분양은 시도 단위라 시군구로 안 좁혀진다 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds real behavioral content beyond them: the default 6-month window, that nationwide windows drop oldest months and surface this in meta.truncated / meta.truncated_note, and that region restores the full window. It does not mention the '유료' (paid) cost/auth implications flagged only in the title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the combined purpose, then layered detail on output keys and windowing. Sentences are dense but each covers distinct information (response keys, window default, truncation semantics); no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries responsibility for return shape and does so partially by naming the unsold_completed and unsold_sigungu keys and the meta.truncated fields. It stops short of describing the sentiment-index output structure, but the annotations and 100% schema coverage cover the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents months (including the truncation caveat and 1-36 range), region, sigungu, and include_footnotes. The description largely restates the schema's own param behavior (default window, sigungu separate key), so it adds only marginal value over structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resources: querying unsold-inventory trends (미분양) and the market sentiment index together, framed as a macro buy-timing signal. The scope is concrete enough to distinguish it from pure price tools, but it never names a sibling (e.g. realty_macro_indicators or realty_supply_demand_balance) that an agent might confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via '매수 타이밍 판단의 거시 신호' and explains the months/region window tradeoff, which is useful operational guidance. However there is no explicit when-to-use versus alternatives, and no statement of when another tool would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_member_transfer_check조합원 지위양도 가능 판정 — 투기과열지구×사업유형×단계 (도시정비법 39조)ARead-onlyIdempotentInspect
투기과열지구 정비사업 물건을 지금 사면 조합원 지위를 승계받는지 판정한다.
투기과열지구에서 재건축·재개발 물건을 **지금 사면 조합원 지위를 승계받을 수 있는지**를
도시정비법 39조 2항으로 결정론 판정한다 — 투기과열지구 여부(regulated_area) × 사업 유형 ×
진행 단계(서울은 정보몽땅 목록에서 자동 결합). "한남3구역 지금 사도 입주권 나와?"의 자리다.
경계를 지켜라: ① 판정은 **원칙 제한 여부**까지다 — 예외(양도인의 근무·질병·상속·해외이주,
10년 소유+5년 거주 등)는 양도인 사정의 사실판단이라 갈림길로만 주고, **사업지연 예외
3종은 인가일·착공일 데이터가 없어 판정 불가를 실토한다**. ② 재개발엔 부칙 함정(2018-01-25
이전 사업시행인가 신청 구역은 제한 밖)이 있어 선언 없이는 단정하지 않는다. ③ 제한이 없어도
**토지거래허가구역은 별개 제도**다(서울 전역 지정 중 — 실거주 의무 등). ④ 조문 원문·예외
전체 목록은 realty_policy_rules(topic=redevelopment_rules), 투기과열 지정 현황은
topic=regulated_area, 분양자격 자체가 불확실하면 topic=redevelopment_entitlement,
사업장 목록·단계 열람은 realty_redevelopment. 응답의 exceptions·disclosures를 함께 전하라.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 사업장 소재지(시군구까지, 예: '서울 용산구'·'성남시 수정구') — 투기과열지구 판정과 (서울이면) 단계 자동 조회에 쓴다. 모호하면 후보를 돌려주니 is_speculation_zone을 직접 선언해도 된다 | |
| project_name | No | 사업장·구역 이름(예: '한남3구역') — 서울이면 정비사업 목록에서 진행 단계를 자동으로 잇는다(유일 매치만). 서울 밖은 목록이 없어 project_stage 선언이 필요하다 | |
| project_type | Yes | 사업 유형 — 제한 개시 시점이 갈린다(재건축=조합설립인가 후, 재개발=관리처분인가 후). 가로주택·소규모재건축 등 소규모정비사업은 별도 법제라 이 도구가 판정하지 않는다 | |
| project_stage | No | 진행 단계 직접 선언 — project_name 조회 대신/우선 적용. 허용값은 서울 정비사업 목록(정보몽땅)의 실측 어휘 전량이라, **자동 조회가 돌려준 stage를 그대로 다시 넣으면 같은 판정이 재현된다**(예: '철거'·'철거 및 착공'·'추진위구성') | |
| is_speculation_zone | No | 투기과열지구 여부 직접 선언 — region 대신/우선 적용 | |
| first_approval_application_after_20180125 | No | **재개발 부칙 선언** — 이 구역의 최초 사업시행계획인가 신청이 2018-01-25(법률 제14943호 시행일) 이후인가. 이전이면 관리처분인가 후에도 지위양도가 가능하다(서울 22개 구역 실재). 모르면 비워두라 — 서버가 미확인으로 실토한다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, so the bar is lower, and the description still adds substantial behavioral context: it declines to assert without a declaration, admits '판정 불가 실토' when 인가일·착공일 data is missing, and flags the 부칙 trap plus the separate 토지거래허가구역 regime. No contradictions. Slightly short of 5 only because it leaves response-shape specifics to '전하라' without describing the output it will actually return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core judgment and the concrete example before the boundary list. The four numbered boundaries and the sibling-routing sentence are dense but each earns its place by preventing a misuse; only mild verbosity keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deterministic multi-factor legal judgment with no output schema and 100% schema coverage, the description supplies everything an agent needs: inputs to declare, what the tool will and will not judge, the addendum edge case, the separate permit-zone caveat, and where to route adjacent questions. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that region/project_name auto-join the Seoul stage list, that project_name matches only unique matches, that outside Seoul project_stage must be declared, and that re-declaring the returned stage reproduces the same judgment. That elevates it above the schema-only baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (판정) and resource (조합원 지위양도 승계 가능 여부) with the exact legal basis (도시정비법 39조 2항) and the three-way determinant (투기과열지구 × 사업유형 × 단계). The '한남3구역 지금 사도 입주권 나와?' framing makes the concrete decision it renders unmistakable and separates it from sibling policy tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes alternatives: realty_policy_rules for statute text, realty_redevelopment for project lists/stage, realty_redevelopment_entitlement when subscription eligibility itself is uncertain, and topic=regulated_area for designation status. It also states scope exclusions (소규모정비사업 not judged, exceptions handed off as forks).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_move_in_supply입주 예정 물량 — 입주장 리스크ARead-onlyIdempotentInspect
지역의 입주 예정 물량을 연월별로 집계한다.
지역의 입주 예정 물량을 연월별로 집계한다 — "○○ 입주장 리스크 있어?", "내년에
입주 물량 얼마나 쏟아져?"류 질문용. 입주 몰림은 전세가 하락·역전세 압력 신호다.
**region·sigungu를 둘 다 비우면 전국 호출**이고 응답에 `by_sido`(시도별 세대·공고 수,
세대 내림차순, 시도 미상 공고는 sido=null로 따로)가 실린다 — 시도 비교에 시도마다
따로 부르지 마라.
**기본 창은 오늘부터 앞이다** — from_ym을 안 주면 이번 달에서 시작하므로 months=12는
"앞으로 12개월"이지 "최근 12개월"이 아니다. **과거를 물었으면 from_ym을 과거로 줘라**
(최근 12개월 = from_ym='YYYYMM'(12개월 전) + months=12). 응답 meta.window_direction이
그 회차의 창이 과거인지 미래인지를 라벨로 실토하니 결론에 기간을 그대로 밝혀라.
**하한 집계다** — 청약홈 공고(2020-02 이후) 기반이라 공고 없는 공급(민간임대·후분양
일부)이 빠지고, 무엇보다 **공고는 입주 평균 30개월 전에 난다**(전국 실측). 그래서
조회 구간이 오늘+30개월을 넘어가면 그 구간 입주분은 아직 공고조차 안 된 것이 대부분이다.
실사고: 세종 2028~2030 조회에 676세대가 나오자 "입주장 리스크 없음"으로 답했으나
실제 계획은 그 6배였다.
응답의 **`reading` 문장을 결론에 그대로 반영하라** — `interpretation`이 `lower_bound`면
"물량 없음/적음"이라 말하지 말고 "공고된 것만 N세대(하한)"라고 답해야 한다.
`coverage.region_recent_annual_rate`(그 지역 최근 공고 실적)와 비교해 값이 크게 낮으면
공급이 끊긴 게 아니라 공고 시차다. **그때는 realty_supply_pipeline을 이어서 불러라** —
사업승인은 났지만 아직 공고 안 난 물량이 거기 있다(세종 실측: 이 도구 676세대 →
파이프라인 3,483세대). 단 **두 축의 세대수를 더하지 마라**(이중계상) — 공고가 난
단지는 승인 목록에도 남아 양쪽에 다 잡힌다. 파이프라인 쪽 값이 상위 집합에 가깝다.
| Name | Required | Description | Default |
|---|---|---|---|
| to_ym | No | 조회 창의 **끝** 월, YYYYMM 6자리(기본 from_ym+36개월). months와 같은 축이라 둘 중 하나만 준다 | |
| months | No | from_ym부터 **앞으로 몇 개월**을 볼지 — to_ym 대신 쓰는 간편 인자(예: 24). **뒤로 세지 않는다** — months=12만 주면 from_ym이 이번 달이라 '앞으로 12개월'이 되고, '최근 12개월'을 원했다면 from_ym을 12개월 전으로 함께 줘야 한다. to_ym과 함께 주면 오류다(둘 중 하나만) (허용 범위 1~120) | |
| region | No | **시도만** (예: 서울, 경기, 세종, 부산). 시군구('강남구')는 sigungu에 넣어라 — region에 넣으면 서버가 sigungu로 옮겨 조회하고 그 사실을 meta.unapplied_conditions에 적는다(시군구 어휘에 없는 이름은 옮기지 못하고 역시 거기 적는다). realty_supply_pipeline의 region은 시군구·동도 받는다 — 두 도구의 계약이 다르다 | |
| from_ym | No | 조회 창의 **시작** 월, YYYYMM 6자리(예: 202508). 생략하면 **이번 달**이라 창이 전부 미래가 된다 — 이 도구의 기본 방향은 '입주 **예정**'이라서다. **'최근 N개월'·'지난해'처럼 지나간 물량을 물었으면 여기를 과거로 줘라**: 최근 12개월 = from_ym='202508' + months=12, 작년 한 해 = from_ym='202501' + months=12. 과거 조회도 그대로 된다(원장은 2020-02 공고분부터) | |
| sigungu | No | 시군구 정확한 이름 (예: 수원시, 강남구) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly/idempotent/non-destructive/openWorld), but the description adds the crucial behavioral caveat that results are a lower bound: announcements land ~30 months before move-in, so windows beyond today+30 months are mostly unannounced. It also discloses the Sejong 실사고 (676 vs ~6x actual), the reading/interpretation labels, and meta.window_direction — none of which the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence '지역의 입주 예정 물량을 연월별로 집계한다.' is duplicated verbatim, and several caveats (lower-bound, window direction, don't-sum) are restated across sections. Purpose is front-loaded, but the redundancy costs it points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it names by_sido, meta.window_direction, reading/interpretation, and coverage.region_recent_annual_rate, and explains how to interpret each. For a 5-param tool with a subtle aggregation semantics, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: region accepts only sido while sigungu goes to the sigungu param (server relocates and logs to meta.unapplied_conditions), and it flags that realty_supply_pipeline's region contract differs. It also explains that from_ym defaults to the current month so months counts forward, not backward.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — aggregates expected move-in (입주 예정) volume by year-month for a region — and explicitly distinguishes itself from realty_supply_pipeline by noting that pipeline carries approved-but-not-announced volume. An agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering questions ('입주장 리스크 있어?', '내년에 입주 물량 얼마나 쏟아져?'), names the alternative tool (realty_supply_pipeline) and the condition that selects it, and warns not to sum the two axes due to double-counting. This is explicit when-to-use, when-to-switch, and when-not-to-combine guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_nonapt_prices비아파트 시세 — 빌라·오피스텔·단독·토지 (아파트는 이 도구가 아니다)ARead-onlyIdempotentInspect
빌라·오피스텔·단독주택·토지의 매매 실거래가를 조회한다(아파트는 이 도구가 아니다).
**아파트는 이 도구가 아니다.** 빌라(다세대·연립)·오피스텔·단독주택·토지 **전용**
실거래 **매매가** 조회다 — 응답 = 최근 거래(recent) + 집계(stats: 표본 수·가격·상위 구성).
질문에 '아파트'가 있으면 여기서 멈추고 아파트 축으로 가라 — 지역·법정동 월별 추이는
realty_region_price_stats, 단지·평형별 시세는 realty_search_complexes, 단지 평형의
건별 내역(계약일·층·가격)은 realty_complex_pyeong_price다. **셋 다 region에
'강남구 대치동'처럼 법정동을 그대로 받는다** — 동 단위로 좁히려고 이 도구로 오지 마라.
property_type 네 값 중 아파트에 가까운 것은 없고, 아무거나 고르면 **응답은 200이고
행도 채워져 나오므로 틀린 줄 모른다**(2026-08-23 PlayMCP QA 실측: '강남구 대치동
아파트 최근 실거래가'에 villa 5건이 아파트로 답해졌다).
**매매 데이터만 있다** — 전월세를 물으면 이 축엔 데이터가 없다고 답하라(추정 금지).
**도시형생활주택은 property_type에 없고 가를 수도 없다** — 원천에 유형 코드가 없어
아파트·연립다세대·오피스텔 신고에 섞여 있다. villa/officetel 값을 도시형생활주택
시세로 부르지 말고 섞여 있다고 밝혀라(응답 urban_housing_notice).
면적 기준: villa/officetel은 전용면적(area_m2·area_pyeong), house는 대지(land_*)와
건물(building_*) 분리, land는 계약면적·지목(land_category)·용도지역(zoning)이 온다.
land의 share_type='지분' 행은 필지 일부 거래라 면적당 가격 비교에 쓰지 말 것(집계는
지분·해제 제외 — 응답 note 참조).
경매에 나온 빌라·다세대(지분 물건 포함)의 입찰가를 정할 때 **견줄 실거래 시세**도 여기서 잡는다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 최근 거래 행 수 (허용 범위 1~30) | |
| region | Yes | 지역명 부분일치 (예: 관악구, 서울특별시 강남구, 강남구 역삼동). **법정동까지 되는 것은 이 도구만이 아니다** — 아파트 축의 realty_region_price_stats·realty_search_complexes도 '강남구 대치동'을 그대로 받는다. 동 단위로 좁히려고 이 도구를 고르지 마라 | |
| area_band | No | 전용면적대로 좁힌다(빌라·오피스텔만 — 단독주택은 전용면적 개념이 없다). 비아파트는 같은 동네에서도 면적 편차가 커서 지역 평균 하나로는 답이 안 된다. 안 넣어도 stats.by_area_band로 밴드별 분포가 온다 | |
| price_max | No | 최대 매매가(만원) | |
| price_min | No | 최소 매매가(만원) | |
| property_type | Yes | villa=다세대·연립(빌라), officetel=오피스텔, house=단독·다가구, land=토지. **이 네 값에 아파트는 없다** — 사용자가 아파트를 물었으면 아무 값이나 고르지 말고 이 도구를 부르지 마라(realty_search_complexes·realty_region_price_stats가 그 자리다). 2026-08-23 실측: '강남구 대치동 아파트 최근 실거래가'가 villa로 와 빌라 5건이 아파트로 답해졌다 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnly/idempotent/openWorld, but the description discloses far more: the response shape (recent rows + stats with sample count, price, composition), the silent-failure mode where a mistyped property_type still returns HTTP 200 with populated rows backed by a dated QA incident, the 도시형생활주택 gap with its urban_housing_notice signal, and that aggregation excludes 지분/해제 rows. These are exactly the traps an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and forceful — the exclusion and the routing alternatives come first, and bolding makes the decision points scannable. It is longer than needed: the '아파트는 이 도구가 아니다' exclusion is restated four times across description and schema, which is defensive reinforcement rather than new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining what comes back (recent transactions plus stats, by_area_band distribution, footnotes toggled by include_footnotes, note/urban_housing_notice). With 7 parameters, one enum, and zero nested objects, nothing an agent needs to call and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself already repeats the apartment warning on property_type and the house/전용면적 caveat on area_band, so much of the parameter text is duplication. The description still adds cross-parameter meaning the schema lacks: the land 면적 기준 (계약면적·지목·용도지역), the rule that share_type='지분' rows must not be used for per-area price comparison, and the 'don't call this just to narrow by 동' guidance on region.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (빌라·오피스텔·단독주택·토지의 매매 실거래가 조회) and immediately scopes what it is NOT (아파트는 이 도구가 아니다). It names the sibling tools that own the apartment axis (realty_region_price_stats, realty_search_complexes, realty_complex_pyeong_price), so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not: '질문에 아파트가 있으면 여기서 멈추고 아파트 축으로 가라' with the three named alternatives and the specific question each answers. It also adds the reverse exclusion (동 단위로 좁히려고 이 도구로 오지 마라) and states the domain limit (매매 데이터만 있다 — 전월세를 물으면 데이터가 없다고 답하라).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_notice_facts모집공고 팩트시트 — 전매제한·자격·층별 분양가·옵션가·중도금ARead-onlyIdempotentInspect
입주자모집공고 원문에서 추출·검증한 팩트시트를 항목별로 준다.
입주자모집공고 **원문**에서 추출·검증한 팩트시트 — 전매제한·재당첨제한·거주의무·
거주요건, 청약 일정, 층별 분양가표(대지비·건축비·회차별 납부액), 특별공급 배정,
발코니 확장·유상옵션 가격, 중도금 회차 일정, 예비입주자 규칙.
전매제한 기간, 재당첨 제한, 거주의무, 특별공급 자격·배정, 층/타입별 분양가,
발코니 확장비·유상옵션 금액, 중도금 회차와 납부일 — 이 값들을 묻는 질문이 이 도구의
자리다(추정하거나 웹에서 찾을 필요 없이 공고 원문 값이 나온다). 모든 값에 공고 쪽
번호(`p`)가 붙으니 답변에 notice_version(공고 판본)과 쪽 번호를 함께 제시하라.
팩트시트 미추출 공고는 원문 앞쪽(단지 주요정보 표) 텍스트를 unverified_source_text로
준다 — 수치 인용 시 "공고 원문 기준·미검증"을 명시하라. 상세 조항 전문(특공 소득기준,
부적격 처리 등)은 realty_notice_text로 원문 쪽을 직접 읽어라. 여기 없는 값은 지어내지 말 것.
⚠️ 큰 공고는 팩트시트 전체가 도구 결과 한계(64KiB)를 넘는다. 그때 **큰 절부터 떼어**
보내고 `meta.truncated`·`meta.omitted_sections`(절 이름·크기·되부르는 인자)에 그 사실을
적는다 — 뗀 절은 `section='분양가'`처럼 이름을 지정해 전문으로 받아라. **팩트시트에
없다고 공고에 없다고 답하지 마라**(못 봄 ≠ 없음).
`keyword`는 단지명 일부이자 **브랜드**다('자이'·'힐스테이트'): 여러 공고가 걸리면 후보와
**걸린 총 건수(total_matched)**를 준다 — "자이 브랜드 공고 몇 개야?"는 keyword 하나로
여기서 센다(시공사 단위 분양 성적은 realty_builder_presale_record).
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | 단지명 일부 (예: '우미린' — 공백 무관 매칭) | |
| section | No | 팩트시트의 한 절만 전문으로 받는다 (예: '분양가층별', '유상옵션', '전매재당첨', '공고개요' — 절 이름은 공고 판본마다 다르니 모르면 비우고 응답의 절 목록을 보라. '공급'은 한 절이 아니라 공고개요·분양가층별 등에 나뉘어 있다). 비우면 전체 — 다만 전체가 도구 결과 한계를 넘으면 큰 절부터 떼어 내고 뗀 절 이름을 meta.omitted_sections에 적는다. 그때 이 인자로 되받아라. | |
| house_manage_no | No | 공고 관리번호 (realty_presale 응답의 house_manage_no) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: discloses the 64KiB result cap, the truncation mechanism (drops the largest sections first), the meta.truncated / meta.omitted_sections signals, and how to re-fetch a dropped section via section=. Also states the unverified fallback, the total_matched for keyword fan-out, and a hard anti-hallucination rule ('못 봄 ≠ 없음').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information is front-loaded (resource → covered fields → citation rule → truncation → keyword), but the field enumeration in the first half repeats terms twice (전매제한/재당첨 등 listed in prose and again in the question list) and runs long. Dense but every block earns a distinct purpose; minor redundancy keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the description carries the full burden — and it covers the failure modes an agent will actually hit: truncation + recovery, unverified notices, multi-match on keyword, and scope boundaries to sibling tools. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the bar is baseline 3; the description adds real meaning on top: keyword is treated as a brand/partial name with multi-match behavior and total_matched, and section is described with a recovery workflow (leave empty, read the section list, re-fetch by name) plus the caveat that section names vary per notice. It does not fully document house_manage_no's format, but that's already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (factsheet extracted and verified from the original 입주자모집공고) and enumerates the exact fields it covers: 전매제한, 재당첨제한, 거주의무, 층별 분양가표, 특별공급 배정, 발코니 확장/유상옵션, 중도금 회차. It explicitly names the sibling realty_notice_text for full clause text and realty_builder_presale_record for builder-level records, so the agent can distinguish it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('이 값들을 묻는 질문이 이 도구의 자리다'), when-not ('상세 조항 전문은 realty_notice_text로'), and a keyword-counting alternative (realty_builder_presale_record). Also tells the agent how to cite (notice_version + page number) and that unverified notices return unverified_source_text with a disclosure requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_notice_text모집공고 원문 쪽 읽기 — 자격 세부·유의사항 전문ARead-onlyIdempotentInspect
입주자모집공고문 원문을 쪽 단위로 읽어 준다.
입주자모집공고문 원문을 쪽 단위로 읽는다 — 팩트시트에 없는 세부(특별공급 소득·자산 기준,
부적격 처리, 계약 유의사항, 옵션 품목 상세)는 이 도구로 원문을 직접 확인하라.
표가 있는 쪽은 pdftotext 특성상 정렬이 깨질 수 있다 — 열 해석이 애매하면 단정하지 말 것.
여러 낱말은 AND로 묶인다('가점제 추첨제'→둘 다 있는 쪽). 0쪽이면 막다르지 않고 낱말별
히트 쪽과 부분일치 상위 쪽을 함께 돌려주니 그걸로 좁혀라(match='any'로 넓힐 수도 있다).
**쪽을 모를 땐 pages_only=true로 먼저 훑어라** — 전문은 한 번에 수만 자다.
전문 응답은 최대 6쪽이고, meta.matching_pages에 일치 쪽 전체 목록이 늘 들어 있다.
| Name | Required | Description | Default |
|---|---|---|---|
| match | No | 여러 낱말 처리 — all=모두 포함(기본), any=하나라도 포함(넓게 훑을 때) | all |
| pages | No | 쪽 범위 직접 지정 (예: '1-3', '44'). **query와 택일이며 함께 주면 거절한다**(error='query_and_pages_conflict') — 종전엔 query를 조용히 버렸다. pages와 함께 준 pages_only는 무의미하므로 무시하고 meta.pages_only_ignored로 실토한다 | |
| query | No | 찾을 키워드. 공백으로 나눈 낱말을 모두 포함하는 쪽을 찾는다(AND, 공백 무관 매칭) — 예 '가점제 추첨제', '신혼부부 소득' | |
| pages_only | No | 참이면 본문 없이 일치 쪽 번호+발췌만 준다 — 먼저 이걸로 쪽을 고르고 pages로 좁혀 재호출하면 왕복·토큰이 크게 준다 | |
| house_manage_no | Yes | 공고 관리번호 (realty_presale·realty_notice_facts로 특정) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description still adds real behavioral context beyond them: table pages may be misaligned by pdftotext so columns must not be over-asserted, the response is capped at 6 pages, meta.matching_pages always carries the full hit list, and pages_only is silently ignored when pages is given (reported via meta.pages_only_ignored). This is strong disclosure, though the fallback mechanics of the 0-page case are only sketched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the dense body is almost all actionable (conflict error, table caveat, page cap, pages_only-first workflow). It loses a point because the opening line is effectively repeated ('원문을 쪽 단위로 읽어 준다' then '원문을 쪽 단위로 읽는다'), a wasted sentence in an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter read tool with no output schema and no nested objects, the description covers everything needed to call it correctly: return size limit, where the full matching-page list lives, error naming, fallback behavior, and the pages_only-first workflow. Nothing material is left for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents match, pages, query, pages_only and house_manage_no. The description still adds semantic value the schema does not: the AND semantics of multi-word queries with concrete examples, the workflow of using pages_only to pick pages before narrowing with pages, and the documented fallback result set when a query returns 0 pages.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('입주자모집공고문 원문을 쪽 단위로 읽는다') and scopes it to page-level reading of the recruitment notice original. It distinguishes itself from the fact-sheet sibling by saying the details absent from 팩트시트 (특별공급 소득·자산 기준, 부적격 처리, 계약 유의사항) are exactly what this tool is for, so an agent can separate it from realty_notice_facts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use this when the fact sheet lacks detail, use pages_only=true first when the page is unknown, and if 0 pages come back, narrow with per-word hits / partial-match pages or widen via match='any'. It also names the query-vs-pages tradeoff and the conflict error, covering when-not and alternatives rather than leaving them to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_onbid_sale_rate공매 낙찰가율·개찰 결과 통계ARead-onlyIdempotentInspect
공매가 "보통 감정가의 몇 %에 낙찰되나"와 "얼마나 유찰되나"를 실제 개찰 결과로 답한다.
**법원경매의 realty_auction_sale_rate와 같은 이름의 다른 지표다.** 분모가 둘 다
감정가지만 평가 주체·저감 규칙·매물 성격이 달라 **두 %를 한 문장에 섞으면 안 된다**.
"경매 낙찰가율"을 물었으면 어느 쪽인지 확인하라.
**이 축의 자리** — 공매 축 2종 중 통계 쪽이다. 개별 물건과 회차별 최저가는
realty_search_onbid다. 낙찰가율은 재산구분별로 갈라 읽어라(`by_property_type`).
⚠️ **표본은 최근 3개월 개찰분이고, 그중 '낙찰' 건만 낙찰가율에 든다.** 온비드 전체
입찰결과 688,264건 중 우리가 받은 것은 113,673건이고, 그 안에서 낙찰은 3,824건이다
(나머지는 유찰·취소·개찰중). `outcome_mix`가 그 분포이고 여기서 나온 낙찰 비율은
**성립률이지 낙찰가율이 아니다**.
⚠️ **낙찰가율은 원천이 준 값을 그대로 쓴다**(`apslPrcCtrsScfbPrcRto` = 감정가 대비
낙찰가율). 낙찰 3,824건 중 이 값이 있는 것은 2,896건이다 — 나머지는 감정가가 원장에
없는 건이라 **모르는 것이지 0이 아니다**(`ratio_missing`).
⚠️ **평균이 아니라 중앙값을 인용하라.** 지분·산지 물건이 감정가의 386%에 팔린 사례가
실제로 있어(공유자 경합) 평균이 위로 끌린다. `median_pct`가 정본이고 `p25_pct`·
`p75_pct`로 폭을 함께 전하라.
⚠️ **지역은 물건명에서 되찾은 것이다.** 입찰결과 원장에 지역 컬럼이 아예 없어서,
물건 목록과 붙여 보려 했으나 **낙찰 3,824건 중 물건 목록에서 찾아지는 것은 83건
(2.2%)뿐이다** — 물건 목록은 현재 진행분 스냅샷이라 이미 팔린 물건이 빠져 있다.
그래서 물건명 접두의 시도·시군구 표기를 파싱해 쓴다(전체 96.1%·낙찰 90.0%에서 잡힌다).
파싱이 안 된 건은 지역 필터에서 **조용히 빠지므로** 응답의 `region_basis`를 함께 전하라.
| Name | Required | Description | Default |
|---|---|---|---|
| sido | No | 시도. **주의: 결과 원장에는 지역 컬럼이 없다** — 물건명 접두에서 되찾은 값으로 거른다(커버리지는 응답의 region_basis에 실린다). ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라. | |
| sigungu | No | 시군구. 물건명에서 시도 다음 한 토막을 뽑은 것이라 '고양시 덕양구'는 '고양시'로만 잡힌다 — 자치구까지 좁히려면 이 원장으로는 안 된다. ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다. | |
| usage_name | No | 용도 부분일치(대·중·소 3단). 원장 값 예: 주거용건물·아파트·토지·근린생활시설. 표본이 **입찰결과 원장**이라 물건 목록과 어휘가 미세하게 갈린다 — 없는 이름은 거절하며 이 원장의 쓸 수 있는 값을 준다. | |
| property_type | No | 재산구분. **이 축을 빼고 하나의 낙찰가율을 말하면 거의 틀린다** — 실측 중앙값이 압류재산 31.6% vs 국유재산 106.3%로 3배 넘게 갈린다. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly/idempotent/non-destructive), but the description adds substantial behavior beyond them: a 3-month sample window, only successful bids entering the ratio, 2,896 of 3,824 bids having a usable ratio with missing treated as unknown rather than zero, median mandated because outliers inflate the mean, and region fields silently dropping unparsed rows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the answer it produces, then the sibling differentiation, then labeled caveats (이 축의 자리, ⚠️ blocks). Despite the density, each block carries decision-relevant information and nothing is redundant filler for a tool this caveat-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still names the fields an agent must report (median_pct, p25_pct, p75_pct, outcome_mix, ratio_missing, region_basis, by_property_type) and explains their meaning, leaving no gap between calling the tool and interpreting it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents each parameter in depth, including the 광주 ambiguity and region_ambiguous rejection. The description reinforces these but adds little parameter-specific meaning the schema lacks, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it answers what percent of appraised value 공매 properties sell at and how often they fail to sell. It explicitly distinguishes itself from the identically-named sibling realty_auction_sale_rate ('같은 이름의 다른 지표다') and from realty_search_onbid as the statistics vs. individual-listing axis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: individual properties and per-round minimum prices go to realty_search_onbid, and when a user asks about '경매 낙찰가율' the description instructs the agent to confirm which of the two metrics is meant. It also directs reading by property_type, which is a usage instruction, not just a fact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_poi_nearby[유료] 주변 입지 분석ARead-onlyIdempotentInspect
[유료] 좌표 주변의 지하철·학교·병원·마트 등 입지 요소를 거리순으로 조회한다.
단지 좌표는 realty_complex_report가 준다. "역세권인가", "초품아인가" 판단용.
최근접역 거리·반경 안 개수만 필요하면 무료 realty_location_scores의 location_facts로
충분하다 — 이 도구는 시설 **목록**(이름별 거리)이 필요할 때 쓴다.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | 위도 — realty_complex_report의 latitude를 쓰라 | |
| lng | Yes | 경도 | |
| poi_type | No | subway | hospital | school — 쉼표로 조합 가능(예: 'subway,school'), 비우면 전체. 이 3종만 좌표 검색을 지원한다(마트·약국 등은 지역 통계 realty_poi_stats로) | |
| radius_m | No | 반경(미터) (허용 범위 100~3000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only/idempotent/open-world safety, but the description adds the crucial non-structured fact that this is a paid ([유료]) tool, which is the key cost decision an agent must weigh against free siblings. It does not describe rate limits or result volume, but the cost signal is the meaningful addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight paragraphs: purpose first, coordinate source second, alternative-tool routing third. The paid tag is front-loaded and every sentence carries routing or sourcing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the essential inputs source, scope, and sibling distinctions an agent needs. It could say more about result shape or limits, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents lat/lng source, poi_type combinations, and radius bounds. The description restates the coordinate source but adds no syntax or behavioral detail beyond the schema, so the baseline 3 applies; note the description's mention of 마트 slightly overstates the schema's three coordinate-searchable types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (조회 of nearby POI by coordinates), names the concrete facility categories, and specifies the output ordering (거리순). It is clearly separable from realty_location_scores and realty_poi_stats by the stated purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this when a facility list with per-name distances is needed; use the free realty_location_scores for nearest-station distance and in-radius counts; use realty_poi_stats for non-coordinate categories. It also names the upstream tool that supplies lat/lng.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_poi_stats[유료] 지역별 인프라 통계ARead-onlyIdempotentInspect
[유료] 시군구별 병원·학교·지하철역 개수 통계를 조회한다. 지역 간 인프라 비교용.
지역 키는 '시도축약 시군구' 2토큰이다(예: '서울 마포구', 세종은 1토큰). 병원·지하철은
수집 범위가 수도권·광역시 중심이라 지방 시군구는 0으로 나올 수 있다 — 0을 "없다"로
단정하지 말고 수집 범위 밖일 수 있다고 말하라.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | (허용 범위 1~50) | |
| region | No | 지역명 — 시도는 정식명·축약 모두 받는다(예: 서울, 경상남도 고성군, 경남 고성군, 마포구). 토큰 정확일치라 '남구'에 강남구가 섞이지 않는다. 비우면 전국 전체 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/destructive=false, so the safety profile is covered. On top of that the description discloses a genuine data-coverage limitation (지방 시군구 may return 0 due to collection scope) and instructs how to phrase results, which is real behavioral context not present in any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, followed by the region-key rule and the zero-value caveat. Every sentence carries distinct information; the only slight cost is the somewhat fragmented multi-paragraph layout for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter tool with no output schema, the description covers purpose, region key format, limit behavior is handled by the schema, and the key interpretation pitfall (zeros). Nothing critical to a correct call is missing, though return shape is only implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by specifying the exact region key format ('시도축약 시군구' 2 tokens, 세종 as 1 token), which is format guidance the schema does not state, and reinforces that empty input means nationwide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a precise verb and resource: counts of hospitals, schools, and subway stations aggregated per 시군구, scoped as a paid tool. The '지역 간 인프라 비교용' framing implicitly separates it from the per-POI sibling realty_poi_nearby, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the use case clearly (cross-region infrastructure comparison) and gives a meaningful usage constraint: don't interpret 0 counts as absence because collection is centered on 수도권/광역시. It stops short of naming an alternative tool or an explicit when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_policy_rules법령·규제 규범 — 세율표·규제지역·대출·임대차·청약·정비사업 규칙ARead-onlyIdempotentInspect
단지에 종속되지 않는 일반 규범(세율·규제·대출·임대차)을 근거 조문과 함께 준다.
근거 조문·확인일이 붙는다 — 취득세율표,
규제지역 **현재** 지정 현황, 주담대 규제 원표, 개인회생×대출, 주택임대차 갱신(갱신권·
5% 상한·매수인 실거주 거절), 양도세(세율·필요경비·중과·개편 계류), 청약통장·가점
배점표, 정비구역 요건·조합원 지위양도, 재개발 분양자격 갈림길(서울). "취득세 얼마야?",
"갱신권 썼는데 집주인이 팔면?", "지금 팔면 중과야?"류 질문의 자리다. 특정 조건의
상한 **계산**은 realty_loan_limit, 가점 점수 계산은 realty_subscription_score,
비례율·분담금 계산은 realty_redevelopment_burden, 양도세 시나리오 계산은
realty_capital_gains_tax, 조합원 지위양도 가능 판정은 realty_member_transfer_check —
이 표가 그 계산기들의 진실원이다.
클라이언트에 세율을 하드코딩하지 마라 — "85㎡ 이하 1.1%"는 6억 이하일 때만 맞고,
9억 초과에 그대로 쓰면 수천만원 틀린다(실측: 16.9억 84타입에서 3,700만원 차).
**판정은 하지 않는다**: "이 사람이 1주택인가"는 분양권·상속지분·일시적 2주택 특례가
얽힌 사실판단이다 — 표의 applicable_if·exceptions를 보고 사용자에게 확인 질문을
던져라. 개별 공고의 규제 플래그는 realty_presale, 공고 원문 값은
realty_notice_facts, 이 표로 총 소요자금 계산은 realty_presale_cost.
응답의 uncertainties(확인 못 한 것)와 disclaimer를 함께 전하라.
개별 사건·임차인 판단은 다른 도구: 재매각 보증금→realty_get_auction_case, 날짜로 묻는
대항력→realty_small_deposit_check, 빌라 지분 입찰가 시세→realty_nonapt_prices.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | **자유문으로 토픽을 찾는다** — 어느 topic인지 모를 때 사용자 말을 그대로 넣어라(예: '종부세 얼마부터 내요'→topic='comprehensive_real_estate_tax', '부모님이 보태주는 돈'→topic='gift_tax_and_funding_source', '전입은 빠른데 확정일자가 늦으면'→topic='auction_rights'). topic 없이 query만 주면 **후보 토픽 목록**이 오고, 후보가 하나면 그 토픽 본문까지 함께 온다. topic과 함께 주면 그 토픽을 그대로 주되 다른 후보가 있으면 알려준다. **아무것도 안 걸리면 지어내지 않고 0건이라고 답한다** — 그때는 이 서버에 그 축이 없는 것이니 표를 추측하지 마라 | |
| topic | No | **어느 표를 볼지 고른다 — 사용자가 쓰는 말로 찾아라.** 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=제공 항목 안내(토픽 목차) | list |
| section | No | **토픽의 하위 항목만 골라 받는다** — 미지정이면 종전과 같이 토픽 전체가 온다. 큰 토픽(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'에는 하위 항목이 없다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description adds real context: it returns 근거 조문·확인일, surfaces uncertainties and a disclaimer, explicitly answers '0건' rather than fabricating, and warns against hardcoding rates (with an observed-error example). It does not discuss volume/size of tables or output format, but for a read-only reference tool this is well above the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and the length is justified by a 26-topic router with many sibling overlaps. However, substantial content (the exhaustive topic-by-topic enumeration and the sibling routing list) is restated in the topic enum descriptions, so there is measurable duplication rather than zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, judgment-adjacent policy lookup with no output schema, the description covers scope, what is returned (조문·확인일·uncertainties·disclaimer), the no-judgment boundary, the anti-hallucination behavior, and the sibling hand-offs. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself carries very rich per-parameter semantics (query fallback behavior, topic enum, section subsetting with rejection on unknown names). The description body adds essentially no parameter meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific resource (단지에 종속되지 않는 일반 규범 — 세율·규제·대출·임대차) delivered with citations, which is a distinct verb+resource. It immediately positions itself as the reference-table '진실원' behind a set of sibling calculators, so an agent can tell it apart from realty_loan_limit, realty_subscription_score, etc. without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: it names the exact sibling that owns each computation (realty_loan_limit for 상한 계산, realty_subscription_score for 가점, realty_capital_gains_tax for 양도세 시나리오, realty_member_transfer_check for 지위양도 판정) and states what it does NOT do (판정은 하지 않는다). It also names realty_presale / realty_notice_facts for notice-level flags and the case-level siblings for individual matters — full when/when-not/alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_predict_price[유료] 단지 가격 예측 (XGBoost)ARead-onlyIdempotentInspect
[유료] 단지의 다음 달 평균 매매가를 평형대별로 예측한다 (XGBoost v4_clean).
complex_name 또는 complex_key 중 하나는 필수. 동명 단지가 여러 지역에 있으면
먼저 realty_complex_report로 단지를 특정한 뒤 complex_key로 호출하라.
예측 지평은 1개월(익월) 고정 — 그 너머는 모델이 검증되지 않아 제공하지 않는다.
커버리지 밖은 정직하게 거절된다(지어내지 않음) — ①최근 3개월 내 월 거래 3건 미만이거나
②과거 거래 이력이 없는 신축 첫 달(모델이 지역·평형 평균을 토해 2~4배 틀린다, 실측).
예측이 없을 뿐 시세 데이터는 있으니 그때는 실거래 도구로 답하라.
응답 predictions[].caution이 있으면 반드시 함께 전달하라 — 예측 대상이 '익월에 거래된
매물들의 평균가'라, 시세가 그대로여도 거래 구성이 바뀌면 흔들린다(실측 16.3%가 ±10% 초과).
응답의 as_of_ym(기준월)·disclaimer(검증 MAPE)를 사용자 답변에 반드시 함께 전달하라 —
예측은 참고 지표이지 투자 보장이 아니다.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | (구버전 호환) 예측 지평은 1개월 고정 — 이 값은 무시되고 응답이 그 사실을 실토한다 (허용 범위 1~12) | |
| complex_key | No | 정확한 단지 키 — realty_complex_report가 돌려주는 complex_key | |
| complex_name | No | 단지명 (예: 반포자이) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds substantial non-obvious behavior: a fixed 1-month horizon that ignores the months param, honest refusal outside coverage, measured error rates (2-4x off for new builds, 16.3% exceeding ±10%), and mandatory relaying of caution/as_of_ym/disclaimer. This goes well past what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the required-identifier rule are front-loaded, and each subsequent sentence carries a distinct operational fact (horizon limit, refusal cases, rerouting, mandatory field relaying). It is dense rather than padded, though the length is near the upper bound for a description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the response fields an agent must surface (predictions[].caution, as_of_ym, disclaimer) and the footnotes behavior toggled by include_footnotes. Nothing needed to call or report this tool correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each field, making 3 the baseline. The description nonetheless adds what the schema cannot: an at-least-one-of complex_name/complex_key constraint (the schema shows 0 required params) and the dependency on realty_complex_report to obtain complex_key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: predicting next month's average sale price by pyeong band via a named model version. It is clearly distinguished from similar siblings like realty_complex_pyeong_price (current price) by explicitly framing the output as a forecast for 익월.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the alternative and the condition: if multiple complexes share a name, resolve with realty_complex_report first and call with complex_key. It also defines when the tool will NOT answer (under 3 monthly transactions in 3 months, brand-new complexes with no history) and routes the agent to 실거래 도구 in that case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_presale청약 분양 공고ARead-onlyIdempotentInspect
아파트 청약(분양) 공고를 조회한다 — 분양가·청약 접수 일정·당첨자 발표일·입주 예정·위치. "다음 달 청약 넣을 만한 데 있어?", "○○에 분양하는 아파트 있어?"류 질문용.
**"오늘/지금 접수 가능한 청약"은 status='접수중'이다.** upcoming=true는 접수 **시작 전**(오늘
시작분 포함)만 주므로 그 질문에 쓰면 이미 접수 중인 공고를 대부분 놓친다. 행마다 오늘 기준 판정
`apply_status`(접수중/접수예정/접수마감/일정미상)와 `apply_status_text`가 붙고, 그 기준일은
meta.today다 — **날짜를 직접 비교해 상태를 다시 판정하지 말고 이 값을 그대로 전하라.**
"넣을 만해?/적정가야?"까지 물으면 이어서 realty_presale_vs_market으로 분양가를
실거래 시세와 대조하라(응답의 house_manage_no가 그 도구의 입력이다).
price_min/price_max는 주택형별 분양 최고가의 최소·최대(만원)다 — 한 공고에 여러
주택형(house_type_count)이 있다. 청약 자격·순위 요건은 이 데이터에 없다(지어내지 말 것).
경쟁률·당첨 가점 커트라인은 realty_subscription_odds 도구에 있다. 행마다 `rank1_result`(1순위
해당지역 결과 요약 — status·undersubscribed_types/total_types·shortfall_households·verdict_text)가
붙는다: status가 published가 아니면 **미달 여부를 모른다**는 뜻이지 경쟁이 있었다는 뜻이 아니다.
무순위(줍줍)·취소재공급이 돈 공고에는 `unsold_history`(회차·세대)가 붙는다 — 접수
경쟁률이 높아도 무순위가 돌았다면 "당첨 후 계약이 안 된" 시장이다. 없다고 이력이
없던 건 아니다(meta.unsold_note의 연결 한계 참조). 무순위 공고 자체(지금 나온 것·몇 번
나왔나)는 notice_kind로 묻는다. 같은 지역 공고들의 분양가가
올라온 추이("기다림의 비용")는 realty_presale_price_trend.
규제지역 플래그: speculation_zone(투기과열지구)·adjustment_area(조정대상지역)·
price_cap_applied(분양가상한제), Y/N — **모집공고일(announced_on) 기준 스냅샷**이라
이후 지정·해제가 바뀔 수 있다. "현재 규제지역"으로 단정하지 말고 공고일과 함께 전하라.
전매제한·거주의무 기간은 이 데이터에 없다(플래그에서 유추 금지) —
realty_notice_facts가 공고 원문 값을 쪽 번호와 함께 준다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 공고 수 — 주택형별 분양가·순위별 일정이 붙어 행이 무겁다. 요청분을 다 실으면 응답이 크기 상한을 넘는 경우 **실제 반환 수를 줄이고 meta.size_capped**에 총계·좁혀 부르는 법을 값으로 싣는다 — 조용히 자르지 않는다 (허용 범위 1~50) | |
| since | No | 이 날짜(YYYY-MM-DD, 31일 전까지) 이후 바뀐 것만 — 예약 실행에서 '어제 이후'면 since=어제. 기준·지연은 응답에 | |
| region | No | 시도 (예: 서울, 경기, 세종, 부산) | |
| status | No | 오늘(KST) 기준 접수 상태로 거른다. **'오늘/지금 접수 가능한', '지금 넣을 수 있는' 질문은 '접수중'이다** — '접수예정'은 아직 못 넣는 것들이다. '다음 달 청약'처럼 앞으로를 묻는 질문만 '접수예정'. 기본 '전체'. | 전체 |
| keyword | No | 단지명·공급 주소 부분일치 (예: '우미린', '5-2생활권', '다솜동') — 생활권·동 단위 질의는 이걸로 | |
| sigungu | No | 시군구 정확한 이름 (예: 수원시, 강남구). ⚠️세종은 이 필드가 동·생활권·도로명으로 오염돼 있으니 쓰지 말고 keyword를 쓰라 | |
| question | No | (선택) 이 조회를 하게 된 사용자 질문 한 문장 — 맞는 다른 축·도구를 question_routing으로 돌려준다. 이름·연락처는 빼라 | |
| upcoming | No | ⚠️True면 접수 **시작 전**(시작일이 오늘 이후, 오늘 시작 포함) 공고만 — 어제 이전에 시작해 **접수 중인 공고는 여기 없다**. 오늘 넣을 수 있는 것을 찾는다면 status='접수중'을 써라. status와 함께 쓰지 말 것(status가 이것을 대체한다). | |
| notice_kind | No | 공고 종류. 기본 '본공고'. 무순위(줍줍)·재공급을 물으면 그 값 — status 기본은 접수중+접수예정이고, '접수마감'이면 목록 대신 단지별 회차 이력 집계(몇 번 나왔나). | 본공고 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly/idempotent/non-destructive), and the description goes far beyond them: apply_status/apply_status_text are pre-judged against meta.today and must not be re-derived, rank1_result=published-false means unknown (not 'no competition'), unsold_history absence is not proof of no history, and regulation flags are announcement-date snapshots that must not be asserted as current. This is unusually rich disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and the answer-shaping rule (status='접수중') before the caveats, and every paragraph maps to a real failure mode. It is dense and long, with some redundancy against the schema's own parameter descriptions, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists and the tool has 9 params with layered output fields, yet the description explains the returned status fields, the rank1_result semantics, the unsold_history caveats and the routing fields (meta.today, house_manage_no, question_routing). Nothing an agent needs to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds interpretation beyond the schema: status and upcoming are mutually exclusive and status supersedes upcoming, notice_kind='접수마감' switches the response from a list to per-complex 회차 집계, and price_min/price_max are per-house-type extremes. Much of this is mirrored in the schema, so it is not fully additive, but the aggregation behavior adds real meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource (아파트 청약(분양) 공고를 조회한다) and enumerates the returned fields (분양가·접수 일정·당첨자 발표일·입주 예정·위치). It also names the siblings it is NOT — realty_presale_vs_market, realty_subscription_odds, realty_presale_price_trend, realty_notice_facts — so an agent can separate it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes questions: '오늘/지금 접수 가능한' → status='접수중', upcoming=true only covers pre-start notices, '넣을 만해?' → hand off to realty_presale_vs_market, 경쟁률 → realty_subscription_odds, 추이 → realty_presale_price_trend, 원문 규제 → realty_notice_facts. When-to-use and when-to-use-something-else are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_presale_context분양 공고 견주기 — 같은 시군구·평형 공고들과의 5축 비교(공고 원문 축)ARead-onlyIdempotentInspect
이 분양 공고를 같은 시군구·같은 평형의 다른 공고들과 5축으로 견준다.
이 분양 공고를 **같은 시군구·같은 평형 공고들과 견줘** 읽는다 — 청약홈 API에 없고
**공고문 원문에만 있는 5축**으로: ①대지비 비중(분양가에서 땅값이 얼마인가) ②유상옵션
(사실상 필수인 발코니확장 절대금액) ③중도금 무이자 여부와 회차 ④층 프리미엄(최저 층구간
대비 최상 층구간) ⑤㎡당 분양가(전용면적 기준).
"이 분양가가 비싼가"는 실거래 대조만으로는 반쪽이다 — 같은 값이라도 대지비 비중이
70%인 공고와 25%인 공고는 다른 물건이고, 발코니확장 3천만원은 광고 분양가에 안 잡힌다.
공고를 지정하면 그 공고의 5축 값과 **분포에서의 위치(percentile)**를 주고, 지정하지
않으면 시군구·평형 슬라이스의 분포만 준다.
읽는 법(그대로 지켜야 값이 거짓이 되지 않는다):
· **셀 표본이 3건 미만이면 분위를 안 낸다** — 그때 `verdict`가 '표본 부족'이고,
그것이 답이다. **시도 값(background)으로 갈아타지 마라**(D-2026W33-40).
· **연도를 자르지 않은 시계열을 그리지 마라** — 팩트시트 커버율이 연도마다 20배 이상
갈린다(meta.coverage.by_year). 연도 간 분양가 추이는 realty_presale_price_trend다.
· 중도금 `unknown`은 '이자 있음'이 아니라 '판정 못 했다'다(n_known/n_unknown이 갈려 있다).
· ㎡당 분양가는 **전용면적** 기준이라 공급면적 평당가와 같은 축에 놓으면 안 된다.
이 축의 자리: 개별 공고의 값 자체(전매제한·자격·층별 표 전문)는 realty_notice_facts,
원문 조항은 realty_notice_text, 분양가 대 실거래 적정성은 realty_presale_vs_market,
연도별 분양가 추이는 realty_presale_price_trend — 이 도구는 **공고끼리의 횡단면**이다.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 시도 (예: 경기, 서울, 경남). **시도 분포는 배경일 뿐 결론 근거가 아니다**(D-2026W33-40) — 결론은 시군구·평형대 셀에서 읽어라 | |
| keyword | No | 단지명 일부 (예: '우미린' — 공백 무관 매칭). house_manage_no와 택일이며 여럿이면 후보 목록을 돌려준다 | |
| sigungu | No | 시군구를 원장 어휘 그대로 (예: '천안시 서북구', '평택시', '서울 동작구' — 특별·광역시는 '서울 동작구'처럼 시도 접두가 붙는다). 공고를 지정하지 않고 그 지역 분포만 볼 때 쓴다 | |
| house_manage_no | No | 공고 관리번호 (realty_presale·realty_notice_facts 응답의 house_manage_no, 예 '2026000383') | |
| exclusive_m2_max | No | 전용면적 상한(㎡) — 국평만 보려면 85 | |
| exclusive_m2_min | No | 전용면적 하한(㎡) — 국평만 보려면 80. 지정하면 모든 셀에 같은 필터가 걸린다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/no-destructive, so the description focuses on domain behavior: minimum-3-sample suppression of percentiles, '표본 부족' verdict being the answer, unknown 중도금 meaning undetermined rather than interest-bearing, per-year coverage gaps, and 전용면적 vs 공급면적 axis mismatch. These are non-obvious traps that materially change interpretation, though return shape/pagination is not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is valuable but lengthy and repetitive — the opening restates the same 5-axis comparison twice (once in prose, once as a numbered list), and several caveats repeat across sections. Front-loading is good, but the busywork sentences dilute it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a no-output-schema analysis tool: it covers what the tool returns (5-axis values plus percentile, or slice distribution alone), the sample-size gate, and the routing to siblings. Missing only return shape details and how the 'slice distribution only' mode is triggered (e.g., which params).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), and the description adds semantics beyond the schema: keyword vs house_manage_no may yield candidate list, region is background-only and not a conclusion basis, sigungu vocabulary form, and the uniform filter applied to all cells. Adds real meaning but the schema already carries the per-param detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (견준다/compare), resource (분양 공고), and scope (same sigungu·same pyeong, 5 named axes), and explicitly frames itself as a cross-sectional comparison across notices versus sibling tools that handle individual facts, text, market fit, or trends.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the four alternative siblings (realty_notice_facts, realty_notice_text, realty_presale_vs_market, realty_presale_price_trend) and states what each covers so the agent can route correctly. Also states the when-not conditions: don't draw year-crossing trends, don't fall back to background (시도) values, don't use market comparison alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_presale_cost분양 총 소요자금 계산 — 중도금 이자·취득세·층별 총액ARead-onlyIdempotentInspect
분양 한 건의 층별 총 소요자금(분양가·발코니·중도금이자·취득세)을 계산한다.
공고 원문(팩트시트) 기반 **결정론 계산**: 층별 분양가 + 발코니 확장비 + 회차별
중도금 이자(일할) + 취득세(표준세율) = 층별 총 소요자금. "이 분양 실제로 얼마 드나"의
자리다 — 클라이언트마다 손계산하면 입주일 가정 하나로 백만원대가 갈린다(실측 124만원).
경계(신고 #43의 선 그대로): 여기까지가 "공고+세법에서 결정론적으로 나오는 것"이다.
월 상환액·매수 vs 전세 손익분기는 개인 파라미터가 지배하므로 계산하지 않는다 — 전세
시세는 realty_complex_rent_by_pyeong으로 받아 클라이언트가 개인 가정을 얹어라.
자기자금·차주 조건을 **선언**받아 필요 대출액과 규제 상한 통과까지 판정하는 건
realty_presale_funding_plan이 한다. 세율표 자체는 realty_policy_rules가 근거 조문과 함께 준다(중과·감면 등
이 계산이 가정으로 제친 것들이 거기 있다 — assumptions를 반드시 사용자에게 전하라).
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | 단지명 일부 (공백 무관) | |
| house_ty | No | 주택형 (예: '59', '84B') — 생략 시 공고의 주택형 목록을 돌려준다 | |
| movein_ym | No | 입주 년월 YYYYMM 덮어쓰기 — 공고에 입주예정이 없거나 다른 가정을 쓸 때 | |
| mid_rate_pct | No | 중도금 대출 연이율 %(기본 5.0 — 실제 금리는 공고·은행마다 다르다) (허용 범위 0 초과~20) | |
| house_manage_no | No | 공고 관리번호 (realty_presale의 house_manage_no) | |
| extra_options_krw | No | 발코니 외 유상옵션 합계(원) — realty_notice_facts의 옵션가에서 골라 넣어라 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the calculation is deterministic on the factsheet, defaults assume standard tax rates while 중과·감면 live in realty_policy_rules, and — critically — it instructs the agent that assumptions must be surfaced to the user. It stops short of describing return shape in detail, but the disclosure of the assumption-handling obligation is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and boundary are front-loaded well, but the text is dense with self-referential asides (신고 #43의 선 그대로, 실측 124만원) that add persuasion rather than actionable content. Several parentheticals could be dropped without losing invocation-relevant meaning, so it reads as verbose rather than tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, no-output-schema financial calculation, the description supplies the missing context: deterministic vs. personal-parameter split, assumption disclosure duty, and the sibling that owns each excluded concern. It also hints at return shape ('행마다 한 줄 요지' vs footnotes), which is enough given no output schema. Minor gap: no explicit note on which parameters are needed to get a meaningful result when all are optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (keyword, house_ty, movein_ym, mid_rate_pct, house_manage_no, extra_options_krw, include_footnotes) is already documented in the schema with defaults, ranges, and cross-tool hints. The description adds only the general note that rates may differ from the default; it does not extend parameter semantics meaningfully, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (계산한다) and a precisely bounded resource (분양 한 건의 층별 총 소요자금), then enumerates the exact components: 분양가·발코니·중도금이자·취득세. The agent can immediately tell this apart from sibling cost tools like realty_presale_funding_plan without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly draws the boundary: it computes only what is deterministically derived from the notice + tax law, and names the alternatives for everything outside that line — realty_complex_rent_by_pyeong for jeonse prices, realty_presale_funding_plan for loan/funding judgment, realty_policy_rules for the tax table itself. This is a textbook when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_presale_funding_plan분양 자금 흐름 판정 — 계약금·중도금·잔금 시점별 필요액 × 대출 규제 상한ARead-onlyIdempotentInspect
분양 한 건이 내 자기자금과 대출로 닫히는지 시점별로 판정한다.
공고 하나에 대해 **"내 자기자금으로 닫히는가"**를 결정론으로 판정한다 — 시점별
(계약금→중도금 회차→잔금) 필요액, 잔금 시점의 필요 대출액, 그 대출이 규제 상한
(LTV·가액구간 한도·DSR — realty_loan_limit과 같은 엔진) 안에 드는지, 부족하면
얼마가 부족한지. "이 분양 당첨되면 진행 가능해?"류 질문의 자리다.
경계: ① 차주 유형·소득은 **선언**이다(서버는 판정하지 않는다). ② 판정은 **현행
규제·현재 자기자금 기준**이다 — 잔금 시점(수년 뒤)의 규제·금리·저축 증가는 반영하지
않으며 그 사실을 assumptions에 싣는다. ③ 승인·확약이 아니다. ④ 저축 계획·갈아타기
전략·매수 적정성 판단은 이 도구 밖이다 — 시세 비교는 realty_presale_vs_market,
규칙 원표는 realty_policy_rules. 응답의 assumptions·uncertainties를 함께 전하라.
⑤ 입주시 시세·전세보증금도 **선언**이다 — 선언하면 각각 시세 기준 잔금대출 시나리오
(scenario_at_expected_price)와 전세 잔금 시나리오(jeonse_scenario — 거주의무·대출
병행 불가 게이트)를 병렬로 준다. 서버는 미래 시세·전세가를 추정하지 않는다.
| Name | Required | Description | Default |
|---|---|---|---|
| lender | No | 업권 | 은행 |
| region | No | 규제 판정용 지역 덮어쓰기 — 생략하면 공고 소재지로 판정한다 | |
| borrower | Yes | 잔금대출 차주 유형(사용자 선언 — realty_loan_limit과 동일 계약). 계약자 명의 기준으로 선언하라 | |
| house_ty | No | 주택형 (예: '59', '84B') | |
| is_metro | No | 수도권 여부 직접 선언 | |
| movein_ym | No | 입주 년월 YYYYMM 덮어쓰기 — 공고에 입주예정이 없으면 이걸 안 주는 한 총 소요자금이 계산되지 않아 자금 판정도 못 한다(realty_presale_cost와 같은 계약·같은 이름). 후보는 realty_presale의 move_in_ym | |
| rate_type | No | 잔금대출 금리유형 — realty_loan_limit과 동일 계약. 기본 '변동'은 스트레스 금리 전액 가산이라 가장 보수적이다(안 닫힌다는 판정이 유형 때문일 수 있다) | 변동 |
| floor_zone | No | 층 구분(예: '5~9층') — 생략하면 첫 밴드로 계산하고 나머지 밴드 총액을 병기한다 | |
| is_regulated | No | 규제지역 여부 직접 선언 | |
| mid_rate_pct | No | 중도금 대출 연이율 %(기본 5.0) (허용 범위 0 초과~20) | |
| own_funds_10k | Yes | 동원 가능한 자기자금(만원) — 계약금부터 잔금까지 전액 투입 가정으로 계산한다. 0도 유효하다(전액 대출 시나리오 — 계약금 게이트에서 정직하게 걸린다) | |
| credit_loan_10k | No | 신용대출 잔액·예정액(만원) — realty_loan_limit과 동일 계약(서버가 산정만기 5년 규제식으로 계산한다). 직접 연 원리금을 계산해 넣지 마라 | |
| house_manage_no | Yes | 공고 관리번호 (realty_presale의 house_manage_no) | |
| loan_term_years | No | 잔금대출 만기(년) (허용 범위 1~50) | |
| rate_fixed_years | No | 혼합형 고정기간 또는 주기형 변동주기(년) — 미지정 시 5년 가정 (허용 범위 0~50) | |
| annual_income_10k | No | 차주 연소득(만원) — 주면 잔금대출의 DSR 상한까지 반영해 판정한다 | |
| extra_options_krw | No | 발코니 외 유상옵션 합계(원) | |
| interest_rate_pct | No | 잔금대출 약정금리 가정(%) (허용 범위 0 초과~20) | |
| jeonse_deposit_10k | No | 입주 시점 예상 전세보증금 선언(만원) — 주면 '세입자 보증금으로 잔금 치르기' 시나리오를 판정한다(거주의무·대출 병행 불가 게이트 포함). 시세 확인은 realty_complex_rent_by_pyeong·region_price_stats(metric=rental) | |
| credit_loan_rate_pct | No | 신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수 (허용 범위 0 초과~20) | |
| expected_price_at_movein_10k | No | 입주(잔금) 시점 예상 시세 선언(만원) — 잔금대출 LTV는 실무상 입주시 시세·감정가 기준이라, 선언하면 그 값 기준 판정을 병렬로 준다. 서버는 미래 시세를 추정하지 않는다(선언 없으면 분양가 기준만) | |
| existing_annual_debt_payment_10k | No | 기존 대출 연간 원리금(만원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish read-only/idempotent safety, but the description adds substantial behavior the annotations cannot: judgment is deterministic and locked to current regulation and current own funds (no projection of future rates/regulation/savings), borrower type and income are user declarations rather than server-verified facts, output is not an approval or commitment, and parallel 시세·전세 scenarios appear only when declared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one sentence and the numbered ①–⑤ boundary block is easy to scan. It is dense and the opening sentence is echoed by the title, which costs a little, but essentially every clause carries routing or constraint information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter, no-output-schema tool this is complete: it covers the required inputs' contract (house_manage_no, own_funds_10k, borrower), the movein_ym dependency, the conditional scenarios returned (scenario_at_expected_price, jeonse_scenario), and the assumptions/uncertainties the response carries. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning: own_funds_10k is modeled as fully deployed from 계약금 to 잔금 (0 is valid and honestly fails at the 계약금 gate), borrower/credit_loan share the realty_loan_limit contract, and rate_type's 변동 default is the most conservative stress case. These interpretive notes go beyond the per-field schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: deterministically judges whether one presale closes with own funds + loans at each stage (계약금→중도금 회차→잔금), including the loan's regulatory cap check. It explicitly positions itself against siblings (realty_loan_limit engine, realty_presale_cost, realty_presale_vs_market, realty_policy_rules), so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the exact question it answers ('이 분양 당첨되면 진행 가능해?') and enumerates five boundaries, including explicit when-not routing: savings planning, 갈아타기 strategy and purchase-appropriateness are out of scope, price comparison goes to realty_presale_vs_market, and the raw rule table to realty_policy_rules. It also tells the agent to relay assumptions/uncertainties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_presale_price_trend지역 분양가 추이 — 공고 간 연도별 평당 분양가ARead-onlyIdempotentInspect
같은 지역 분양 공고들의 연도별 평당 분양가 추이를 낸다.
같은 지역 분양 공고들의 **연도별 평당 분양가 추이**를 낸다 — "지금 넣을까,
기다릴까"에서 **기다림의 비용**(다음 공고가 얼마에 나올까)을 정량화하는 축이다.
재당첨 제한이 걸린 결정(분양가상한제 10년 등)에서 특히 판단을 가른다.
기준(답변에 그대로 전달): **공급면적(분양평) 평당 최고 분양가**(만원/평), 발코니
확장·유상옵션 미포함. 연도별 주택형 믹스가 다르면 중앙값이 흔들린다 —
announcements가 1~2건인 연도는 추이로 읽지 말고, 평형대를 고정하려면
exclusive_m2_min/max(국평=80~85)를 써라.
이 축의 자리: 개별 공고의 적정성(분양가 vs 실거래)은 realty_presale_vs_market,
실거래 가격 추이는 realty_region_price_stats — 이 도구는 **분양가끼리의 시계열**이다.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 시도 (예: 서울, 경기, 세종) | |
| keyword | No | 단지명·공급 주소 부분일치 (예: '고덕', '동탄') — 동네·지구 단위 추이는 이걸로 | |
| sigungu | No | 시군구 정확한 이름 (예: 평택시). ⚠️세종은 오염돼 있으니 keyword를 쓰라 | |
| exclusive_m2_max | No | 전용면적 상한(㎡) — 국평만 보려면 85 | |
| exclusive_m2_min | No | 전용면적 하한(㎡) — 국평만 보려면 80 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly/idempotent/non-destructive), and the description goes well beyond by defining the metric basis (분양평 평당 최고 분양가, 만원/평, excluding 발코니 확장·유상옵션) and disclosing a statistical caveat about median instability when the housing-type mix differs by year. This is genuine analytical behavior an agent cannot get from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Bold header lines and a front-loaded purpose are good, but the opening sentence '같은 지역 분양 공고들의 연도별 평당 분양가 추이를 낸다' is then repeated verbatim in the second paragraph, which is pure redundancy. The philosophical framing around 기다림의 비용 earns its place, but the duplicated lead-in does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, all-optional, no-output-schema tool, the description covers method, caveats, sibling positions, and filter usage. It stops short of describing what the returned time series looks like (e.g., yearly buckets, price units per row), which an agent producing downstream answers would benefit from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic guidance: exclusive_m2_min/max pins the pyeong band (국평=80~85), and it directs neighborhood/district-level analysis to keyword. It even flags the sigungu contamination caveat. Minor gap is it doesn't explain region scoping in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource: '같은 지역 분양 공고들의 연도별 평당 분양가 추이를 낸다'. It then distinguishes itself explicitly from two siblings (realty_presale_vs_market for individual-announcement appropriateness, realty_region_price_stats for 실거래 trend) by declaring '이 도구는 분양가끼리의 시계열이다'. An agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use framing ('지금 넣을까, 기다릴까' — cost-of-waiting axis, especially for 재당첨 제한 decisions) and when-NOT-to: 'announcements가 1~2건인 연도는 추이로 읽지 말고'. It also names the correct alternative tool for adjacent questions, so the agent knows both the selection and the exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_presale_vs_market분양가 적정성 분석 — 분양가 vs 주변 실거래 시세ARead-onlyIdempotentInspect
청약(분양) 공고의 분양가가 주변 실거래 시세 대비 싼지/비싼지를 주택형별로 계산한다. "이 청약 넣을 만해?", "분양가 적정해?"류 질문의 정량 근거 — 웹검색으로는 못 하는 분양가×실거래 조인 계산이 이 도구의 존재 이유다.
공고 특정: house_manage_no가 없으면 region+keyword로 검색하고, 여러 건이면
후보 목록을 돌려주니 하나를 골라 다시 호출하라(추측해서 고르지 않는다).
기준선: 평형 행의 gap_pct는 gap_basis가 말하는 기준 대비다 — 인근 비교단지가 충분하면
**공고 좌표 반경·준공 연도 조건·같은 평형대 비교군**(nearby_baseline) 대비이고, 아니면
지역(공고 시군구, 없으면 시도) 실거래 평균(구축·외곽 포함, 이상치 미필터) 대비다. 지역 평균 대비 값은
gap_pct_region_avg에 늘 따로 있고, 두 기준선이 크게 갈리면 baseline_divergence가
붙는다 — 그때 지역 평균 대비 수치로 '비싸다'를 말하지 마라. 청약 경쟁률·당첨 가점
커트라인은 realty_subscription_odds에 있다("넣을 만해?"엔 둘을 같이 써라).
지역 수준 교차확인은 realty_area_price_bands(이상치 필터·중앙값)로 하라.
이 도구는 **현재 공고 1건의 적정성**이다 — 같은 지역 공고들의 분양가 시계열
("기다릴수록 얼마씩 올랐나")은 realty_presale_price_trend.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | 실거래 비교 창(개월) (허용 범위 3~24) | |
| pyeong | No | 대조할 전용평(정수)을 직접 고른다 — 예: [26]이면 국민평형 84㎡만. 안 주면 **세대수 많은 순 상위 5개** 평형을 자동으로 고른다. comparison_truncated에 빠졌다고 적힌 평형은 이 인자로 되받아 부르면 된다(공시만 하고 길이 없으면 막다른 골목이다) | |
| region | No | 시도 (예: 서울, 경기, 세종) | |
| keyword | No | 단지명·주소 부분일치 (예: '우미린', '5-2생활권', '다솜동') | |
| house_manage_no | No | realty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly/idempotent/non-destructive), so the description's added value is the output-interpretation behavior: gap_pct follows whichever baseline gap_basis names (nearby_baseline vs regional average), region-avg figures always sit in gap_pct_region_avg, and baseline_divergence signals when the two baselines disagree — with an explicit warning not to call something 'expensive' off the regional figure in that case. It also discloses the multi-candidate re-call behavior and the single-announcement scope limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then announcement identification, then baseline semantics, then sibling routing — a logical order with no filler sentences. It is dense and long, with minor redundancy around the '넣을 만해?' framing and a stray trailing quote character, but nearly every clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return-value burden, and it does: it names the key output fields (gap_pct, gap_basis, gap_pct_region_avg, baseline_divergence, comparison_truncated, footnotes) and how to interpret each. For a 6-parameter join-computation tool, an agent has everything needed to call it and read the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further than the schema by explaining that omitting pyeong auto-selects the top 5 by household count, and that pyeong is the escape hatch for housing types dropped from comparison_truncated. It reinforces that house_manage_no is the most precise identifier and ties region+keyword to the search fallback.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it computes, per housing type, whether a subscription announcement's presale price is cheap/expensive versus surrounding actual transaction prices. It explicitly frames its reason for existing (the presale×transaction join that web search can't do) and names the siblings it is NOT (realty_subscription_odds, realty_area_price_bands, realty_presale_price_trend).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: if house_manage_no is absent, search by region+keyword, and if multiple candidates return, pick one and re-call rather than guessing. It names alternatives and conditions ('넣을 만해?' → pair with realty_subscription_odds; regional cross-check → realty_area_price_bands; time series of presale prices → realty_presale_price_trend).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_public_rental_notices공공임대 모집공고 — LH 행복주택·국민임대·매입임대 등 마감 전 공고(접수 예정 포함)ARead-onlyIdempotentInspect
마감 전 공공임대 모집공고(접수 예정 포함) — LH 행복주택·국민임대·영구임대·통합공공임대·공공임대·매입임대·전세임대.
"행복주택 모집 공고 있어?", "서울 청년 전세임대 지금 신청돼?", "경기 매입임대 모집", "LH 임대 공고"류
질문의 자리다. 공고마다 유형·지역·진행상태·마감일·남은 일수와 **원문 공고 주소(source_url)**를 준다.
마감 임박 순이고 총계(meta.total_matched)·잘림(meta.truncated)이 함께 나온다.
**결론에 반드시 옮길 것**:
· 원천은 LH 공고(+마이홈의 LH 밖 공급기관 일부)다. **SH·GH·iH 등 지방공사 자체 공고와 장기전세는 없다**
— 0건이나 적은 건수를 '모집이 없다'로 말하지 마라(meta.coverage.not_covered).
· 자격(소득·자산·무주택) 판정은 하지 않는다 — 신청 가능 여부는 source_url 공고문으로 안내하라.
· 수집 시각은 meta.freshness다 — 캐시라 그 뒤 공고는 없다.
· 마감 전이면 **접수 시작 전 공고도 든다**(LH 공고중·status 접수예정) — '지금 신청 가능'으로 말하지 말고
접수 기간은 공고문으로 확인하라. 지금 접수 중이 확실한 것은 status 접수중뿐이다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 돌려줄 공고 수(마감 임박 순) (허용 범위 1~50) | |
| offset | No | 건너뛸 공고 수 — meta.next_offset을 그대로 넣는다 (허용 범위 0~5000) | |
| region | No | 시도(예: '서울', '경기', '전남'). 시군구·단지명은 keyword로 준다. '광주'는 광주광역시다(경기 광주시는 region='경기', keyword='광주'). 전국 단위 공고는 어느 시도에도 함께 실린다 | |
| keyword | No | 공고명·지역 표기 부분일치(공백 무시) — '청년'·'신혼'·시군구 등. LH는 시군구 필드가 없어 공고명에 적힌 것만 잡힌다(meta.keyword_scope) | |
| rental_type | No | 임대 유형. 장기전세(SH 상품)는 이 원천에 없어 0건과 함께 그 사실을 돌려준다 | 전체 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive/openWorld, but the description adds substantial behavioral context beyond them: coverage gaps (meta.coverage.not_covered), cache freshness semantics (meta.freshness), truncation/total_matched, and the crucial 접수예정 vs 접수중 distinction. It warns not to interpret 0 results as 'no recruitment', which is real operational guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core scope in the first sentence, then example questions, then a bulleted '결론에 반드시 옮길 것' block. Appropriate for a tool with several caveats, though some points (rental type enumeration) overlap the title and schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it lists returned fields (유형·지역·진행상태·마감일·남은 일수, source_url), sort order, and meta fields (total_matched, truncated, freshness, coverage, next_offset). Combined with annotations covering safety, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents region, keyword, rental_type, limit, offset thoroughly (including 광주 disambiguation and keyword scope). The description largely restates the rental types and does not add parameter syntax or format detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (마감 전 공공임대 모집공고) with the source enumerated (LH 행복주택·국민임대·영구임대·통합공공임대·공공임대·매입임대·전세임대). An agent can tell this apart from sibling notice tools (realty_notice_facts, realty_notice_text) because the scope is recruitment notices, not notice text/facts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete example questions ('행복주택 모집 공고 있어?', '서울 청년 전세임대 지금 신청돼?') that clearly delineate when to use it, plus explicit when-not scope (자격 판정 안 함, SH·GH·iH 미포함). It lacks named sibling alternatives to route to, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_reconstruction[유료] 재건축 유망 단지ARead-onlyIdempotentInspect
[유료] 건령·거래활성 기반 재건축 후보 스크리닝 상위 단지를 조회한다.
점수 = 건령(최대 70, 30년 연한 기준) + 최근 12개월 거래활성 전국 백분위(최대 30).
사업성(용적률·대지지분·안전진단·조합 단계)은 반영되지 않는다 — 후보 발굴용이지
투자 판단 근거가 아니며, 응답의 disclaimer를 사용자에게 그대로 전하라.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | (허용 범위 1~50) | |
| region | No | 지역명 — 다른 도구와 같은 인자 이름. district와 같은 뜻이다(둘 중 하나만) | |
| district | No | 지역명 (예: 서울, 구로구). 비우면 전국 상위 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly/idempotent/openWorld), so the description earns credit for adding context beyond them: the exact scoring formula, the explicit disclosure that feasibility factors (용적률, 대지지분, 안전진단, 조합 단계) are excluded, and the requirement to relay the response disclaimer verbatim. Auth/cost implications of '[유료]' are only implied by the title, not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the purpose, then the formula, then the limitation. Every sentence carries information the agent cannot get from the schema or annotations; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does enough to set expectations: it reveals the score composition, that ranking is national-by-default, and that the response carries a disclaimer. It could say more about the shape of the returned list (fields, ordering guarantees), which is the one remaining gap for a tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, region, and district (including the region/district synonymy). The description adds no parameter-level guidance (e.g. how to format a district, or what happens when limit is large), so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('재건축 후보 스크리닝 상위 단지를 조회한다') and even enumerates the exact ranking inputs (building age + 12-month transaction percentile). It is precise about what the tool returns, but it never distinguishes itself from the closely named sibling realty_redevelopment, so an agent must guess which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear scope boundary: '후보 발굴용이지 투자 판단 근거가 아니며' explicitly tells the agent this is for candidate discovery, not investment judgment, and instructs relaying the disclaimer. What's missing is naming the alternative sibling (e.g. realty_redevelopment or realty_remodel_feasibility) that would be appropriate for feasibility questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_redevelopment[유료] 서울 재개발·재건축 사업장ARead-onlyIdempotentInspect
[유료] 서울시 정비사업(재개발·재건축·가로주택) 사업장 목록을 조회한다.
[유료] 서울시 정비사업(재개발·재건축·가로주택 등) 사업장 목록 — 사업명·유형·
진행 단계·위치. "○○구 재개발 어디까지 진행됐어?"·"면목동 재개발 어디 있어?"류 질문용.
구(region)·동(dong)·유형(project_type)·진행 단계(stage)로 거를 수 있다.
**커버리지는 서울 한정**(정보몽땅 원천) — 타 시도는 이 도구로 답할 수 없다고 밝혀라.
세대수·준공예정은 원천 목록이 제공하지 않아 null이다(지어내지 말 것). 원천이 진행
단계를 비워 둔 사업장이 있다(약 2%) — stage가 빈 행은 '단계 미상'이지 '진행 없음'이 아니다.
재건축 **유망도 점수**는 이 도구가 아니라 realty_reconstruction이 담당하고,
"지금 사면 조합원 지위 승계돼?"는 realty_member_transfer_check(무료)가 담당한다.
| Name | Required | Description | Default |
|---|---|---|---|
| dong | No | 법정동 (예: 면목동·신길동) — 사업장 주소로 거른다. 구를 함께 주면 빠르다 | |
| limit | No | (허용 범위 1~50) | |
| stage | No | 진행 단계 필터 — plan_establishment=정비계획 수립, zone_designation=정비구역지정, safety_assessment=안전진단, committee_approval=추진위원회승인, union_establishment=조합설립인가, project_approval=사업시행인가, disposal_approval=관리처분인가, sale=분양, construction_start=착공, completion=준공인가, relocation_notice=이전고시, union_dissolution=조합해산. 비우면 전체. 원천이 단계 코드를 안 준 사업장(조합청산·조합원 모집신고 등)은 이 필터에 안 걸린다 | |
| offset | No | 페이지네이션 오프셋 | |
| region | No | 시군구 (예: 강남구) — 다른 도구와 같은 인자 이름. sigungu와 같은 뜻이다 | |
| sigungu | No | 시군구 (예: 강남구). 비우면 서울 전체. region과 같은 뜻의 옛 이름(둘 중 하나만) | |
| project_type | No | reconstruction=재건축, housing_redevelopment=재개발(주택정비형), urban_redevelopment=재개발(도시정비형), street_housing=가로주택정비, small_reconstruction=소규모재건축, small_redevelopment=소규모재개발, regional_housing=지역주택, remodeling=리모델링. 비우면 전체 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, and the description goes beyond them by disclosing Seoul-only source coverage, that 세대수·준공예정 are null, and that ~2% of rows have a blank stage meaning '단계 미상' not '진행 없음'. These are genuinely useful data-quality and scope caveats. However it does not describe result ordering or how paging interactss with the filters, so it is strong-but-not-exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core capability and caveats, and mostly dense with no filler. The one inefficiency is the near-duplicate opening line ('[유료] 서울시 정비사업… 목록을 조회한다' repeated as '…목록 — 사업명·유형…'), which costs a sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the job of describing returns (사업명·유형·진행 단계·위치) and pre-empts the obvious failure modes (fabricating null household/completion values, misreading blank stage, answering for non-Seoul regions). For a 7-param read tool with annotations already covering safety, this is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already maps every enum (stage, project_type) and alias (region/sigungu), so the description's restatement of the filterable fields adds little new meaning. Baseline 3 applies when the schema carries the parameter burden; no extra semantics or format hints are supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('서울시 정비사업 사업장 목록을 조회한다') and enumerates the returned fields (사업명·유형·진행 단계·위치). It names the sibling it does NOT cover — realty_reconstruction for 유망도 점수 and realty_member_transfer_check for 승계 — so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering questions ("○○구 재개발 어디까지 진행됐어?", "면목동 재개발 어디 있어?"), states the filter dimensions (region/dong/project_type/stage), and explicitly limits scope ('타 시도는 이 도구로 답할 수 없다고 밝혀라'). It also routes two adjacent intents to their correct tools, which is full when/when-not/alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_redevelopment_burden정비사업 분담금 계산 — 선언된 감정평가액·비례율로 권리가액·분담금ARead-onlyIdempotentInspect
재개발·재건축 조합원의 권리가액과 추가 분담금을 계산한다.
재개발·재건축 조합원의 권리가액과 추가 분담금(또는 환급금)을 결정론으로 계산한다 —
권리가액 = 종전자산 감정평가액 × 비례율, 분담금 = 조합원분양가 − 권리가액.
"감정평가 3억에 비례율 98%면 얼마 더 내?"의 자리다.
경계를 지켜라: ① 입력 전부 **선언**이다 — 감정평가액·비례율은 조합 자료에서 가져와야
하고 서버는 검증하지 않는다. ② 이 산식은 법정 산식이 아니라 통용 실무 산식이며,
비례율은 관리처분인가 전엔 추정치라 준공까지 계속 변한다 — 응답의 sensitivity(비례율
±10%p 스윙)와 disclosures를 반드시 함께 전하라. ③ 산식 출처·변동 함정의 원문은
realty_policy_rules(topic=redevelopment_rules)의 proportion_formula가 진실원이다.
분양자격 자체가 불확실하면 topic=redevelopment_entitlement(갈림길 지도)부터.
| Name | Required | Description | Default |
|---|---|---|---|
| proportion_rate_pct | No | 비례율(%, 예: 102.5) — 조합 총회 자료·관리처분계획의 값을 선언. 없으면 아래 사업 전체 3종으로 계산한다 (허용 범위 0 초과~300) | |
| prev_asset_value_10k | Yes | 조합원 종전자산 감정평가액(만원) — 감정평가 결과이지 시세가 아니다 | |
| total_post_asset_10k | No | 종후자산 평가총액=분양수입 총액(만원) — 비례율을 직접 계산할 때 | |
| total_prev_asset_10k | No | 종전자산 평가총액(만원) — 비례율을 직접 계산할 때 | |
| member_sale_price_10k | Yes | 받으려는 주택형의 조합원분양가(만원) | |
| total_project_cost_10k | No | 총사업비(만원) — 비례율을 직접 계산할 때 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, and the description adds substantial behavior the schema cannot convey: inputs are declared and unverified by the server, the formula is common practice rather than statutory, 비례율 keeps changing until completion, and the caller must relay the response's sensitivity and disclosures. This is exactly the added context the annotations leave open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and formula, then numbered boundaries; every section carries real information. Slightly verbose with the title/description overlap and the ①②③ scaffolding, but no padding sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden and does so by naming the sensitivity and disclosures fields. Combined with the formula, the declared-input caveat, the volatility warning, and sibling routing, an agent has everything needed to call and present results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter, including optionality of 비례율 and the fallback to the three project-total inputs. The description's formula shows how parameters combine into output, but adds no syntax, units, or edge-case detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and two concrete outputs (권리가액, 추가 분담금) and gives the exact formulas that produce them. It also differentiates from siblings by routing formula provenance to realty_policy_rules(topic=redevelopment_rules) and eligibility questions to redevelopment_entitlement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the question this tool answers ("감정평가 3억에 비례율 98%면 얼마 더 내?") and gives concrete when-to-use-elsewhere rules: go to redevelopment_rules for the formula source, redevelopment_entitlement first if sale eligibility is uncertain. It also warns that results are unstable before 관리처분인가.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_region_price_stats지역 실거래 시세 통계ARead-onlyIdempotentInspect
지역의 아파트 실거래 시세 추이(월별)를 조회한다. 경매가가 싼지 판단하는 기준선이 된다.
**이 축의 자리(시세 도구 3종 중)**: 월별 흐름·방향이 필요할 때 이걸 쓴다. 지역의
가격 **수준**을 인용할 거면 realty_area_price_bands를 쓰라 — 평형(pyeong)을 지정하면
이 축은 셀 평균이라 직거래 이상치가 안 걸러지고(전체 평형은 해제·직거래 이상치 제외 —
행 avg_basis), **평형 지정 값이 bands와 갈리면 bands 쪽이 정상 매매에 가깝다**(세종
소형 실측 4,400만원 차). 단지가 특정된 질문("○○아파트
얼마야")은 realty_search_complexes가 기본이다 — 지역 평균은 단지 간 편차(같은 동
같은 평형에서 단지 평균 24% 차)를 뭉갠다.
region은 시군구명(예: '강남구') 또는 **법정동까지**(예: '강남구 대치동',
'세종특별자치시 나성동') — 세종처럼 시군구가 하나인 도시는 동 단위로 좁혀야 신도심·
구도심이 섞이지 않는다(2026-08-08, 8/7 테스터 제안 수용). 동명 지역이 여럿이면
시도를 앞에 붙여라 — 안 붙이면 **고르지 않고 거절**하며(region_ambiguous) 토큰이
정확히 같은 후보를 준다(그 목록을 사용자에게 되묻고, 고른 이름을 그대로 다시 넣어라).
지역은 토큰 정확일치로만 맞춘다 — '동구'는 '남동구', '서구'는 '달서구'가 아니다.
metric: price(매매) | rental(전월세). rental도 **months 창 월별 추이**(monthly_trend:
전세 평균·중앙, 월세 보증금·월세, 건수 분리)를 준다 — "전세 떨어지는 중이야?",
역전세 판단용(입주 물량은 realty_move_in_supply와 조합). 상단 필드는 최신월 스냅샷.
**rental엔 평형 인자가 안 먹는다** — 전월세 통계는 평형별로 나뉘어 있지 않아
pyeong_exclusive·pyeong_supply·area_m2_* 를 줘도 전체 평형 기준 값이 오고
warning_pyeong_fallback으로 실토한다(값이 잘못 나가는 게 아니라 **다른 모수**다).
평형별 전월세가 필요하면 단지 단위 realty_complex_rent_by_pyeong으로 가라.
**면적은 사용자가 말한 단위 그대로 넣어라 — 환산은 서버가 한다**(2026-08-22 제보):
- ㎡로 말했으면 → area_m2_exclusive(전용 84㎡ → 84) / area_m2_supply(공급 112.8㎡ → 112.8)
- 평으로 말했으면 → pyeong_supply(분양 "34평") / pyeong_exclusive(전용 실평수 25.4평)
㎡ 값을 평 인자에 넣으면 조용히 환산하지 않고 사유와 두 방향 출구를 적어 거절한다.
**가격순 '목록'이 필요하면 top_n을 준다**(2026-09-07 외부 신고 T-2026W34-352):
"강남구 신고가 상위 5개"·"제일 비싸게 팔린 아파트"처럼 개별 거래를 나열하는 질문은
이 인자 없이는 답이 안 나온다 — 종전엔 그런 질문이 이 도구로 라우팅된 뒤 집계
(최고/평균/중앙)만 받고 목록을 못 줬다. top_transactions에 단지·평형·금액·계약일·층이
온다. **다만 그것은 '창 안의 고가 거래'이지 신고가(역대 최고가 경신)가 아니다** —
그 경계는 top_n을 준 응답이 같은 블록에서 적는다(이 도구 설명은 필드 이름을 대지
않는다 — 조건부로만 실리는 키를 설명이 무조건 지목하면 top_n 없이 부른 응답에서
없는 이름을 찾게 만든다, S364).
**기준일 전후 비교·단지별 층/평형 분해는 여기서 한 번에**: 단지 목록엔 단지마다 층 밴드
분해(평형 미지정이면 평형대 4구간도)가 붙고 compare_from을 주면 전후 비교가 붙는다. 창은
months 전체(6개월 고정 아님)·계약해제 제외다. '고층 신고가냐 시세 상승이냐'는 전후 창의 층
분해로 가른다. 한쪽 3건 미만이면 변화율은 판정 보류, 기준일 이후 창은 신고기한 30일로 미완결.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | **가격순 상위 거래 '목록'을 함께 받는다**(1~20). '신고가 상위 5개', '제일 비싸게 팔린 아파트', '고가 거래 목록'처럼 **개별 거래를 나열**하는 질문이 이 인자다 — 안 주면 이 도구는 평균·중앙·최고 같은 **집계만** 답하고 목록은 못 준다. 행에 단지·전용면적·평형·금액·계약일·층이 실린다(top_transactions). metric='price'에서만 동작한다 (허용 범위 1~20) | |
| metric | No | price=매매, rental=전월세. **평형 인자(pyeong_exclusive·pyeong_supply·area_m2_exclusive·area_m2_supply)는 price에서만 먹는다** — 전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다(전체 평형 값이 오고 warning_pyeong_fallback으로 실토한다). 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라 | price |
| months | No | 조회 개월 수 (허용 범위 1~60) | |
| region | Yes | 지역명 — 시군구까지(예: '강남구', '수원시 권선구') 또는 **법정동까지**(예: '강남구 대치동', '세종특별자치시 나성동'). 시도 약칭은 서버가 정식명으로 펴지만('서울 마포구' → '서울특별시 마포구'), 동명 지역이 여럿이면 시도를 앞에 붙여라 — 안 붙이면 **고르지 않고 거절**하며 이름이 정확히 같은 후보 목록을 준다('동구'는 '남동구'가 아니다). 단지명은 여기 넣지 마라(단지는 realty_search_complexes·realty_complex_pyeong_price 담당) | |
| by_dong | No | metric='rental'에서 **법정동 × 전용면적대(60㎡ 미만·60~85㎡·85㎡ 초과) 전세 보증금 중앙값**을 함께 받는다(by_dong). '세종 어느 동이 전세 2.3억 이하야'처럼 한 시군구 안에서 동을 고르는 질문의 자리다 — 세종은 시군구가 하나라 이 인자 없이는 동별 전세를 못 가른다. 표본 3건 이상 칸만 나온다. 매매 동별은 realty_area_price_bands(by_dong=true) | |
| compare_from | No | 기준일 전후 비교(YYYY-MM-DD) — '○○ 발표 전후 단지별 시세'. 단지마다 전·후 창의 건수·중앙값·최고가 거래(계약일·층)·변화율이 붙는다. 단지 도구를 단지마다 부르지 마라. 창은 months 전체라 기준일 이전이 들어오게 잡아라. price 전용 | |
| pyeong_supply | No | 분양평수(공급면적, 평) — 흔히 말하는 '34평'이 이것이다. 내부에서 ×0.745로 전용 실평수로 환산한다. **㎡로 말했으면 area_m2_supply를 쓰라** **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. | |
| area_m2_supply | No | 공급(분양)면적을 **㎡ 그대로** 받는다(예: 112.8). pyeong_supply와 동시에 주면 거절한다 **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. (허용 범위 0 초과~800) | |
| pyeong_exclusive | No | 전용면적 기준 **실평수(평)** — ㎡가 아니다. 전용 84㎡면 25.4를 넣는다. **사용자가 ㎡로 말했으면 이 인자가 아니라 area_m2_exclusive를 쓰라** (㎡ 값을 여기 넣으면 60평 초과로 거절된다). 1평=3.3058㎡ **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. | |
| area_m2_exclusive | No | 전용면적을 **㎡ 그대로** 받는다(예: 84, 59, 114.98). 사용자가 '전용 84㎡'라고 말했으면 환산하지 말고 84를 여기 넣어라 — 서버가 평으로 환산하고 그 사실을 응답에 적는다. pyeong_exclusive와 동시에 주면 거절한다 **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. (허용 범위 0 초과~500) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's job is extra behavior — and it delivers: it discloses a hard rejection (region_ambiguous with exact-token candidate list), a silent-unit-mismatch rejection, the warning_pyeong_fallback for rental+pyeong, contract-cancellation exclusion, a 30-day reporting lag making post-cutoff windows incomplete, and change-rate suppression below 3 transactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and axis positioning, and bold section headers help, but the entry is very long for a description and includes change-log noise (tester-proposal dates, ticket IDs like T-2026W34-352, and an S364 meta-explanation of why field names are omitted) that does not help an agent select or call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description still tells the agent what comes back where — monthly_trend composition, by_dong cells and the 3-sample floor, top_transactions fields, compare_from before/after blocks, footnotes — plus the window definition, so nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema's own parameter descriptions already carry the unit-conversion, top_n-vs-aggregate, by_dong, and compare_from semantics; the prose largely restates them. It adds only marginal framing (e.g., '강남구 신고가 상위 5개' as the trigger phrase for top_n), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource+scope (지역 아파트 실거래 월별 시세 추이) and explicitly positions itself within a named family of three market-price tools. It distinguishes itself from realty_area_price_bands (level vs trend), realty_search_complexes (complex-specific questions), and realty_complex_rent_by_pyeong (pyeong-level rent) by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use routing: use this for monthly direction/trend, bands for price level, search_complexes for a named apartment, complex_rent_by_pyeong when pyeong-level rent is needed, and move_in_supply for 전세 reversal context. It even states which tool to combine with, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_region_rankings지역 순위 (시세·상승률·전세가율·교통·학군)ARead-onlyIdempotentInspect
시군구 순위를 가격·상승률·전세가율 같은 축으로 조회한다.
지역(시군구) 순위를 조회한다 — "제일 비싼 동네 어디야?", "요즘 많이 오른 지역은?",
"전세가율 높은 곳은?"류 질문용.
price=거래량 가중 전용 평당가(최소 5건, 최신월은 집계 진행 중일 수 있음) ·
growth=전용 60-85㎡ 고정 YoY(평형 구성 왜곡 제거). 응답 methodology의 산식·단위를
답변에 반영하라. investment=전세가율(시군구×전용평 셀로 매매·전세를 **같은 평형끼리** 짝지어
산출, 전 행이 같은 기준월·짝지은 건수 공시). 같은 평형·단지 수준은 realty_rental_yield.
**transit·school도 보류다**(2026-09-26, D-2026W39-16) — 입지 점수는 90점 이상이 86.7%라
변별력이 없어 지역 순위를 내지 않는다. "교통 좋은 동네"는 단지를 특정해
realty_location_scores의 location_facts(최근접역 거리·반경 안 정류장·학교 수)로 답하라.
비교 대상이 두어 곳으로 정해진 질문("A vs B 어디가 나아?")은 [유료]
realty_compare_regions가 시세·추이를 나란히 준다 — 이 도구는 순위·탐색용이다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | (허용 범위 1~50) | |
| order | No | desc=상위부터, asc=하위부터 | desc |
| metric | Yes | price=전용 평당가 / growth=연간 상승률 / investment=전세가율·갭투자 / transit·school=**보류**(입지 점수가 미검증 참고값이라 순위를 내지 않는다 — 호출하면 대안 안내) | |
| region | No | 시도명(예: 부산)이면 그 시도 안 순위, 시군구명이면 해당 지역 필터. 비우면 전국 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it discloses the minimum-5-transaction rule, that the latest month may be mid-aggregation, that transit/school are suspended since 2026-09-26 with a reason (86.7% scoring 90+ ⇒ no discrimination), and the same-pyeong cell-matching method for investment. This is exactly the operational context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose, then usage questions, then per-metric caveats, then routing. Each sentence carries distinct information, though the opening two lines restate the same purpose and could be merged. No filler beyond that.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining that responses carry a methodology/footnotes payload and that methodology should be reflected in answers. For a 5-param ranking tool this is close to complete; only minor gaps (pagination, exact row shape) remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description nonetheless adds real meaning — metric-specific definitions (volume-weighted exclusive pyeong price, fixed 60-85㎡ YoY to remove unit-mix distortion, cell-paired jeonse ratio) and the region parameter's dual behavior (시도 vs 시군구). It stops short of explaining order/limit, but the metric semantics materially exceed the enum text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('시군구 순위를 … 축으로 조회한다') and enumerates the axes (price/growth/investment). It explicitly separates itself from realty_compare_regions, realty_rental_yield, and realty_location_scores, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering questions ('제일 비싼 동네 어디야?', '전세가율 높은 곳은?'), states when NOT to use it (two-target comparison → realty_compare_regions) and where to go for suspended axes (realty_location_scores for 교통/학군). Explicit when/when-not/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_region_trend_basket지역 추이 — 동일 단지 고정 바스켓 (구성 변화 제거)ARead-onlyIdempotentInspect
지역 가격 추이를 양쪽 창에 모두 거래가 있는 동일 단지들로만 계산한다.
**왜 필요한가**: 구 월평균 추이는 '가격이 변한 것'과 '팔린 단지가 바뀐 것'을 구분하지
못한다. 표본이 얇으면 후자가 지배하는데, 그걸 시세 변동으로 읽으면 오답이다
(2026-08-14 실사고: 용산 33평 월 1~7건 표본으로 '전년 대비 −9.6%'를 만들었다).
이 도구는 **naive(전체 평균 변화)와 basket(동일 단지 변화)을 나란히** 주고 그 차이를
`composition_effect`로 보여준다 — 차이가 크면 그 지역 평균 추이는 구성 잡음이다.
단지별 값은 **평당가**라 단지 안의 평형 구성 변화도 흡수한다.
한계를 반드시 함께 전하라: 바스켓이 얇으면(단지 수가 적으면) 이 값도 못 믿는다.
취소·직거래는 제외했고, 단지 내 동·층 구성 변화까지는 보정하지 못한다.
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | 시군구명 (예: 용산구, 성동구). **여러 시도에 같은 이름이 있는 시군구**(중구·동구·서구·남구·북구·강서구)는 시도를 함께 주라(예: '서울 중구') — 안 주면 합치지 않고 후보를 실토하며 거절한다 | |
| pyeong_band | No | pyeong_supply 기준 허용 폭(±평). 넓히면 바스켓이 커지고 평형 혼합이 늘어난다 (허용 범위 1~10) | |
| pyeong_supply | No | 분양평(사용자가 말하는 '34평') 필터 — ±3평 창으로 거른다. **좁힐수록 바스켓이 얇아져** 고정 바스켓의 이점이 사라지니 응답의 바스켓 단지 수를 반드시 확인하라 (허용 범위 1~200) | |
| window_months | No | 비교 창 하나의 길이(개월). 최근 N개월 vs 그 직전 N개월을 비교한다 (허용 범위 1~12) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 | |
| min_tx_per_complex | No | 바스켓에 넣을 단지의 창당 최소 거래 건수 — 1이면 바스켓이 커지지만 단지별 값이 한 건에 좌우된다 (허용 범위 1~10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses meaningful operational behavior: cancellations and direct deals are excluded, building/floor composition within a complex is not corrected, and thin baskets make the value untrustworthy. It also tells the agent the response contains naive vs basket side by side and how to interpret the gap via composition_effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core definition and scope are front-loaded in the first sentence, followed by a rationale, output description, and caveats with bold labels that make skimming easy. It is somewhat long and the limitation sentence runs several clauses together, but each block carries distinct information rather than repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter analytical tool with no output schema, it covers the essential ground: what is computed, the data exclusions, the known unmodeled variance, and the named output fields (naive, basket, composition_effect, footnotes). The response shape is only sketched rather than specified, which is a modest gap given there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds interpretation the schema does not: values are per-pyeong so pyeong-mix shifts inside a complex are absorbed, and narrowing pyeong_supply thins the basket and erases the tool's advantage, prompting the agent to check the returned complex count. Parameter mechanics themselves are still left largely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific, non-obvious operation: computing a regional price trend restricted to the same complexes that transact in both comparison windows, returning naive and basket values plus a composition_effect. It conceptually separates itself from the naive 'old monthly average' trend approach, but never names the actual sibling tool (e.g. realty_region_price_stats) that an agent would otherwise reach for, leaving the routing decision partly inferential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this tool is the right choice: when the sample is thin enough that composition churn dominates the regional average (illustrated with the 2026-08-14 Yongsan incident). However, it states no explicit exclusions and names no alternative tool for the cases where a plain average is fine.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_remodel_feasibility개조 가능성 — 벽을 헐 수 있나·욕실을 옮길 수 있나(법령 + 공고 인용)ARead-onlyIdempotentInspect
이 아파트를 벽·배관 기준으로 고칠 수 있는지 판단할 재료를 준다.
**"이 아파트를 내가 원하는 대로 고칠 수 있나"**에 답하는 자리 — 두 축이다:
**①벽**(내력벽을 헐어 방을 틀 수 있나) **②배관**(층상/층하 — 욕실·주방을 옮길 수 있나).
"벽식구조면 리모델링 못 하죠?"·"내력벽 철거 2016년에 허용되지 않았나요?"·"욕실 위치
바꿀 수 있나요?"·"인테리어 하는데 구청 가야 하나요?"가 이 도구의 질문이다.
**모델이 학습 데이터로 자신 있게 틀리는 자리**라 조문 원문을 값으로 준다 —
통설 둘("2016년 유예로 내력벽 철거 허용", "벽식=개인 리모델링 불가")이 **둘 다 틀렸고**,
이 도구가 그것을 조문으로 깬다.
답은 두 층으로 온다. **①규범 층은 커버리지 100%**(근거=법령 원문·시행일)이고 단지를
몰라도 답이 된다 — 전문은 realty_policy_rules(topic='unit_alteration_rules').
**②단지 층은 분양 모집공고 원문 인용**이며 커버리지가 희박하다: 아카이브 2,851건 중
쪽 원문 보유 2,294건, 그중 구조형식 언급 258건(11.2%)·배관방식 선언 221건·가변성 등급
34건뿐이고 **2020~2026 분양 한정이라 기존(준공된) 아파트는 0% 덮는다.**
커버리지는 매 응답에 실린다 — 그대로 사용자에게 전하라.
**없으면 unknown이고, unknown은 '아니다'가 아니다.** 준공연도로 구조형식을 추정하지
마라(모집단 비율을 개별 사실로 둔갑시키는 것이다). 값이 없을 때는 막다르게 두지 말고
응답의 how_to_find_out(관리사무소 설계도서·구청 행위허가 상담 등 실제로 확인 가능한
경로)을 안내하라 — 그것이 이 도구의 값어치다.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | No | both=벽+배관(기본), wall=내력벽·평면 변경만, plumbing=상하수도·욕실 이동만 | both |
| complex_name | No | 단지·공고명 일부 (공백 무관 매칭). **없어도 된다** — 비우면 법령 규범 층만 답한다(그것만으로도 통설 오답을 막는다) | |
| house_manage_no | No | 공고 관리번호 (realty_presale·realty_notice_facts 응답의 house_manage_no) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, openWorld), and the description goes far beyond them: it discloses per-layer coverage rates (100% normative vs 11.2% structure-type mentions, 0% for completed apartments), warns that 'unknown' is not 'no', and states that coverage plus how_to_find_out always accompany the response. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Heavy but front-loaded: the two-axis framing and the 'model is confidently wrong here' hook come first, followed by coverage facts and the unknown-handling rule. The dense archive statistics earn their place by calibrating trust, though a few sentences could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what comes back (two layers, embedded coverage, how_to_find_out) and how to relay it. Nothing an agent needs to call this 3-parameter, zero-required tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds meaning about how axis maps onto the two analytical layers and what an empty complex_name yields (normative-layer-only answer with its own validity). It reinforces rather than merely repeats the schema's parameter text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific judgment task (can this apartment be altered, on a wall axis and a plumbing axis) with the concrete questions it resolves. It differentiates itself from siblings by naming realty_policy_rules (full statute text) and realty_presale/realty_notice_facts (house_manage_no source), though the boundary with realty_policy_rules is slightly blurred since the normative layer's full text is said to live there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Lists the exact user questions it answers and explicitly says complex_name may be omitted (normative-only answer). It adds a negative rule (do not infer structure type from completion year) and directs the agent to how_to_find_out when values are missing, but offers no explicit 'use sibling X instead when Y' routing for the general case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_rental_yield[유료] 전월세 수익률ARead-onlyIdempotentInspect
[유료] 시군구별 월세 수익률·평균 매매가·평균 월세를 조회한다. 수익형 투자 스크리닝용.
기본 응답은 최신 완결월 1개월치를 수익률 내림차순으로 자른 것이다 — 전체 기간·전체
지역이 아니다(truncated 필드 확인). 특정 월은 year_month로 조회하라.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 반환 행 수 — 수익률 내림차순 상위 N (허용 범위 1~50) | |
| region | No | 시도(예: 서울특별시) 또는 시군구(예: 강남구). 세종은 시 단위로 나온다 | |
| year_month | No | YYYYMM (기본 최신 완결월) | |
| pyeong_supply | No | 분양평수(예: 25·34) — 서버가 ×0.745로 전용평으로 환산해 **전용평 구간**(S·M·L·XL·XXL)을 고른다(분양 25평→S, 34평→M) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description adds the critical behavioral fact that the default response is truncated to the latest complete month, sorted by yield descending, and is NOT the full period or region — with the pointer to check the truncated field. That is exactly the kind of default-scope disclosure an agent needs to avoid misreading results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero padding; the core capability comes first, then the truncation caveat, then the override for a specific month. Front-loaded and every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the shape of the default result (one latest complete month, yield-descending, truncated flag) so the agent can interpret returns. Minor gaps remain around non-default behavior and region coverage limits, keeping it from 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds value by tying year_month to the default (latest complete month) and explaining why the default result set is limited. Parameter-level detail (limit, region, pyeong_supply) is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (조회) and concrete resource: 시군구별 월세 수익률, 평균 매매가, 평균 월세, plus the intended job (수익형 투자 스크리닝). It does not explicitly differentiate itself from nearby siblings such as realty_region_price_stats or realty_region_rankings, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use ('수익형 투자 스크리닝용') and tells the agent how to widen scope ('특정 월은 year_month로 조회하라'). No named alternatives or explicit when-not guidance, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_search_auctions경매 물건 조건 검색ARead-onlyIdempotentInspect
법원경매 물건을 지역·종류·감정가·유찰횟수로 필터링해 조회한다.
**이 축의 자리** — 조건을 **값으로 아는** 검색이 이 도구다. 사용자의 자연어 한 줄밖에
없으면 `search`가 먼저다(질의에서 조건을 뽑아 준다). 개별 사건의 상세는 여기가 아니라
`realty_get_auction_case`(사건번호+법원명)·`fetch`(search가 준 id)다.
**이 도구는 법원경매(민사집행법·각급 법원)만 조회한다 — 공매는 여기가 아니다.**
공매(국세징수법·국유재산법 등, 한국자산관리공사 온비드)는 **이 서버에 따로 있다**:
물건은 `realty_search_onbid`, 낙찰가율은 `realty_onbid_sale_rate`
(2026-08-22 적재 — 물건 25,669개 · 최근 3개월 개찰 결과 113,673행).
여기서 안 나온다고 "그런 물건 없다"고 답하지 말고 **공매 도구로 다시 걸어라.**
구분 신호는 번호 형식이다 — 법원 사건번호는 `2025타경1234`, 공매 물건관리번호는
`2026-0600-031235`(하이픈 세 토막·'타경' 없음)다.
**두 원장을 합쳐 세거나 낙찰가율을 섞어 평균내지 마라** — 근거법·주관기관·권리 인수
규칙·저감 방식이 다르다.
감정가(min_price_10k/max_price_10k)는 **만원** 단위다 — 5억은 50000.
유찰이 많을수록 최저입찰가가 감정가 대비 낮아진다(`min_bid_rate`가 그 비율).
⚠️ **이 목록에는 매각기일이 이미 지난 행이 섞여 있다**(백엔드가 기일로 걸러주지
않는다 — 인천 아파트 3억 이하 실측 48건 중 43건이 지난 기일). 지난 기일 행에는
`past_auction_note`가 붙고 응답의 `past_auction_count`가 그 페이지의 건수다.
"지금 살 수 있어?"류 질문이면 `exclude_past=true`로 걸러라 — 지난 기일 물건은
매각·취하됐거나 다음 기일이 아직 반영되지 않은 것이라 현재 매물로 인용하면 오답이다.
⚠️ **`sort=date_asc`(기일 임박 순)는 지난 기일이 목록 앞쪽을 통째로 차지한다**
(2026-08-21 실측 94,279건 중 앞 57,241건=60.7%). `exclude_past=true`면 서버가 그
접두를 건너뛰고 읽으므로 첫 호출부터 실물이 온다 — 건너뛴 행 수는
`meta.past_prefix_skipped`, 실제로 읽은 자리는 응답의 `offset`(요청값은
`requested_offset`)이다. **items가 비어도 `has_more`가 true면 '조건에 맞는 물건이
없다'는 뜻이 아니다** — 그 창이 전부 지난 기일이었을 뿐이니 `next_offset`으로
이어서 호출하라. note가 둘 중 어느 쪽인지 매번 말한다.
⚠️ **최저입찰가는 출처를 반드시 확인해라** — 건별 `min_bid_source`가 붙는다.
· `court_schedule` — 법원 기일표 정본이다. 그대로 믿어도 된다(2026-10-17 실측 활성의 23.2%).
· `item_list` — 물건목록값이다. 유찰이 있으면 **저감 한 단계만큼 낡아 실제보다
높을 수 있다**(2026-08-04 실측: 유찰 1회 이상에서 정본과 3%만 일치, 25~43% 과대).
이 경우 `min_bid_note`가 함께 온다. 사용자에게 단정적으로 말하지 말고 그 한계를
전해라. 저감률로 역산해 추정하지 마라 — 재감정으로 최저가가 **오르는** 사건도 있다.
응답의 `min_bid_stale_risk_count`가 그 페이지에서 낡았을 수 있는 건수다.
회차별 정확한 가격은 realty_auction_history의 court_schedule에 있다.
목록에는 요약 필드만 담긴다. 특정 물건의 전체 정보(면적·법원 계·주소 상세 등)는
돌아온 id로 realty_get_auction_case를 호출해 받아라.
"유찰 많이 돼 싸진 물건 찾아줘"류 발굴 질문은 realty_auction_alerts가 지름길이다
(min_bid_count로 여기서 걸러도 같은 축 — 결과를 합쳐 세지 마라).
| Name | Required | Description | Default |
|---|---|---|---|
| sido | No | 시도. '서울'처럼 줄여 써도 되고 '서울특별시'도 된다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라. | |
| sort | No | 정렬 기준 | date_desc |
| limit | No | 반환 개수 (최대 50) (허용 범위 1~50) | |
| since | No | 이 날짜(YYYY-MM-DD, 31일 전까지) 이후 바뀐 것만 — 예약 실행에서 '어제 이후'면 since=어제. 기준·지연은 응답에 | |
| offset | No | 페이지 오프셋. has_more가 true면 next_offset으로 다시 호출하라. | |
| sigungu | No | 시군구 (예: 강남구, 성남시) ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다. | |
| usage_name | No | 물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. 부분일치라 '빌라'는 '연립주택,다세대,빌라' 행에 걸린다. **'토지'는 이 원장에 없는 이름이다** — 대지·임야·전답으로 나뉘어 있어 그대로 넣으면 서버가 사유와 유효값 목록을 들어 거절한다. 비우면 전 종류 | |
| exclude_past | No | 매각기일이 이미 지난 행 제외 여부. 기본 False(전체 반환 — 지난 기일 행에는 past_auction_note 플래그가 붙는다). '지금 입찰 가능한 물건' 질문이면 True로 호출하라 — 오늘 이후 기일(기일 미정 포함)만 남는다. | |
| max_price_10k | No | 최대 감정가, **만원** 단위 | |
| min_bid_count | No | 최소 유찰 횟수. 유찰이 쌓일수록 최저입찰가가 내려간다. (허용 범위 0~100) | |
| min_price_10k | No | 최소 감정가, **만원** 단위 (5억이면 50000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial non-obvious behavioral context: past-기일 rows are mixed into the list, `sort=date_asc` lets them occupy the front (60.7% measured), empty `items` with `has_more=true` does not mean no matches, and `min_bid_source` distinguishes authoritative `court_schedule` values from potentially stale `item_list` values. It also warns against blending court-auction and onbid ledgers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then sibling routing, then caveats under bold headers, so the important routing information is reachable immediately. It is long and carries some date-stamped statistics that could age, but nearly every sentence is a substantive correctness warning rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, open-world search with no output schema, the description covers the return surface an agent needs: `past_auction_note`/`past_auction_count`, `min_bid_source`/`min_bid_note`/`min_bid_stale_risk_count`, `has_more`/`next_offset`, and the note field that disambiguates the two empty-page cases. Nothing required to call or interpret the result correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter behavior the schema does not: the interaction of `offset` with `exclude_past` (server skips the past prefix, reported via `meta.past_prefix_skipped` vs. `requested_offset`), the unit convention for 감정가 (만원, 5억=50000), and the relationship between `min_bid_count` and falling 최저입찰가.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with its filter axes ('법원경매 물건을 지역·종류·감정가·유찰횟수로 필터링해 조회한다'), and explicitly contrasts itself with `search` (value-known vs. natural-language), `realty_get_auction_case`/`fetch` (detail retrieval), and `realty_search_onbid` (공매). An agent can route among these without opening a single schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not-to-use: this tool when conditions are already known as values, `search` when the user only has a free-text line, detail tools for per-case info, onbid tools for 공매. It also names the exact trigger for `exclude_past=true` ('지금 살 수 있어?' questions) and points 발굴 questions at `realty_auction_alerts`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_search_complexes아파트 단지 검색·평형별 시세ARead-onlyIdempotentInspect
아파트 단지를 이름·지역으로 검색하고 평형별 실거래 시세를 함께 돌려준다. "○○아파트 34평 얼마야"류 단지 질문의 1차 도구다. query·region 중 하나는 필수.
**이 축의 자리(시세 도구 3종 중)**: 단지가 특정되면 **이게 기본**이다. 지역 평균
도구들(realty_region_price_stats·realty_area_price_bands)은 단지 간 편차를 뭉개므로
단지 질문에 쓰지 마라 — 같은 동 같은 평형에서 단지 평균이 24% 벌어진 실측이 있다.
반대로 지역 전체의 수준·추이 질문이면 저 둘로 가라.
prices_by_area가 평형별 시세다 — pyeong_exclusive(전용평)와 pyeong_supply_est(분양평
어림)를 병기하므로, 사용자가 말한 "34평"(보통 분양평)은 pyeong_supply_est로 맞춰 답하라.
단지 수준 avg_price는 전 평형이 섞인 평균이니 평수 질문에 쓰지 말 것.
층별(저층/고층/RR) 시세·프리미엄 질문은 realty_complex_pyeong_price로 —
거기 층 밴드별 집계(price_by_floor_band)가 있다(이 도구엔 층 축이 없다).
응답의 complex_key는 realty_complex_rent_by_pyeong·[유료] 단지 도구들에 그대로 넣는 키다.
**단지끼리 급을 견줄 때는 price_per_exclusive_m2(전용 ㎡당 실거래 단가)를 축으로 쓰라**
— 행마다 실리고, **sort='unit_price'로 그 순서대로 받을 수 있다**(백엔드에 없는 축이라
이 응답에 실린 행만 다시 세운 것이다 — sort_applied.scope 참조). 행의 scores
(composite·convenience)는 걸어서 닿는 **시설의 개수**이지 선호도가 아니다(직선거리만
세어 간선도로 횡단 같은 보행 장벽을 못 본다) — 그 점수로 단지에 줄을 세워 추천하지
마라. 입지 점수는 **미검증 참고값**이다(scores_meaning.status — transit 90점 이상 82%, 2026-10-17).
"역세권이야?"는 행의 nearest_station·subway_distance_m(직선 m)으로 답하라.
응답의 scores_meaning·unit_price_axis에 근거가 있다.
**견줄 때는 조건을 맞춰라 — 두 인자가 그 수단이다.** ㎡단가는 평형이 작을수록,
준공이 새로울수록 높다(⚠️ **전국 중앙값 이야기다** — 서울은 구축이 더 비싼 동이 28.0%다).
`area_band_m2=59`면 각 단지의 대표 단가가 **전용 59±3㎡ 행만으로** 다시 계산되고,
`construction_year_band=2018`이면 2013~2023년 준공 단지가 비교군으로 표시된다
(in_year_band). 연식이 더 지배적이다 — 법정동 안 ρ 중앙값이 연식 +0.7298 대
평형 +0.2245라, 연식이 섞인 ㎡단가 순위는 **사실상 신축 순**이 되기 쉽다. 두 인자 모두
**가격 계산·비교군 표시에만** 걸리고 단지 검색을 거르지 않는다(못 잰 단지는 목록에
남고 값이 null + 사유다). 몇 개를 쟀고 몇 개를 못 쟀는지는 응답의 coverage가 적는다.
**0.84.0부터 scores.composite는 school + convenience다**(transit을 뺐다 — 전국 실측에서
고유값의 86.8%가 90~100에 몰려 변별력이 없고, 합산에 넣으면 법정동 격자 ρ 중앙값이
0.0825→0.0654로 떨어졌다). 백엔드 원장의 옛 가중평균 값은 **composite_legacy로 병기**하니 이전 응답과
견줄 때 그쪽을 쓰라 — 두 값은 척도가 다르다(가중평균 대 단순합).
**세대수 조건은 min_households·max_households가 받는다**: "500세대 이상", "1,000세대 넘는 대단지", "300세대 이하 소규모"는
이 인자로 넣어라 — 종전엔 전달할 자리가 없어 그 질문이 통째로 실패했다. 행마다
households가 실린다. **households가 null인 단지는 세대수가 원장에 없는 것이지
작은 단지가 아니다** — 그래서 세대수 조건을 걸면 그 단지들은 크든 작든 제외되고,
몇 건이 그렇게 빠졌는지는 meta.households_scope가 적는다.
**'3억 이하 오래된 아파트'는 max_trade_price_10k·max_construction_year·sort='year_asc'가
받는다**: 예) region='노원구',
max_trade_price_10k=30000, max_construction_year=1996, sort='year_asc', period_months=12.
거래가 상한은 평균가가 아니라 **창 안 최저 실거래가**로 판정한다(행의 min_trade_price).
'재개발 호재'는 이 도구 축이 아니다 — 정비사업 구역은 realty_redevelopment(전체 표면).
단지 평판·거주 후기("살기 좋대?")는 원장에 없다 — 부르지 마라.
**거래 적은(환금성 낮은) 단지 확인 = sort='turnover_asc'** — 행마다 turnover_pct(창 안 매매
건수 ÷ 세대수 × 100, 창 그대로)와 turnover_pct_annualized(12개월 환산)가 실린다. 사실값이다 —
회전율이 낮다고 투자 부적격이라 판정하지 않는다. 세대수 미상이면 null + 사유(미상 ≠ 저회전).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 0부터 시작하는 페이지 번호 | |
| sort | No | 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). **turnover_asc=회전율(창 안 매매 건수 ÷ 세대수) 낮은 순** — '거래 적은 단지' 확인용이다. 백엔드 정렬이라 조건 전체가 대상이고 page로 이어진다. 세대수는 아는데 창 안 거래가 안 잡힌 단지, 세대수 미상 단지는 잰 단지 **뒤**에 온다(0%·저회전이 아니다 — sort_applied.turnover_scope가 각 건수를 싣는다) | name |
| limit | No | 단지 수 — 평형별 시세가 포함돼 응답이 무겁다. 최대 20이고 더 받으려면 limit을 올리지 말고 **page를 넘겨** 이어 받아라(응답의 total이 전체 건수다 — 다만 서버가 지역 토큰을 뒤에서 검증한 경로에서는 total이 null이고 meta.total_unavailable이 사유를 적는다. 그리고 **sort='unit_price'로 받은 응답이 잘렸으면 page로 이어받을 수 없다** — sort_applied.page_continuation이 그 사실을 값으로 싣는다). 요청분을 다 실으면 응답이 크기 상한을 넘는 경우 **실제 반환 수를 줄이고 meta.size_capped**에 총계·이어받는 호출을 값으로 싣는다 — 조용히 자르지 않는다 (허용 범위 1~20) | |
| query | No | 단지명 일부 (예: 래미안, 마포래미안푸르지오) | |
| region | No | 시군구명 (예: 마포구, 서울특별시 마포구). **법정동까지 넣어도 된다**(예: '강남구 대치동') — 백엔드는 동으로 거르고 나머지 토큰은 서버가 검증해 note에 적는다 | |
| area_band_m2 | No | **평형을 고정해 단지끼리 견줄 때** 넣는다(전용면적 ㎡ — 분양면적이 아니다). 예: '59㎡대로 맞춰서 비교' → 59. 전용 ±3.0㎡ 근사 매칭이고(원장 면적이 59.224·59.9처럼 단지마다 달라 정확 일치는 대부분 0건이다), 각 단지의 price_per_exclusive_m2가 **그 밴드 안 평형 행만으로 다시 계산된다**. ⚠️ 이 인자는 **가격 계산에만** 걸리고 단지 검색을 거르지 않는다 — 밴드에 거래가 없는 단지도 목록에 그대로 실리고 그 값은 null + 사유다. 밴드에 든 행에는 in_area_band=true가 붙는다 (허용 범위 0 초과~500) | |
| period_months | No | 가격 집계 기간(개월). 비우면 2024-01 이후 전체 (허용 범위 1~24) | |
| max_households | No | 세대수 상한 — '300세대 이하 소규모'처럼 위쪽을 자를 때. min_households와 함께 주면 구간이 된다 | |
| min_households | No | **세대수 하한** — '500세대 이상', '대단지'를 여기에 넣는다(예: 500). 세대수가 원장에 없는 단지는 이 조건에서 제외되고 그 건수를 meta.households_scope로 실토한다(미상 ≠ 소규모) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 | |
| max_trade_price_10k | No | **거래가 상한(만원)** — '3억 이하로 살 수 있는 단지'는 30000. 집계 창 안에 이 금액 **이하 실거래가 1건 이상** 있었던 단지만 남긴다(평균가가 아니다 — 소형 평형만 3억대인 단지도 잡힌다; 행의 min_trade_price가 그 최저 거래가). **이 인자는 검색을 거른다.** 창 안 거래가 없는 단지는 판정 불가라 빠지고 그 건수를 meta.price_year_scope에 싣는다. '지금 3억 매물'이 아니라 '창 안에 3억 이하로 팔린 적이 있다'다 — 호가·매물은 없다. 최근 시세로 보려면 period_months=12를 함께 줘라 | |
| max_construction_year | No | **준공연도 상한** — '오래된 아파트'·'30년 넘은 단지'를 거를 때(예: 준공 30년 이상 = 올해-30). **이 인자는 검색을 거른다**(construction_year_band는 표시만 한다). 준공연도가 원장에 없는 단지는 판정 불가라 빠지고 그 건수를 meta.price_year_scope에 싣는다. 연한은 재건축 **자격의 하나**일 뿐 사업성·구역 지정·'호재'가 아니다 (허용 범위 1900~2100) | |
| construction_year_band | No | **연식을 맞춰 단지끼리 견줄 때** 넣는 기준 준공연도. 예: 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) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, yet the description adds substantial extra context: null semantics (미상 ≠ 소규모), which params filter search vs only affect price calculation, meta fields reporting exclusions (households_scope, price_year_scope, coverage), the composite vs composite_legacy scale change, and explicit warnings not to rank complexes by the facility-count scores. This is far beyond the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and axis placement are front-loaded and bold headers aid scanning, but the text is extremely long with repetitive warnings and restated caveats (the unit_price page-only caveat and the 미상≠저회전 point recur). For a 13-parameter tool some length is justified, yet several sentences could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description documents the response shape thoroughly: prices_by_area, pyeong_exclusive vs pyeong_supply_est, per-row scores, complex_key hand-off, nearest_station/subway_distance_m, turnover fields, and the sort_applied/coverage/meta transparency fields. For a tool of this complexity the description leaves no material gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning the schema lacks: that area_band_m2/construction_year_band affect only price computation and do not filter the result set, the year vs year_asc inversion pitfall, that max_trade_price_10k is judged by minimum in-window trade rather than average, and that sort='unit_price' is page-scoped. These are cross-parameter behaviors the per-field schema text does not fully convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (검색) plus resource (아파트 단지) and explicitly names the return payload (평형별 실거래 시세). It further distinguishes itself from siblings by naming realty_region_price_stats and realty_area_price_bands as the wrong tools for complex-level questions. An agent can identify this as the primary complex-level price tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between this tool and its three nearest alternatives: region average tools for area-level questions, realty_complex_pyeong_price for floor-band questions, and realty_redevelopment for 정비사업. It gives a concrete selection rule (complex specified → this; area trend → the others) plus a motivating stat (24% spread). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_search_onbid공매(온비드) 물건 검색ARead-onlyIdempotentInspect
한국자산관리공사 온비드 공매 물건을 지역·용도·재산구분·감정가로 조회한다.
법원경매가 아니다. 공매는 국세징수법(압류재산)·국유재산법·공유재산법에 따른 처분이고
주관은 캠코다 — 아래 '이 축의 자리'와 응답의 `not_court_auction`을 반드시 함께 전하라.
**이 축의 자리** — 공매 축은 도구가 둘뿐이다. 물건을 찾고 회차별 최저가 일정을 보는
것이 이 도구, "보통 감정가의 몇 %에 낙찰되나"는 realty_onbid_sale_rate다.
**법원경매를 물었다면 여기가 아니라 realty_search_auctions**이고, 사건번호에 '타경'이
들어 있으면 그쪽이다. 사용자가 그냥 "경매"라고만 했으면 **어느 쪽인지 되물어라** —
둘을 합쳐 세거나 섞어 평균내면 그 답은 틀린다.
**행이 물건이 아니다.** 원장의 한 행은 물건이 아니라 **공매조건(회차)**이다 — 한 물건이
1~10회차 입찰 일정을 미리 갖고 회차마다 최저입찰가가 내려간다(실측: 물건당 3.51행).
이 도구는 **물건 단위로 접어서** 돌려준다: `rounds_total`(전체 회차)·`rounds_remaining`
(마감 전 회차)·`next_round`(다음 입찰 회차의 기간과 최저입찰가)·`last_round`(마지막
예정 회차 = 더 안 팔리면 도달하는 바닥값). 응답의 `condition_rows`가 접기 전 행 수다 —
**행 수를 물건 수로 인용하지 마라**(71% 과대).
⚠️ **최저입찰가 '비공개'** — 원문이 숫자가 아니라 '비공개'인 회차가 있다(529행).
그 회차의 금액은 **null**이지 0이 아니다. `min_bid_undisclosed_rounds`가 그 수이고,
평균·최저값 계산에서 빠져 있다.
⚠️ **압류재산 주소는 번지가 가려진다** — 결과 원장 기준 압류재산의 61.7%가
'강원특별자치도 춘천시 ***********' 꼴이다. 물건 목록 쪽은 번지까지 나오지만
(실측 마스킹 0건), 같은 물건을 결과에서 다시 찾을 때는 시군구까지만 유효하다.
⚠️ **시도 표기를 우리가 손봤다** — 원천에 '전남광주통합특별시' 같은 통합 표기가 7,757행
있어 시군구로 분해해 `sido`에 넣었다. 손보기 전 원문은 `sido_source`, 분해 근거는
`sido_basis`('as_is' = 원문 그대로 / 'split_by_sgg' = 시군구로 갈랐다)에 있다.
권리분석·감정평가서·공고 원문은 이 원장에 없다. 공매의 권리 인수 규칙은 법원경매와
다르므로 realty_policy_rules(민사집행법 기준)의 답을 여기에 옮기지 마라.
| Name | Required | Description | Default |
|---|---|---|---|
| sido | No | 시도. '서울'처럼 줄여 써도 되고 '서울특별시'도 된다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라. | |
| sort | No | deadline=마감 임박순 · price_asc/desc=감정가순 · discount=감정가 대비 최저가가 낮은 순(저감 많이 된 순) | deadline |
| limit | No | 반환 **물건** 수 (최대 50) (허용 범위 1~50) | |
| offset | No | 페이지 오프셋. has_more면 next_offset으로 다시 호출하라. | |
| sigungu | No | 시군구 (예: 춘천시, 강남구). 부분일치다 — '고양시'는 '고양시 덕양구'도 잡는다. ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다. | |
| open_only | No | 입찰 마감이 아직 안 지난 회차가 남은 물건만. 기본 True — 원장에는 이미 끝난 회차 행이 함께 들어 있어서(물건 25,669개 중 마감 전 회차가 남은 것은 10,327개), 끄면 지금 입찰할 수 없는 물건이 섞인다. cltr_mng_no로 특정 물건을 볼 때는 무시된다. | |
| usage_name | No | 용도 부분일치(대·중·소 3단을 한꺼번에 건다). 중분류 5종은 토지·주거용건물·상가용및업무용건물·용도복합용건물·산업용및기타특수용건물이고 소분류는 91종이다. **'아파트'는 소분류라 중분류로는 안 걸린다** — 넓게 보려면 '주거용건물'. 원장 값 예: 주거용건물·아파트·다세대주택·대지·상가주택. 경매 어휘 '전답'은 여기 없다(전·답으로 갈렸다) — 없는 이름은 거절하며 쓸 수 있는 값을 준다. | |
| cltr_mng_no | No | 물건관리번호(예 '2026-0600-031235')로 한 물건만. **이것이 상세 조회다** — 이 원장은 행이 물건이 아니라 회차라, 한 물건의 상세는 곧 그 물건의 회차 전부이고 그때 `rounds`에 회차별 최저입찰가 일정이 실린다. 법원 사건번호(2025타경…)는 여기 넣지 마라. | |
| max_price_10k | No | 최대 감정가, **만원** 단위 | |
| min_price_10k | No | 최소 감정가, **만원** 단위 (5억이면 50000) | |
| property_type | No | 재산구분 — 공매에서 가장 중요한 축이다. 압류재산(체납처분·국세징수법)·국유재산·공유재산·기타일반재산·수탁재산·불용품. **성격이 완전히 다르다**: 압류재산은 체납자 재산의 강제매각이고 나머지는 공공이 가진 재산의 처분·임대다. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description adds substantial behavioral context the annotations cannot: rows are bidding rounds (not items) folded per item, the returned fields (rounds_total/rounds_remaining/next_round/last_round), null-vs-0 for undisclosed minimum bids, address masking on seized property, and the sido normalization with sido_source/sido_basis. Some of this shades into output-shape detail, but it is genuinely useful for correct interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and organized with bold headers and ⚠️ markers so an agent can scan. However it is lengthy for a search tool, and the court-auction exclusion plus the `not_court_auction` directive are stressed twice, which is slight redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description names the key return fields (condition_rows, rounds_*, not_court_auction) and three data-quality caveats (undisclosed prices, masked addresses, sido normalization), and explicitly states what is absent (권리분석, 감정평가서, 공고 원문) plus which sibling's answers must not be transplanted. Complete for an 11-param filter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description nevertheless adds framing beyond the schema — that 재산구분 is 'the most important axis' whose categories differ in legal nature, that a single cltr_mng_no lookup IS the detail view returning per-round schedules, and that open_only is bypassed by cltr_mng_no. It reinforces rather than replaces the schema, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('온비드 공매 물건을 지역·용도·재산구분·감정가로 조회한다') and immediately carves out what it is NOT ('법원경매가 아니다') with the legal basis (국세징수법/국유재산법/공유재산법, 캠코 주관). An agent can place this tool against its siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes: this tool for finding items and round-by-round minimum prices, realty_onbid_sale_rate for 'what % of appraised value do they sell at', realty_search_auctions for court auctions, and '타경' in a case number selects the other side. It even prescribes behavior under ambiguity ('경매' alone → ask the user) and warns against merging the two axes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_small_deposit_check소액임차인 최우선변제 — 담보물권 설정일로 적용 시행령 판을 고른다ARead-onlyIdempotentInspect
소액임차인 최우선변제의 금액표를 고르는 도구다 — 판정기가 아니다.
"전입은 근저당보다 빠르고 확정일자는 늦으면?"처럼 **임차인 한 사람의 날짜들**(전입·
확정일자·근저당)로 대항력·우선변제·최우선변제를 묻는 질문은 여기서 시작하라 — 근저당
날짜로 금액표를 고르고 `not_a_conclusion`이 남은 요건을 적는다. 두 권리의 요건 원문은
realty_policy_rules(topic=auction_rights)가 함께 준다.
"최우선변제금 얼마까지 나와요?"에 현행표를 읊으면 틀린다. 적용되는 표는 **최선순위
담보물권을 취득한 날이 속한 시행령 판**이고(부칙 경과조치), 2008-08-21 이후 7개 판이
서로 다르다. 2015년 근저당이 붙은 서울 주택이면 지금 경매라도 2014-01-01 판
(9,500만원 이하 / 3,200만원)으로 잰다 — 현행표(1억6,500 / 5,500)를 쓰면 소액임차인이
아닌 사람을 소액임차인이라 답하게 된다.
경계를 지켜라: ① **범위에 든다 ≠ 받는다.** 경매개시결정등기 전 대항요건·배당요구종기까지
배당요구·주택가액 1/2 한도·다수 임차인 안분·임차권등기 후 임차인 제외가 전부 남아 있다
(응답 `not_a_conclusion`). ② `security_right_date`가 없으면 **표를 고르지 않는다** —
현행표를 기본값으로 주는 순간 이 도구가 막으려던 오답이 된다. **그렇다고 날짜를
지어내지도 마라**(2026-08-22 제보: 사용자가 연도만 줬는데 클라이언트가 `2019-01-01`을
생성했다). 연도만 안다면 `security_right_year`에 그 연도만 넣어라 — 그 해 전체가 한
판 안이면 서버가 날짜 없이 답하며 **"연도로 판을 골랐다"를 응답에 명시**하고, 판이
갈리는 해면 표를 고르지 않고 등기 접수일을 되묻는다. ③ 시 안에서 동에 따라
과밀억제권역이 갈리는 곳(인천·남양주·시흥)은 구간을 **안 고르고** 별표 원문을 낸다.
④ **주택만**이다 — 상가는 상가건물임대차보호법으로 금액표가 다르다. ⑤ 배당액 계산·
말소기준권리 판정·인수 여부는 하지 않는다. 규칙 전체와 갈림길은
realty_policy_rules(topic=auction_rights)가 진실원이다.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 물건 소재지. '서울', '경기도 부천시', '부산광역시 기장군'처럼 시도를 붙이면 확실하다. 비우면 그 판의 **전 구간 표**를 그대로 준다 | |
| deposit_10k | No | 임차보증금(**만원**). 주면 그 판의 '소액임차인 범위' 상한과 대조해 **범위에 드는지의 산수**만 한다 — 최우선변제를 받는다는 판정이 아니다 | |
| security_right_date | No | **최선순위 담보물권(근저당 등)의 설정일** YYYY-MM-DD. 금액표를 고르는 기준일이다 — '오늘'도 '임대차계약일'도 아니다(각 개정 시행령 부칙 경과조치: '이 영 시행 전에 임차주택에 대하여 담보물권을 취득한 자에 대해서는 종전의 규정에 따른다'). 등기부 을구에서 확인한다. **모르면 비워 두라 — 서버가 현행표를 답인 척 주지 않는다**. ⚠️ **연도만 아는 경우 날짜를 지어내지 마라** — '2019년'만 들었으면 '2019-01-01'을 만들지 말고 security_right_year=2019를 쓰라. 그 해 전체가 한 시행령 판 안이면 서버가 날짜 없이 답하고, 판이 갈리는 해면 월·일을 되묻는다 | |
| security_right_year | No | **최선순위 담보물권 설정 '연도'만** 알 때 쓴다(예: 2019). 사용자가 연도만 말했을 때 security_right_date에 임의의 날짜를 지어 넣는 대신 여기에 연도를 그대로 넣어라 — 그 해 전체가 한 시행령 판 안에 있으면 월·일 없이도 표가 정해지고(응답이 그 근거를 밝힌다), 판이 갈리는 해면 표를 고르지 않고 등기 접수일을 되묻는다 (허용 범위 1900~2200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial non-obvious behavior: it will not default to the 현행표 when security_right_date is absent, it refuses to fabricate a date from a year, it surfaces not_a_conclusion for remaining requirements, and it refuses to pick a bracket for split 과밀억제권역 cities. This is far beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose followed by concrete examples and numbered boundaries; each sentence carries distinct information (edition count, the 2015-근저당 worked example, the date-fabrication report). It is dense and long for a 4-parameter lookup, but the complexity largely justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, yet the description discloses the response contract (not_a_conclusion, the stated basis for year-only table selection), scope limits (주택 only), and all edge cases an agent must handle. Nothing needed to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents each field. The description nonetheless clarifies the cross-field interplay (security_right_year replaces a fabricated security_right_date) and reinforces that deposit_10k yields only range arithmetic, not a judgment, which adds rationale beyond the field text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('소액임차인 최우선변제의 금액표를 고르는 도구') and immediately bounds it ('판정기가 아니다'), so the agent knows this selects the applicable 시행령 table rather than rendering a legal judgment. It also distinguishes itself from the sibling realty_policy_rules, which it names as the source of the underlying 요건 text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: example questions that should start here, the named alternative realty_policy_rules(topic=auction_rights) for the rules themselves, and five numbered exclusions (①범위≠수령, ③과밀억제권역 갈림, ④주택만, ⑤배당/말소기준 미수행). When-to-use, when-not, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_subscription_odds청약 경쟁률·당첨 가점 — 내 가점으로 되나ARead-onlyIdempotentInspect
청약 경쟁률과 실제 당첨 가점 커트라인을 낸다 — "나 가점 52점인데 당첨될까?"의 정량 근거. 가점 자체를 모르는 사용자는 realty_subscription_score(무주택·부양가족·가입기간 선언 → 배점표 적용)로 먼저 점수를 만들어 my_score로 넘겨라.
**비어 있으면 왜 비었는지부터 읽어라(2026-08-20 축 신설).** 이 축의 원천은 주 1회 전량 수집
이라 "아직 공표가 안 됐다"와 "공표는 됐는데 우리가 아직 안 걷었다"가 똑같이 빈 배열로
보인다 — 실측(공고 2026000323)에서 청약홈엔 1순위 경쟁률 4.33·12.90·15.55가 이미
공표됐는데 우리 응답은 by_house_type=[]였다. `freshness_verdict.verdict`가 그 둘을
가른다(아래 큰따옴표는 **필드가 아니라 그 필드의 값**이다): "not_yet_published"(접수가
안 끝났다 — 없는 게 정상) · "not_yet_collected"(**우리 미수집이다. 절대 '경쟁률이 없다'고
답하지 말고 check_url로 안내하라**) · "unknown"(못 가른다) · "not_published" ·
"collected". 대조 재료인 접수 종료일은
announcement.rcept_endde·freshness_verdict.apply_end에 있다.
result_status의 뜻은 응답의 `result_status_legend`가 정본이다(`special_only`는 일반공급
결과가 아직인데 특별공급 신청현황만 온 상태 — '결과 없음'이 아니다).
**없는 공고는 '미발표'가 아니다(2026-09-08, T-2026W37-81).** house_manage_no가 경쟁률 원장에도
분양 공고 원장에도 없으면 `error` 응답(`result` 값 "not_found")으로 거절하고 벤치마크를
내지 않는다 — 종전엔 어떤 번호를 넣어도 "not_published"+"아직 발표되지 않았다"가 나가
오타·가상 번호가 '접수 전 공고'로 둔갑했다. 원장 조회 자체가 실패하면(404 아닌 오류·
시간 초과) 그것도 "not_published"가 아니라 거절 응답이다 — 거절에는 정상 응답에 **없는**
`error`·`result` 두 키가 붙고 그 값이 "lookup_failed"다.
**여기서 백틱은 필드 이름이고 큰따옴표는 값이다** — "lookup_failed"·"not_found"라는
이름의 키는 어느 응답에도 없다(찾지 마라). 지역 벤치마크만 필요하면 house_manage_no
없이 region·sigungu로 부르라.
**지역별 경쟁률의 분모는 추정하지 말고 `allocated_households_rank1_local`을 써라
(2026-08-21 신설).** 공표 경쟁률은 (그 지역구분 신청 ÷ 배정 세대수)라 분모를 되돌릴 수
있고, 해당지역 1순위 행의 98.3%에서 그 분모가 정수 하나로 특정된다(전수 실측). 되찾지
못한 행은 그 값이 null이고 `allocated_households_basis.range`에 구간만 있다 —
그때는 세대수로 단정하지 마라. 공고 원문 비율로 만든 `regional_priority.
estimated_allocation.est_*`는 **실측이 있는 행에서 쓰면 안 된다**(실측과 어긋나면
`estimate_superseded`가 붙는다 — 실측 2026000323 084.9165A: 추정 47 vs 실측 78세대).
두 가지 경로를 자동으로 고른다:
1) 결과가 발표된 공고 → 그 단지의 주택형별 1순위 해당지역 경쟁률·당첨 최저/평균/최고 가점.
2) 아직 접수 전이라 결과가 없는 단지 → 같은 지역 최근 공고들의 실제 커트라인 분포
(regional_benchmark). **다른 단지의 실적이다** — 질의 단지의 예상 커트라인이
아니라는 점을 반드시 함께 말하라. 분위수를 인용하기 전에
distinct_complex_count·samples_by_complex를 먼저 보라 — 단지가 1~2곳이면
그건 지역 분포가 아니라 한 단지 안의 주택형 편차다
(warning_sample_concentration이 붙는다).
**시도 하나로 답하지 마라(2026-08-16 축 신설).** 아파트는 시군구·평형·시기·가격대로 갈린다 —
실측(서울 최근 2년): 은평 전용 59㎡ 커트라인 중앙 45점 vs 강남 59㎡ 74점(29점 차),
연도별 중앙값 2022년 50점 → 2025년 69점, 2025년 분기별 69/66.5/56/70.
그래서 "내 가점으로 어디까지 되나"류에는 breakdown='sigungu'(+ area_band, 예산이 있으면
budget_max_10k)를, "언제가 쌌나"류에는 breakdown='quarter'|'year'를 써라.
사용자가 예산을 말했는데 budget_max_10k를 안 넣으면 **살 수 없는 단지가 섞인 답**이 나간다.
지어내지 말 것: 이 도구는 당첨 확률을 계산하지 않는다(가점 동점자 처리·특별공급 비율·
추첨제 물량은 데이터에 없다). 낼 수 있는 건 "과거 커트라인 대비 내 점수의 위치"까지다.
커트라인이 null인 칸은 0점이 아니라 당첨자 없음/가점제 미적용이다(score_status 참조).
분양가가 적정한지까지 물으면 realty_presale_vs_market을 이어서 쓰라.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | 시도 (예: 서울, 경기, 세종) | |
| keyword | No | 단지명·주소 부분일치 (예: '월계 중흥') | |
| sigungu | No | 시군구 정확한 이름 (예: 노원구, 수원시). 벤치마크를 좁힐 때 쓴다 — 표본이 0이면 시도 단위로 넓혀라 | |
| my_score | No | 내 청약 가점(0~84점). 주면 실제 커트라인과 점수 차를 계산해 준다 (허용 범위 0~84) | |
| area_band | No | 전용면적대로 좁힌다. 같은 구 안에서도 평형이 바뀌면 커트라인이 움직인다(실측: 노원 59㎡ 58.5점 vs 60~84㎡ 59점, 동작은 반대로 84㎡ 62점·59㎡ 64점) | |
| breakdown | No | 분포를 쪼갤 축. **시도 하나로 답하지 마라** — 서울 은평 전용 59㎡ 커트라인 중앙 45점, 강남 59㎡ 74점으로 같은 시도 안에서 29점이 갈린다. '어디까지 되나'류 질문에는 sigungu, '언제가 쌌나'는 quarter·year를 쓴다 | |
| since_years | No | 지역 벤치마크에 쓸 최근 기간(년). 커트라인은 시장 사이클을 타므로 기본 3년 (허용 범위 1~6) | |
| budget_max_10k | No | 예산 상한 — 분양 최고가(만원) 기준. 사용자가 '9억까지'라고 하면 90000. 가점만으로 답하면 살 수 없는 단지가 섞인다 | |
| budget_min_10k | No | 예산 하한(만원) | |
| house_manage_no | No | realty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확 | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent operation, so the description's job is to add beyond that — and it does: freshness_verdict values and their meaning, the not_found / lookup_failed rejection shapes, the rule that a null cutoff means 'no winners / 가점제 미적용' (score_status), sample-concentration warnings, and the explicit disclaimer that no win probability is computed. It loses a point for padding this with non-behavioral meta (axis-creation dates, ticket IDs like T-2026W37-81) and admonitions about backticks vs. quotes that don't inform invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is a ~900-word wall of bolded Korean prose mixing data-pipeline provenance, changelog dates, ticket numbers, and repeated examples (the 은평 45 vs. 강남 74 contrast appears twice) that an agent must wade through. For an 11-parameter tool some length is justified, yet significant portions could be cut without losing invocation-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 optional parameters and no output schema, the description carries the full burden and does so: it explains the two response paths, the fields an agent must read before citing (distinct_complex_count, samples_by_complex, allocated_households_basis.range), the meaning of result_status and freshness_verdict, and the error response shape. An agent has enough to call it correctly and interpret the result without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description clears that by tying parameters to consequences — omitting budget_max_10k yields answers mixing in unaffordable complexes, my_score produces a delta against actual cutoffs, and house_manage_no is the precise selector from realty_presale output. Some of it (the 시도 vs. sigungu example) merely duplicates the breakdown parameter's own description, so it isn't fully additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: it computes '청약 경쟁률' and '실제 당첨 가점 커트라인' and frames the question it answers ('나 가점 52점인데 당첨될까?'). It explicitly distinguishes itself from the sibling realty_subscription_score (which produces the score) and from realty_presale_vs_market (price adequacy), so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: call realty_subscription_score first if the user has no score, use breakdown='sigungu' + area_band + budget_max_10k for '어디까지 되나' questions and breakdown='quarter'|'year' for '언제가 쌌나', and hand off to realty_presale_vs_market for price-adequacy follow-ups. It also states the alternative branch (region/sigungu-only benchmark when house_manage_no is unknown).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_subscription_score청약 가점 계산 — 선언된 기간·인원에 배점표(84점) 적용ARead-onlyIdempotentInspect
민영주택 일반공급 청약 가점(만점 84)을 배점표로 계산한다.
민영주택 일반공급 가점제 점수(만점 84)를 **선언된 값**에 배점표를 적용해 계산한다 —
무주택기간 32 + 부양가족 35 + 통장 가입기간 17. "내 청약 가점 몇 점이야?"의 자리다.
경계를 지켜라: ① 세 입력 전부 **선언**이다 — 기산점·부양가족 인정은 등본·혼인관계
사실판단이라 서버가 판정하지 않고, 응답 traps(오기입=부적격 당첨 취소 사유)를 반드시
함께 전하라. ② 산출 점수는 realty_subscription_odds의 my_score로 넘겨 당첨 커트라인과
비교하는 것이 다음 수다. ③ 배점표 원문·기산 규칙은
realty_policy_rules(topic=subscription_account)가 진실원이다.
| Name | Required | Description | Default |
|---|---|---|---|
| is_homeowner | No | 현재 유주택 여부 — True면 무주택기간 점수가 0점이 된다(소형·저가주택 등 무주택 간주 예외 해당 여부는 사실판단이라 호출자가 반영해 선언) | |
| account_years | Yes | 청약통장 가입기간(년, 소수 허용 — 예: 0.4=약 5개월). 전환 통장은 종전 통장 최초 가입일 기준 (허용 범위 0~60) | |
| no_house_years | Yes | 무주택기간(년, 소수 허용 — 예: 7.5). 기산점(만 30세 vs 혼인신고일, 유주택 이력 재기산)은 사실판단이라 호출자가 확정해 선언한다 — 응답의 traps를 함께 전하라 (허용 범위 0~60) | |
| dependents_count | Yes | 부양가족 수(본인 제외). 직계존속 3년 동거·30세 이상 미혼자녀 1년 동거 등 인정 요건은 사실판단 — 확정해 선언한다 (허용 범위 0~20) | |
| under30_unmarried | No | 만 30세 미만 미혼 여부 — True면 무주택기간 점수가 0점이 된다(무주택기간 기산 전) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds meaningful non-obvious behavior: the server deliberately does NOT adjudicate factual questions (기산점, 부양가족 인정) and treats all three inputs as caller declarations, and it warns that response traps (mis-entry can cause disqualification/cancellation) must be relayed to the user. That is real behavioral context beyond the annotations, though the response shape itself is only hinted at.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the numbered boundary block are front-loaded and scannable, with every clause doing routing or constraint work. There is mild redundancy — '만점 84' and the 배점표 framing appear twice, and the '선언' caveat is restated across the body and the schema — but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only calculator with no output schema, the description supplies what matters: the input contract (all values are declarations the server will not verify), the downstream hand-off to realty_subscription_odds, and the obligation to surface response traps. It stops short of sketching the returned score breakdown, which would fully close the loop absent an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries parameter meaning — each property documents ranges (0~60, 0~20), decimal allowances, and the factual-judgment caveats. The description contributes the 32/35/17 weighting scheme, which clarifies relative importance, but adds no syntax or format detail the schema lacks. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('민영주택 일반공급 청약 가점을 배점표로 계산한다') and decomposes the 84-point score into its three weighted components (무주택기간 32 + 부양가족 35 + 통장 가입기간 17). It explicitly distinguishes itself from siblings by naming realty_subscription_odds (cutoff comparison) and realty_policy_rules (rule source), so an agent can place it without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: this tool produces the score, which should then be passed to realty_subscription_odds as my_score to compare against the cutoff, while the underlying point table and counting rules live in realty_policy_rules(topic=subscription_account). It also frames the natural user intent ('내 청약 가점 몇 점이야?'), leaving no ambiguity about when to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_supply_demand_balance시군구 수급 균형 — 입주 예정 대 세대 증가ARead-onlyIdempotentInspect
시군구마다 앞으로 들어올 아파트와 늘어나는 세대를 같은 창으로 나눠 수급을 판정한다.
"○○ 공급 과잉이야?", "세종 대전 서울 경기 수급", "어디가 입주 대비 수요가 많아?"류 질문의
자리 — 입주(청약홈 공고, 향후 N개월)를 연 단위로 환산해 최근 12개월 세대 증가로 나눈
**비율**과 판정(과잉 >1.5 · 공급 우위 1~1.5 · 균형 0.5~1 · 부족 <0.5 · 세대 감소 중)을 주고,
같은 행에 교차검증 신호(순이동·매매 거래량 증감·전세/월세 증감과 월세 비중·1순위 경쟁률·
낙찰가율·미분양)를 싣는다. 판정과 신호가 엇갈리면 `conflict`에 적는다.
**결론에 반드시 옮길 것**:
· 입주는 **하한**이다 — 정비사업 조합원분이 공고에 없어 서울처럼 재건축 비중이 큰 곳은
'부족'이 실제보다 과장된다. `meta.disclosures`를 그대로 전하라.
· `permit_pipeline_households`(사업승인 기준)는 **입주에 더하지 마라**(이중계상).
· `denominator_unstable=true`면 비율이 분모 탓에 흔들린다 — 배수를 단정하지 마라.
· 판정 구간은 **우리 규칙**이지 공식 기준이 아니다. 호가 매물·비아파트는 데이터에 없다.
· 지표마다 기준 시점이 다르다 — `meta.series_as_of`로 밝혀라.
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | 시도(예: '경기', '서울', '세종') 또는 시군구(예: '평택시', '서울 강남구'). 시도를 주면 소속 시군구 표 + 시도 합계, 시군구를 주면 그 행 + 시도 합계. 동명 시군구('중구')는 시도를 붙여라 — 안 붙이면 후보를 돌려준다. '광주'는 광역시·경기 광주시가 갈려 '광주광역시' 또는 '광주시'로 줘라 | |
| horizon_months | No | 입주를 **다음 달부터 몇 개월** 볼지(기본 24). 비율은 이 창을 연 단위로 환산해 12개월 세대 증가와 나눈다. 30개월을 넘기면 뒤쪽은 아직 공고 전이라 과소로 나온다 (허용 범위 6~60) | |
| include_footnotes | No | true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnly/idempotent/openWorld already cover safety) by disclosing that move-in figures are a lower bound because 정비사업 조합원분 is missing, that permit_pipeline_households must not be added due to double counting, and what denominator_unstable=true and series_as_of imply. It also discloses what is absent from the data (호가 매물, 비아파트) and that the verdict thresholds are the provider's own rule, not an official standard.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core operation before the example questions and the caveat block, and uses bold/bullets to make the output-carry rules scannable. It is dense and leans heavily on output-presentation instructions ('결론에 반드시 옮길 것'), which is useful but pushes the length near the limit for a selection-time description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it names the ratio, the five verdict labels, the cross-validation signal row, the conflict field, and the meta fields (disclosures, series_as_of, denominator_unstable). An agent has everything needed to call it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so region, horizon_months and include_footnotes are already fully documented in the schema. The description restates the window-to-annual conversion logic but adds no format, syntax or edge-case detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific computation and resource: dividing upcoming move-ins (announced via 청약홈, next N months, annualized) by 12-month household growth to produce a ratio plus a verdict band. The verdict bands and cross-validation signals are stated explicitly, so an agent knows exactly what it gets. It does not, however, name or contrast any sibling (e.g. realty_move_in_supply, realty_supply_pipeline), so routing still requires the agent to infer from scope alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example questions ('○○ 공급 과잉이야?', '어디가 입주 대비 수요가 많아?') function as concrete use-case triggers, making the when-to-use condition clear. There are no explicit exclusions or named alternatives for when this tool is the wrong choice versus the supply/price siblings, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_supply_pipeline공고 전 공급 파이프라인 — 사업승인 기준 예정 물량ARead-onlyIdempotentInspect
아직 공고가 안 난 예정 공급을 사업계획승인 기준으로 본다.
**아직 분양 공고가 안 난** 예정 공급을 사업계획승인 기준으로 본다 — "지금 넣을까,
다음 걸 기다릴까", "이 동네 앞으로 입주 폭탄 있나"류 질문의 자리.
청약홈(realty_presale·realty_move_in_supply)은 **모집공고일에야** 등록되므로 공고 전
물량이 구조적으로 안 보인다. 이 도구의 원천은 주택법 **사업계획승인**이라 공고 2~3년
전 단계가 잡힌다: 사업명·세대수·승인일·착공예정일·사용검사 예정일(=예상 입주).
재당첨 제한(분양가상한제 단지는 10년)·전매제한이 걸린 결정에서는 **대안 정보가 없으면
"지금 아니면 끝"이라는 잘못된 압박**이 생긴다 — 청약 상담이면 이 도구를 함께 불러라.
두 축을 **더하지 마라**(이중계상) — 이미 공고가 난 단지도 승인 목록에 남아 있다.
**이미 모집공고가 난 사업**은 블록 표기가 겹치면 행에 `announced_notice`가 붙는다 —
그 행은 '다음 분양'이 아니라 realty_presale·realty_subscription_odds의 영역이다.
표식이 없어도 기공고일 수 있다(meta.announced_cross_check 참조).
승인 전(지구계획·공모) 물량은 여기에도 없으니 이 값도 하한이다(`interpretation`).
**층수 축(2026-08-20 신설 · 3차 수집=동별개요)**: `max_floor`는 사업계획승인 시점의
**계획** 층수다(변경승인으로 움직인다 — 준공 확정층수가 아니다). 값이 비면
**'저층'으로 읽지 말고 미상으로 읽어라.**
최저층·출처·부재사유는 **3차 수집이 붙은 회차에만** 함께 실린다 —
`min_floor`가 있으면 그 사업에 **실제로 그 층수의 동이 있다**는 뜻이라 저층
선호(고소공포)·고층 조망 상담의 근거가 되고, `max_floor_source`가 있으면 그 층수를
어디서 가져왔는지, `max_floor_absent_reason`이 있으면 왜 비었는지를 말해 준다.
**독스트링은 고정값이라 지금 원장 상태를 말할 수 없다** — 2026-08-20~09-07에는 이
안내만 먼저 나가고 필드를 만드는 백엔드 절반이 20일간 안 붙어 있었다(T-2026W33-68).
그러니 **이번 회차에 무엇이 실렸는지는 응답의 `meta.floor_axis`를 보라.** 그 문구는
응답을 보고 갈린다 — 거기서 "없다"고 하면 정말 없는 것이니 찾지 마라.
`business_body`(사업주체·시공사)는 미준공 구간에서 **구조적으로 빈다** —
준공 후 등록되는 원장에만 있어 3차로도 안 메워진다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 사업 목록 상한 (기본 30) (허용 범위 1~100) | |
| to_ym | No | YYYYMM (기본 from_ym+60개월) | |
| months | No | from_ym부터 **몇 개월**을 볼지 — to_ym 대신 쓰는 간편 인자(예: 24). to_ym과 함께 주면 오류다(realty_move_in_supply와 같은 계약) (허용 범위 1~120) | |
| region | No | 지역 — 시도·시군구·동 부분일치 (예: '세종', '세종특별자치시 합강동', '수원시'). ⚠️ 짝 도구 realty_move_in_supply의 region은 **시도 전용**이다 — 인자를 그대로 옮겨 부르지 마라 | |
| from_ym | No | YYYYMM (기본 이번 달) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly/idempotent), so the description carries the rest — and it does: the data is a lower bound ('이 값도 하한이다'), pre-approval (지구계획·공모) volume is absent, `business_body` is structurally empty, `max_floor` is a plan not a confirmed figure, and response `meta.*` fields should be consulted. It even discloses a historical ingestion gap so the agent knows missing fields are not reliably populated. This is well beyond what the annotations provide, with no contradiction of readOnlyHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening line is correctly front-loaded and the sibling/double-count warnings earn their place, but the piece is long and includes internal meta-commentary that does not help selection or invocation — the note about docstrings being static, the 2026-08-20~09-07 backend gap and ticket ID, and repeated restatements of the same floor-axis caveat. Roughly a third of the text is operational trivia rather than agent-facing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and broad optional parameters, the description supplies the interpretive context an agent needs: data origin, lower-bound nature, cross-check meta fields, and sibling boundaries. It stops short of detailing pagination/ordering behavior or what a row looks like, but for a read-only listing tool with full annotation coverage this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all five parameters (limit, from_ym, to_ym, months, region) are documented in the schema itself, including the to_ym/months mutual exclusion. The description body adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb/resource and, crucially, a distinct data source ('주택법 사업계획승인') that separates it from the presale-notice tools, plus the scope it covers (사업명·세대수·승인일·착공예정일·사용검사 예정일). It explicitly names the sibling it is not (realty_presale·realty_move_in_supply) and explains why those structurally cannot show this volume. An agent can pick this tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use scenarios ('지금 넣을까, 다음 걸 기다릴까', 입주 폭탄 questions, 청약 상담 동반 호출), an explicit when-not ('이미 모집공고가 난 사업' → realty_presale·realty_subscription_odds), and a double-counting prohibition. Alternatives and the switching condition are named rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realty_vacant_housing빈집(미거주주택) — 시군구 빈집 수·비율·건축연도·원인 유형ARead-onlyIdempotentInspect
통계청 빈집(미거주주택) — 빈집 수·빈집 비율·전체 주택, 아파트/비아파트, 건축연도 구간, 원인 유형.
"○○ 빈집 몇 채야", "빈집 왜 늘었어", "빈집률 높은 시", "과천 빈집", "지방 빈집"류 질문의 자리다.
시군구를 주면 연도 시계열(2015~)·아파트/비아파트 분리·건축연도 구간(최근 2년 준공·1980년대·1979 이전 등)·
재고 대 세대 증감 분해·준공후 미분양 몫·**같은 유형(시·구·군) 안 백분위**·원인 유형 라벨
(정비사업 이주형·공급·입주형·인구유출·노후형·관광·세컨드형(추정), 규칙과 근거 수치 동봉)을 준다.
**결론에 반드시 옮길 것**:
· `definition` — 통계청 미거주주택은 조사 시점(11월 1일) 비어 있는 집 전부(매매·이사 대기·미분양 포함)이고
**법정 빈집(1년 이상 미사용)과 다르다.** 지자체 법정 빈집 실태조사 수치는 이 도구에 없다.
· 빈집 수(vacant_housing_count)와 빈집 비율(vacancy_rate_pct)을 섞지 마라.
· 원인 유형은 우리 규칙의 라벨이고, 빈집률로 가격을 내다보지 마라 — 같은 기간 동행 관측만 있다
(meta.findings_not_prediction).
· null 값은 0이 아니다 — null_reasons(KOSIS 비공개 'X' 등)를 옮겨라.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 순위·하위 지역 행 수 (허용 범위 1~60) | |
| region | No | '전국'·시도('경기')·시군구('과천시', '서울 중구'). 동명 시군구는 시도를 붙여라 — 안 붙이면 후보를 돌려준다. 구가 있는 시(수원·성남 등)는 시 단위만 있다. rank_by로 순위를 볼 땐 비워 둔다 | |
| rank_by | No | region 없이 순위를 볼 때 — 같은 area_type 안에서만 정렬한다(빈집률·빈집 수·5년 빈집률 변화) | |
| area_type | No | 순위의 유형 — rank_by와 함께 필수. 시·구·군을 섞은 순위는 내지 않는다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, openWorld, non-destructive), and the description adds substantial behavioral context on top: the definitional caveat that 통계청 미거주주택 ≠ 법정 빈집, that count and rate must not be conflated, that cause labels are rule-based not predictive (meta.findings_not_prediction), and that null is not zero (null_reasons/KOSIS 'X'). This is exactly the extra disclosure the rubric rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, and the metrics returned are given as a scannable list before the '결론에 반드시 옮길 것' caveats. It is dense and fairly long, with some overlap between the return-value list and the caveat block, but each section carries distinct information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the burden of return semantics, and it does: time-series range (2015~), apartment/non-apartment split, building-year brackets, decomposition, percentile, and cause labels. Combined with the null and definition caveats, an agent has everything needed to call and interpret the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (limit, region, rank_by, area_type) are already documented, including enum semantics and the region+rank_by interaction. The description adds no parameter syntax or format detail beyond the schema, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific data source (통계청 빈집/미거주주택) and enumerates the exact metrics delivered — 빈집 수, 빈집 비율, 전체 주택, 아파트/비아파트, 건축연도 구간, 원인 유형 — so the resource is unambiguous. It also distinguishes its scope from the 지자체 법정 빈집 실태조사, but never names a sibling tool, so it falls short of the 5-level sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Concrete trigger phrasings ('빈집 몇 채야', '빈집 왜 늘었어', '빈집률 높은 시', '과천 빈집') make the intended question space clear. It also states what the tool does NOT cover (법정 빈집 실태조사 수치). However it never routes the agent to an alternative tool or states an explicit when-not-to-use boundary against siblings such as region_rankings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_issue답변 오류 신고AInspect
사용자가 답변 오류 제보나 개선 요청을 전해 달라고 했을 때만 운영자에게 보낸다.
쓰는 때: 사용자가 "이거 틀렸으니 신고해 줘", "운영자에게 알려 줘", "이런 데이터도 넣어
달라고 전해 줘"처럼 제보·요청을 부탁했을 때. 보내기 전에 무엇이 전달되는지 사용자에게
알린다. kind='결함'은 틀린 답 제보, kind='질문기록'은 개선 요청이다.
쓰지 않는 때: 사용자가 요청하지 않았는데 질문을 남기려고 부르지 않는다. 답하기 전에
먼저 부르지도 않는다 — 이 도구는 답변·정정을 대신하지 않는다.
전달 내용(인자)과 같은 사용자의 직전 호출 기록 요약이 운영자 검토용으로 저장된다
(개인정보처리방침 https://realty.sallim.app/privacy). 무인증 공개 서버라 쓰기 표면을 이
도구 하나로 묶어 시간당 상한(전체 60건·발신자당 20건)을 걸고, 일일 조회 한도(quota)와는
무관하게 접수된다.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | '결함'=사용자가 답이 틀렸다고 제보해 달라고 한 경우(기본). '질문기록'=사용자가 '이런 질문에도 답하게 해 달라'·'이 데이터도 넣어 달라'처럼 **개선 요청을 전해 달라고 한 경우** — 그 질문과 무엇이 없었는지를 넘긴다(응답에 그 질문이 어느 도구 축에 해당하는지가 `routing`으로 함께 온다). 사용자가 요청하지 않은 질문을 기록용으로 넘기지 않는다 | 결함 |
| problem | No | 사용자가 제보한 문제. 사용자가 지적한 말을 그대로 옮겨도 된다. kind='결함'이면 필수, kind='질문기록'이면 비워도 된다. | |
| expected | No | 사용자가 맞다고 본 값이 있으면 | |
| question | No | 사용자가 제보·개선 요청과 함께 전해 달라고 한 질문(kind='질문기록'이면 필수). ⚠️ **개인 식별 조합은 일반형으로 바꿔서 넣는다** — 소득·보유자산·보유단지·거주지 중 둘 이상이 겹치면 그대로 적지 말 것(예: '○○아파트 33평 보유 + 주식 10억 + 잠실 거주' → '1주택 보유(대출 없음), 인근 재건축 단지로 갈아타기'). 무인증 공개 서버의 로그다 | |
| tool_used | No | 문제가 된 답을 만든 도구 이름 | |
| wrong_value | No | 틀린 수치·문장 | |
| missing_axis | No | answered_fully=false일 때 **없어서 못 답한 것**(예: '단지별 구조형식(벽식/라멘) 라벨 없음', '경기 정비사업 단계 조회 불가 — 서울 한정') | |
| answered_fully | No | kind='질문기록' 전용 — 이 서버 도구만으로 그 질문에 완결된 답을 했는가. false면 missing_axis에 무엇이 없었는지 적는다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a write, non-idempotent, non-destructive operation; the description goes well beyond that by disclosing what actually gets transmitted (the args plus a summary of the user's prior calls), the privacy policy link, that this is an unauthenticated public server consolidating the write surface, and concrete rate limits (60/hour overall, 20/sender/hour) that bypass the daily read quota. That is exactly the kind of context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core rule, then cleanly sectioned into when-to-use, when-not-to-use, and what-gets-transmitted. Slightly verbose with some duplication of the kind semantics already in the schema, but every other sentence carries weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the definition covers the operational envelope (rate limits, storage, privacy, unauthenticated server) and even signals the routing info that comes back for '질문기록' requests. For an 8-parameter write tool, nothing an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with rich per-parameter docs, so the schema already does the heavy lifting (baseline 3). The description restates the kind='결함'/'질문기록' distinction that is already in the schema and adds only that the sender's prior calls are stored, which is behavioral rather than parameter-specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (send a report to the operator) and immediately scopes it to user-requested error reports or improvement requests. This sharply distinguishes it from the surrounding data-retrieval siblings like search/realty_* tools, which never write. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit '쓰는 때' vs '쓰지 않는 때' sections give the triggering condition (user asked to report) and hard exclusions (do not call before answering, do not record unrequested questions). It also states the tool does not substitute for answering or correcting. This is a complete when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search경매 물건 검색ARead-onlyIdempotentInspect
법원경매 물건을 자연어 문장으로 검색한다(경매 전용 — 청약·시세는 다른 도구다).
법원경매 물건을 자연어로 검색한다. **경매 전용** — 청약·분양 공고는 realty_presale,
분양가 적정성은 realty_presale_vs_market, 시세 통계는 realty_region_price_stats.
지역·물건종류·유찰횟수·감정가를 질의에서 뽑아 필터링한다.
예: "서울 강남구 아파트", "유찰 2회 이상인 경기도 오피스텔", "서울 아파트 감정가 5억 이하".
이 파서는 최소 어댑터라 못 쓰는 축(면적·기일·층 등)이 있다. 못 쓴 조건은 응답의
`unapplied_conditions`에 적히므로, 그게 비어 있지 않으면 결과 범위를 좁게 오인하지 말라.
지역·종류·감정가·유찰횟수라면 `realty_search_auctions`로 값을 직접 지정해 다시 조회하면
되지만, **면적·층·기일 범위는 그 도구에도 인자가 없다**(외부 QA 2026-10-04 ③) — 기일은
`exclude_past=true`(오늘 이후만)·`sort="date_asc"`까지만 되고, 면적·층은 결과 행과
`fetch` 상세의 값을 보고 직접 걸러야 한다. 없는 인자로 재호출하라고 안내하지 마라.
각 결과의 id는 이어서 fetch(id)에 그대로 넣으면 상세를 볼 수 있다.
**이 축의 자리** — 경매 검색은 둘이고 입력 형태로 갈린다. 사용자의 말을 문장 그대로
넘길 때가 이 도구(`search`)이고, 지역·종류·감정가·유찰횟수를 **값으로 이미 알 때**는
`realty_search_auctions`다(면적·층·기일 범위는 **어느 쪽에도 필터가 없다** — 위 참조).
상세는 `fetch`로 이어간다 — 여기 나온 id를 그대로 넣으면 된다.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 경매 물건을 찾는 **자연어 한 줄**. 예: '서울 강남구 아파트' · '유찰 2회 이상인 경기도 오피스텔' · '서울 아파트 감정가 5억 이하'. 이 파서가 읽는 축은 넷뿐이다 — 지역(시도는 '서울'·'서울특별시' 둘 다 되고, 시군구는 '강남구'·'평택시'처럼 원장 표기, 특례시는 '수원시 권선구'), 물건종류(아파트·오피스텔·다세대·연립주택·단독주택·근린시설·상가·대지·임야·전답 등), 유찰횟수, 감정가(억/만원 표기). 면적·기일·층은 못 읽고 unapplied_conditions로 실토한다 — **realty_search_auctions에도 면적·층·기일 범위 인자는 없다**(기일은 exclude_past=true로 오늘 이후만 남기고 sort=date_asc로 가까운 순 정렬까지만 된다). 면적·층은 결과 행·fetch 상세의 값을 보고 직접 걸러라. 사건번호를 이미 아는 경우는 검색이 아니라 realty_get_auction_case다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, yet the description adds substantial behavioral context beyond them: the parser is a minimal adapter with unsupported axes (area/floor/date), unsupported conditions surface in `unapplied_conditions`, results must not be misread as narrow when that field is non-empty, and the agent is warned NOT to re-call with nonexistent arguments. That is exactly the kind of non-obvious failure mode an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose and siblings are front-loaded, which is good, but the text repeats itself: the '경매 전용' exclusion list appears twice and the fetch(id) hand-off is stated in two separate places (각 결과의 id는 이어서 fetch(id)... and 상세는 fetch로 이어간다). The area/floor/date limitation is also restated three times, inflating length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only natural-language search with no output schema, the description covers purpose, sibling routing, parser limitations, the unapplied_conditions failure mode, and the follow-up fetch path. Nothing an agent needs in order to call it correctly and interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `query` parameter is documented in detail, so baseline is 3. The description still earns credit by enumerating exactly which four axes the parser reads (region, property type, failed-bid count, appraisal price), giving worked example phrasings, and correlating unsupported axes with the `unapplied_conditions` output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: natural-language search over court auction properties (법원경매 물건을 자연어 문장으로 검색한다). It immediately scopes the tool to auctions and names the siblings it is NOT (realty_presale, realty_presale_vs_market, realty_region_price_stats), so an agent can separate it from ~50 siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use this tool when the user's sentence is passed through verbatim, use realty_search_auctions when region/type/appraisal/failed-bid values are already known, and use realty_get_auction_case when the case number is known, with fetch for details. It also states exclusions (청약·시세 are other tools), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
fetch1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"search가 돌려준 id를 **그대로** 넣는다 — `법원명|사건번호` 형식이다 (예: '서울동부지방법원|2025타경51727'). 파이프 앞은 정식 법원명이고 지원은 '진주지원'처럼 지원명만 오는 행도 있다. 파이프 뒤는 `2026타경3571` 꼴 (연도 4자리 + '타경' + 일련번호, 일련번호는 3~6자리). 법원명 없이 사건번호만 넣으면 사건번호가 법원 간 유일하지 않아 후보 목록이 돌아온다"New value: +"search가 돌려준 id를 **그대로** 넣는다 — `법원명|사건번호` 형식이다 (예: '서울동부지방법원|2025타경51727'). 파이프 앞은 정식 법원명이고 지원은 '진주지원'처럼 지원명만 오는 행도 있다. 파이프 뒤는 `2026타경3571` 꼴 (연도 4자리 + '타경' + 일련번호, 일련번호는 1~6자리). 법원명 없이 사건번호만 넣으면 사건번호가 법원 간 유일하지 않아 후보 목록이 돌아온다"
- Changed
realty_auction_history1 field changed- changed
Input schema / properties / case_no / descriptionPrevious value: -"사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 3~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'·'3571'처럼 접두 없이 넣지 마라"New value: +"사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 1~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'·'3571'처럼 접두 없이 넣지 마라"
- Changed
realty_get_auction_case1 field changed- changed
Input schema / properties / case_no / descriptionPrevious value: -"사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 3~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'처럼 하이픈으로 써도 서버가 '타경'으로 펴고 무엇을 폈는지 응답에 적는다. 다만 '3571'처럼 **연도가 없으면 못 편다**(연도를 지어내면 다른 사건이 된다) — 사용자에게 연도를 물어라"New value: +"사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 1~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'처럼 하이픈으로 써도 서버가 '타경'으로 펴고 무엇을 폈는지 응답에 적는다. 다만 '3571'처럼 **연도가 없으면 못 편다**(연도를 지어내면 다른 사건이 된다) — 사용자에게 연도를 물어라"
- Changed
realty_presale1 field changed- changed
Input schema / properties / upcoming / descriptionPrevious value: -"⚠️True면 접수 **시작 전**(시작일이 오늘 이후) 공고만 — **오늘 접수 가능한 공고는 여기 없다**. 오늘 넣을 수 있는 것을 찾는다면 status='접수중'을 써라. status와 함께 쓰지 말 것(status가 이것을 대체한다)."New value: +"⚠️True면 접수 **시작 전**(시작일이 오늘 이후, 오늘 시작 포함) 공고만 — 어제 이전에 시작해 **접수 중인 공고는 여기 없다**. 오늘 넣을 수 있는 것을 찾는다면 status='접수중'을 써라. status와 함께 쓰지 말 것(status가 이것을 대체한다)."
16 tool updates
- Changed
realty_auction_sale_rate1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_capital_gains_tax1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_compare_auction_vs_market1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_compare_regions1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_complex_rent_by_pyeong1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_demographics1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_loan_limit1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_location_scores1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_market_signals1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_nonapt_prices1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_predict_price1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_presale_vs_market1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_region_rankings1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_region_trend_basket1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_subscription_odds1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_supply_demand_balance1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
5 tool updates
- Changed
realty_area_price_bands1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_complex_pyeong_price1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_presale_cost1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_region_price_stats1 field changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +}
- Changed
realty_search_complexes2 fields changed- added
Input schema / properties / include_footnotesAdded value: +{ + "default": false, + "description": "true면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지", + "title": "Include Footnotes", + "type": "boolean" +} - changed
Input schema / properties / region / descriptionPrevious value: -"시군구명 (예: 마포구, 서울특별시 마포구). **법정동까지 넣어도 된다**(예: '강남구 대치동') — 백엔드는 동으로 거르고 나머지 토큰은 서버가 검증해 note에 적는다. 종전 설명이 시군구만 적어 **이 도구가 못 하는 일로 읽혔고**, 동 단위를 원한 모델이 비아파트 도구로 새던 자리다(2026-08-23 PlayMCP QA)"New value: +"시군구명 (예: 마포구, 서울특별시 마포구). **법정동까지 넣어도 된다**(예: '강남구 대치동') — 백엔드는 동으로 거르고 나머지 토큰은 서버가 검증해 note에 적는다"
1 tool update
- Changed
realty_region_price_stats1 field changed- changed
Input schema / properties / compare_from / descriptionPrevious value: -"**기준일 전후 비교**(YYYY-MM-DD, 예: '2026-08-01'). 주면 단지 목록의 단지마다 기준일 이전(조회 창 시작~전날)과 이후(기준일~오늘) 두 창의 건수·중앙값·최고가 거래(계약일·층·금액)와 중앙값 변화율이 붙는다 — '○○ 발표 전후 단지별 시세', '정책 전후 비교'가 이 인자다. 단지마다 단지 도구를 따로 불러 손으로 가르지 마라. 창 전체는 months(최대 60)이므로 기준일 이전 구간이 충분히 들어오게 months를 잡아라. 평형을 주면 그 평형만 비교한다. metric='price'에서만 동작한다"New value: +"기준일 전후 비교(YYYY-MM-DD) — '○○ 발표 전후 단지별 시세'. 단지마다 전·후 창의 건수·중앙값·최고가 거래(계약일·층)·변화율이 붙는다. 단지 도구를 단지마다 부르지 마라. 창은 months 전체라 기준일 이전이 들어오게 잡아라. price 전용"
Related MCP Connectors
Korean apartment data: official transaction prices, jeonse ratios, AI forecasts. 45,000+ complexes.
Korean apartment sale transactions (MOLIT): price, area, floor, deal date, cancellations by district
Official Korean apartment sale prices (MOLIT). Clean JSON, data global models cannot know — paid pe…
Korean statutes, precedents, local business-district stats and public procurement for AI agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceConnects to Korea's MOLIT real estate API to provide 14+ tools for live transaction data and financial scenarios like buy now, buy later, or invest only based on income and savings.16379MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to query Korean apartment real-estate data, including official transaction prices, jeonse ratios, and AI price forecasts for 45,000+ complexes.1MIT
- AlicenseAqualityAmaintenanceKorean real-estate tax engine: computes acquisition, property, comprehensive holding, capital gains, gift and inheritance tax, citing the statute article behind every result. Regression-tested against 991 court and tribunal rulings.43142 PyPI1AGPL 3.0
- AlicenseAqualityBmaintenanceProvides South Korean real estate transaction price lookup (sales and rent) for apartments, row houses, single-family homes, and officetels via MCP tools using public data from data.go.kr.87 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.