Skip to main content
Glama

Server Details

Korean real estate: court auctions, 10M+ MOLIT records, subscription notice facts, loan/DSR rules

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
sallim-app/korea-realty
GitHub Stars
0
Server Listing
korea-realty
ChatGPT
–
Claude
–

TDQS

A3.7/5.0

Scored across 57 tools

Disambiguation3/5

The set has several deliberately overlapping clusters (search vs realty_search_auctions, fetch vs realty_get_auction_case, several price/valuation tools, multiple presale tools), so misselection risk is real. The descriptions are unusually explicit about each tool's 'axis' and when to use another, which mitigates the overlap but does not remove it.

Naming Consistency4/5

Most tools use a predictable realty_ + snake_case convention, so names are readable and grouped by domain. The exceptions (fetch, search, report_issue) and mixed verb/noun patterns (get_, search_, compare_, area_price_bands) are minor deviations.

Tool Count1/5

57 tools is far beyond a well-scoped set for an agent-facing MCP server, even for a broad real-estate platform. The large surface forces expensive routing among many niche calculators and cross-referenced data tools.

Completeness4/5

Coverage spans auction, onbid, presale, market pricing, policy, tax, loans, supply, demographics, and redevelopment with many edge-case tools. Gaps remain (non-apartment rentals, commercial/land rent, non-Seoul redevelopment, SH/GH public rental), but the surface is unusually deep.

Available Tools

57 tools
fetch경매 사건 상세A
Read-onlyIdempotent
Inspect

search가 돌려준 id로 경매 사건의 전체 내용을 가져온다.

id 형식은 "법원명|사건번호" (예: "서울동부지방법원|2025타경51727").
사건번호는 법원 간 중복되므로 법원명 없이 조회하면 후보 목록이 돌아올 수 있다.

rights(매각물건명세서 요약)가 있으면 법원 공시의 전달로만 인용하고, 없으면(rights_note
참조) 권리관계를 지어내지 말 것 — 권리분석 판단은 이 도구의 데이터 밖이다.

**이 축의 자리** — 사건 상세도 둘이고 입력과 응답 형태로 갈린다. 이 도구는 `search`가
준 `"법원명|사건번호"` 한 덩어리를 그대로 받아 **문서형 텍스트**를 돌려준다(ChatGPT
커넥터 규격). 사용자가 사건번호를 말로 불러줬거나, `rights`·`min_bid_source` 같은 필드를
**값으로** 다뤄야 하면 `realty_get_auction_case`(사건번호·법원명을 따로 받는 구조화 응답)를
써라. 유찰 이력·기일별 저감은 어느 쪽도 아니고 `realty_auction_history`다.
NameRequiredDescriptionDefault
idYessearch가 돌려준 id를 **그대로** 넣는다 — `법원명|사건번호` 형식이다 (예: '서울동부지방법원|2025타경51727'). 파이프 앞은 정식 법원명이고 지원은 '진주지원'처럼 지원명만 오는 행도 있다. 파이프 뒤는 `2026타경3571` 꼴 (연도 4자리 + '타경' + 일련번호, 일련번호는 1~6자리). 법원명 없이 사건번호만 넣으면 사건번호가 법원 간 유일하지 않아 후보 목록이 돌아온다

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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지역 평형대별 시세 구간A
Read-onlyIdempotent
Inspect

지역의 매매 시세를 평형대 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평 이상.
NameRequiredDescriptionDefault
regionYes시군구명 (예: 마포구). **법정동까지 넣어도 된다**(예: '마포구 아현동') — 구 하나로 뭉치면 신도심·구도심이 한 값이 된다
by_dongNo법정동 × 평형대 중앙값을 함께 낸다. '이 구에서 어디가 싼가'류 질문의 자리다 — 실측(마포구 6개월, 전용 60~84㎡): 서교동 6.8억 ~ 용강동 27.1억으로 한 구 안에서 4배 갈린다. 표본 3건 이상 칸만 나오고 뺀 칸 수(by_dong_hidden_cells)를 공시한다. 평형 하나(전용 84㎡ 등)로 좁힌 동별 값은 realty_region_price_stats(by_dong=true, 평형 인자)가 같은 산식으로 준다
period_monthsNo집계 기간(개월) (허용 범위 1~24)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly/idempotent/openWorld), and the description goes well beyond them: it discloses the outlier filter (excluding cancelled contracts and sub-50%-of-median direct trades), warns that this makes values differ from realty_region_price_stats' unfiltered mean, and notes the 3-sample minimum plus by_dong_hidden_cells disclosure. That is exactly the methodological context an agent needs to avoid misreporting numbers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the routing rule, and each block (axis position, filter note, pyeong conversion) earns its place. Slightly dense with bold markers and stacked alternatives, but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 still covers return-shape essentials (band labels in exclusive pyeong, per-row one-line vs full footnotes, hidden-cell count) plus the unit-conversion table so the agent can translate to user-facing 분양평. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description adds real meaning on top by explaining that region can take a legal-dong string and that gu-level aggregation conflates new/old downtown, and by framing by_dong as the answer to a specific question with an observed 4x spread. It does not add much on period_months or include_footnotes beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: retrieves sale price levels for a region bucketed into four exclusive-area bands, with the band definition (전용면적 기준) inline. It explicitly names what it is not for (specific complexes → realty_search_complexes), so it is separable from the 50+ siblings 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the exact question shape it answers ("○○구에서 무슨 평수대가 얼마쯤 해?") and then positions it against both relevant alternatives: trend questions → realty_region_price_stats, specific complex → realty_search_complexes, and 'which dong is cheap' → the by_dong parameter. It even states a precedence rule when the two price-level tools disagree.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_auction_alerts급매 경매 물건A
Read-onlyIdempotent
Inspect

유찰이 쌓여 최저입찰가가 크게 떨어진 경매 물건을 골라낸다.

유찰이 누적돼 최저입찰가가 크게 떨어진 물건을 찾는다. "○○에서 유찰 많은 물건"은
sido/sigungu로 좁혀라.

유찰이 많다는 건 싸다는 뜻이기도 하지만 권리관계·물건 하자 등 팔리지 않는 이유가
있다는 뜻이기도 하다. 결과를 추천으로 제시하지 말고 확인이 필요한 후보로 제시하라.

**같은 축의 다른 문**: realty_search_auctions(min_bid_count)로도 유찰 물건을 거를 수
있다 — 조건 필터·목록이 목적이면 그쪽, 저감 큰 후보 발굴(극단 할인 컷 포함)이면 이쪽.
둘을 합쳐 세지 마라(같은 물건이 양쪽에 나온다).
NameRequiredDescriptionDefault
sidoNo시도 (예: 세종, 경기도) ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.
limitNo반환 개수 (최대 50) (허용 범위 1~50)
sigunguNo시군구 (예: 강남구, 수원시) ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.
usage_nameNo물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. 부분일치라 '빌라'는 '연립주택,다세대,빌라' 행에 걸린다(**표기를 바꾸지 않는다** — '다세대'로 자동 매핑하는 것은 낙찰가율 통계 realty_auction_sale_rate 쪽이다). '토지'는 이 원장에 없는 이름이라 거절된다 — 대지·임야·전답으로 나뉘어 있다. 비우면 전 종류
min_bid_countNo최소 유찰 횟수 (허용 범위 0~100)
max_discount_pctNo감정가 대비 최대 할인율(%) — 80%+ 극단 할인은 지분매각·대지권 없음 등 특수물건이 대부분이라, 실수요 후보를 찾을 땐 79 이하로 걸러라 (허용 범위 0~100)
min_discount_pctNo감정가 대비 최소 할인율(%) (허용 범위 0~100)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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경매 유찰 이력·가격 저감·사진A
Read-onlyIdempotent
Inspect

경매 사건 하나의 유찰 이력·가격 변동·물건 사진을 조회한다.

경매 사건의 유찰 이력(기일별 최저가 저감 시계열)·가격 변동 이벤트·물건 사진 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를 사용자에게 전하라(목록·상세와 같은 경고).
NameRequiredDescriptionDefault
case_noYes사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 1~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'·'3571'처럼 접두 없이 넣지 마라
court_nameNo법원명 — '서울동부지방법원'·'인천지방법원'처럼 정식명으로 넣는다('진주지원'처럼 지원명만인 행도 있다). 사건번호는 법원 간 유일하지 않아(전국 평균 2.8개 법원에서 중복) 생략하면 후보 목록이 돌아온다

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_rights_analysis경매 권리분석 — 낙찰받으면 뭘 떠안나(말소기준·인수/소멸·임차인·인수액)A
Read-onlyIdempotent
Inspect

이 경매 물건 낙찰받으면 뭘 떠안나 — 말소기준·인수/소멸·임차인 대항력·인수액.

법원 원장(매각물건명세서의 최선순위 설정·인수되는 권리 문구)에 사용자가 준 등기부 권리·임차인을
더해 **규칙으로 정해지는 부분만** 판정한다(LLM 없음): 권리 타임라인과 말소기준권리, 권리별
인수/소멸, 임차인별 대항력(전입 다음 날 0시 경계)·우선변제(확정일자 순위)·최우선변제(금액표는
말소기준이 아니라 최선순위 담보물권 설정일 기준), 예상 낙찰가를 주면 인수액 범위.

사용법: 사용자가 등기부등본을 첨부했으면 **그 문서를 읽어** registry_entries에 갑구·을구 권리를
순서대로 넣어라(이름·주민번호 제외). 임차인 정보가 있으면 tenants에. 둘 다 없으면 법원 원장만으로
돌리고 `on_hold`에 못 본 것이 적힌다.

경계 — 그대로 전하라: ①**법원 문구가 엔진 판정보다 앞선다**(충돌은 `conflicts`). ②명세서 칸이
공란이면 '인수 없음'이 아니라 **못 봄**이다(`assumption.verdict='not_seen'`). ③유치권·법정지상권·
분묘기지권·가처분의 피보전권리는 사실판단이라 **판정하지 않고** `on_hold`에 점검표로 준다.
④등기부↔명세서 말소기준이 다르면 `cross_check` 경고. ⑤결과는 **정보 제공이지 법률 자문이
아니다** — 등기부·현황조사서·매각물건명세서 원문 대조를 권하라(`disclaimer`).
등기부 없이 원장만이면 realty_get_auction_case(rights_analysis=true)와 같은 결과다.
NameRequiredDescriptionDefault
case_noYes사건번호 — `2026타경3571` 꼴(realty_get_auction_case와 같은 규칙·정규화)
tenantsNo임차인 목록(현황조사서·전입세대열람·사용자 진술): {move_in_date:'YYYY-MM-DD'(전입일), fixed_date:확정일자, deposit_won:보증금(원), monthly_rent_won, dividend_requested:배당요구 여부(true/false/모르면 생략), has_lease_registration:임차권등기 여부}. 이름 칸은 없다. 법원 명세서에 적힌 임차인과 다르면 법원 값을 따르고 충돌을 공시한다
court_nameNo법원명 — 사건번호는 법원 간 중복이 흔하다. 모르면 비워 두면 후보 법원이 돌아온다
expected_bid_wonNo예상 낙찰가(원). 주면 배당을 흘려 대항력 임차인의 미변제 보증금(=낙찰자 인수액)을 **범위로** 낸다 — 집행비용·당해세·임금채권은 못 보므로 단일 숫자로 단정하지 않는다
registry_entriesNo**사용자가 첨부한 등기부등본(갑구·을구)을 읽어** 권리마다 한 항목씩 넣는다: {section:'갑'|'을', order:순위번호, receipt_date:'YYYY-MM-DD'(접수일), receipt_no:접수번호(같은 날 선후를 가른다), kind:'근저당권설정'·'가압류'·'전세권설정' 등 등기목적 그대로, amount_won:채권최고액·전세금(원), note:비고('배당요구함'·'건물 전부' 등)}. **권리자 이름·주민번호는 넣지 마라** — 받을 칸이 없고, 넣으면 버리고 버린 키 이름만 ignored_fields로 알린다. 없으면 비워 둔다(법원 명세서의 최선순위로만 판정)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnly/idempotent/openWorld; the description adds everything an agent actually needs: the engine is deterministic (no LLM), court wording outranks engine verdicts with mismatches in `conflicts`, blank ledger cells mean 'not seen' rather than 'nothing assumed', and 유치권/법정지상권/분묘기지권/가처분 are deliberately not adjudicated but returned as an on_hold checklist. It also states the result is information, not legal advice, and recommends checking the source documents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a one-line headline, then structured into usage and a numbered 경계 list, so it scans well. It is dense and long for a tool definition; some clauses (e.g. the parenthetical about 최우선변제 table basis) could be trimmed without losing decision value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 return semantics and does so well by naming the key output fields (conflicts, assumption.verdict, cross_check, on_hold, disclaimer). The overall shape of the rights timeline and per-tenant verdict output is only implied rather than described, which keeps it just under a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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: registry_entries must exclude names and 주민번호 (rejected keys surface as ignored_fields), and expected_bid_won yields a range rather than a single figure because enforcement costs and tax claims are invisible. The tenants guidance mostly restates the schema, keeping this short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource in domain terms: judges, by rule, the rights a winning bidder takes on (말소기준권리, 인수/소멸, 임차인 대항력, 인수액). It explicitly distinguishes itself from the nearest sibling by noting that with only the court ledger it produces the same result as realty_get_auction_case(rights_analysis=true).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit '사용법' block: if the user attached a registry document, read it into registry_entries in order; put tenants into tenants; if neither exists, run on the court ledger alone with the gap surfaced in on_hold. The fallback path and the sibling-equivalence case are both spelled out, leaving no ambiguity about when to use this versus realty_get_auction_case.

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낙찰가율 통계A
Read-onlyIdempotent
Inspect

"이 지역 이 물건은 보통 감정가의 몇 %에 낙찰되나"를 실제 매각결과로 답한다.

입찰가를 정할 때 쓰는 핵심 지표다. `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이 자동 계산한다 —
분모가 다르니 두 %를 한 문장에 섞지 마라(감정가는 시세와 다른 시점·기준의 값이다).
NameRequiredDescriptionDefault
sidoNo시도 — '서울'처럼 줄여 써도 되고 '서울특별시'도 된다(서버가 정식명으로 편다). 원장 표기는 서울특별시·경기도·부산광역시·세종특별자치시·강원특별자치도 같은 정식명이다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.
sigunguNo시군구 — 원장 표기 그대로 넣는다(예: '강남구', '평택시', '기장군'). 특례시·일반구는 '수원시 권선구'처럼 두 토막이다. 시도 이름을 여기 붙이지 마라('서울 강남구'는 안 맞는다) — 시도는 sido로 준다 ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.
area_bandNo전용면적대로 좁힌다. 낙찰가율은 평형에 따라 갈린다 — 대상 물건의 평형을 알면 반드시 넣어라(응답의 by_area_band로도 확인된다)
usage_nameNo물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. '빌라'는 표준 분류가 아니라 서버가 '다세대'로 매핑하고 그 사실을 응답에 공시한다. 비우면 전 종류아파트
bid_count_maxNo유찰 횟수 **상한**(이하). 예: 2를 주면 유찰 0·1·2회 물건의 매각결과만 집계한다. 유찰이 쌓일수록 낙찰가율이 내려가므로 대상 물건의 유찰 횟수에 맞춰 좁혀라. 비우면 유찰 횟수 무관 전체(응답의 by_fail_count에 횟수별 분포가 그대로 온다) (허용 범위 0~100)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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시공사·시행사별 분양 성적 — 공급·무순위·청약 배수A
Read-onlyIdempotent
Inspect

시공사·시행사별 분양 성적 — 공고 수·공급 세대·무순위(줍줍) 세대와 비율·청약 1순위 배수·미달 세대.

"○○건설 분양 성적", "GS건설 현장 무순위 많이 나왔나", "대전 시공사별 분양", "이 시행사 다른 현장은"류
질문의 자리다. builder(또는 developer)를 주면 그 회사 행과 **현장 목록**(단지·지역·공고일·공급·
무순위·비율·시행사)을, 아무것도 안 주면 공급 상위 N개 회사 순위를, region(시도)을 주면 그 시도로 좁힌다.
행마다 같은 창의 **전국 비율(baseline)**이 비교 기준으로 붙는다.

**결론에 반드시 옮길 것**(meta.disclosures):
· 무순위 세대는 **최종 미분양이 아니다**(당첨 후 계약 포기분 재공급). 무순위 뒤 남은 것은 별도 필드.
· 청약홈 밖 공급(지주택·자체분양·선착순·임의공급)은 없다 — 대구처럼 선착순으로 빼는 지역은 비율이 낮게 나온다.
· **재무 건전성 판정이 아니다** — PF·부채·보증은 DART 영역. "위험"·"부실" 같은 낙인을 붙이지 말고
  수치와 전국 비율만 전하라.
· 공동시공은 각 사에 전량 귀속, 회사명 묶음은 우리 규칙, 무순위 연결률은 meta.match_rate.

view='sites'는 "무순위 청약에서도 신청이 모자란 단지" 목록이다 — 최근 회차 미달 세대(청약 미달이지 미판매·
계약 결과가 아니다)와 시군구 미분양 추이. 그 뒤 선착순 판매 여부는 모른다(meta.disclosures).
**브랜드명(자이·래미안)으로 공고 개수를 세는 질문은 이 도구가 아니다** — realty_notice_facts(keyword).
NameRequiredDescriptionDefault
sortNosites 정렬shortfall
viewNosites=무순위 청약 미달 단지 목록(최근 회차 △N, since는 최근 회차 월)companies
groupNo순위 모드의 묶음 단위시공사
sinceNo본공고 공고월 하한 YYYY-MM(기본 2024-07)2024-07
top_nNo회사를 안 줬을 때 순위 모드의 행 수(공급 세대 내림차순) (허용 범위 1~50)
regionNo시도로 좁힌다(예: '대전', '경기') — 시군구는 받지 않는다
builderNo시공사명(부분일치, ㈜·주식회사 무시, '지에스건설'→GS건설 같은 별칭 흡수). 주면 그 회사 행 + 현장 목록
developerNo시행사(사업주체)명(부분일치). builder와 같이 주면 그 시행사와 한 현장만 남긴다
min_shortfallNosites: 최근 회차 미달 세대 하한 (허용 범위 0~100000)

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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양도세 계산 — 선언된 양도·취득·보유에 세율표 적용, 합산/연도분산/차손통산 비교A
Read-onlyIdempotent
Inspect

선언된 양도가·취득가·필요경비·보유기간에 양도소득세 세율표를 결정론으로 적용한다 — 기본·단기·분양권 세율, 장특공제 표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를 함께 전하라.
NameRequiredDescriptionDefault
share_pctNo본인 지분율(%, 공동명의면 예: 50). 양도세는 인별 과세라 본인 지분만 계산하고 기본공제 250만원도 각자 받는다 — 배우자 몫은 배우자 지분으로 따로 호출하라. 두 자산 모두에 같은 지분을 적용한다 (허용 범위 0 초과~100)
asset_typeNo자산 종류 — 단기세율·장특공제가 갈린다. 분양권은 보유 2년이 넘어도 60%다. 비사업용토지=기본세율+10%p(제104조①8호). 부동산취득권리=분양권·입주권 외 권리(관리처분인가 전 예비조합원 지위 등) — 장특 없음주택
holding_yearsYes보유기간(년, 소수 허용 — 예: 1.5). 취득일~양도일이며 상속·증여 기산 특례는 사실판단이라 호출자가 확정해 선언한다 (허용 범위 0~100)
transfer_yearYes양도(예정) 연도. 2027 이후는 계류 중인 세제개편안이 결과를 뒤집을 수 있어 응답에 실토가 붙는다. 2025 이전 과거 양도는 당시 규칙(중과 유예 등)이라 다루지 않는다 (허용 범위 2026~2035)
asset2_asset_typeNo두 번째 자산의 종류주택
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지
transfer_price_10kYes양도가액(만원, 예: 90000=9억). 예정이면 예상 매도가를 선언
asset2_expenses_10kNo두 번째 자산의 필요경비(만원)
asset2_holding_yearsNo두 번째 자산의 보유기간(년) — **transfer_year 기준**이다. 연도분산 시나리오는 이 자산을 다음 해에 파는 가정이라 서버가 보유기간을 +1년으로 다시 계산한다(응답 scenarios.split_years.asset2_recomputed에 실토) (허용 범위 0~100)
multi_home_surchargeNo다주택 중과 **선언** — 양도 시점에 그 주택이 조정대상지역 안이고(현재 지정 현황은 topic=regulated_area) 세대 주택 수가 2/3+인 경우. 주택 수 판정(분양권·입주권 가산, 지방 저가주택 제외)은 사실판단이라 서버가 하지 않는다. 중과 대상인데 그 기간 취득이면 마지막 값=기본세율·장특 배제(소득세법 부칙 제14조)없음
acquisition_price_10kYes취득가액(만원). 증여받은 자산은 이월과세(10년)로 증여자 원취득가가 될 수 있다 — 응답 traps 확인
necessary_expenses_10kNo필요경비 합계(만원) — 취득·양도 부대비용과 자본적 지출만. 도배·싱크대 같은 수익적 지출은 불인정이다(경계·증빙 요건은 topic=capital_gains_tax 원문)
asset2_transfer_price_10kNo두 번째 자산의 양도가액(만원) — 주면 '올해 같이 팔기 vs 내년으로 나누기' 시나리오를 비교한다. asset2_acquisition_price_10k·asset2_holding_years와 함께 줘야 한다
rights_pre_approval_yearsNo위 입주권의 기존건물 취득일~관리처분인가일 기간(년) — 장특 보유기간(시행령 제166조⑤1) (허용 범위 0~100)
asset2_multi_home_surchargeNo두 번째 자산의 중과 선언 — 첫 자산 매도 후 주택 수가 줄어 지위가 달라질 수 있다. 시나리오별 지위 변화도 선언 그대로 쓴다(서버는 판정하지 않는다)없음
asset2_acquisition_price_10kNo두 번째 자산의 취득가액(만원)
rights_pre_approval_gain_10kNo원조합원 조합원입주권만: 관리처분인가 전 양도차익(만원, 종전 평가액−취득가−경비, 시행령 제166조①). 주면 장특 표1을 이 차익에만 적용(제95조②). 승계취득이면 주지 마라

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 실거래 시세 비교A
Read-onlyIdempotent
Inspect

경매 물건의 최저입찰가를 같은 단지 실거래 시세와 대조해 할인율·표면수익률을 낸다. 기본은 오늘 이후 기일 물건만이다(지난 기일이 섞여 나오던 결함 수리, 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(추이).
NameRequiredDescriptionDefault
sidoNo시도 — '서울'처럼 줄여 써도 되고 '서울특별시'도 된다(서버가 정식명으로 편다). 원장 표기는 서울특별시·경기도·부산광역시·세종특별자치시·강원특별자치도 같은 정식명이다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.
limitNo비교할 물건 수 (최대 50) (허용 범위 1~50)
case_noNo특정 사건 하나만 비교할 때 — `2026타경3571` 꼴(연도 4자리 + '타경' + 일련번호). 주면 지역 조건 대신 이 사건만 보고, 기일 제한도 걸지 않는다. 사건번호는 법원 간 중복되니 court_name을 반드시 함께 주라
sigunguNo시군구 — 원장 표기 그대로 넣는다(예: '강남구', '평택시', '기장군'). 특례시·일반구는 '수원시 권선구'처럼 두 토막이다. 시도 이름을 여기 붙이지 마라('서울 강남구'는 안 맞는다) — 시도는 sido로 준다 ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.
court_nameNo법원명 — case_no와 함께 쓴다. 사건번호는 법원 간 유일하지 않아(평균 2.8배 중복) 이걸 빼면 다른 법원 물건이 섞이고 최저가 출처도 확정되지 않는다
usage_nameNo물건 종류 — 이 도구는 같은 단지 실거래와 붙이므로 '아파트'가 기본이다. 오피스텔·다세대·연립주택도 되지만 단지 매칭률이 떨어진다. 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·근린시설·상가아파트
include_pastNo지난 기일 물건 포함 여부 — 기본은 오늘 이후 기일만(입찰 가능 후보). case_no 특정 조회는 이 값과 무관하게 기일 제한이 없다
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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[유료] 지역 비교A
Read-onlyIdempotent
Inspect

[유료] 여러 지역의 매매·전세 시세와 추이를 나란히 비교한다. 갈아타기·투자처 비교용.

"어디가 제일 ○○해?"류 순위·탐색 질문은 무료 realty_region_rankings로 먼저 좁혀라 —
이 도구는 비교 대상이 정해졌을 때 쓴다.

⚠️ 지역별 `warning_baseline`·`warning_dispersion`을 avg_price보다 먼저 읽어라 —
이 소스는 이상치 미필터·단지급 혼합이라 avg_price를 그대로 "그 지역 시세"로 인용하면
특정 단지와의 비교 결론이 뒤집힌다(realty_region_price_stats와 같은 공시다).
NameRequiredDescriptionDefault
monthsNo추이 개월 수 (허용 범위 1~60)
regionsYes비교할 시군구 2개 이상 — 배열(['강남구','서초구']) 또는 쉼표 문자열('강남구,서초구')
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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단지 평형별 매매 실거래 내역A
Read-onlyIdempotent
Inspect

특정 단지·특정 평형의 최근 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`에 **따로** 싣는다(전매가 — 매매 시세 아님).
NameRequiredDescriptionDefault
limitNo개별 거래 내역 수 (허용 범위 1~50)
sinceNo이 날짜(YYYY-MM-DD, 31일 전까지) 이후 바뀐 것만 — 예약 실행에서 '어제 이후'면 since=어제. 기준·지연은 응답에
regionNo동명 단지 구분용 시군구명 (예: 마포구)
compareNo단지 2~5개(complex_key·단지명 배열)를 같은 면적으로 나란히 — 면적 필수. 행마다 실제 면적 범위·거래 수가 다르니 함께 전하라. 단지 간 평균·순위는 없다. 단지 수만큼 한도를 쓴다
questionNo(선택) 이 조회를 하게 된 사용자 질문 한 문장 — 맞는 다른 축·도구를 question_routing으로 돌려준다. 이름·연락처는 빼라
complex_keyNo정확한 단지 키 — realty_search_complexes·complex_ambiguous 후보가 돌려주는 complex_key. 주면 이름·지역보다 우선한다. **같은 동에 같은 이름의 다른 단지**(키 끝 '(1995)' 등)는 이름으로는 못 가르므로 이 인자로만 부를 수 있다
complex_nameNo단지명 (예: 마포래미안푸르지오2단지). complex_key를 주면 생략해도 된다
pyeong_supplyNo분양평수(공급면적, **평**) — 사용자가 말하는 '34평'이 보통 이것이다. **㎡로 말했으면 여기가 아니라 area_m2_supply를 쓰라** (허용 범위 0 초과~400)
area_m2_supplyNo공급(분양)면적을 **㎡ 그대로** 받는다(예: 112.8). pyeong_supply와 동시에 주면 거절한다 (허용 범위 0 초과~800)
pyeong_exclusiveNo전용면적 기준 **실평수(평)** — ㎡가 아니다. 전용 84㎡면 25.4를 넣는다. **사용자가 ㎡로 말했으면 area_m2_exclusive를 쓰라** — ㎡ 값을 여기 넣으면 서버가 조용히 환산하지 않고 사유를 대고 거절한다(1평=3.3058㎡) (허용 범위 0 초과~400)
quoted_price_10kNo사용자가 **들은 가격**(호가·중개사 제시가·매물 가격, 만원). 주면 실거래 분포와 대조해 `quote_check`로 돌려준다. 이 서버는 **호가 데이터가 없다** — 실거래(MOLIT)뿐이라 '호가가 비싸다/싸다'를 판정하는 게 아니라 **실거래 어디쯤인지 위치만** 알려준다. 사용자가 가격을 말했는데 이 인자를 안 주면 모델이 그 값을 검증 없이 전제로 삼게 된다
area_m2_exclusiveNo전용면적을 **㎡ 그대로** 받는다(예: 84, 59, 114.98). 사용자가 '전용 84㎡'라고 말했으면 환산하지 말고 84를 여기 넣어라 — 서버가 평으로 환산하고 그 사실을 응답에 적는다. pyeong_exclusive와 동시에 주면 거절한다 (허용 범위 0 초과~500)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지
quoted_prices_10kNo사용자가 **매물 목록에서 복사·다운로드해 온 호가 여러 개**(만원 배열). 값이 2개 이상이면 단일 대조 대신 **호가 분포 ↔ 실거래 분포**를 비교한다(중위 대 중위, 두 구간이 겹치는지). 호가는 사용자가 가져온 것이라 서버는 **출처·수집시점·중복 매물 여부를 모른다** — 그 한계도 함께 응답에 싣는다

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/no-destructive, but the description adds substantial beyond them: transactions are sorted by contract date descending, average/median use the most recent 5 (with summary_basis echoing those), outliers are flagged not removed with rationale in outliers.method, floor bands include *_ex_outliers variants, and presale rights are separated into presale_rights_trades. It also discloses refusal behavior for mixed units and that name-based complex isolation is logged in meta.complex_isolation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sibling routing before the detailed mechanics, which is good structure for a 14-parameter tool. It is long and occasionally overlaps with schema text (unit conversion rules appear in both), but nearly every sentence carries a behavioral rule or guardrail; only minor trimming would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 — and it does: price_by_floor_band with average, count, and premium vs lowest band; per-transaction fields; outlier and *_ex_outliers parallel values; summary_basis; meta.complex_isolation; quote_check; presale_rights_trades. An agent knows what to expect and how to phrase results without a return schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage the baseline is 3, but the description adds genuine strategy beyond the schema: convert nothing client-side (server converts ㎡↔pyeong), map user units to the correct parameter, reject quoted-prices-only assumptions by noting the server has no asking-price data (MOLIT only), and explain compare requires an area and consumes limit per complex. This meaningfully supplements the structured schema rather than repeating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: per-complex, per-pyeong, last 6 months of sale transactions with contract date, floor, price at the transaction level. It explicitly distinguishes itself from realty_search_complexes (prices_by_area), realty_region_price_stats (multi-complex/floor decomposition/longer windows), and realty_complex_rent_by_pyeong (rent). An agent can route correctly 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use rules for every adjacent case: summary-only → search_complexes prices_by_area; multi-complex floor breakdown or >6-month window → region_price_stats; rent → rent_by_pyeong. It also gives a fallback behavior (call without area if pyeong unknown) and states what not to do (don't guess pyeong, don't mix ㎡ into pyeong params).

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단지 평형별 전월세 시세A
Read-onlyIdempotent
Inspect

단지의 평형별 전세 보증금·월세 중앙값을 조회한다. 전세가율(전세÷매매)의 전세 축이다.

complex_key·complex_name 중 하나는 필수. 부분일치는 동명 단지가 섞일 수 있으니
가능하면 realty_search_complexes로 complex_key를 먼저 특정하라.
행 키 supply_pyeong은 **분양평**(전용㎡ ÷ 3.3058 ÷ 0.745 반올림) 기준이다.
NameRequiredDescriptionDefault
regionNo동명 단지를 가르는 지역 — 시군구나 **동**까지(예: '강동구', '방화동'). complex_ambiguous가 돌아오면 이 인자로 좁혀 다시 부르라
complex_keyNo정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key
compare_saleNo같은 12개월 창의 **매매가를 함께 뽑아 전세가율·전월세 전환율·갭을 계산**한다(기본 켬). 종전엔 note가 '매매를 period_months=12로 따로 불러 나눠라'라고만 지시해 호출자가 손으로 했고, 창을 안 맞추면 전세가율이 수 %p 왜곡됐다 — 그 계산을 서버가 진다
complex_nameNo키를 모를 때 단지명 부분일치
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4/5.0
Behavior4/5

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; the description still adds real value by disclosing that compare_sale makes the server compute jeonse ratio, conversion rate and gap over a matched 12-month window, and that footnotes toggle full derivation text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs, purpose stated first, then the key-resolution rule, then the row-key caveat. Content earns its place; the historical aside about the old note could have been trimmed but it justifies compare_sale's default.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 does name the row key and its basis, but it does not enumerate the remaining return fields (deposit/rent medians, footnotes structure). Adequate for an open-world read tool whose annotations already carry the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 a constraint the schema lacks — both key fields are nullable with no required list, yet one of complex_key/complex_name is mandatory — and explains the supply_pyeong row key is 분양평 via a specific formula.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: median jeonse deposit / monthly rent per pyeong for a complex. The line "전세가율(전세÷매매)의 전세 축이다" implicitly marks it off from the sale-price sibling realty_complex_pyeong_price, though that sibling is never named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition (complex_key or complex_name is mandatory) and routes the agent to realty_search_complexes to resolve the key first, plus the region fallback when complex_ambiguous comes back. Missing only an explicit when-not / 'use the sale-price tool instead' clause.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_complex_report[유료] 단지 통합 리포트A
Read-onlyIdempotent
Inspect

[유료] 단지 하나의 시세·전세·기본정보를 통합 조회한다.

입지는 **location.facts(원시값)로 답하라** — 최근접역 이름·직선거리, 반경 500m·1km 안
정류장·병원·마트 수와 1km 안 초·중·고 수를 poi 원장에서 직접 센 값이다. location.overall_score·scores는
미검증 참고값이라(location.score_demotion) 순위·비교·'입지 좋음' 판정에 쓰지 마라.
응답에 좌표(latitude/longitude)와 complex_key가 들어 있다 — 이어서
realty_poi_nearby(시설 목록)·realty_predict_price(예측)에 그대로 넣어 심층 분석하라.
NameRequiredDescriptionDefault
nameNo단지명 (예: 반포자이)
complex_keyNo정확한 단지 키

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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인구통계 (인구·가구·연령·인구이동)A
Read-onlyIdempotent
Inspect

지역 인구·가구·고령화·순유입 통계를 조회한다.

지역 인구통계를 조회한다 — "인구 줄고 있어?", "1인 가구 비율은?", "고령화 심해?",
"순유입 되는 동네야?"류 질문용.

응답 meta.data_as_of가 실제 최신 시점이다 — warning이 있으면 그대로 사용자에게 전달하고,
밀린 수치를 "지금 인구"로 단정하지 말 것. 연간 계열(households·age)은 기준연도를 밝혀라.
households는 동명 시군구(중구·서구 등)에 시도를 붙여야 한다('서울특별시 중구') — 원천은 단명으로
적지만 행정코드로 구를 가른다. 시도 없이 '중구'만 주면 후보와 retry를 돌려준다.
NameRequiredDescriptionDefault
metricYespopulation=월별 인구·세대수 / households=연별 가구원수별 가구(1인가구 등) / age=연령대(5세 구간) 분포·고령화 — 시도 단위만 / migration=월별 전입·전출·순이동
monthsNopopulation·migration 시계열 창(개월) — 최대 60(5년)이고 더 긴 창은 이 도구로 못 받는다. 연간 계열엔 미적용 (허용 범위 1~60)
regionYes시도(예: 서울)나 시군구(예: 강남구, 수원시). age는 시도 단위만 제공. age에 한해 '전국'도 가능
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.2/5.0
Behavior5/5

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 behavior beyond them: meta.data_as_of is the true freshness anchor, warnings must be relayed verbatim, stale figures must not be presented as current, annual series need their reference year stated, and ambiguous district names trigger a candidates-plus-retry flow. This is unusually rich operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and usage examples are front-loaded and the operational caveats follow logically. There is mild redundancy between the opening line and the second paragraph's restatement of '지역 인구통계를 조회한다', which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers freshness fields (meta.data_as_of), warning handling, annual vs monthly semantics, and the region-naming failure mode, which is enough for an agent to call it correctly. Return-shape detail beyond the timestamps is limited but acceptable for a read-only statistics tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 the schema lacks: the province-prefix requirement for same-named districts ('서울특별시 중구') and what happens when it is omitted. It also reinforces the monthly-vs-annual distinction that the months parameter only partially conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource domain: regional population, households, aging, and net-inflow statistics, plus concrete example questions that pin the domain. It is clearly distinct from sibling tools like realty_region_price_stats or realty_macro_indicators, but it never names a sibling or explicitly excludes adjacent tools, so it falls short of the top tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The example questions ("인구 줄고 있어?", "1인 가구 비율은?", "순유입 되는 동네야?") give clear usage context and map directly to the metric enum values. There is no explicit when-not guidance or named alternative tool, which keeps it below a 5.

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경매 사건 상세 조회A
Read-onlyIdempotent
Inspect

사건번호로 경매 물건의 상세를 조회한다.

재매각 사건의 입찰보증금처럼 **사건마다 다른 매각조건** 질문도 사건을 특정하는 여기서 시작한다.
사건번호는 법원 간 유일하지 않다(전국 평균 2.8개 법원에서 중복). court_name을 생략하면
중복 시 오류와 함께 후보 법원 목록이 돌아오니, 그걸 보고 법원을 지정해 다시 호출하라.

`rights` = 매각물건명세서 핵심(최선순위 설정·인수되는 권리 원문·위험 플래그·배당요구종기).
`rights` 자체는 법원 공시의 전달이다 — 답할 때 rights.disclaimer를 함께 전하고, 등기부·임차인
현황 전체가 아님을 밝혀라. 규칙으로 판정한 권리분석(말소기준·인수/소멸·대항력)이 필요하면
`rights_analysis=true`(원장만) 또는 realty_auction_rights_analysis(등기부·임차인 입력)를 써라. 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`다.
NameRequiredDescriptionDefault
case_noYes사건번호 — `2026타경3571` 꼴이다(연도 4자리 + '타경' + 일련번호 1~6자리). 원장 전수가 '타경' 접두이고 '2024타경101026'처럼 6자리도 있다. '2026-3571'처럼 하이픈으로 써도 서버가 '타경'으로 펴고 무엇을 폈는지 응답에 적는다. 다만 '3571'처럼 **연도가 없으면 못 편다**(연도를 지어내면 다른 사건이 된다) — 사용자에게 연도를 물어라
questionNo(선택) 이 조회를 하게 된 사용자 질문 한 문장 — 맞는 다른 축·도구를 question_routing으로 돌려준다. 이름·연락처는 빼라
court_nameNo법원명 — '서울동부지방법원'·'인천지방법원'처럼 정식명으로 넣는다('진주지원'처럼 지원명만인 행도 있다). '의정부지법'처럼 줄여 넣어도 서버가 정식명으로 편다. 사건번호는 법원 간 유일하지 않아(전국 평균 2.8개 법원에서 중복) 생략하면 후보 목록이 돌아온다. **여기 넣은 법원에 그 사건이 없으면 서버가 법원 없이 한 번 더 찾아보고**, 그래도 없으면 원인 셋(표기·법원·수록범위)을 갈라 돌려준다
market_contextNo기본 true — 같은 단지(빌라는 같은 동·면적대) 시세 대비 비율과 지역 낙찰가율을 `market_context`로 함께 싣는다(+2~4초). 사건 정보만 필요하면 false
rights_analysisNotrue면 **이 물건 낙찰받으면 뭘 떠안나**를 법원 원장(매각물건명세서)만으로 돌린 권리분석을 `item.rights_analysis`로 붙인다 — 말소기준권리·인수/소멸·명세서에 적힌 임차인의 대항력·우선변제·최우선변제·보류 항목. 등기부등본 권리 목록이나 임차인 정보를 넣어 돌리는 분석은 realty_auction_rights_analysis 몫이다

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe, idempotent read (readOnlyHint, idempotentHint, destructiveHint=false), so the description is judged on added runtime behavior. It delivers real value: the cross-court case-number collision (avg 2.8 courts) with the candidate-list error path, court-omission retry semantics, rights=null meaning 'not yet collected' rather than 'no encumbrances', the claim_amt_10k trap (applicant's claim, not tenant deposit), and stale min_bid when min_bid_source=item_list. These are genuine behavioral disclosures beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and per-case-condition cue, then organized into labeled concerns (rights, claim amount warning, min_bid warning, axis positioning). It is on the long side and the closing '이 축의 자리' paragraph partly repeats routing already implied earlier, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 return-value burden and does: it enumerates rights fields (priority setup, assumed rights, risk flags, dividend deadline), rights.disclaimer requirements, rights_note on null, market_context content and its +2-4s cost, and min_bid_note. An agent knows what will come back and how to phrase it to the user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 case_no format, the court_name fallback/retry, market_context latency cost, and rights_analysis scope in detail. The description restates the court-omission fallback and the rights_analysis split, adding framing but little syntax or semantics 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.

Purpose5/5

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 (retrieve auction item details by case number) and the description explicitly contrasts itself with realty_search_auctions (multi-result scanning), realty_auction_history (bid history/price drops/photos), realty_auction_rights_analysis (registry-based analysis), and fetch (document-form vs structured fields). An agent can route to the correct sibling 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names concrete usage conditions: start here for per-case sale conditions such as re-auction deposit ratios; use rights_analysis=true for ledger-only analysis versus realty_auction_rights_analysis when registry/tenant data must be supplied; omit court_name only to trigger the candidate-list error path and re-call with a court. Alternatives and exclusions are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_invest_risk[유료] 지역 투자위험 분석A
Read-onlyIdempotent
Inspect

[유료] 지역의 투자 위험도를 변동성·유동성·공급압력 축으로 점수화한다.

응답의 disclaimer(통계 요약이며 투자 권유 아님)를 사용자에게 반드시 함께 전달하라.
NameRequiredDescriptionDefault
regionYes시군구명 (예: 강남구)

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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쓸 수 있는 대출 상품 나열 — 용도×지역×주택수 교차 판정A
Read-onlyIdempotent
Inspect

내 조건에서 쓸 수 있는 대출 상품을 상품별로 나란히 판정한다.

**"내 조건이면 어떤 대출을 쓸 수 있나"**를 상품별로 나란히 낸다 — 사용자가 어느 규칙 토픽을
물어야 할지 몰라도 되게 하는 라우터다.

이 도구가 존재하는 이유: 대출 규칙이 상품별 토픽 7곳에 흩어져 있어서, 지금까지는 **호출자가
어느 토픽을 물어야 할지 알아야** 했다(2026-08-14). 용도·지역·주택수만 주면 **쓸 수 있는 상품과
못 쓰는 이유**를 함께 낸다.

경계: ① **주택 수·생애최초·신혼은 선언**이다(서버가 사실판정하지 않는다) ② **한도 금액을
계산하는 건 구입 목적의 은행권뿐**이고 그건 realty_loan_limit이 한다 — 이 도구는 **자격 대조와
라우팅**이다 ③ 전세·중도금은 보증기관·사업장이 지배해 **한도를 계산하지 않는다**, 전세반환은
**경과조치 해당 여부가 서류로 보는 사실판단**이라 계산하지 않는다 ④ 규칙의
근거·불확실성은 각 상품 토픽(응답의 `topic`)에 있으니 함께 읽어라.
NameRequiredDescriptionDefault
regionNo소재지(시군구까지, 예: '서울 마포구'·'세종특별자치시') — 수도권·규제지역 판정에 쓴다
purposeYes자금 용도 — **같은 담보라도 용도가 규제를 가른다**(구입=LTV·가액구간 한도, 생활안정=1억 한도·다주택 금지, **전세반환=세입자에게 보증금 돌려주는 목적(퇴거자금) — 원칙 1억이지만 6·27 이전 계약분 경과조치가 붙는 유일한 축**, 전세=세입자로 들어갈 때 쓰는 전세자금대출, 중도금=집단대출). ⚠️ **'전세'와 '전세반환'을 섞지 마라** — 방향이 반대다. 모르면 물어라
homes_ownedNo**세대 기준** 보유 주택 수(선언) — 0=무주택, 1, 2+=다주택. 명의가 갈려도 세대로 센다. 서버는 주택 수를 판정하지 않는다 (허용 범위 0~9)
is_newlywedNo신혼 해당 여부(선언)
is_first_timeNo생애최초 해당 여부(**선언** — 서버는 판정하지 않는다)
house_price_10kNo대상 주택 가격(만원) — 정책상품 가격요건 대조에 쓴다
total_assets_10kNo순자산(만원, 자산−부채 — 부채가 더 많으면 음수) — 버팀목·디딤돌 자산 요건은 **순자산가액** 기준이다. **버팀목 전세는 자산 요건이 핵심 관문**이라 전세 문의면 받아라
annual_income_10kNo부부합산 연소득(만원) — 정책상품 소득요건 대조에 쓴다

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 (선언 조건 기준)A
Read-onlyIdempotent
Inspect

선언한 조건으로 주택담보대출 규제 상한을 결정론으로 계산한다.

선언된 조건(지역·시가·차주 유형·소득)에 대해 **주담대 규제 상한**을 결정론으로
계산한다 — 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를 사용자에게 함께 전하라.
NameRequiredDescriptionDefault
lenderNo업권 — DSR 한도가 은행 40% / 제2금융권 50%로 갈린다은행
regionNo주택 소재지(시군구까지, 예: '서울 마포구'·'성남시 분당구'·'부산 해운대구'). 규제지역·수도권 판정에 쓴다. 해석이 모호하면 후보를 돌려주니 is_regulated·is_metro로 직접 선언해도 된다
borrowerYes차주 유형 — **사용자 선언**이다(서버는 생애최초·주택 수를 판정하지 않는다). 생애최초=본인·배우자 모두 주택 소유 이력 없음, 1주택_처분조건부=6개월 내 기존주택 처분 약정, 서민실수요=우대 요건 충족을 선언한 경우
is_metroNo수도권(서울·경기·인천) 여부 직접 선언 — region 대신/우선 적용
rate_typeNo주담대 금리유형 — **스트레스 금리 적용비율이 갈리는 축이다**(변동 100%, 혼합형·주기형은 고정기간 비중별 차등, 순수고정 미적용). 기본값 '변동'은 최악 가정이라 한도가 가장 작게 나온다. 사용자가 상품을 안 정했으면 응답의 by_rate_type 비교표를 함께 전하라. 혼합형=고정기간 후 변동, 주기형=N년 주기로 금리 재산정, 순수고정=만기까지 고정변동
is_regulatedNo규제지역(투기과열·조정대상) 여부 직접 선언 — region 대신/우선 적용
stress_stageNo스트레스 금리 단계 가정. 기본 '현행'. **지방(비수도권 비규제) 주담대만** 갈린다 — 지방은 2026-12-31까지 한시 2단계(0.75%p)이고 이후 연장 여부는 미정이다. '3단계'를 주면 유예가 끝나 3단계(1.5%p×적용비율 3단계)가 그대로 적용되는 가정으로 계산한다. 수도권·규제지역은 이미 3단계라 값이 같다현행
credit_loan_10kNo신용대출 잔액 또는 받을 예정액(만원). **직접 연 원리금을 계산해 넣지 마라** — 산정만기 5년 강제·산식 두 갈래·스트레스 1억 문턱이 전부 함정이라 서버가 계산한다. existing_annual_debt_payment_10k와 함께 주면 둘 다 합산한다
house_price_10kYes주택 시가(만원 단위, 예: 100000=10억). 가액구간 한도가 '시가' 기준이라 분양가·공시가가 아닌 시세를 넣는다
loan_term_yearsNo희망 만기(년). 수도권·규제지역은 30년 상한으로 조정되며 조정 사실을 응답에 싣는다 (허용 범위 1~50)
desired_loan_10kNo받으려는 주담대 금액(만원). 주면 '이만큼 되나'를 판정하고, DSR에 막히면 **무엇을 얼마나 바꾸면 들어가는지**(금리유형·만기·신용대출 축소·금리)를 함께 낸다. '4억 받으려는데 되나요'류 질문의 자리 — 최대치만 받아 모델이 역산하게 두지 마라. credit_loan_rate_pct를 함께 주면 **이 주담대를 먼저 받은 뒤 남는 신용대출 추가 여력**(desired.credit_room_after_mortgage)까지 계산한다 — credit_loan_10k를 주면 그 잔액을 기존 신용대출로 보고 추가분만 센다
rate_fixed_yearsNo혼합형의 고정금리 기간 또는 주기형의 금리변동주기(년). 미지정이면 시중은행 통상인 5년으로 가정하고 가정 사실을 응답에 싣는다. 변동·순수고정에는 무의미 (허용 범위 0~50)
annual_income_10kNo연소득(만원) — interest_rate_pct와 함께 주면 DSR 상한 대출액까지 계산
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지
interest_rate_pctNo약정금리 가정(%, 예: 4.2) — DSR 계산에 필요. 없으면 DSR 금액 계산은 생략된다 (허용 범위 0 초과~20)
credit_loan_rate_pctNo신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수다(이자 없이는 원리금을 못 낸다) (허용 범위 0 초과~20)
existing_annual_debt_payment_10kNo기존 대출의 연간 원리금 상환액 합계(만원) — DSR 계산에서 차감

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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단지 입지 원시값(역 거리·주변 학교·정류장 수) + 참고 점수A
Read-onlyIdempotent
Inspect

단지 입지를 원시값으로 답한다 — "역세권이야? 학군 어때? 병원 가까워?" 담당.

**답은 행마다 맨 앞의 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.
**거주 후기·평판("살기 좋대?"·"주민들 평 어때?")은 이 데이터에 없다** — 시설 개수는 평판의
대용이 아니니 그런 질문에는 이 도구를 부르지 말고 데이터에 없다고 답하라.
NameRequiredDescriptionDefault
regionNo지역명 — 단독이면 지역 집계+상위 단지, complex_name과 함께면 검색 범위
complex_keyNo정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key
complex_nameNo단지명 일부 (부분일치)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 시계열)A
Read-onlyIdempotent
Inspect

한국 기준금리·KOSPI·M2, 미 연준금리·S&P500 등 거시 지표의 월별 시계열을 조회한다. "금리가 집값에 어떤 영향?"류 배경 분석용.

⚠️ 계열마다 신선도가 다르다 — 원천·공표 주기가 달라 최신 달이 계열마다 갈린다(예: M2는
공표가 한두 달 늦다). 계열별 실제 최신 시점은 응답 meta.series_as_of가 정본이다 — 이 설명에
날짜를 적지 않는다(적힌 날짜는 낡는다). 밀린 계열을 "지금 금리"로 인용하지 말고 반드시
그 계열의 시점을 함께 밝혀라.
NameRequiredDescriptionDefault
monthsNo최근 몇 개월치 (허용 범위 1~240)
indicatorsNo쉼표 구분 지표명: bok_base_rate(한국 기준금리 %), kospi(월말 종가), korea_m2(M2 평잔·원계열, 조원), fed_rate(미 연준금리 월평균 %), us_m2(미 M2 계절조정 $B), sp500, btc_usd, eth_usd(월말 종가). 비우면 전체. 목록에 없는 이름은 거절한다(조용히 버리지 않는다)

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial non-obvious behavior beyond the readOnly/idempotent annotations: publication cadence differs per series, the latest month varies by series (M2 lags one to two months), and meta.series_as_of in the response is the authority rather than any date in the description. This is exactly the kind of operational caveat 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, then the freshness warning, which earns its length given the real risk of misquoting a lagged series. Slightly verbose in restating the no-hardcoded-dates rationale, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully points at meta.series_as_of but does not otherwise describe the returned shape (e.g., date/value structure). For a two-param, read-only, default-everything tool with full schema coverage, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the schema already enumerates every indicator key, units, the 1~240 month range, and the reject-unknown-names behavior. The description 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — retrieving monthly time series for named macro indicators (한국 기준금리·KOSPI·M2, 미 연준금리·S&P500). It is distinguishable from trend/market siblings by being macro-level and cross-country, though it never names a sibling tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use context ('금리가 집값에 어떤 영향?'류 배경 분석용) and concrete do/don't guidance about freshness — don't quote a lagged series as the current rate, always state the series' as-of point. No explicit alternative-tool routing, 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_market_signals[유료] 시장 신호 (미분양·심리지수)A
Read-onlyIdempotent
Inspect

[유료] 미분양 추이와 시장심리지수를 한 번에 조회한다. 매수 타이밍 판단의 거시 신호. 준공후 미분양(unsold_completed, 지역 합계)도 같은 모양으로 싣는다. sigungu를 주면 시군구 미분양 추이(unsold_sigungu)를 별도 키로 덧붙인다.

기본 창은 **6개월**이다(방향 판단에 필요한 최소). 더 긴 추이가 필요하면 months를
올리되, 전국 조회에서 창을 넓히면 오래된 달부터 예산에 맞춰 떨어지고 그 사실이
meta.truncated·meta.truncated_note에 값으로 실린다 — region을 지정하면 전 창이 온다.
NameRequiredDescriptionDefault
monthsNo시계열 개월 수 (기본 6). 전국(region 미지정)에서 창을 넓히면 시도 18곳×월 행이 곱으로 늘어 응답이 도구 결과 한계에 걸린다 — 긴 창이 필요하면 region으로 지역을 좁혀라 (허용 범위 1~36)
regionNo지역명 (예: 서울). 비우면 전국
sigunguNo시군구명 (예: 창원시·수원시·중구). 주면 그 시군구의 미분양 추이를 unsold_sigungu에 **따로** 싣는다 — 시도 배열(unsold)과 합산하지 마라(이중계상). 같은 이름이 여러 시도에 있으면(중구·동구 등) region으로 시도를 함께 줘라. 심리지수·준공후 미분양은 시도 단위라 시군구로 안 좁혀진다
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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조)A
Read-onlyIdempotent
Inspect

투기과열지구 정비사업 물건을 지금 사면 조합원 지위를 승계받는지 판정한다.

투기과열지구에서 재건축·재개발 물건을 **지금 사면 조합원 지위를 승계받을 수 있는지**를
도시정비법 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를 함께 전하라.
NameRequiredDescriptionDefault
regionNo사업장 소재지(시군구까지, 예: '서울 용산구'·'성남시 수정구') — 투기과열지구 판정과 (서울이면) 단계 자동 조회에 쓴다. 모호하면 후보를 돌려주니 is_speculation_zone을 직접 선언해도 된다
project_nameNo사업장·구역 이름(예: '한남3구역') — 서울이면 정비사업 목록에서 진행 단계를 자동으로 잇는다(유일 매치만). 서울 밖은 목록이 없어 project_stage 선언이 필요하다
project_typeYes사업 유형 — 제한 개시 시점이 갈린다(재건축=조합설립인가 후, 재개발=관리처분인가 후). 가로주택·소규모재건축 등 소규모정비사업은 별도 법제라 이 도구가 판정하지 않는다
project_stageNo진행 단계 직접 선언 — project_name 조회 대신/우선 적용. 허용값은 서울 정비사업 목록(정보몽땅)의 실측 어휘 전량이라, **자동 조회가 돌려준 stage를 그대로 다시 넣으면 같은 판정이 재현된다**(예: '철거'·'철거 및 착공'·'추진위구성')
is_speculation_zoneNo투기과열지구 여부 직접 선언 — region 대신/우선 적용
first_approval_application_after_20180125No**재개발 부칙 선언** — 이 구역의 최초 사업시행계획인가 신청이 2018-01-25(법률 제14943호 시행일) 이후인가. 이전이면 관리처분인가 후에도 지위양도가 가능하다(서울 22개 구역 실재). 모르면 비워두라 — 서버가 미확인으로 실토한다

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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입주 예정 물량 — 입주장 리스크A
Read-onlyIdempotent
Inspect

지역의 입주 예정 물량을 연월별로 집계한다.

지역의 입주 예정 물량을 연월별로 집계한다 — "○○ 입주장 리스크 있어?", "내년에
입주 물량 얼마나 쏟아져?"류 질문용. 입주 몰림은 전세가 하락·역전세 압력 신호다.
**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을 이어서 부르거나 include_pipeline=true로 함께 받아라** —
사업승인은 났지만 아직 공고 안 난 물량이 거기 있다(세종 실측: 이 도구 676세대 →
파이프라인 3,483세대). 단 **두 축의 세대수를 더하지 마라**(이중계상) — 공고가 난
단지는 승인 목록에도 남아 양쪽에 다 잡힌다. 파이프라인 쪽 값이 상위 집합에 가깝다.
NameRequiredDescriptionDefault
to_ymNo조회 창의 **끝** 월, YYYYMM 6자리(기본 from_ym+36개월). months와 같은 축이라 둘 중 하나만 준다
monthsNofrom_ym부터 **앞으로 몇 개월**을 볼지 — to_ym 대신 쓰는 간편 인자(예: 24). **뒤로 세지 않는다** — months=12만 주면 from_ym이 이번 달이라 '앞으로 12개월'이 되고, '최근 12개월'을 원했다면 from_ym을 12개월 전으로 함께 줘야 한다. to_ym과 함께 주면 오류다(둘 중 하나만) (허용 범위 1~120)
regionNo**시도만** (예: 서울, 경기, 세종, 부산). 시군구('강남구')는 sigungu에 넣어라 — region에 넣으면 서버가 sigungu로 옮겨 조회하고 그 사실을 meta.unapplied_conditions에 적는다(시군구 어휘에 없는 이름은 옮기지 못하고 역시 거기 적는다). realty_supply_pipeline의 region은 시군구·동도 받는다 — 두 도구의 계약이 다르다
from_ymNo조회 창의 **시작** 월, YYYYMM 6자리(예: 202508). 생략하면 **이번 달**이라 창이 전부 미래가 된다 — 이 도구의 기본 방향은 '입주 **예정**'이라서다. **'최근 N개월'·'지난해'처럼 지나간 물량을 물었으면 여기를 과거로 줘라**: 최근 12개월 = from_ym='202508' + months=12, 작년 한 해 = from_ym='202501' + months=12. 과거 조회도 그대로 된다(원장은 2020-02 공고분부터)
sigunguNo시군구 정확한 이름 (예: 수원시, 강남구)
include_pipelineNotrue면 **아직 모집공고 전인** 예정 공급(사업계획승인 기준 — realty_supply_pipeline과 같은 값, 같은 지역·같은 창)을 `pipeline`에 함께 싣는다. 두 축은 더하지 마라(이중계상)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/idempotent safety; the description adds the substantive behavioral facts: the default window points forward from today, the dataset is a lower bound because notices precede move-in by ~30 months, and meta.window_direction / reading.interpretation must be honored in conclusions. The 세종 2028~2030 undercount incident concretely demonstrates the failure mode, and the no-double-counting rule between the notice and pipeline axes is stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence '지역의 입주 예정 물량을 연월별로 집계한다' is duplicated verbatim as the first two lines, and the window-direction warning is restated in both the description body and the from_ym/months schema text. The content is valuable and the core routing is front-loaded, but a third of the text is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 surfaces the response fields an agent actually needs — by_sido, reading.interpretation, coverage.region_recent_annual_rate, meta.window_direction — along with the interpretation rule and the cross-tool follow-up. Nothing needed to call it correctly or read it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter descriptions already carry much of the window-direction and to_ym/months exclusivity detail, so the description largely reinforces rather than originates that. It does add genuine semantics beyond the schema — the region-vs-sigungu contract divergence from realty_supply_pipeline and the double-counting caveat on include_pipeline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — aggregating expected move-in supply (입주 예정 물량) by year-month for a region — and explicitly contrasts its contract with realty_supply_pipeline (region accepts 시군구/동 there but only 시도 here). An agent can route between the two 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the triggering question types ('입주장 리스크 있어?', '내년에 입주 물량 얼마나 쏟아져?'), forbids per-sido loops by pointing to the by_sido response field, and prescribes the fallback (call realty_supply_pipeline or set include_pipeline=true) when the lower-bound reading looks thin. Alternative routing is explicit in both directions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_nonapt_prices비아파트 시세 — 빌라·오피스텔·단독·토지 (아파트는 이 도구가 아니다)A
Read-onlyIdempotent
Inspect

빌라·오피스텔·단독주택·토지의 매매 실거래가를 조회한다(아파트는 이 도구가 아니다).

**아파트는 이 도구가 아니다.** 빌라(다세대·연립)·오피스텔·단독주택·토지 **전용**
실거래 **매매가** 조회다 — 응답 = 최근 거래(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 참조).
경매에 나온 빌라·다세대(지분 물건 포함)의 입찰가를 정할 때 **견줄 실거래 시세**도 여기서 잡는다.
NameRequiredDescriptionDefault
limitNo최근 거래 행 수 (허용 범위 1~30)
regionYes지역명 부분일치 (예: 관악구, 서울특별시 강남구, 강남구 역삼동). **법정동까지 되는 것은 이 도구만이 아니다** — 아파트 축의 realty_region_price_stats·realty_search_complexes도 '강남구 대치동'을 그대로 받는다. 동 단위로 좁히려고 이 도구를 고르지 마라
area_bandNo전용면적대로 좁힌다(빌라·오피스텔만 — 단독주택은 전용면적 개념이 없다). 비아파트는 같은 동네에서도 면적 편차가 커서 지역 평균 하나로는 답이 안 된다. 안 넣어도 stats.by_area_band로 밴드별 분포가 온다
price_maxNo최대 매매가(만원)
price_minNo최소 매매가(만원)
property_typeYesvilla=다세대·연립(빌라), officetel=오피스텔, house=단독·다가구, land=토지. **이 네 값에 아파트는 없다** — 사용자가 아파트를 물었으면 아무 값이나 고르지 말고 이 도구를 부르지 마라(realty_search_complexes·realty_region_price_stats가 그 자리다). 2026-08-23 실측: '강남구 대치동 아파트 최근 실거래가'가 villa로 와 빌라 5건이 아파트로 답해졌다
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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모집공고 팩트시트 — 전매제한·자격·층별 분양가·옵션가·중도금A
Read-onlyIdempotent
Inspect

입주자모집공고 원문에서 추출·검증한 팩트시트를 항목별로 준다.

입주자모집공고 **원문**에서 추출·검증한 팩트시트 — 전매제한·재당첨제한·거주의무·
거주요건, 청약 일정, 층별 분양가표(대지비·건축비·회차별 납부액), 특별공급 배정,
발코니 확장·유상옵션 가격, 중도금 회차 일정, 예비입주자 규칙.

전매제한 기간, 재당첨 제한, 거주의무, 특별공급 자격·배정, 층/타입별 분양가,
발코니 확장비·유상옵션 금액, 중도금 회차와 납부일 — 이 값들을 묻는 질문이 이 도구의
자리다(추정하거나 웹에서 찾을 필요 없이 공고 원문 값이 나온다). 모든 값에 공고 쪽
번호(`p`)가 붙으니 답변에 notice_version(공고 판본)과 쪽 번호를 함께 제시하라.

팩트시트 미추출 공고는 원문 앞쪽(단지 주요정보 표) 텍스트를 unverified_source_text로
준다 — 수치 인용 시 "공고 원문 기준·미검증"을 명시하라. 상세 조항 전문(특공 소득기준,
부적격 처리 등)은 realty_notice_text로 원문 쪽을 직접 읽어라. 여기 없는 값은 지어내지 말 것.

⚠️ 큰 공고는 팩트시트 전체가 도구 결과 한계(64KiB)를 넘는다. 그때 **큰 절부터 떼어**
보내고 `meta.truncated`·`meta.omitted_sections`(절 이름·크기·되부르는 인자)에 그 사실을
적는다 — 뗀 절은 `section='분양가'`처럼 이름을 지정해 전문으로 받아라. **팩트시트에
없다고 공고에 없다고 답하지 마라**(못 봄 ≠ 없음).

`keyword`는 단지명 일부이자 **브랜드**다('자이'·'힐스테이트'): 여러 공고가 걸리면 후보와
**걸린 총 건수(total_matched)**를 준다 — "자이 브랜드 공고 몇 개야?"는 keyword 하나로
여기서 센다(시공사 단위 분양 성적은 realty_builder_presale_record).
NameRequiredDescriptionDefault
keywordNo단지명 일부 (예: '우미린' — 공백 무관 매칭)
sectionNo팩트시트의 한 절만 전문으로 받는다 (예: '분양가층별', '유상옵션', '전매재당첨', '공고개요' — 절 이름은 공고 판본마다 다르니 모르면 비우고 응답의 절 목록을 보라. '공급'은 한 절이 아니라 공고개요·분양가층별 등에 나뉘어 있다). 비우면 전체 — 다만 전체가 도구 결과 한계를 넘으면 큰 절부터 떼어 내고 뗀 절 이름을 meta.omitted_sections에 적는다. 그때 이 인자로 되받아라.
text_matchNotext_query 낱말 처리 — all=모두 포함(기본), any=하나라도all
text_pagesNo원문 쪽 직접 지정('1-3'·'44') — 팩트시트 대신 그 쪽 본문(최대 6쪽). text_query와 택일
text_queryNo**공고 원문 쪽 읽기** — 주면 팩트시트 대신 이 낱말(공백=AND)이 든 원문 쪽을 준다(realty_notice_text와 같은 값). 특공 소득·자산 기준·부적격·계약 유의사항처럼 팩트시트에 없는 세부용. text_pages와 택일
house_manage_noNo공고 관리번호 (realty_presale 응답의 house_manage_no)
text_pages_onlyNotext_query와 함께 true면 본문 없이 일치 쪽 번호+발췌만 — 쪽을 먼저 고를 때

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, open-world behaviour, so the bar is lower. The description still adds real operational context: the 64KiB truncation behaviour, meta.truncated/meta.omitted_sections with re-fetch arguments, the unverified_source_text fallback path, and the requirement to cite notice_version plus page numbers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then the truncation caveat. There is some redundancy — the phrase about extracting/verifying from the original notice is repeated in the opening two paragraphs — and the block is dense, but every remaining sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with no output schema and complex fallback paths, the description covers the important edges: truncation recovery, unverified text warning, citation discipline, and the sibling tools to use for what it lacks. The only gap is that the general shape of a non-truncated response is not described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3. The description goes beyond the schema by clarifying that keyword doubles as a brand token ('자이', '힐스테이트') and returns total_matched, and by explaining section-name variance across notice versions and the text_query/text_pages/text_pages_only interplay.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource — a fact sheet (팩트시트) extracted and verified from the original 입주자모집공고 — and enumerates the exact data it holds (resale/re-win restrictions, per-floor price table, option prices, interim payment schedule). This is clearly distinguishable from realty_notice_text (raw page text) and realty_presale (listing data).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the question types that belong here, routes detailed clause reading to realty_notice_text, routes builder-level sales records to realty_builder_presale_record, and forbids fabrication for values not present. It even states the counting use case ('자이 브랜드 공고 몇 개야?') via keyword.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_notice_text모집공고 원문 쪽 읽기 — 자격 세부·유의사항 전문A
Read-onlyIdempotent
Inspect

입주자모집공고문 원문을 쪽 단위로 읽어 준다.

입주자모집공고문 원문을 쪽 단위로 읽는다 — 팩트시트에 없는 세부(특별공급 소득·자산 기준,
부적격 처리, 계약 유의사항, 옵션 품목 상세)는 이 도구로 원문을 직접 확인하라.
표가 있는 쪽은 pdftotext 특성상 정렬이 깨질 수 있다 — 열 해석이 애매하면 단정하지 말 것.

여러 낱말은 AND로 묶인다('가점제 추첨제'→둘 다 있는 쪽). 0쪽이면 막다르지 않고 낱말별
히트 쪽과 부분일치 상위 쪽을 함께 돌려주니 그걸로 좁혀라(match='any'로 넓힐 수도 있다).
**쪽을 모를 땐 pages_only=true로 먼저 훑어라** — 전문은 한 번에 수만 자다.
전문 응답은 최대 6쪽이고, meta.matching_pages에 일치 쪽 전체 목록이 늘 들어 있다.
NameRequiredDescriptionDefault
matchNo여러 낱말 처리 — all=모두 포함(기본), any=하나라도 포함(넓게 훑을 때)all
pagesNo쪽 범위 직접 지정 (예: '1-3', '44'). **query와 택일이며 함께 주면 거절한다**(error='query_and_pages_conflict') — 종전엔 query를 조용히 버렸다. pages와 함께 준 pages_only는 무의미하므로 무시하고 meta.pages_only_ignored로 실토한다
queryNo찾을 키워드. 공백으로 나눈 낱말을 모두 포함하는 쪽을 찾는다(AND, 공백 무관 매칭) — 예 '가점제 추첨제', '신혼부부 소득'
pages_onlyNo참이면 본문 없이 일치 쪽 번호+발췌만 준다 — 먼저 이걸로 쪽을 고르고 pages로 좁혀 재호출하면 왕복·토큰이 크게 준다
house_manage_noYes공고 관리번호 (realty_presale·realty_notice_facts로 특정)

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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공매 낙찰가율·개찰 결과 통계A
Read-onlyIdempotent
Inspect

공매가 "보통 감정가의 몇 %에 낙찰되나"와 "얼마나 유찰되나"를 실제 개찰 결과로 답한다.

**법원경매의 realty_auction_sale_rate와 같은 이름의 다른 지표다.** 분모가 둘 다
감정가지만 평가 주체·저감 규칙·매물 성격이 달라 **두 %를 한 문장에 섞으면 안 된다**.
"경매 낙찰가율"을 물었으면 어느 쪽인지 확인하라.

**이 축의 자리** — 공매 축 2종 중 통계 쪽이다. 개별 물건과 회차별 최저가는
realty_search_onbid다. 낙찰가율은 재산구분별로 갈라 읽어라(`by_property_type`).

⚠️ **표본은 2026-06-01 개찰분부터 누적이고, 그중 '낙찰' 건만 낙찰가율에 든다.**
범위·행 수는 응답 `sample_period`(`ledger`)가 정본이다 — 고정 기간이 아니다.
낙찰 외 행은 유찰·취소·개찰중이다. `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`를 함께 전하라.
NameRequiredDescriptionDefault
sidoNo시도. **주의: 결과 원장에는 지역 컬럼이 없다** — 물건명 접두에서 되찾은 값으로 거른다(커버리지는 응답의 region_basis에 실린다). ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.
sigunguNo시군구. 물건명에서 시도 다음 한 토막을 뽑은 것이라 '고양시 덕양구'는 '고양시'로만 잡힌다 — 자치구까지 좁히려면 이 원장으로는 안 된다. ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.
usage_nameNo용도 부분일치(대·중·소 3단). 원장 값 예: 주거용건물·아파트·토지·근린생활시설. 표본이 **입찰결과 원장**이라 물건 목록과 어휘가 미세하게 갈린다 — 없는 이름은 거절하며 이 원장의 쓸 수 있는 값을 준다.
property_typeNo재산구분. **이 축을 빼고 하나의 낙찰가율을 말하면 거의 틀린다** — 실측 중앙값이 압류재산 31.6% vs 국유재산 106.3%로 3배 넘게 갈린다.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the read-only annotations: cumulative sample from 2026-06-01, only successful bids enter the ratio, sample_period/ledger is authoritative (not a fixed window), ratio_missing means unknown not zero, median vs inflated mean (386% outlier), and region is parsed from property names with stated coverage (96.1% overall / 90.0% successful bids).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core question and the sibling distinction before the caveats, and the bolded warning blocks are scannable. It is long and repeats the region-coverage point across description and schema, but nearly every sentence carries an actionable constraint for a trap-heavy statistical tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a complex statistics surface, the description supplies the missing return semantics (sample_period, outcome_mix, ratio_missing, median/p25/p75, region_basis) and the sampling caveats an agent needs to interpret and cite results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter is already richly documented, so the baseline is 3. The description adds rationale not in the schema — that omitting property_type yields a near-wrong number (31.6% vs 106.3%) and that region filtering silently drops unparsed rows, pointing back to region_basis.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific question it answers (공매 낙찰가율 and 유찰 rate from actual 개찰 결과) and immediately distinguishes itself from the same-named sibling realty_auction_sale_rate, explaining the denominator/valuation differences. It also positions itself on the 공매 axis against realty_search_onbid.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing instructions: if the user asks about '경매 낙찰가율', confirm which axis is meant; for individual items and per-round minimum prices use realty_search_onbid; read the rate split by property_type. When/when-not and the alternative tool are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_poi_nearby[유료] 주변 입지 분석A
Read-onlyIdempotent
Inspect

[유료] 좌표 주변의 지하철·학교·병원·마트 등 입지 요소를 거리순으로 조회한다.

단지 좌표는 realty_complex_report가 준다. "역세권인가", "초품아인가" 판단용.
최근접역 거리·반경 안 개수만 필요하면 무료 realty_location_scores의 location_facts로
충분하다 — 이 도구는 시설 **목록**(이름별 거리)이 필요할 때 쓴다.
NameRequiredDescriptionDefault
latYes위도 — realty_complex_report의 latitude를 쓰라
lngYes경도
poi_typeNosubway | hospital | school — 쉼표로 조합 가능(예: 'subway,school'), 비우면 전체. 이 3종만 좌표 검색을 지원한다(마트·약국 등은 지역 통계 realty_poi_stats로)
radius_mNo반경(미터) (허용 범위 100~3000)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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[유료] 지역별 인프라 통계A
Read-onlyIdempotent
Inspect

[유료] 시군구별 병원·학교·지하철역 개수 통계를 조회한다. 지역 간 인프라 비교용.

지역 키는 '시도축약 시군구' 2토큰이다(예: '서울 마포구', 세종은 1토큰). 병원·지하철은
수집 범위가 수도권·광역시 중심이라 지방 시군구는 0으로 나올 수 있다 — 0을 "없다"로
단정하지 말고 수집 범위 밖일 수 있다고 말하라.
NameRequiredDescriptionDefault
limitNo(허용 범위 1~50)
regionNo지역명 — 시도는 정식명·축약 모두 받는다(예: 서울, 경상남도 고성군, 경남 고성군, 마포구). 토큰 정확일치라 '남구'에 강남구가 섞이지 않는다. 비우면 전국 전체

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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법령·규제 규범 — 세율표·규제지역·대출·임대차·청약·정비사업 규칙A
Read-onlyIdempotent
Inspect

단지에 종속되지 않는 일반 규범(세율·규제·대출·임대차)을 근거 조문과 함께 준다.

근거 조문·확인일이 붙는다 — 취득세율표,
규제지역 **현재** 지정 현황, 주담대 규제 원표, 개인회생×대출, 주택임대차 갱신(갱신권·
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.
NameRequiredDescriptionDefault
queryNo**자유문으로 토픽을 찾는다** — 어느 topic인지 모를 때 사용자 말을 그대로 넣어라(예: '종부세 얼마부터 내요'→topic='comprehensive_real_estate_tax', '부모님이 보태주는 돈'→topic='gift_tax_and_funding_source', '전입은 빠른데 확정일자가 늦으면'→topic='auction_rights'). topic 없이 query만 주면 **후보 토픽 목록**이 오고, 후보가 하나면 그 토픽 본문까지 함께 온다. topic과 함께 주면 그 토픽을 그대로 주되 다른 후보가 있으면 알려준다. **아무것도 안 걸리면 지어내지 않고 0건이라고 답한다** — 그때는 이 서버에 그 축이 없는 것이니 표를 추측하지 마라
topicNo**어느 표를 볼지 고른다 — 사용자가 쓰는 말로 찾아라.** 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_auction_rights_analysis·금액표=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
sectionNo**토픽의 하위 항목만 골라 받는다** — 미지정이면 종전과 같이 토픽 전체가 온다. 큰 토픽(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

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/non-destructive, but the description adds crucial behavioral context beyond them: it does not make determinations, it surfaces uncertainties and disclaimer, it warns against hardcoding rates, and it explains that applicable_if/exceptions require user confirmation. These are meaningful disclosure points for a reference tool with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it is front-loaded with purpose and then organized around examples, alternatives, caveats, and exclusions. Given the tool's 26-topic scope and the number of sibling calculators it must route away from, the length is largely justified, though some topic-list detail overlaps with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, multi-topic reference tool with no output schema, the description is nearly complete: it explains citations, confirmation dates, uncertainties, disclaimer, non-judgment behavior, and sibling boundaries. It does not fully describe the actual response structure, but it provides enough to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the very detailed query/topic/section descriptions already carry parameter semantics. The tool description itself adds little about how to use these parameters beyond general routing, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: it provides general real-estate regulations (tax rates, regulated areas, loans, leases) with citations, independent of any complex. It explicitly distinguishes itself from calculator and case-analysis siblings, so an agent can tell what belongs here 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete when-to-use examples ("취득세 얼마야?", "갱신권 썼는데 집주인이 팔면?") and explicit when-not-to-use routing to realty_loan_limit, realty_subscription_score, realty_redevelopment_burden, realty_capital_gains_tax, realty_member_transfer_check, and several case-specific tools. Usage is unusually well-scoped for a policy-reference tool.

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)A
Read-onlyIdempotent
Inspect

[유료] 단지의 다음 달 평균 매매가를 평형대별로 예측한다 (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)를 사용자 답변에 반드시 함께 전달하라 —
예측은 참고 지표이지 투자 보장이 아니다.
NameRequiredDescriptionDefault
monthsNo(구버전 호환) 예측 지평은 1개월 고정 — 이 값은 무시되고 응답이 그 사실을 실토한다 (허용 범위 1~12)
complex_keyNo정확한 단지 키 — realty_complex_report가 돌려주는 complex_key
complex_nameNo단지명 (예: 반포자이)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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청약 분양 공고A
Read-onlyIdempotent
Inspect

아파트 청약(분양) 공고를 조회한다 — 분양가·청약 접수 일정·당첨자 발표일·입주 예정·위치. "다음 달 청약 넣을 만한 데 있어?", "○○에 분양하는 아파트 있어?"류 질문용.

**"오늘/지금 접수 가능한 청약"은 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가 공고 원문 값을 쪽 번호와 함께 준다.
NameRequiredDescriptionDefault
limitNo공고 수 — 주택형별 분양가·순위별 일정이 붙어 행이 무겁다. 요청분을 다 실으면 응답이 크기 상한을 넘는 경우 **실제 반환 수를 줄이고 meta.size_capped**에 총계·좁혀 부르는 법을 값으로 싣는다 — 조용히 자르지 않는다 (허용 범위 1~50)
sinceNo이 날짜(YYYY-MM-DD, 31일 전까지) 이후 바뀐 것만 — 예약 실행에서 '어제 이후'면 since=어제. 기준·지연은 응답에
regionNo시도 (예: 서울, 경기, 세종, 부산)
statusNo오늘(KST) 기준 접수 상태로 거른다. **'오늘/지금 접수 가능한', '지금 넣을 수 있는' 질문은 '접수중'이다** — '접수예정'은 아직 못 넣는 것들이다. '다음 달 청약'처럼 앞으로를 묻는 질문만 '접수예정'. 기본 '전체'.전체
keywordNo단지명·공급 주소 부분일치 (예: '우미린', '5-2생활권', '다솜동') — 생활권·동 단위 질의는 이걸로
sigunguNo시군구 정확한 이름 (예: 수원시, 강남구). ⚠️세종은 이 필드가 동·생활권·도로명으로 오염돼 있으니 쓰지 말고 keyword를 쓰라
questionNo(선택) 이 조회를 하게 된 사용자 질문 한 문장 — 맞는 다른 축·도구를 question_routing으로 돌려준다. 이름·연락처는 빼라
upcomingNo⚠️True면 접수 **시작 전**(시작일이 오늘 이후, 오늘 시작 포함) 공고만 — 어제 이전에 시작해 **접수 중인 공고는 여기 없다**. 오늘 넣을 수 있는 것을 찾는다면 status='접수중'을 써라. status와 함께 쓰지 말 것(status가 이것을 대체한다).
notice_kindNo공고 종류. 기본 '본공고'. 무순위(줍줍)·재공급을 물으면 그 값 — status 기본은 접수중+접수예정이고, '접수마감'이면 목록 대신 단지별 회차 이력 집계(몇 번 나왔나).본공고

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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축 비교(공고 원문 축)A
Read-onlyIdempotent
Inspect

이 분양 공고를 같은 시군구·같은 평형의 다른 공고들과 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 — 이 도구는 **공고끼리의 횡단면**이다.
NameRequiredDescriptionDefault
regionNo시도 (예: 경기, 서울, 경남). **시도 분포는 배경일 뿐 결론 근거가 아니다**(D-2026W33-40) — 결론은 시군구·평형대 셀에서 읽어라
keywordNo단지명 일부 (예: '우미린' — 공백 무관 매칭). house_manage_no와 택일이며 여럿이면 후보 목록을 돌려준다
sigunguNo시군구를 원장 어휘 그대로 (예: '천안시 서북구', '평택시', '서울 동작구' — 특별·광역시는 '서울 동작구'처럼 시도 접두가 붙는다). 공고를 지정하지 않고 그 지역 분포만 볼 때 쓴다
house_manage_noNo공고 관리번호 (realty_presale·realty_notice_facts 응답의 house_manage_no, 예 '2026000383')
exclusive_m2_maxNo전용면적 상한(㎡) — 국평만 보려면 85
exclusive_m2_minNo전용면적 하한(㎡) — 국평만 보려면 80. 지정하면 모든 셀에 같은 필터가 걸린다

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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분양 총 소요자금 계산 — 중도금 이자·취득세·층별 총액A
Read-onlyIdempotent
Inspect

분양 한 건의 층별 총 소요자금(분양가·발코니·중도금이자·취득세)을 계산한다.

공고 원문(팩트시트) 기반 **결정론 계산**: 층별 분양가 + 발코니 확장비 + 회차별
중도금 이자(일할) + 취득세(표준세율) = 층별 총 소요자금. "이 분양 실제로 얼마 드나"의
자리다 — 클라이언트마다 손계산하면 입주일 가정 하나로 백만원대가 갈린다(실측 124만원).

경계(신고 #43의 선 그대로): 여기까지가 "공고+세법에서 결정론적으로 나오는 것"이다.
월 상환액·매수 vs 전세 손익분기는 개인 파라미터가 지배하므로 계산하지 않는다 — 전세
시세는 realty_complex_rent_by_pyeong으로 받아 클라이언트가 개인 가정을 얹어라.
자기자금·차주 조건을 **선언**받아 필요 대출액과 규제 상한 통과까지 판정하는 건
realty_presale_funding_plan이 한다. 세율표 자체는 realty_policy_rules가 근거 조문과 함께 준다(중과·감면 등
이 계산이 가정으로 제친 것들이 거기 있다 — assumptions를 반드시 사용자에게 전하라).
NameRequiredDescriptionDefault
keywordNo단지명 일부 (공백 무관)
house_tyNo주택형 (예: '59', '84B') — 생략 시 공고의 주택형 목록을 돌려준다
movein_ymNo입주 년월 YYYYMM 덮어쓰기 — 공고에 입주예정이 없거나 다른 가정을 쓸 때
mid_rate_pctNo중도금 대출 연이율 %(기본 5.0 — 실제 금리는 공고·은행마다 다르다) (허용 범위 0 초과~20)
house_manage_noNo공고 관리번호 (realty_presale의 house_manage_no)
extra_options_krwNo발코니 외 유상옵션 합계(원) — realty_notice_facts의 옵션가에서 골라 넣어라
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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분양 자금 흐름 판정 — 계약금·중도금·잔금 시점별 필요액 × 대출 규제 상한A
Read-onlyIdempotent
Inspect

분양 한 건이 내 자기자금과 대출로 닫히는지 시점별로 판정한다.

공고 하나에 대해 **"내 자기자금으로 닫히는가"**를 결정론으로 판정한다 — 시점별
(계약금→중도금 회차→잔금) 필요액, 잔금 시점의 필요 대출액, 그 대출이 규제 상한
(LTV·가액구간 한도·DSR — realty_loan_limit과 같은 엔진) 안에 드는지, 부족하면
얼마가 부족한지. "이 분양 당첨되면 진행 가능해?"류 질문의 자리다.

경계: ① 차주 유형·소득은 **선언**이다(서버는 판정하지 않는다). ② 판정은 **현행
규제·현재 자기자금 기준**이다 — 잔금 시점(수년 뒤)의 규제·금리·저축 증가는 반영하지
않으며 그 사실을 assumptions에 싣는다. ③ 승인·확약이 아니다. ④ 저축 계획·갈아타기
전략·매수 적정성 판단은 이 도구 밖이다 — 시세 비교는 realty_presale_vs_market,
규칙 원표는 realty_policy_rules. 응답의 assumptions·uncertainties를 함께 전하라.
⑤ 입주시 시세·전세보증금도 **선언**이다 — 선언하면 각각 시세 기준 잔금대출 시나리오
(scenario_at_expected_price)와 전세 잔금 시나리오(jeonse_scenario — 거주의무·대출
병행 불가 게이트)를 병렬로 준다. 서버는 미래 시세·전세가를 추정하지 않는다.
NameRequiredDescriptionDefault
lenderNo업권은행
regionNo규제 판정용 지역 덮어쓰기 — 생략하면 공고 소재지로 판정한다
borrowerYes잔금대출 차주 유형(사용자 선언 — realty_loan_limit과 동일 계약). 계약자 명의 기준으로 선언하라
house_tyNo주택형 (예: '59', '84B')
is_metroNo수도권 여부 직접 선언
movein_ymNo입주 년월 YYYYMM 덮어쓰기 — 공고에 입주예정이 없으면 이걸 안 주는 한 총 소요자금이 계산되지 않아 자금 판정도 못 한다(realty_presale_cost와 같은 계약·같은 이름). 후보는 realty_presale의 move_in_ym
rate_typeNo잔금대출 금리유형 — realty_loan_limit과 동일 계약. 기본 '변동'은 스트레스 금리 전액 가산이라 가장 보수적이다(안 닫힌다는 판정이 유형 때문일 수 있다)변동
floor_zoneNo층 구분(예: '5~9층') — 생략하면 첫 밴드로 계산하고 나머지 밴드 총액을 병기한다
is_regulatedNo규제지역 여부 직접 선언
mid_rate_pctNo중도금 대출 연이율 %(기본 5.0) (허용 범위 0 초과~20)
own_funds_10kYes동원 가능한 자기자금(만원) — 계약금부터 잔금까지 전액 투입 가정으로 계산한다. 0도 유효하다(전액 대출 시나리오 — 계약금 게이트에서 정직하게 걸린다)
credit_loan_10kNo신용대출 잔액·예정액(만원) — realty_loan_limit과 동일 계약(서버가 산정만기 5년 규제식으로 계산한다). 직접 연 원리금을 계산해 넣지 마라
house_manage_noYes공고 관리번호 (realty_presale의 house_manage_no)
loan_term_yearsNo잔금대출 만기(년) (허용 범위 1~50)
rate_fixed_yearsNo혼합형 고정기간 또는 주기형 변동주기(년) — 미지정 시 5년 가정 (허용 범위 0~50)
annual_income_10kNo차주 연소득(만원) — 주면 잔금대출의 DSR 상한까지 반영해 판정한다
extra_options_krwNo발코니 외 유상옵션 합계(원)
interest_rate_pctNo잔금대출 약정금리 가정(%) (허용 범위 0 초과~20)
jeonse_deposit_10kNo입주 시점 예상 전세보증금 선언(만원) — 주면 '세입자 보증금으로 잔금 치르기' 시나리오를 판정한다(거주의무·대출 병행 불가 게이트 포함). 시세 확인은 realty_complex_rent_by_pyeong·region_price_stats(metric=rental)
credit_loan_rate_pctNo신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수 (허용 범위 0 초과~20)
expected_price_at_movein_10kNo입주(잔금) 시점 예상 시세 선언(만원) — 잔금대출 LTV는 실무상 입주시 시세·감정가 기준이라, 선언하면 그 값 기준 판정을 병렬로 준다. 서버는 미래 시세를 추정하지 않는다(선언 없으면 분양가 기준만)
existing_annual_debt_payment_10kNo기존 대출 연간 원리금(만원)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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지역 분양가 추이 — 공고 간 연도별 평당 분양가A
Read-onlyIdempotent
Inspect

같은 지역 분양 공고들의 연도별 평당 분양가 추이를 낸다.

같은 지역 분양 공고들의 **연도별 평당 분양가 추이**를 낸다 — "지금 넣을까,
기다릴까"에서 **기다림의 비용**(다음 공고가 얼마에 나올까)을 정량화하는 축이다.
재당첨 제한이 걸린 결정(분양가상한제 10년 등)에서 특히 판단을 가른다.

기준(답변에 그대로 전달): **공급면적(분양평) 평당 최고 분양가**(만원/평), 발코니
확장·유상옵션 미포함. 연도별 주택형 믹스가 다르면 중앙값이 흔들린다 —
announcements가 1~2건인 연도는 추이로 읽지 말고, 평형대를 고정하려면
exclusive_m2_min/max(국평=80~85)를 써라.

이 축의 자리: 개별 공고의 적정성(분양가 vs 실거래)은 realty_presale_vs_market,
실거래 가격 추이는 realty_region_price_stats — 이 도구는 **분양가끼리의 시계열**이다.
NameRequiredDescriptionDefault
regionNo시도 (예: 서울, 경기, 세종)
keywordNo단지명·공급 주소 부분일치 (예: '고덕', '동탄') — 동네·지구 단위 추이는 이걸로
sigunguNo시군구 정확한 이름 (예: 평택시). ⚠️세종은 오염돼 있으니 keyword를 쓰라
exclusive_m2_maxNo전용면적 상한(㎡) — 국평만 보려면 85
exclusive_m2_minNo전용면적 하한(㎡) — 국평만 보려면 80

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 주변 실거래 시세A
Read-onlyIdempotent
Inspect

청약(분양) 공고의 분양가가 주변 실거래 시세 대비 싼지/비싼지를 주택형별로 계산한다. "이 청약 넣을 만해?", "분양가 적정해?"류 질문의 정량 근거 — 웹검색으로는 못 하는 분양가×실거래 조인 계산이 이 도구의 존재 이유다.

공고 특정: 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.
NameRequiredDescriptionDefault
monthsNo실거래 비교 창(개월) (허용 범위 3~24)
pyeongNo대조할 전용평(정수)을 직접 고른다 — 예: [26]이면 국민평형 84㎡만. 안 주면 **세대수 많은 순 상위 5개** 평형을 자동으로 고른다. comparison_truncated에 빠졌다고 적힌 평형은 이 인자로 되받아 부르면 된다(공시만 하고 길이 없으면 막다른 골목이다)
regionNo시도 (예: 서울, 경기, 세종)
keywordNo단지명·주소 부분일치 (예: '우미린', '5-2생활권', '다솜동')
house_manage_noNorealty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지
include_price_trendNotrue면 같은 지역(공고의 시도·시군구) 분양 공고들의 **연도별 평당 분양가 추이**(realty_presale_price_trend와 같은 값)를 `price_trend`에 함께 싣는다 — '지금 넣을까, 기다릴까'

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description adds substantive beyond-schema behavior: which baseline gap_pct uses (nearby_baseline vs regional average), that regional average is always separately in gap_pct_region_avg, that baseline_divergence flags a large split, and an explicit prohibition on calling something 'expensive' off the regional average when the baselines diverge. It also discloses the candidate-list / multi-call interaction and the truncation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then pivots to notice identification, baseline semantics, and sibling routing in a logical order. It is dense and every section is load-bearing, though a few meta phrasings ('this is the tool's reason for existing', 'a dead end otherwise') could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, zero-required tool with no output schema, the description names the key returned fields (gap_pct, gap_pct_region_avg, baseline_divergence, price_trend, comparison_truncated, footnotes) and explains the two-baseline logic an agent must not misreport. It stops short of a full return-shape description, but the critical interpretation rules are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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: it explains the region+keyword fallback ordering, that house_manage_no is the most precise identifier, and that pyeong defaults to the top 5 by household count and can be used to re-fetch types dropped into comparison_truncated. That is operational semantics the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific computation: comparing a presale notice's price against nearby actual transaction prices, per housing type, and frames it as a quantitative answer to 'is this presale worth applying to'. It explicitly carves out boundaries against realty_subscription_odds (competition rate), realty_area_price_bands (regional cross-check) and realty_presale_price_trend (time series), so an 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit decision procedure: if house_manage_no is absent, search by region+keyword, and if multiple notices come back, pick one from the candidate list and re-call rather than guessing. It also routes adjacent questions — 'should I apply' to realty_subscription_odds, regional verification to realty_area_price_bands, and 'wait or buy now' trends to 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 행복주택·국민임대·매입임대 등 마감 전 공고(접수 예정 포함)A
Read-onlyIdempotent
Inspect

마감 전 공공임대 모집공고(접수 예정 포함) — 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 접수중뿐이다.
NameRequiredDescriptionDefault
limitNo돌려줄 공고 수(마감 임박 순) (허용 범위 1~50)
offsetNo건너뛸 공고 수 — meta.next_offset을 그대로 넣는다 (허용 범위 0~5000)
regionNo시도(예: '서울', '경기', '전남'). 시군구·단지명은 keyword로 준다. '광주'는 광주광역시다(경기 광주시는 region='경기', keyword='광주'). 전국 단위 공고는 어느 시도에도 함께 실린다
keywordNo공고명·지역 표기 부분일치(공백 무시) — '청년'·'신혼'·시군구 등. LH는 시군구 필드가 없어 공고명에 적힌 것만 잡힌다(meta.keyword_scope)
rental_typeNo임대 유형. 장기전세(SH 상품)는 이 원천에 없어 0건과 함께 그 사실을 돌려준다전체

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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[유료] 재건축 유망 단지A
Read-onlyIdempotent
Inspect

[유료] 건령·거래활성 기반 재건축 후보 스크리닝 상위 단지를 조회한다.

점수 = 건령(최대 70, 30년 연한 기준) + 최근 12개월 거래활성 전국 백분위(최대 30).
사업성(용적률·대지지분·안전진단·조합 단계)은 반영되지 않는다 — 후보 발굴용이지
투자 판단 근거가 아니며, 응답의 disclaimer를 사용자에게 그대로 전하라.
NameRequiredDescriptionDefault
limitNo(허용 범위 1~50)
regionNo지역명 — 다른 도구와 같은 인자 이름. district와 같은 뜻이다(둘 중 하나만)
districtNo지역명 (예: 서울, 구로구). 비우면 전국 상위

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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[유료] 서울 재개발·재건축 사업장A
Read-onlyIdempotent
Inspect

[유료] 서울시 정비사업(재개발·재건축·가로주택) 사업장 목록을 조회한다.

[유료] 서울시 정비사업(재개발·재건축·가로주택 등) 사업장 목록 — 사업명·유형·
진행 단계·위치. "○○구 재개발 어디까지 진행됐어?"·"면목동 재개발 어디 있어?"류 질문용.
구(region)·동(dong)·유형(project_type)·진행 단계(stage)로 거를 수 있다.

**커버리지는 서울 한정**(정보몽땅 원천) — 타 시도는 이 도구로 답할 수 없다고 밝혀라.
세대수·준공예정은 원천 목록이 제공하지 않아 null이다(지어내지 말 것). 원천이 진행
단계를 비워 둔 사업장이 있다(약 2%) — stage가 빈 행은 '단계 미상'이지 '진행 없음'이 아니다.
재건축 **유망도 점수**는 이 도구가 아니라 realty_reconstruction이 담당하고,
"지금 사면 조합원 지위 승계돼?"는 realty_member_transfer_check(무료)가 담당한다.
NameRequiredDescriptionDefault
dongNo법정동 (예: 면목동·신길동) — 사업장 주소로 거른다. 구를 함께 주면 빠르다
limitNo(허용 범위 1~50)
stageNo진행 단계 필터 — plan_establishment=정비계획 수립, zone_designation=정비구역지정, safety_assessment=안전진단, committee_approval=추진위원회승인, union_establishment=조합설립인가, project_approval=사업시행인가, disposal_approval=관리처분인가, sale=분양, construction_start=착공, completion=준공인가, relocation_notice=이전고시, union_dissolution=조합해산. 비우면 전체. 원천이 단계 코드를 안 준 사업장(조합청산·조합원 모집신고 등)은 이 필터에 안 걸린다
offsetNo페이지네이션 오프셋
regionNo시군구 (예: 강남구) — 다른 도구와 같은 인자 이름. sigungu와 같은 뜻이다
sigunguNo시군구 (예: 강남구). 비우면 서울 전체. region과 같은 뜻의 옛 이름(둘 중 하나만)
project_typeNoreconstruction=재건축, housing_redevelopment=재개발(주택정비형), urban_redevelopment=재개발(도시정비형), street_housing=가로주택정비, small_reconstruction=소규모재건축, small_redevelopment=소규모재개발, regional_housing=지역주택, remodeling=리모델링. 비우면 전체

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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정비사업 분담금 계산 — 선언된 감정평가액·비례율로 권리가액·분담금A
Read-onlyIdempotent
Inspect

재개발·재건축 조합원의 권리가액과 추가 분담금을 계산한다.

재개발·재건축 조합원의 권리가액과 추가 분담금(또는 환급금)을 결정론으로 계산한다 —
권리가액 = 종전자산 감정평가액 × 비례율, 분담금 = 조합원분양가 − 권리가액.
"감정평가 3억에 비례율 98%면 얼마 더 내?"의 자리다.

경계를 지켜라: ① 입력 전부 **선언**이다 — 감정평가액·비례율은 조합 자료에서 가져와야
하고 서버는 검증하지 않는다. ② 이 산식은 법정 산식이 아니라 통용 실무 산식이며,
비례율은 관리처분인가 전엔 추정치라 준공까지 계속 변한다 — 응답의 sensitivity(비례율
±10%p 스윙)와 disclosures를 반드시 함께 전하라. ③ 산식 출처·변동 함정의 원문은
realty_policy_rules(topic=redevelopment_rules)의 proportion_formula가 진실원이다.
분양자격 자체가 불확실하면 topic=redevelopment_entitlement(갈림길 지도)부터.
NameRequiredDescriptionDefault
proportion_rate_pctNo비례율(%, 예: 102.5) — 조합 총회 자료·관리처분계획의 값을 선언. 없으면 아래 사업 전체 3종으로 계산한다 (허용 범위 0 초과~300)
prev_asset_value_10kYes조합원 종전자산 감정평가액(만원) — 감정평가 결과이지 시세가 아니다
total_post_asset_10kNo종후자산 평가총액=분양수입 총액(만원) — 비례율을 직접 계산할 때
total_prev_asset_10kNo종전자산 평가총액(만원) — 비례율을 직접 계산할 때
member_sale_price_10kYes받으려는 주택형의 조합원분양가(만원)
total_project_cost_10kNo총사업비(만원) — 비례율을 직접 계산할 때

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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지역 실거래 시세 통계A
Read-onlyIdempotent
Inspect

지역의 아파트 실거래 시세 추이(월별)를 조회한다. 경매가가 싼지 판단하는 기준선이 된다.

**이 축의 자리(시세 도구 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).

**동별 시세는 by_dong=true 한 번으로**(2026-10-23, T-2026W43-38): '전주 덕진구 동별 84㎡
시세'처럼 시군구 안 동을 견주는 질문은 법정동마다 이 도구를 부르지 말고 시군구 region에
by_dong=true를 준다 — 매매는 평형 인자를 함께 주면 동별 그 평형 중앙값·건수가 온다.

**기준일 전후 비교·단지별 층/평형 분해는 여기서 한 번에**: 단지 목록엔 단지마다 층 밴드
분해(평형 미지정이면 평형대 4구간도)가 붙고 compare_from을 주면 전후 비교가 붙는다. 창은
months 전체(6개월 고정 아님)·계약해제 제외다. '고층 신고가냐 시세 상승이냐'는 전후 창의 층
분해로 가른다. 한쪽 3건 미만이면 변화율은 판정 보류, 기준일 이후 창은 신고기한 30일로 미완결.
NameRequiredDescriptionDefault
top_nNo**가격순 상위 거래 '목록'을 함께 받는다**(1~20). '신고가 상위 5개', '제일 비싸게 팔린 아파트', '고가 거래 목록'처럼 **개별 거래를 나열**하는 질문이 이 인자다 — 안 주면 이 도구는 평균·중앙·최고 같은 **집계만** 답하고 목록은 못 준다. 행에 단지·전용면적·평형·금액·계약일·층이 실린다(top_transactions). metric='price'에서만 동작한다 (허용 범위 1~20)
metricNoprice=매매, rental=전월세. **평형 인자(pyeong_exclusive·pyeong_supply·area_m2_exclusive·area_m2_supply)는 price에서만 먹는다** — 전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다(전체 평형 값이 오고 warning_pyeong_fallback으로 실토한다). 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라price
monthsNo조회 개월 수 (허용 범위 1~60)
regionYes지역명 — 시군구까지(예: '강남구', '수원시 권선구') 또는 **법정동까지**(예: '강남구 대치동', '세종특별자치시 나성동'). 시도 약칭은 서버가 정식명으로 펴지만('서울 마포구' → '서울특별시 마포구'), 동명 지역이 여럿이면 시도를 앞에 붙여라 — 안 붙이면 **고르지 않고 거절**하며 이름이 정확히 같은 후보 목록을 준다('동구'는 '남동구'가 아니다). 단지명은 여기 넣지 마라(단지는 realty_search_complexes·realty_complex_pyeong_price 담당)
by_dongNo시군구 안 **법정동별 중앙값**을 한 번에 함께 받는다(by_dong) — 동마다 이 도구를 따로 부르지 마라. metric='price'(매매): 평형 인자(area_m2_exclusive 등)를 주면 **동별 그 평형 매매 중앙값·건수**(동 하나에 한 행), 안 주면 법정동 × 평형대 4구간(소형<60·중소형 60~85·중형 85~115·대형 115㎡+) 중앙값과 지역 평형대 4구간 시세(이상치 필터)를 싣는다(창 상한 24개월). metric='rental': 법정동 × 전용면적대(60㎡ 미만·60~85㎡·85㎡ 초과) 전세 보증금 중앙값(평형 인자 미적용). 둘 다 표본 3건 이상 칸만 나오고 뺀 칸 수를 공시한다. region이 법정동 하나면 그 동 한 곳의 행만 온다 — 형제 동과 견주려면 region에 시군구를 넣어라
compare_fromNo기준일 전후 비교(YYYY-MM-DD) — '○○ 발표 전후 단지별 시세'. 단지마다 전·후 창의 건수·중앙값·최고가 거래(계약일·층)·변화율이 붙는다. 단지 도구를 단지마다 부르지 마라. 창은 months 전체라 기준일 이전이 들어오게 잡아라. price 전용
pyeong_supplyNo분양평수(공급면적, 평) — 흔히 말하는 '34평'이 이것이다. 내부에서 ×0.745로 전용 실평수로 환산한다. **㎡로 말했으면 area_m2_supply를 쓰라** **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라.
area_m2_supplyNo공급(분양)면적을 **㎡ 그대로** 받는다(예: 112.8). pyeong_supply와 동시에 주면 거절한다 **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. (허용 범위 0 초과~800)
pyeong_exclusiveNo전용면적 기준 **실평수(평)** — ㎡가 아니다. 전용 84㎡면 25.4를 넣는다. **사용자가 ㎡로 말했으면 이 인자가 아니라 area_m2_exclusive를 쓰라** (㎡ 값을 여기 넣으면 60평 초과로 거절된다). 1평=3.3058㎡ **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라.
area_m2_exclusiveNo전용면적을 **㎡ 그대로** 받는다(예: 84, 59, 114.98). 사용자가 '전용 84㎡'라고 말했으면 환산하지 말고 84를 여기 넣어라 — 서버가 평으로 환산하고 그 사실을 응답에 적는다. pyeong_exclusive와 동시에 주면 거절한다 **전월세(metric='rental') 통계는 평형별로 나뉘어 있지 않아 평형 인자가 적용되지 않는다** — 주면 전체 평형 기준 값이 오고 warning_pyeong_fallback으로 실토한다. 평형별 전월세는 단지 단위 realty_complex_rent_by_pyeong으로 조회하라. (허용 범위 0 초과~500)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the read-only/idempotent annotations: region matching is token-exact and ambiguous names are rejected with candidates rather than guessed, rental silently uses all-pyeong data and discloses it via warning_pyeong_fallback, top_n returns window highs (not all-time highs), cells under 3 samples are suppressed with a count of omissions, and post-baseline windows are incomplete due to the 30-day reporting deadline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and sectioned with bold headers, but bloated well past what an agent needs: the rental/pyeong fallback caveat is repeated verbatim across five parameter descriptions and the body, and internal changelog artifacts (ticket IDs T-2026W34-352, S364, dates, a truncated trailing sentence) add noise rather than selection signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, output-schema-less tool this covers what an agent needs to call it correctly: unit handling, metric-specific degradations, ambiguity rejection protocol, aggregation-vs-list behavior, sample-size suppression, and window limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 earns more by adding a cross-cutting rule the schema fragments do not state (put the unit the user spoke in, the server converts; ㎡ values in pyeong params are rejected with reasons and two exits) and by explaining the by_dong/compare_from window interactions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+granularity (지역 아파트 실거래 시세 월별 추이 조회) and immediately positions itself among three 시세 tools, naming realty_area_price_bands (level/quote) and realty_search_complexes (specific complex) as the alternatives with the conditions that select each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules for every branch: monthly flow → this tool; price level quoting → bands; specific apartment → search_complexes; per-dong comparison → by_dong instead of per-dong calls; per-pyeong rental → realty_complex_rent_by_pyeong; listing questions → top_n. It also states what to do when a name is rejected (re-ask with the returned candidate list).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_region_rankings지역 순위 (시세·상승률·전세가율·교통·학군)A
Read-onlyIdempotent
Inspect

시군구 순위를 가격·상승률·전세가율 같은 축으로 조회한다.

지역(시군구) 순위를 조회한다 — "제일 비싼 동네 어디야?", "요즘 많이 오른 지역은?",
"전세가율 높은 곳은?"류 질문용.

price=거래량 가중 전용 평당가(최소 5건, 최신월은 집계 진행 중일 수 있음) ·
growth=면적대 하나 안의 YoY(기본 전용 60-85㎡, area_bucket으로 under60·85-115·over115 —
평형 구성 왜곡 제거). 응답 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가 시세·추이를 나란히 준다 — 이 도구는 순위·탐색용이다.
NameRequiredDescriptionDefault
limitNo(허용 범위 1~50)
orderNodesc=상위부터, asc=하위부터desc
metricYesprice=전용 평당가 / growth=연간 상승률 / investment=전세가율·갭투자 / transit·school=**보류**(입지 점수가 미검증 참고값이라 순위를 내지 않는다 — 호출하면 대안 안내)
regionNo시도명(예: 부산)이면 그 시도 안 순위, 시군구명이면 해당 지역 필터. 비우면 전국
area_bucketNometric=growth 전용 면적대(전용㎡) — under60·60-85(기본)·85-115·over115. 같은 면적대 안에서만 YoY를 비교한다. 다른 metric엔 적용되지 않는다
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations it discloses genuinely behavioral facts: the price metric is volume-weighted with a 5-transaction minimum and the latest month may still be in progress, and transit/school are suspended as of 2026-09-26 because scores above 90 covered 86.7% of cases and lost discriminating power. The one gap is that with no output schema, the description never says what a row actually contains beyond 'methodology 산식·단위', leaving the response shape implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the trigger questions and the sibling routing before the metric glossary, which is the right ordering. It loses a point for a redundant opening — "시군구 순위를 … 축으로 조회한다" is immediately restated as "지역(시군구) 순위를 조회한다" — and the metric block is dense enough to need a second read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, enum-driven ranking tool with no output schema, the description covers what each metric means, which metrics are currently unavailable and why, and where to go instead. Minor omissions remain: default ordering/limit behavior and what the returned rows look like are left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 earns more by explaining *why* each metric is computed as it is — area_bucket removes pyeong-mix distortion within a single band, price uses dedicated-only pyeong price weighted by transaction volume, and investment pairs sale/jeonse within the same pyeong cell. That rationale is not recoverable from the enum strings alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (시군구 순위 조회) plus the axes it ranks on, and it explicitly separates itself from realty_compare_regions (rank/explore vs. head-to-head) and realty_rental_yield (region ranking vs. same-complex pyeong-level). An agent can route among these 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete trigger questions (제일 비싼 동네, 요즘 많이 오른 지역, 전세가율 높은 곳), names three alternatives with the exact condition that selects each (location_facts for 교통 좋은 동네, realty_compare_regions for A vs B, realty_rental_yield for 같은 평형·단지), and states what this tool is not for. Exclusions and alternatives are both explicit.

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지역 추이 — 동일 단지 고정 바스켓 (구성 변화 제거)A
Read-onlyIdempotent
Inspect

지역 가격 추이를 양쪽 창에 모두 거래가 있는 동일 단지들로만 계산한다.

**왜 필요한가**: 구 월평균 추이는 '가격이 변한 것'과 '팔린 단지가 바뀐 것'을 구분하지
못한다. 표본이 얇으면 후자가 지배하는데, 그걸 시세 변동으로 읽으면 오답이다
(2026-08-14 실사고: 용산 33평 월 1~7건 표본으로 '전년 대비 −9.6%'를 만들었다).

이 도구는 **naive(전체 평균 변화)와 basket(동일 단지 변화)을 나란히** 주고 그 차이를
`composition_effect`로 보여준다 — 차이가 크면 그 지역 평균 추이는 구성 잡음이다.
단지별 값은 **평당가**라 단지 안의 평형 구성 변화도 흡수한다.

한계를 반드시 함께 전하라: 바스켓이 얇으면(단지 수가 적으면) 이 값도 못 믿는다.
취소·직거래는 제외했고, 단지 내 동·층 구성 변화까지는 보정하지 못한다.
NameRequiredDescriptionDefault
regionYes시군구명 (예: 용산구, 성동구). **여러 시도에 같은 이름이 있는 시군구**(중구·동구·서구·남구·북구·강서구)는 시도를 함께 주라(예: '서울 중구') — 안 주면 합치지 않고 후보를 실토하며 거절한다
pyeong_bandNopyeong_supply 기준 허용 폭(±평). 넓히면 바스켓이 커지고 평형 혼합이 늘어난다 (허용 범위 1~10)
pyeong_supplyNo분양평(사용자가 말하는 '34평') 필터 — ±3평 창으로 거른다. **좁힐수록 바스켓이 얇아져** 고정 바스켓의 이점이 사라지니 응답의 바스켓 단지 수를 반드시 확인하라 (허용 범위 1~200)
window_monthsNo비교 창 하나의 길이(개월). 최근 N개월 vs 그 직전 N개월을 비교한다 (허용 범위 1~12)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지
min_tx_per_complexNo바스켓에 넣을 단지의 창당 최소 거래 건수 — 1이면 바스켓이 커지지만 단지별 값이 한 건에 좌우된다 (허용 범위 1~10)

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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개조 가능성 — 벽을 헐 수 있나·욕실을 옮길 수 있나(법령 + 공고 인용)A
Read-onlyIdempotent
Inspect

이 아파트를 벽·배관 기준으로 고칠 수 있는지 판단할 재료를 준다.

**"이 아파트를 내가 원하는 대로 고칠 수 있나"**에 답하는 자리 — 두 축이다:
**①벽**(내력벽을 헐어 방을 틀 수 있나) **②배관**(층상/층하 — 욕실·주방을 옮길 수 있나).

"벽식구조면 리모델링 못 하죠?"·"내력벽 철거 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(관리사무소 설계도서·구청 행위허가 상담 등 실제로 확인 가능한
경로)을 안내하라 — 그것이 이 도구의 값어치다.
NameRequiredDescriptionDefault
axisNoboth=벽+배관(기본), wall=내력벽·평면 변경만, plumbing=상하수도·욕실 이동만both
complex_nameNo단지·공고명 일부 (공백 무관 매칭). **없어도 된다** — 비우면 법령 규범 층만 답한다(그것만으로도 통설 오답을 막는다)
house_manage_noNo공고 관리번호 (realty_presale·realty_notice_facts 응답의 house_manage_no)

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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[유료] 전월세 수익률A
Read-onlyIdempotent
Inspect

[유료] 시군구별 월세 수익률·평균 매매가·평균 월세를 조회한다. 수익형 투자 스크리닝용.

기본 응답은 최신 완결월 1개월치를 수익률 내림차순으로 자른 것이다 — 전체 기간·전체
지역이 아니다(truncated 필드 확인). 특정 월은 year_month로 조회하라.
NameRequiredDescriptionDefault
limitNo반환 행 수 — 수익률 내림차순 상위 N (허용 범위 1~50)
regionNo시도(예: 서울특별시) 또는 시군구(예: 강남구). 세종은 시 단위로 나온다
year_monthNoYYYYMM (기본 최신 완결월)
pyeong_supplyNo분양평수(예: 25·34) — 서버가 ×0.745로 전용평으로 환산해 **전용평 구간**(S·M·L·XL·XXL)을 고른다(분양 25평→S, 34평→M)

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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경매 물건 조건 검색A
Read-onlyIdempotent
Inspect

법원경매 물건을 지역·종류·감정가·유찰횟수로 필터링해 조회한다.

**이 축의 자리** — 조건을 **값으로 아는** 검색이 이 도구다. 사용자의 자연어 한 줄밖에
없으면 `search`가 먼저다(질의에서 조건을 뽑아 준다). 개별 사건의 상세는 여기가 아니라
`realty_get_auction_case`(사건번호+법원명)·`fetch`(search가 준 id)다.

**이 도구는 법원경매(민사집행법·각급 법원)만 조회한다 — 공매는 여기가 아니다.**
공매(국세징수법·국유재산법 등, 한국자산관리공사 온비드)는 **이 서버에 따로 있다**:
물건은 `realty_search_onbid`, 낙찰가율은 `realty_onbid_sale_rate`
(물건 25,669개 · 개찰 결과는 2026-06-01 개찰분부터 누적, 지금 범위는 응답 `sample_period`).
여기서 안 나온다고 "그런 물건 없다"고 답하지 말고 **공매 도구로 다시 걸어라.**
구분 신호는 번호 형식이다 — 법원 사건번호는 `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로 여기서 걸러도 같은 축 — 결과를 합쳐 세지 마라).
NameRequiredDescriptionDefault
sidoNo시도. '서울'처럼 줄여 써도 되고 '서울특별시'도 된다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.
sortNo정렬 기준date_desc
limitNo반환 개수 (최대 50) (허용 범위 1~50)
sinceNo이 날짜(YYYY-MM-DD, 31일 전까지) 이후 바뀐 것만 — 예약 실행에서 '어제 이후'면 since=어제. 기준·지연은 응답에
offsetNo페이지 오프셋. has_more가 true면 next_offset으로 다시 호출하라.
sigunguNo시군구 (예: 강남구, 성남시) ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.
usage_nameNo물건 종류 — 원장 값 예: 아파트·오피스텔·다세대·연립주택·단독주택·다가구주택·근린시설·상가·대지·임야·전답. 부분일치라 '빌라'는 '연립주택,다세대,빌라' 행에 걸린다. **'토지'는 이 원장에 없는 이름이다** — 대지·임야·전답으로 나뉘어 있어 그대로 넣으면 서버가 사유와 유효값 목록을 들어 거절한다. 비우면 전 종류
exclude_pastNo매각기일이 이미 지난 행 제외 여부. 기본 False(전체 반환 — 지난 기일 행에는 past_auction_note 플래그가 붙는다). '지금 입찰 가능한 물건' 질문이면 True로 호출하라 — 오늘 이후 기일(기일 미정 포함)만 남는다.
max_price_10kNo최대 감정가, **만원** 단위
min_bid_countNo최소 유찰 횟수. 유찰이 쌓일수록 최저입찰가가 내려간다. (허용 범위 0~100)
min_price_10kNo최소 감정가, **만원** 단위 (5억이면 50000)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe read-only, idempotent profile, yet the description still adds substantial non-obvious behavior: past-due sale dates are not filtered by the backend, `sort=date_asc` yields a 60.7% past-date prefix with `meta.past_prefix_skipped`, and empty `items` with `has_more=true` does not mean no results. It also discloses per-row provenance risk (`min_bid_source` court_schedule vs item_list, with staleness rates) — 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then routing, then caveats, so the highest-value information comes first and nearly every sentence carries an operational fact. It is nonetheless long, with three bolded warning blocks and some restatement of unit rules already in the schema, so it is dense rather than perfectly tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 covers the essentials an agent needs: response field names (`past_auction_note`, `past_auction_count`, `min_bid_stale_risk_count`, `sample_period`), pagination behavior, and the summary-only nature of the listing. 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.

Parameters4/5

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 semantics the schema cannot express: the `exclude_past=true` + `sort=date_asc` interaction and skipped-prefix bookkeeping, the offset/requested_offset/next_offset paging contract, and the `min_bid_source` caveat. Units (만원) and the '토지' rejection are also reinforced, though these partially restate schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: filter court-auction items by region, type, appraised price and failed-bid count. It explicitly positions itself against siblings, naming `search` for natural-language queries and `realty_get_auction_case`/`fetch` for per-case detail, so an agent can route correctly 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to use this tool vs alternatives with concrete conditions: NL one-liners go to `search`, detail goes to `realty_get_auction_case`, onbid goes to `realty_search_onbid`/`realty_onbid_sale_rate`, and discovery questions go to `realty_auction_alerts`. It even supplies the disambiguating signal (사건번호 formats `2025타경1234` vs `2026-0600-031235`) and warns against merging the two ledgers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_search_complexes아파트 단지 검색·평형별 시세A
Read-onlyIdempotent
Inspect

아파트 단지를 이름·지역으로 검색하고 평형별 실거래 시세를 함께 돌려준다. "○○아파트 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에 근거가 있다.

**견줄 때는 조건을 맞춰라 — 두 인자가 그 수단이다.** ㎡단가는 평형이 작을수록,
준공이 새로울수록 높다(⚠️ **전국 중앙값 이야기다** — 서울은 구축이 더 비싼 동이 30.1%다).
`area_band_m2=59`면 각 단지의 대표 단가가 **전용 59±3㎡ 행만으로** 다시 계산되고,
`construction_year_band=2018`이면 2013~2023년 준공 단지가 비교군으로 표시된다
(in_year_band). 연식이 더 지배적이다 — 법정동 안 ρ 중앙값이 연식 +0.7381 대
평형 +0.2143이라, 연식이 섞인 ㎡단가 순위는 **사실상 신축 순**이 되기 쉽다. 두 인자 모두
**가격 계산·비교군 표시에만** 걸리고 단지 검색을 거르지 않는다(못 잰 단지는 목록에
남고 값이 null + 사유다). 몇 개를 쟀고 몇 개를 못 쟀는지는 응답의 coverage가 적는다.

**0.84.0부터 scores.composite는 school + convenience다**(transit을 뺐다 — 전국 실측에서
고유값의 83.5%가 90~100에 몰려 변별력이 없고, 합산에 넣으면 법정동 격자 ρ 중앙값이
0.1028→0.0857로 떨어진다 · 2026-11-05 재측정). 백엔드 원장의 옛 가중평균 값은 **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 + 사유(미상 ≠ 저회전).
NameRequiredDescriptionDefault
pageNo0부터 시작하는 페이지 번호
sortNoname=이름순(거래량 많은 순), 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
limitNo단지 수 — 평형별 시세가 포함돼 응답이 무겁다. 최대 20이고 더 받으려면 limit을 올리지 말고 **page를 넘겨** 이어 받아라(응답의 total이 전체 건수다 — 다만 서버가 지역 토큰을 뒤에서 검증한 경로에서는 total이 null이고 meta.total_unavailable이 사유를 적는다. 그리고 **sort='unit_price'로 받은 응답이 잘렸으면 page로 이어받을 수 없다** — sort_applied.page_continuation이 그 사실을 값으로 싣는다). 요청분을 다 실으면 응답이 크기 상한을 넘는 경우 **실제 반환 수를 줄이고 meta.size_capped**에 총계·이어받는 호출을 값으로 싣는다 — 조용히 자르지 않는다 (허용 범위 1~20)
queryNo단지명 일부 (예: 래미안, 마포래미안푸르지오)
regionNo시군구명 (예: 마포구, 서울특별시 마포구). **법정동까지 넣어도 된다**(예: '강남구 대치동') — 백엔드는 동으로 거르고 나머지 토큰은 서버가 검증해 note에 적는다
area_band_m2No**평형을 고정해 단지끼리 견줄 때** 넣는다(전용면적 ㎡ — 분양면적이 아니다). 예: '59㎡대로 맞춰서 비교' → 59. 전용 ±3.0㎡ 근사 매칭이고(원장 면적이 59.224·59.9처럼 단지마다 달라 정확 일치는 대부분 0건이다), 각 단지의 price_per_exclusive_m2가 **그 밴드 안 평형 행만으로 다시 계산된다**. ⚠️ 이 인자는 **가격 계산에만** 걸리고 단지 검색을 거르지 않는다 — 밴드에 거래가 없는 단지도 목록에 그대로 실리고 그 값은 null + 사유다. 밴드에 든 행에는 in_area_band=true가 붙는다 (허용 범위 0 초과~500)
period_monthsNo가격 집계 기간(개월). 비우면 2024-01 이후 전체 (허용 범위 1~24)
max_householdsNo세대수 상한 — '300세대 이하 소규모'처럼 위쪽을 자를 때. min_households와 함께 주면 구간이 된다
min_householdsNo**세대수 하한** — '500세대 이상', '대단지'를 여기에 넣는다(예: 500). 세대수가 원장에 없는 단지는 이 조건에서 제외되고 그 건수를 meta.households_scope로 실토한다(미상 ≠ 소규모)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지
max_trade_price_10kNo**거래가 상한(만원)** — '3억 이하로 살 수 있는 단지'는 30000. 집계 창 안에 이 금액 **이하 실거래가 1건 이상** 있었던 단지만 남긴다(평균가가 아니다 — 소형 평형만 3억대인 단지도 잡힌다; 행의 min_trade_price가 그 최저 거래가). **이 인자는 검색을 거른다.** 창 안 거래가 없는 단지는 판정 불가라 빠지고 그 건수를 meta.price_year_scope에 싣는다. '지금 3억 매물'이 아니라 '창 안에 3억 이하로 팔린 적이 있다'다 — 호가·매물은 없다. 최근 시세로 보려면 period_months=12를 함께 줘라
max_construction_yearNo**준공연도 상한** — '오래된 아파트'·'30년 넘은 단지'를 거를 때(예: 준공 30년 이상 = 올해-30). **이 인자는 검색을 거른다**(construction_year_band는 표시만 한다). 준공연도가 원장에 없는 단지는 판정 불가라 빠지고 그 건수를 meta.price_year_scope에 싣는다. 연한은 재건축 **자격의 하나**일 뿐 사업성·구역 지정·'호재'가 아니다 (허용 범위 1900~2100)
construction_year_bandNo**연식을 맞춰 단지끼리 견줄 때** 넣는 기준 준공연도. 예: 2018 → 2013~2023년 준공(±5년, 폭 10년)이 비교군이 된다. **연식은 ㎡단가를 가장 강하게 끄는 축이다** — 법정동 안에서 준공연도와 ㎡단가의 순위상관 ρ 중앙값이 +0.7381로 평형(+0.2143)·입지점수(+0.1429)보다 지배적이라, 연식이 섞인 비교는 사실상 '신축 순'이 되기 쉽다(⚠️ 방향은 지역마다 반대일 수 있다 — **서울은 ρ +0.2947이고 구축이 더 비싼 동이 30.1%, 세종은 36.8%**다. 재건축 기대가 가격에 들어간 U자 구간이다). ⚠️ 이 인자도 검색을 거르지 않는다 — 밴드 밖 단지는 목록에 남고 행마다 in_year_band로 갈라 적힌다(준공연도가 원장에 없으면 null: **판정 불가이지 구식이 아니다**). area_band_m2와 함께 주면 둘 다 걸린다 (허용 범위 1900~2100)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, but the description adds substantial behavior the annotations cannot: composite scoring was redefined in 0.84.0 with composite_legacy alongside, scores are flagged as unverified (scores_meaning.status), unit_price sorting is page-only and not resumable (sort_applied.scope/page_continuation), size capping is disclosed via meta.size_capped rather than silent truncation, and total may be null on server-validated region paths. It also spells out that area_band_m2/construction_year_band affect pricing only while max_trade_price_10k/max_construction_year/household bounds filter the result set — a distinction that materially changes how an agent builds a call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Bold lead-ins front-load each block (axis position, prices_by_area, comparison factors, 0.84.0 change, household bounds, turnover) so it is scannable despite its length. However, version numbers, correlation coefficients, and percentages (ρ +0.7381, 83.5%, 30.1%) recur at a density that taxes reading, and several statements restate schema descriptions nearly verbatim. It is organized, but not tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 surface an agent actually needs: prices_by_area with pyeong_exclusive/pyeong_supply_est, coverage, sort_applied.*, meta.households_scope/price_year_scope/size_capped, composite_legacy, and scores_meaning. For a 13-parameter read tool with heavy payloads and no return schema, nothing essential to a correct call or a correct reading of the answer is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 much of the parameter text mirrors the schema. It earns above baseline by stating a constraint the schema does not encode ('query·region 중 하나는 필수', while none is marked required) and by teaching combinations: the ㎡단가 comparison recipe, the band-vs-filter split, and a fully worked example call. What it does not add is syntax/format detail beyond the schema, so it stops short of 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a specific verb+resource ('아파트 단지를 이름·지역으로 검색') and the added payload ('평형별 실거래 시세'). It then positions the tool against named siblings (realty_region_price_stats, realty_area_price_bands, realty_complex_pyeong_price, realty_redevelopment), 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('단지가 특정되면 이게 기본'), when-not ('지역 평균 도구들은 단지 질문에 쓰지 마라', '층별 시세 질문은 realty_complex_pyeong_price', '재개발은 realty_redevelopment'), and even a refusal case ('평판·거주 후기는 원장에 없다 — 부르지 마라'). Alternatives are named with the condition that selects them, plus a concrete worked example (region='노원구' + max_trade_price_10k=30000 + sort='year_asc').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_search_onbid공매(온비드) 물건 검색A
Read-onlyIdempotent
Inspect

한국자산관리공사 온비드 공매 물건을 지역·용도·재산구분·감정가로 조회한다.

법원경매가 아니다. 공매는 국세징수법(압류재산)·국유재산법·공유재산법에 따른 처분이고
주관은 캠코다 — 아래 '이 축의 자리'와 응답의 `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(민사집행법 기준)의 답을 여기에 옮기지 마라.
NameRequiredDescriptionDefault
sidoNo시도. '서울'처럼 줄여 써도 되고 '서울특별시'도 된다. ⚠️ '광주'는 광주광역시와 경기도 광주시 둘 다라 **한쪽으로 읽지 않고 거절한다**(error='sido_ambiguous') — 광역시면 '광주광역시', 경기도 광주시면 sido='경기도'·sigungu='광주시'로 갈라 넣어라.
sortNodeadline=마감 임박순 · price_asc/desc=감정가순 · discount=감정가 대비 최저가가 낮은 순(저감 많이 된 순)deadline
limitNo반환 **물건** 수 (최대 50) (허용 범위 1~50)
offsetNo페이지 오프셋. has_more면 next_offset으로 다시 호출하라.
sigunguNo시군구 (예: 춘천시, 강남구). 부분일치다 — '고양시'는 '고양시 덕양구'도 잡는다. ⚠️ 시도 없이 시군구만 주면 **합치지 않고 거절한다**(error='region_ambiguous') — '중구'처럼 여러 시도에 같은 이름이 있으면 합친 값은 어느 지역의 것도 아니다. sido와 갈라 넣어라(예: sido='서울특별시'·sigungu='중구'). 거절 응답이 후보를 준다.
open_onlyNo입찰 마감이 아직 안 지난 회차가 남은 물건만. 기본 True — 원장에는 이미 끝난 회차 행이 함께 들어 있어서(물건 25,669개 중 마감 전 회차가 남은 것은 10,327개), 끄면 지금 입찰할 수 없는 물건이 섞인다. cltr_mng_no로 특정 물건을 볼 때는 무시된다.
usage_nameNo용도 부분일치(대·중·소 3단을 한꺼번에 건다). 중분류 5종은 토지·주거용건물·상가용및업무용건물·용도복합용건물·산업용및기타특수용건물이고 소분류는 91종이다. **'아파트'는 소분류라 중분류로는 안 걸린다** — 넓게 보려면 '주거용건물'. 원장 값 예: 주거용건물·아파트·다세대주택·대지·상가주택. 경매 어휘 '전답'은 여기 없다(전·답으로 갈렸다) — 없는 이름은 거절하며 쓸 수 있는 값을 준다.
cltr_mng_noNo물건관리번호(예 '2026-0600-031235')로 한 물건만. **이것이 상세 조회다** — 이 원장은 행이 물건이 아니라 회차라, 한 물건의 상세는 곧 그 물건의 회차 전부이고 그때 `rounds`에 회차별 최저입찰가 일정이 실린다. 법원 사건번호(2025타경…)는 여기 넣지 마라.
max_price_10kNo최대 감정가, **만원** 단위
min_price_10kNo최소 감정가, **만원** 단위 (5억이면 50000)
property_typeNo재산구분 — 공매에서 가장 중요한 축이다. 압류재산(체납처분·국세징수법)·국유재산·공유재산·기타일반재산·수탁재산·불용품. **성격이 완전히 다르다**: 압류재산은 체납자 재산의 강제매각이고 나머지는 공공이 가진 재산의 처분·임대다.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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소액임차인 최우선변제 — 담보물권 설정일로 적용 시행령 판을 고른다A
Read-onlyIdempotent
Inspect

소액임차인 최우선변제의 금액표를 고르는 도구다 — 판정기가 아니다.

"전입은 근저당보다 빠르고 확정일자는 늦으면?"처럼 **임차인 한 사람의 날짜들**(전입·
확정일자·근저당)로 대항력·우선변제·최우선변제를 묻는 질문은 여기서 시작하라 — 근저당
날짜로 금액표를 고르고 `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_auction_rights_analysis(같은 표를 쓴다). 규칙 전체와 갈림길은
realty_policy_rules(topic=auction_rights)가 진실원이다.
NameRequiredDescriptionDefault
regionNo물건 소재지. '서울', '경기도 부천시', '부산광역시 기장군'처럼 시도를 붙이면 확실하다. 비우면 그 판의 **전 구간 표**를 그대로 준다
deposit_10kNo임차보증금(**만원**). 주면 그 판의 '소액임차인 범위' 상한과 대조해 **범위에 드는지의 산수**만 한다 — 최우선변제를 받는다는 판정이 아니다
security_right_dateNo**최선순위 담보물권(근저당 등)의 설정일** YYYY-MM-DD. 금액표를 고르는 기준일이다 — '오늘'도 '임대차계약일'도 아니다(각 개정 시행령 부칙 경과조치: '이 영 시행 전에 임차주택에 대하여 담보물권을 취득한 자에 대해서는 종전의 규정에 따른다'). 등기부 을구에서 확인한다. **모르면 비워 두라 — 서버가 현행표를 답인 척 주지 않는다**. ⚠️ **연도만 아는 경우 날짜를 지어내지 마라** — '2019년'만 들었으면 '2019-01-01'을 만들지 말고 security_right_year=2019를 쓰라. 그 해 전체가 한 시행령 판 안이면 서버가 날짜 없이 답하고, 판이 갈리는 해면 월·일을 되묻는다
security_right_yearNo**최선순위 담보물권 설정 '연도'만** 알 때 쓴다(예: 2019). 사용자가 연도만 말했을 때 security_right_date에 임의의 날짜를 지어 넣는 대신 여기에 연도를 그대로 넣어라 — 그 해 전체가 한 시행령 판 안에 있으면 월·일 없이도 표가 정해지고(응답이 그 근거를 밝힌다), 판이 갈리는 해면 표를 고르지 않고 등기 접수일을 되묻는다 (허용 범위 1900~2200)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover read-only/idempotent, but the description adds substantial behavior beyond them: it refuses to pick a table without security_right_date rather than defaulting to the current table, it will not fabricate dates for year-only inputs, and it discloses the not_a_conclusion payload and the ambiguity fallbacks (year-only, split-city dong). This is exactly the failure-mode disclosure 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core distinction and the 'table is picked by security right date, not today' warning are front-loaded, which is good. But the numbered boundary list plus the 2015-seoul worked example is dense and repeats the don't-fabricate-dates rule already stated in two parameter descriptions, so some sentences do not earn their place in the description itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 naming the not_a_conclusion field and describing the fallback responses (full table, year-based selection with stated basis, re-ask for the registration date). A short note on the overall response shape would close the last gap, but an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 the legal rationale for why security_right_date is the pivot (부칙 경과조치) and why security_right_year exists as a distinct non-fabricating path, plus the region-blank behavior. It reinforces rather than merely restates the schema, though it duplicates the year-fabrication warning already in both parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: it selects the small-tenant priority-repayment amount table by the senior security right's acquisition date, and explicitly negates the misread ('판정기가 아니다'). It names its two siblings (realty_policy_rules, realty_auction_rights_analysis) and states what each does instead, so an agent can separate them 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete trigger question ('전입은 근저당보다 빠르고 확정일자는 늦으면?'), explicit exclusions (말소기준권리·인수 여부 → realty_auction_rights_analysis; full rules → realty_policy_rules), and the housing-only restriction with the commercial-building alternative law. The 'when not to use' cases are as explicit as the 'when to use' case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

realty_subscription_odds청약 경쟁률·당첨 가점 — 내 가점으로 되나A
Read-onlyIdempotent
Inspect

청약 경쟁률과 실제 당첨 가점 커트라인을 낸다 — "나 가점 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을 이어서 쓰라.
NameRequiredDescriptionDefault
regionNo시도 (예: 서울, 경기, 세종)
keywordNo단지명·주소 부분일치 (예: '월계 중흥')
sigunguNo시군구 정확한 이름 (예: 노원구, 수원시). 벤치마크를 좁힐 때 쓴다 — 표본이 0이면 시도 단위로 넓혀라
my_scoreNo내 청약 가점(0~84점). 주면 실제 커트라인과 점수 차를 계산해 준다 (허용 범위 0~84)
area_bandNo전용면적대로 좁힌다. 같은 구 안에서도 평형이 바뀌면 커트라인이 움직인다(실측: 노원 59㎡ 58.5점 vs 60~84㎡ 59점, 동작은 반대로 84㎡ 62점·59㎡ 64점)
breakdownNo분포를 쪼갤 축. **시도 하나로 답하지 마라** — 서울 은평 전용 59㎡ 커트라인 중앙 45점, 강남 59㎡ 74점으로 같은 시도 안에서 29점이 갈린다. '어디까지 되나'류 질문에는 sigungu, '언제가 쌌나'는 quarter·year를 쓴다
since_yearsNo지역 벤치마크에 쓸 최근 기간(년). 커트라인은 시장 사이클을 타므로 기본 3년 (허용 범위 1~6)
budget_max_10kNo예산 상한 — 분양 최고가(만원) 기준. 사용자가 '9억까지'라고 하면 90000. 가점만으로 답하면 살 수 없는 단지가 섞인다
budget_min_10kNo예산 하한(만원)
house_manage_noNorealty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say read-only/idempotent, but the description discloses far more: the reason an empty array appears is disambiguated via freshness_verdict.verdict with five enumerated values, and it warns never to report 'no competition rate' on not_yet_collected. It documents distinct rejection modes (error/result = not_found vs lookup_failed) that differ structurally from normal responses, plus warning_sample_concentration when the sample is 1-2 complexes — none of which is inferable 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the sibling routing are front-loaded and strong. However, the body is very long and carries internal changelog metadata ('2026-08-20 축 신설', 'T-2026W37-81', '실측(공고 2026000323)') plus a meta note about backticks vs quotes, which consumes agent context without improving tool selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, no-output-schema tool this is close to complete: it names the response fields the agent must read (freshness_verdict.verdict, result_status_legend, allocated_households_rank1_local, allocated_households_basis.range, score_status, estimate_superseded), describes both automatic paths, and signals the handoff to realty_presale_vs_market. Given no output schema exists, this disclosure is essential and largely provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameter meaning is already largely documented, but the description adds decision-relevant context: it says budget_max_10k omitted yields answers mixing unaffordable complexes, explains that sigungu with zero samples should widen to 시도, and clarifies that regional benchmarks don't require house_manage_no. It adds real guidance beyond the schema, though it repeats some enum explanations already present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: returns 청약 경쟁률 and actual 당첨 가점 커트라인, framed as the quantitative answer to a concrete user question. It explicitly separates itself from the sibling realty_subscription_score (score computation) and realty_presale_vs_market (price adequacy), so an agent can route 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules: send users who don't know their score to realty_subscription_score first and feed the result into my_score; use breakdown='sigungu' for '어디까지 되나' questions and quarter/year for '언제가 쌌나'; add budget_max_10k whenever budget is mentioned. It also states exclusions — do not answer with a single 시도, do not estimate probabilities.

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점) 적용A
Read-onlyIdempotent
Inspect

민영주택 일반공급 청약 가점(만점 84)을 배점표로 계산한다.

민영주택 일반공급 가점제 점수(만점 84)를 **선언된 값**에 배점표를 적용해 계산한다 —
무주택기간 32 + 부양가족 35 + 통장 가입기간 17. "내 청약 가점 몇 점이야?"의 자리다.

경계를 지켜라: ① 세 입력 전부 **선언**이다 — 기산점·부양가족 인정은 등본·혼인관계
사실판단이라 서버가 판정하지 않고, 응답 traps(오기입=부적격 당첨 취소 사유)를 반드시
함께 전하라. ② 산출 점수는 realty_subscription_odds의 my_score로 넘겨 당첨 커트라인과
비교하는 것이 다음 수다. ③ 배점표 원문·기산 규칙은
realty_policy_rules(topic=subscription_account)가 진실원이다.
NameRequiredDescriptionDefault
is_homeownerNo현재 유주택 여부 — True면 무주택기간 점수가 0점이 된다(소형·저가주택 등 무주택 간주 예외 해당 여부는 사실판단이라 호출자가 반영해 선언)
account_yearsYes청약통장 가입기간(년, 소수 허용 — 예: 0.4=약 5개월). 전환 통장은 종전 통장 최초 가입일 기준 (허용 범위 0~60)
no_house_yearsYes무주택기간(년, 소수 허용 — 예: 7.5). 기산점(만 30세 vs 혼인신고일, 유주택 이력 재기산)은 사실판단이라 호출자가 확정해 선언한다 — 응답의 traps를 함께 전하라 (허용 범위 0~60)
dependents_countYes부양가족 수(본인 제외). 직계존속 3년 동거·30세 이상 미혼자녀 1년 동거 등 인정 요건은 사실판단 — 확정해 선언한다 (허용 범위 0~20)
under30_unmarriedNo만 30세 미만 미혼 여부 — True면 무주택기간 점수가 0점이 된다(무주택기간 기산 전)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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시군구 수급 균형 — 입주 예정 대 세대 증가A
Read-onlyIdempotent
Inspect

시군구마다 앞으로 들어올 아파트와 늘어나는 세대를 같은 창으로 나눠 수급을 판정한다.

"○○ 공급 과잉이야?", "세종 대전 서울 경기 수급", "어디가 입주 대비 수요가 많아?"류 질문의
자리 — 입주(청약홈 공고, 향후 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`로 밝혀라.
NameRequiredDescriptionDefault
regionYes시도(예: '경기', '서울', '세종') 또는 시군구(예: '평택시', '서울 강남구'). 시도를 주면 소속 시군구 표 + 시도 합계, 시군구를 주면 그 행 + 시도 합계. 동명 시군구('중구')는 시도를 붙여라 — 안 붙이면 후보를 돌려준다. '광주'는 광역시·경기 광주시가 갈려 '광주광역시' 또는 '광주시'로 줘라
horizon_monthsNo입주를 **다음 달부터 몇 개월** 볼지(기본 24). 비율은 이 창을 연 단위로 환산해 12개월 세대 증가와 나눈다. 30개월을 넘기면 뒤쪽은 아직 공고 전이라 과소로 나온다 (허용 범위 6~60)
include_footnotesNotrue면 계산값 근거 전문(산식·모집단·기간·원천)을 footnotes에 싣는다. 기본은 행마다 한 줄 요지

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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공고 전 공급 파이프라인 — 사업승인 기준 예정 물량A
Read-onlyIdempotent
Inspect

아직 공고가 안 난 예정 공급을 사업계획승인 기준으로 본다.

**아직 분양 공고가 안 난** 예정 공급을 사업계획승인 기준으로 본다 — "지금 넣을까,
다음 걸 기다릴까", "이 동네 앞으로 입주 폭탄 있나"류 질문의 자리.

청약홈(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차로도 안 메워진다.
NameRequiredDescriptionDefault
limitNo사업 목록 상한 (기본 30) (허용 범위 1~100)
to_ymNoYYYYMM (기본 from_ym+60개월)
monthsNofrom_ym부터 **몇 개월**을 볼지 — to_ym 대신 쓰는 간편 인자(예: 24). to_ym과 함께 주면 오류다(realty_move_in_supply와 같은 계약) (허용 범위 1~120)
regionNo지역 — 시도·시군구·동 부분일치 (예: '세종', '세종특별자치시 합강동', '수원시'). ⚠️ 짝 도구 realty_move_in_supply의 region은 **시도 전용**이다 — 인자를 그대로 옮겨 부르지 마라
from_ymNoYYYYMM (기본 이번 달)

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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빈집(미거주주택) — 시군구 빈집 수·비율·건축연도·원인 유형A
Read-onlyIdempotent
Inspect

통계청 빈집(미거주주택) — 빈집 수·빈집 비율·전체 주택, 아파트/비아파트, 건축연도 구간, 원인 유형.

"○○ 빈집 몇 채야", "빈집 왜 늘었어", "빈집률 높은 시", "과천 빈집", "지방 빈집"류 질문의 자리다.
시군구를 주면 연도 시계열(2015~)·아파트/비아파트 분리·건축연도 구간(최근 2년 준공·1980년대·1979 이전 등)·
재고 대 세대 증감 분해·준공후 미분양 몫·**같은 유형(시·구·군) 안 백분위**·원인 유형 라벨
(정비사업 이주형·공급·입주형·인구유출·노후형·관광·세컨드형(추정), 규칙과 근거 수치 동봉)을 준다.

**결론에 반드시 옮길 것**:
· `definition` — 통계청 미거주주택은 조사 시점(11월 1일) 비어 있는 집 전부(매매·이사 대기·미분양 포함)이고
  **법정 빈집(1년 이상 미사용)과 다르다.** 지자체 법정 빈집 실태조사 수치는 이 도구에 없다.
· 빈집 수(vacant_housing_count)와 빈집 비율(vacancy_rate_pct)을 섞지 마라.
· 원인 유형은 우리 규칙의 라벨이고, 빈집률로 가격을 내다보지 마라 — 같은 기간 동행 관측만 있다
  (meta.findings_not_prediction).
· null 값은 0이 아니다 — null_reasons(KOSIS 비공개 'X' 등)를 옮겨라.
NameRequiredDescriptionDefault
limitNo순위·하위 지역 행 수 (허용 범위 1~60)
regionNo'전국'·시도('경기')·시군구('과천시', '서울 중구'). 동명 시군구는 시도를 붙여라 — 안 붙이면 후보를 돌려준다. 구가 있는 시(수원·성남 등)는 시 단위만 있다. rank_by로 순위를 볼 땐 비워 둔다
rank_byNoregion 없이 순위를 볼 때 — 같은 area_type 안에서만 정렬한다(빈집률·빈집 수·5년 빈집률 변화)
area_typeNo순위의 유형 — rank_by와 함께 필수. 시·구·군을 섞은 순위는 내지 않는다

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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='질문기록'은 기능·개선 요청, kind='유료이용문의'·
'후원문의'는 사용자가 유료 이용 희망·후원 의사를 운영자에게 전해 달라고 한 경우다.
사용자가 오류·불만·개선 희망·유료 이용 희망·후원 의사를 말했지만 전달을 부탁하지는 않았다면,
부르지 말고 "운영자에게 전해 드릴까요?"를 한 줄로 물어 동의할 때만 부른다(거절·무반응이면
다시 묻지 않는다). 응답의 접수번호(ref)를 사용자에게 알린다.

쓰지 않는 때: 사용자가 요청하지 않았는데 질문을 남기려고 부르지 않는다. 답하기 전에
먼저 부르지도 않는다 — 이 도구는 답변·정정을 대신하지 않는다.

전달 내용(인자)과 같은 사용자의 직전 호출 기록 요약이 운영자 검토용으로 저장된다
(개인정보처리방침 https://realty.sallim.app/privacy). 연락처(contact)는 사용자가 회신을 원해
직접 준 경우에만 담고, 회신에만 쓴다. 무인증 공개 서버라 쓰기 표면을 이
도구 하나로 묶어 시간당 상한(전체 60건·발신자당 20건)을 걸고, 일일 조회 한도(quota)와는
무관하게 접수된다.
NameRequiredDescriptionDefault
kindNo'결함'=사용자가 답이 틀렸다고 제보해 달라고 한 경우(기본). '질문기록'=기능요청 — 사용자가 '이런 질문에도 답하게 해 달라'·'이 데이터도 넣어 달라'처럼 **개선 요청을 전해 달라고 한 경우** — 그 질문과 무엇이 없었는지를 넘긴다(응답에 그 질문이 어느 도구 축에 해당하는지가 `routing`으로 함께 온다). '유료이용문의'=사용자가 유료 이용·한도 확대를 원한다며 운영자에게 전해 달라고 한 경우. '후원문의'=사용자가 후원 의사를 전해 달라고 한 경우. 사용자가 요청하지 않은 내용을 기록용으로 넘기지 않는다결함
contactNo회신받을 연락처(이메일 등, 200자 이내) — **사용자가 회신을 원한다며 직접 알려 준 값만** 넣는다. 넣기 전에 '운영자가 회신에만 쓰고 개인정보처리방침에 따라 보관한다'고 알리고 동의를 받는다. 대화에서 짐작하거나 다른 데서 가져와 채우지 않는다
problemNo사용자가 제보한 문제. 사용자가 지적한 말을 그대로 옮겨도 된다. kind='결함'·'유료이용문의'·'후원문의'면 필수(문의 내용), kind='질문기록'이면 비워도 된다.
expectedNo사용자가 맞다고 본 값이 있으면
questionNo사용자가 제보·개선 요청과 함께 전해 달라고 한 질문(kind='질문기록'이면 필수). ⚠️ **개인 식별 조합은 일반형으로 바꿔서 넣는다** — 소득·보유자산·보유단지·거주지 중 둘 이상이 겹치면 그대로 적지 말 것(예: '○○아파트 33평 보유 + 주식 10억 + 잠실 거주' → '1주택 보유(대출 없음), 인근 재건축 단지로 갈아타기'). 무인증 공개 서버의 로그다
tool_usedNo문제가 된 답을 만든 도구 이름
wrong_valueNo틀린 수치·문장
missing_axisNoanswered_fully=false일 때 **없어서 못 답한 것**(예: '단지별 구조형식(벽식/라멘) 라벨 없음', '경기 정비사업 단계 조회 불가 — 서울 한정')
answered_fullyNokind='질문기록' 전용 — 이 서버 도구만으로 그 질문에 완결된 답을 했는가. false면 missing_axis에 무엇이 없었는지 적는다

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare not-readOnly, not-idempotent, not-destructive; the description adds what annotations cannot: rate limits (60/hour overall, 20/sender), that it runs on an unauthenticated public server, that the arguments plus a summary of the user's prior call are persisted for operator review, that reporting is independent of the daily quota, and that contact is used only for replies under a linked privacy policy. These are exactly the operational facts an agent needs before invoking a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structure is strong: the gating condition is the first clause, followed by when/when-not, consent protocol, then operational caveats. It is long (~8 sentences) and restates the four kind values that the schema already defines, which is some duplication, but nearly every sentence carries a decision-relevant constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Nine optional parameters, no output schema, and a mutation on a public server is a lot of surface to cover; the description closes the important gaps by stating the response contains an acceptance number (ref) to relay to the user, defining the consent precondition, and disclosing storage and rate limits. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all nine parameters in depth; the description still earns credit for tying them to the consent flow — contact is populated only from a value the user volunteered, and the 'what is transmitted' disclosure must precede the call. It does not add new syntax or format detail beyond the schema, so it sits just above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb (send to operator) and resource (error report / improvement request) and bounds it with 'only when the user asked you to relay it.' Against a sibling list of 50+ read-only realty_* query tools, this is unambiguously the single write/report surface, and the description says so explicitly ('쓰기 표면을 이 도구 하나로 묶어').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use triggers with quoted user utterances ('이거 틀렸으니 신고해 줘'), a when-not-to-use section (don't call unprompted, don't call before answering), and a precise consent protocol — ask one line, call only on agreement, never re-ask after refusal or silence. The kind-to-scenario mapping further removes ambiguity about which variant to send.

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.

  1. 1 tool update
    • Changedrealty_search_complexes1 field changed
      • changedInput schema / properties / construction_year_band / description
        Previous value: -"**연식을 맞춰 단지끼리 견줄 때** 넣는 기준 준공연도. 예: 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)"New value: +"**연식을 맞춰 단지끼리 견줄 때** 넣는 기준 준공연도. 예: 2018 → 2013~2023년 준공(±5년, 폭 10년)이 비교군이 된다. **연식은 ㎡단가를 가장 강하게 끄는 축이다** — 법정동 안에서 준공연도와 ㎡단가의 순위상관 ρ 중앙값이 +0.7381로 평형(+0.2143)·입지점수(+0.1429)보다 지배적이라, 연식이 섞인 비교는 사실상 '신축 순'이 되기 쉽다(⚠️ 방향은 지역마다 반대일 수 있다 — **서울은 ρ +0.2947이고 구축이 더 비싼 동이 30.1%, 세종은 36.8%**다. 재건축 기대가 가격에 들어간 U자 구간이다). ⚠️ 이 인자도 검색을 거르지 않는다 — 밴드 밖 단지는 목록에 남고 행마다 in_year_band로 갈라 적힌다(준공연도가 원장에 없으면 null: **판정 불가이지 구식이 아니다**). area_band_m2와 함께 주면 둘 다 걸린다 (허용 범위 1900~2100)"
  2. 1 tool update
    • Changedrealty_region_rankings1 field changed
      • addedInput schema / properties / area_bucket
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "under60",
        +        "60-85",
        +        "85-115",
        +        "over115"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "metric=growth 전용 면적대(전용㎡) — under60·60-85(기본)·85-115·over115. 같은 면적대 안에서만 YoY를 비교한다. 다른 metric엔 적용되지 않는다",
        +  "title": "Area Bucket"
        +}
  3. 1 tool update
    • Changedreport_issue4 fields changed
      • addedInput schema / properties / contact
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "회신받을 연락처(이메일 등, 200자 이내) — **사용자가 회신을 원한다며 직접 알려 준 값만** 넣는다. 넣기 전에 '운영자가 회신에만 쓰고 개인정보처리방침에 따라 보관한다'고 알리고 동의를 받는다. 대화에서 짐작하거나 다른 데서 가져와 채우지 않는다",
        +  "title": "Contact"
        +}
      • changedInput schema / properties / kind / description
        Previous value: -"'결함'=사용자가 답이 틀렸다고 제보해 달라고 한 경우(기본). '질문기록'=사용자가 '이런 질문에도 답하게 해 달라'·'이 데이터도 넣어 달라'처럼 **개선 요청을 전해 달라고 한 경우** — 그 질문과 무엇이 없었는지를 넘긴다(응답에 그 질문이 어느 도구 축에 해당하는지가 `routing`으로 함께 온다). 사용자가 요청하지 않은 질문을 기록용으로 넘기지 않는다"New value: +"'결함'=사용자가 답이 틀렸다고 제보해 달라고 한 경우(기본). '질문기록'=기능요청 — 사용자가 '이런 질문에도 답하게 해 달라'·'이 데이터도 넣어 달라'처럼 **개선 요청을 전해 달라고 한 경우** — 그 질문과 무엇이 없었는지를 넘긴다(응답에 그 질문이 어느 도구 축에 해당하는지가 `routing`으로 함께 온다). '유료이용문의'=사용자가 유료 이용·한도 확대를 원한다며 운영자에게 전해 달라고 한 경우. '후원문의'=사용자가 후원 의사를 전해 달라고 한 경우. 사용자가 요청하지 않은 내용을 기록용으로 넘기지 않는다"
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "결함",
        -  "질문기록"
        -]New value: +[
        +  "결함",
        +  "질문기록",
        +  "유료이용문의",
        +  "후원문의"
        +]
      • changedInput schema / properties / problem / description
        Previous value: -"사용자가 제보한 문제. 사용자가 지적한 말을 그대로 옮겨도 된다. kind='결함'이면 필수, kind='질문기록'이면 비워도 된다."New value: +"사용자가 제보한 문제. 사용자가 지적한 말을 그대로 옮겨도 된다. kind='결함'·'유료이용문의'·'후원문의'면 필수(문의 내용), kind='질문기록'이면 비워도 된다."

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Connects 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.
    16
    379
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI clients to search Korean court auction real estate by court, region, usage, sale date, appraisal/minimum price, and failure count; fetch case details; collect and resume jobs; and export results to Excel, CSV, and JSONL.
    7
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables Claude to pull live Korean property transaction, rent, and subscription data — apartments, officetels, villas, single/multi-households, and commercial buildings — from the MOLIT public data API, and to model buy-now, buy-later, or invest-only scenarios against a user's income, savings, and retirement goals. It also supports region code lookups so queries can be scoped to specific districts.
    16
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to query Korean apartment real-estate data, including official transaction prices, jeonse ratios, and AI price forecasts for 45,000+ complexes.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.