# app.sallim/korea-realty (remote · realty.sallim.app)

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

- Trust score: 70/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-17

## Components

- remote · `realty.sallim.app`: 70/100 (this document), [markdown](https://verifymcp.io/servers/app-sallim-korea-realty/realty-2.md), [page](https://verifymcp.io/servers/app-sallim-korea-realty/realty-2)

## Channel facts

- Endpoint: `https://realty.sallim.app/mcp?via=official`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.56.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-17.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 59/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 24989 tokens (~531/item across 47 items; 47 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 90% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http app-sallim-korea-realty https://realty.sallim.app/mcp?via=official
```

### Codex

```toml
[mcp_servers.app-sallim-korea-realty]
url = "https://realty.sallim.app/mcp?via=official"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "app-sallim-korea-realty": {
      "type": "remote",
      "url": "https://realty.sallim.app/mcp?via=official",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add app-sallim-korea-realty --url https://realty.sallim.app/mcp?via=official --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  app-sallim-korea-realty:
    url: "https://realty.sallim.app/mcp?via=official"
```

### Other

```json
{
  "mcpServers": {
    "app-sallim-korea-realty": {
      "type": "http",
      "url": "https://realty.sallim.app/mcp?via=official"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-17 (score 70, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “realty_search_auctions” rewrote its description, which is the text the model reads
- [security] Tool “realty_subscription_odds” rewrote its description, which is the text the model reads
- [security] Tool “realty_auction_sale_rate” rewrote its description, which is the text the model reads
- [security] Tool “realty_compare_auction_vs_market” rewrote its description, which is the text the model reads
- [functional] Server version: 0.55.2 → 0.56.0
- [functional] Server version: 0.52.0 → 0.55.2
- [functional] Server version: 0.48.6 → 0.52.0
- [cosmetic] “realty_subscription_odds” added an optional parameter “budget_min_10k”
- [cosmetic] “realty_subscription_odds” added an optional parameter “budget_max_10k”
- [cosmetic] “realty_subscription_odds” added an optional parameter “breakdown”
- [cosmetic] “realty_subscription_odds” added an optional parameter “area_band”
- [cosmetic] “realty_area_price_bands” added an optional parameter “by_dong”
- [cosmetic] “realty_auction_sale_rate” added an optional parameter “area_band”
- [cosmetic] “realty_nonapt_prices” added an optional parameter “area_band”
- [cosmetic] “realty_policy_rules” reworded the description of “topic”
- [cosmetic] “realty_area_price_bands” reworded the description of “region”

### 2026-08-16 (score 70, +1)

- [security] Tool “realty_loan_eligibility” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: excellent → unverified
- [functional] Server version: 0.48.4 → 0.48.6
- [functional] Server version: 0.47.3 → 0.48.4
- [cosmetic] “realty_policy_rules” reworded the description of “topic”
- [cosmetic] “realty_loan_eligibility” reworded the description of “purpose”

### 2026-08-15 (score 69, 0)

- [security] Tool “realty_auction_history” rewrote its description, which is the text the model reads
- [functional] Server version: 0.46.5 → 0.47.3
- [functional] Server version: 0.43.0 → 0.46.5
- [functional] New tool “realty_loan_eligibility”
- [cosmetic] “realty_complex_rent_by_pyeong” added an optional parameter “compare_sale”
- [cosmetic] “realty_policy_rules” reworded the description of “topic”

### 2026-08-14 (score 69, +1)

- [functional] Server version: 0.41.4 → 0.43.0
- [functional] Server version: 0.35.0 → 0.41.4
- [functional] New tool “realty_region_trend_basket”
- [cosmetic] “realty_complex_pyeong_price” added an optional parameter “quoted_prices_10k”
- [cosmetic] “realty_complex_pyeong_price” added an optional parameter “quoted_price_10k”

### 2026-08-13 (score 68, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “realty_loan_limit” rewrote its description, which is the text the model reads
- [security] Tool “report_issue” rewrote its description, which is the text the model reads
- [security] Tool “realty_redevelopment” rewrote its description, which is the text the model reads
- [security] Tool “realty_presale_funding_plan” rewrote its description, which is the text the model reads
- [security] Tool “realty_policy_rules” rewrote its description, which is the text the model reads
- [security] Tool “realty_subscription_odds” rewrote its description, which is the text the model reads
- [security] Tool “realty_compare_auction_vs_market” rewrote its description, which is the text the model reads
- [security] Tool “realty_compare_regions” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 403 → 482
- [functional regression] Schema quality: 403 → 451
- [functional regression] Schema quality: 16562 → 18276
- [functional] Server version: 0.27.0 → 0.35.0
- [functional] Server version: 0.25.0 → 0.27.0
- [functional] Server version: 0.22.6 → 0.25.0
- [functional] Server version: 0.22.3 → 0.22.6
- [functional] New tool “realty_member_transfer_check”
- [functional] New tool “realty_capital_gains_tax”
- [functional] New tool “realty_subscription_score”
- [functional] New tool “realty_redevelopment_burden”
- [cosmetic] “realty_loan_limit” added an optional parameter “credit_loan_10k”
- [cosmetic] “realty_loan_limit” added an optional parameter “credit_loan_rate_pct”
- [cosmetic] “realty_loan_limit” added an optional parameter “desired_loan_10k”
- [cosmetic] “realty_loan_limit” added an optional parameter “rate_fixed_years”
- [cosmetic] “realty_loan_limit” added an optional parameter “rate_type”
- [cosmetic] “realty_presale_funding_plan” added an optional parameter “credit_loan_10k”
- [cosmetic] “realty_presale_funding_plan” added an optional parameter “credit_loan_rate_pct”
- [cosmetic] “realty_presale_funding_plan” added an optional parameter “rate_fixed_years”
- [cosmetic] “realty_presale_funding_plan” added an optional parameter “rate_type”
- [cosmetic] “report_issue” added an optional parameter “answered_fully”
- [cosmetic] “report_issue” added an optional parameter “kind”
- [cosmetic] “report_issue” added an optional parameter “missing_axis”
- [cosmetic] “realty_presale_funding_plan” added an optional parameter “expected_price_at_movein_10k”
- [cosmetic] “realty_presale_funding_plan” added an optional parameter “jeonse_deposit_10k”
- [cosmetic] “realty_compare_auction_vs_market” added an optional parameter “court_name”
- [cosmetic] “report_issue” reworded the description of “problem”
- [cosmetic] “report_issue” reworded the description of “question”
- [cosmetic] “realty_policy_rules” reworded the description of “topic”
- [cosmetic] “report_issue” made “problem” optional
- [cosmetic] Tool “realty_policy_rules” changed its title: 법령·규제 규범 — 취득세율표·규제지역 현황 → 법령·규제 규범 — 세율표·규제지역·대출·임대차·청약·정비사업 규칙

### 2026-08-12 (score 68, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “realty_presale_cost” rewrote its description, which is the text the model reads
- [security] Tool “realty_policy_rules” rewrote its description, which is the text the model reads
- [security] Tool “realty_area_price_bands” rewrote its description, which is the text the model reads
- [security] Tool “realty_auction_alerts” rewrote its description, which is the text the model reads
- [security] Tool “realty_auction_history” rewrote its description, which is the text the model reads
- [security] Tool “realty_auction_sale_rate” rewrote its description, which is the text the model reads
- [security] Tool “realty_compare_auction_vs_market” rewrote its description, which is the text the model reads
- [security] Tool “realty_compare_regions” rewrote its description, which is the text the model reads
- [security] Tool “realty_complex_pyeong_price” rewrote its description, which is the text the model reads
- [security] Tool “realty_get_auction_case” rewrote its description, which is the text the model reads
- [security] Tool “realty_location_scores” rewrote its description, which is the text the model reads
- [security] Tool “realty_move_in_supply” rewrote its description, which is the text the model reads
- [security] Tool “realty_poi_nearby” rewrote its description, which is the text the model reads
- [security] Tool “realty_presale” rewrote its description, which is the text the model reads
- [security] Tool “realty_presale_vs_market” rewrote its description, which is the text the model reads
- [security] Tool “realty_region_price_stats” rewrote its description, which is the text the model reads
- [security] Tool “realty_region_rankings” rewrote its description, which is the text the model reads
- [security] Tool “realty_search_auctions” rewrote its description, which is the text the model reads
- [security] Tool “realty_search_complexes” rewrote its description, which is the text the model reads
- [security] Tool “realty_supply_pipeline” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 310 → 403
- [functional regression] Schema quality: 310 → 374
- [functional] Server version: 0.20.1 → 0.22.3
- [functional] Server version: 0.16.3 → 0.20.1
- [functional] New tool “realty_loan_limit”
- [functional] New tool “realty_presale_funding_plan”
- [functional] New tool “realty_policy_rules”
- [functional] New tool “realty_presale_cost”
- [functional] New tool “realty_presale_price_trend”
- [cosmetic] “realty_search_auctions” added an optional parameter “exclude_past”
- [cosmetic] “realty_policy_rules” reworded the description of “topic”

### 2026-08-11 (score 68, +3)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-10 (score 65, −1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “realty_location_scores” rewrote its description, which is the text the model reads
- [security] Tool “realty_presale” rewrote its description, which is the text the model reads
- [security] Tool “realty_subscription_odds” rewrote its description, which is the text the model reads
- [functional improvement] Stability: unverified → 0.03
- [functional] Schema quality: excellent → good
- [functional] Server version: 0.12.1 → 0.14.0
- [functional] New tool “realty_notice_facts”
- [functional] New tool “realty_notice_text”

## MCP tools (47)

### `search` (~249 tokens)

경매 물건 검색

법원경매 물건을 자연어로 검색한다. **경매 전용** — 청약·분양 공고는 realty_presale,
    분양가 적정성은 realty_presale_vs_market, 시세 통계는 realty_region_price_stats.

    지역·물건종류·유찰횟수·감정가를 질의에서 뽑아 필터링한다.
    예: "서울 강남구 아파트", "유찰 2회 이상인 경기도 오피스텔", "서울 아파트 감정가 5억 이하".

    이 파서는 최소 어댑터라 못 쓰는 축(면적·기일·층 등)이 있다. 못 쓴 조건은 응답의
    `unapplied_conditions`에 적히므로, 그게 비어 있지 않으면 결과 범위를 좁게 오인하지 말고
    `realty_search_auctions`로 조건을 직접 지정해 다시 조회하라.

    각 결과의 id는 이어서 fetch(id)에 그대로 넣으면 상세를 볼 수 있다.

Input parameters:

- `query` (string, required)

### `fetch` (~151 tokens)

경매 사건 상세

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

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

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

Input parameters:

- `id` (string, required)

### `realty_search_auctions` (~981 tokens)

경매 물건 조건 검색

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

    **법원경매(대법원)만 담고 있다 — 공매(온비드·캠코)는 이 원장에 없다.** 여기서 안 나온다고
    "그런 물건 없다"고 답하지 마라. 공매면 온비드에서 확인해야 한다고 말하는 것이 정답이다
    (2026-08-17 실측: 공공데이터포털 온비드 서비스는 우리 계정에 활용신청이 안 돼 있다).

    감정가(min_price_10k/max_price_10k)는 **만원** 단위다 — 5억은 50000.
    유찰이 많을수록 최저입찰가가 감정가 대비 낮아진다(`min_bid_rate`가 그 비율).

    ⚠️ **이 목록에는 매각기일이 이미 지난 행이 섞여 있다**(백엔드가 기일로 걸러주지
    않는다 — 인천 아파트 3억 이하 실측 48건 중 43건이 지난 기일). 지난 기일 행에는
    `past_auction_note`가 붙고 응답의 `past_auction_count`가 그 페이지의 건수다.
    "지금 살 수 있어?"류 질문이면 `exclude_past=true`로 걸러라 — 지난 기일 물건은
    매각·취하됐거나 다음 기일이 아직 반영되지 않은 것이라 현재 매물로 인용하면 오답이다.

    ⚠️ **최저입찰가는 출처를 반드시 확인해라** — 건별 `min_bid_source`가 붙는다.
      · `court_schedule` — 법원 기일표 정본이다. 그대로 믿어도 된다(활성의 28.8%).
      · `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_fail_count로 여기서 걸러도 같은 축 — 결과를 합쳐 세지 마라).

Input parameters:

- `exclude_past` (boolean): 매각기일이 이미 지난 행 제외 여부. 기본 False(전체 반환 — 지난 기일 행에는 past_auction_note 플래그가 붙는다). '지금 입찰 가능한 물건' 질문이면 True로 호출하라 — 오늘 이후 기일(기일 미정 포함)만 남는다.
- `limit` (integer): 반환 개수 (최대 50)
- `max_price_10k`: 최대 감정가, **만원** 단위
- `min_bid_count`: 최소 유찰 횟수. 유찰이 쌓일수록 최저입찰가가 내려간다.
- `min_price_10k`: 최소 감정가, **만원** 단위 (5억이면 50000)
- `offset` (integer): 페이지 오프셋. has_more가 true면 next_offset으로 다시 호출하라.
- `sido`: 시도. '서울'처럼 줄여 써도 되고 '서울특별시'도 된다.
- `sigungu`: 시군구 (예: 강남구, 성남시)
- `sort` (string): 정렬 기준
- `usage_name`: 물건 종류 (아파트, 오피스텔, 다세대, 단독주택, 상가, 토지 등)

### `realty_get_auction_case` (~360 tokens)

경매 사건 상세 조회

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

    사건번호는 법원 간 유일하지 않다(전국 평균 2.8개 법원에서 중복). court_name을 생략하면
    중복 시 오류와 함께 후보 법원 목록이 돌아오니, 그걸 보고 법원을 지정해 다시 호출하라.

    `rights` = 매각물건명세서 핵심(최선순위 설정·인수되는 권리 원문·위험 플래그·배당요구종기).
    이것은 법원 공시의 전달이지 권리분석 판단이 아니다 — 답할 때 rights.disclaimer를 함께
    전하고, 등기부·임차인 현황 전체가 아님을 밝혀라. rights가 null이면 명세서 미수집
    상태(rights_note에 사유)이므로 권리관계를 절대 지어내지 말 것.
    ⚠️ `rights.claim_amt_10k`는 **경매신청 채권자의 청구금액**(만원)이다 — 임차인
    보증금이 아니다(claim_amt_note 참조). 보증금 액수는 이 데이터에 없다.
    `min_bid_source`가 item_list면 최저가가 낡았을 수 있다 — 함께 오는 `min_bid_note`를
    사용자에게 전하고 단정하지 마라(목록 도구와 같은 경고다).
    유찰 이력·기일별 저감·사진은 realty_auction_history가 담당이다.

Input parameters:

- `case_no` (string, required)
- `court_name`

### `realty_compare_auction_vs_market` (~663 tokens)

경매가 vs 실거래 시세 비교

경매 물건의 최저입찰가를 같은 단지 실거래 시세와 대조해 할인율·표면수익률을 낸다.
    기본은 **오늘 이후 기일 물건만**이다(지난 기일이 섞여 나오던 결함 수리, 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(추이).

Input parameters:

- `case_no`
- `court_name`: 법원명 — case_no와 함께 쓴다. 사건번호는 법원 간 유일하지 않아(평균 2.8배 중복) 이걸 빼면 다른 법원 물건이 섞이고 최저가 출처도 확정되지 않는다
- `include_past` (boolean): 지난 기일 물건 포함 여부 — 기본은 오늘 이후 기일만(입찰 가능 후보). case_no 특정 조회는 이 값과 무관하게 기일 제한이 없다
- `limit` (integer): 비교할 물건 수 (최대 50)
- `sido`
- `sigungu`
- `usage_name` (string)

### `realty_auction_sale_rate` (~662 tokens)

낙찰가율 통계

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

    입찰가를 정할 때 쓰는 핵심 지표다. `by_fail_count`에 유찰 횟수별 분포가 들어 있어
    "2회 유찰된 물건은 보통 몇 %에 낙찰되는가"를 바로 읽을 수 있다.
    낙찰가율 = 낙찰가 / 감정가 × 100. 100%를 넘으면 감정가보다 비싸게 팔린 것이다.

    표본의 집계 기간은 응답의 `sample_period`(매각기일 min~max)에 있다 — "요즘"류
    질문에는 이 범위를 함께 전하라. 기간을 좁히는 파라미터는 백엔드가 지원하지 않는다
    (요청해도 조용히 무시됨을 실측했다 — 그래서 노출하지 않는다).

    usage_name에 '빌라'를 넣으면 표준 분류인 '다세대'로 자동 매핑해 집계한다(원문
    '빌라'는 소수 비표준 표기 행만 잡혀 표본이 조용히 왜곡된다 — 응답에 매핑 사실이
    공시된다). 연립주택 통계는 usage_name='연립주택'으로 따로 물어라.

    **평형을 섞지 마라(2026-08-16 축 신설)**: 응답의 `by_area_band`가 전용면적대별
    낙찰가율이다. 실측(사건 중복 제거): 아파트 전국 전체 79.2%인데 전용 59㎡ 이하 75.7%,
    60~84㎡ 82.2%, 서울은 88.9% vs 97.3%다. 대상 물건의 평형을 알면 `area_band`로 좁히고,
    지역 요약 하나로 입찰가를 정하지 마라. '면적 미상' 밴드는 공고에 면적 표기가 없는
    사건이지 0이 아니다.

    **이 축의 자리(경매 가격판단 3종 중)**: 이 %는 **감정가 대비** 통계다. 특정 물건이
    실거래 **시세** 대비 싼지는 realty_compare_auction_vs_market이 자동 계산한다 —
    분모가 다르니 두 %를 한 문장에 섞지 마라(감정가는 시세와 다른 시점·기준의 값이다).

Input parameters:

- `area_band`: 전용면적대로 좁힌다. 낙찰가율은 평형에 따라 갈린다 — 대상 물건의 평형을 알면 반드시 넣어라(응답의 by_area_band로도 확인된다)
- `bid_count_max`
- `sido`
- `sigungu`
- `usage_name` (string)

### `realty_auction_alerts` (~347 tokens)

급매 경매 물건

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

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

    **같은 축의 다른 문**: realty_search_auctions(min_fail_count)로도 유찰 물건을 거를 수
    있다 — 조건 필터·목록이 목적이면 그쪽, 저감 큰 후보 발굴(극단 할인 컷 포함)이면 이쪽.
    둘을 합쳐 세지 마라(같은 물건이 양쪽에 나온다).

Input parameters:

- `limit` (integer): 반환 개수 (최대 50)
- `max_discount_pct` (integer): 감정가 대비 최대 할인율(%) — 80%+ 극단 할인은 지분매각·대지권 없음 등 특수물건이 대부분이라, 실수요 후보를 찾을 땐 79 이하로 걸러라
- `min_bid_count` (integer): 최소 유찰 횟수
- `min_discount_pct` (integer): 감정가 대비 최소 할인율(%)
- `sido`: 시도 (예: 세종, 경기도)
- `sigungu`: 시군구 (예: 강남구, 수원시)
- `usage_name`

### `realty_auction_history` (~445 tokens)

경매 유찰 이력·가격 저감·사진

경매 사건의 유찰 이력(기일별 최저가 저감 시계열)·가격 변동 이벤트·물건 사진 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를 사용자에게 전하라(목록·상세와 같은 경고).

Input parameters:

- `case_no` (string, required)
- `court_name`

### `realty_region_price_stats` (~613 tokens)

지역 실거래 시세 통계

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

    **이 축의 자리(시세 도구 3종 중)**: 월별 흐름·방향이 필요할 때 이걸 쓴다. 지역의
    가격 **수준**을 인용할 거면 realty_area_price_bands를 쓰라 — 이 축은 이상치(지분·
    증여성 직거래)가 필터되지 않아 평균이 눌리며, **두 도구 값이 갈리면 bands 쪽이
    정상 매매에 가깝다**(세종 소형 실측 4,400만원 차). 단지가 특정된 질문("○○아파트
    얼마야")은 realty_search_complexes가 기본이다 — 지역 평균은 단지 간 편차(같은 동
    같은 평형에서 단지 평균 24% 차)를 뭉갠다.

    region은 시군구명(예: '강남구') 또는 **법정동까지**(예: '강남구 대치동',
    '세종특별자치시 나성동') — 세종처럼 시군구가 하나인 도시는 동 단위로 좁혀야 신도심·
    구도심이 섞이지 않는다(2026-08-08, 8/7 테스터 제안 수용). 동명 지역이 여럿이면
    시도를 앞에 붙여라 — 안 붙이면 거래량 최다 지역 기준으로 답하고 region_candidates로
    나머지 후보를 실토한다(그 목록을 사용자에게 전달할 것).
    metric: price(매매) | rental(전월세). rental도 **months 창 월별 추이**(monthly_trend:
    전세 평균·중앙, 월세 보증금·월세, 건수 분리)를 준다 — "전세 떨어지는 중이야?",
    역전세 판단용(입주 물량은 realty_move_in_supply와 조합). 상단 필드는 최신월 스냅샷.

    평수는 둘 중 사용자가 쓴 쪽에만 넣는다:
    - pyeong_supply: 분양평수(공급면적). 흔히 말하는 "34평"이 이것이다 — 내부에서 ×0.745로 환산한다.
    - pyeong_exclusive: 전용면적 기준 실평수. 이 데이터의 원래 기준이다.

Input parameters:

- `metric` (string): price=매매, rental=전월세
- `months` (integer): 조회 개월 수
- `pyeong_exclusive`
- `pyeong_supply`
- `region` (string, required)

### `realty_region_trend_basket` (~494 tokens)

지역 추이 — 동일 단지 고정 바스켓 (구성 변화 제거)

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

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

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

    한계를 반드시 함께 전하라: 바스켓이 얇으면(단지 수가 적으면) 이 값도 못 믿는다.
    취소·직거래는 제외했고, 단지 내 동·층 구성 변화까지는 보정하지 못한다.

Input parameters:

- `min_tx_per_complex` (integer): 바스켓에 넣을 단지의 창당 최소 거래 건수 — 1이면 바스켓이 커지지만 단지별 값이 한 건에 좌우된다
- `pyeong_band` (integer): pyeong_supply 기준 허용 폭(±평). 넓히면 바스켓이 커지고 평형 혼합이 늘어난다
- `pyeong_supply`: 분양평(사용자가 말하는 '34평') 필터 — ±3평 창으로 거른다. **좁힐수록 바스켓이 얇아져** 고정 바스켓의 이점이 사라지니 응답의 바스켓 단지 수를 반드시 확인하라
- `region` (string, required): 시군구명 (예: 용산구, 성동구)
- `window_months` (integer): 비교 창 하나의 길이(개월). 최근 N개월 vs 그 직전 N개월을 비교한다

### `realty_search_complexes` (~535 tokens)

아파트 단지 검색·평형별 시세

아파트 단지를 이름·지역으로 검색하고 **평형별 실거래 시세**를 함께 돌려준다.
    "○○아파트 34평 얼마야"류 단지 질문의 1차 도구다. query·region 중 하나는 필수.

    **이 축의 자리(시세 도구 3종 중)**: 단지가 특정되면 **이게 기본**이다. 지역 평균
    도구들(realty_region_price_stats·realty_area_price_bands)은 단지 간 편차를 뭉개므로
    단지 질문에 쓰지 마라 — 같은 동 같은 평형에서 단지 평균이 24% 벌어진 실측이 있다
    (동 평균 3.96억으로 답했다가 대장 단지 호가와 1억 어긋난 사고). 반대로 지역 전체의
    수준·추이 질문이면 저 둘로 가라.

    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·[유료] 단지 도구들에 그대로 넣는 키다.

Input parameters:

- `limit` (integer): 단지 수 — 평형별 시세가 포함돼 응답이 무겁다
- `page` (integer): 0부터 시작하는 페이지 번호
- `period_months`: 가격 집계 기간(개월). 비우면 2024-01 이후 전체
- `query`: 단지명 일부 (예: 래미안, 마포래미안푸르지오)
- `region`: 시군구명 (예: 마포구, 서울특별시 마포구)
- `sort` (string): name=이름순, price=평균가 높은순, year=준공연도

### `realty_complex_pyeong_price` (~611 tokens)

단지 평형별 매매 실거래 내역

특정 단지·특정 평형의 **최근 6개월 매매 실거래**를 건별(계약일·층·가격)로 조회한다.
    평형별 시세 요약만 필요하면 realty_search_complexes의 prices_by_area로 충분하다.

    응답에는 **층 밴드별 시세 집계 `price_by_floor_band`**(저층~초고층 밴드별 평균가·건수·
    최저 밴드 대비 프리미엄 %)가 함께 온다 — "저층 사면 손해야?", "고층 프리미엄 얼마야?"류
    **층별 시세 질문은 이 도구가 담당**이다(층 밴드 축은 다른 도구에 없다).

    평수는 pyeong_supply(분양)·pyeong_exclusive(전용) 중 사용자가 쓴 쪽에 넣어라 — 하나는 필수.
    이 도구는 매매 전용이다 — 전월세는 realty_complex_rent_by_pyeong을 쓴다.

Input parameters:

- `complex_name` (string, required): 단지명 (예: 마포래미안푸르지오2단지)
- `limit` (integer): 개별 거래 내역 수
- `pyeong_exclusive`: 전용면적 기준 실평수 — 분양평을 모를 때만
- `pyeong_supply`: 분양평수(공급면적) — 사용자가 말하는 '34평'이 보통 이것
- `quoted_price_10k`: 사용자가 **들은 가격**(호가·중개사 제시가·매물 가격, 만원). 주면 실거래 분포와 대조해 `quote_check`로 돌려준다. 이 서버는 **호가 데이터가 없다** — 실거래(MOLIT)뿐이라 '호가가 비싸다/싸다'를 판정하는 게 아니라 **실거래 어디쯤인지 위치만** 알려준다. 사용자가 가격을 말했는데 이 인자를 안 주면 모델이 그 값을 검증 없이…
- `quoted_prices_10k`: 사용자가 **매물 목록에서 복사·다운로드해 온 호가 여러 개**(만원 배열). 값이 2개 이상이면 단일 대조 대신 **호가 분포 ↔ 실거래 분포**를 비교한다(중위 대 중위, 두 구간이 겹치는지). 호가는 사용자가 가져온 것이라 서버는 **출처·수집시점·중복 매물 여부를 모른다** — 그 한계도 함께 응답에 싣는다
- `region`: 동명 단지 구분용 시군구명 (예: 마포구)

### `realty_complex_rent_by_pyeong` (~282 tokens)

단지 평형별 전월세 시세

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

    complex_key·complex_name 중 하나는 필수. 부분일치는 동명 단지가 섞일 수 있으니
    가능하면 realty_search_complexes로 complex_key를 먼저 특정하라.
    행 키 supply_pyeong은 **분양평**(전용㎡ ÷ 3.305 ÷ 0.745 반올림) 기준이다.

Input parameters:

- `compare_sale` (boolean): 같은 12개월 창의 **매매가를 함께 뽑아 전세가율·전월세 전환율·갭을 계산**한다(기본 켬). 종전엔 note가 '매매를 period_months=12로 따로 불러 나눠라'라고만 지시해 호출자가 손으로 했고, 창을 안 맞추면 전세가율이 수 %p 왜곡됐다 — 그 계산을 서버가 진다
- `complex_key`: 정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key
- `complex_name`: 키를 모를 때 단지명 부분일치

### `realty_area_price_bands` (~452 tokens)

지역 평형대별 시세 구간

지역의 매매 시세를 평형대 4구간(소형/중소형/중형/대형, 전용면적 기준)으로 조회한다.
    "○○구에서 무슨 평수대가 얼마쯤 해?"류 질문용 — 특정 단지는 realty_search_complexes를 쓰라.

    **이 축의 자리(시세 도구 3종 중)**: 지역의 가격 **수준** 비교는 이게 기본값이다.
    이상치 필터(P75의 50% 미만 제외)가 적용돼 realty_region_price_stats의 미필터 평균과
    값이 다르며, **수준이 갈리면 이쪽을 우선하라**. 월별 **추이**가 필요하면
    region_price_stats, 단지가 특정되면 search_complexes.

    구간 라벨의 평수는 **전용평**이다. 사용자의 분양평 감각으로는 소형<60㎡≈분양 24평 미만,
    중소형 60~85㎡≈분양 24~34평, 중형 85~115㎡≈분양 34~47평, 대형 115㎡+≈분양 47평 이상.

Input parameters:

- `by_dong` (boolean): 법정동 × 평형대 중앙값을 함께 낸다. '이 구에서 어디가 싼가'류 질문의 자리다 — 실측(마포구 6개월, 전용 60~84㎡): 서교동 6.8억 ~ 용강동 27.1억으로 한 구 안에서 4배 갈린다. 표본 3건 이상 칸만 나온다
- `period_months` (integer): 집계 기간(개월)
- `region` (string, required): 시군구명 (예: 마포구). **법정동까지 넣어도 된다**(예: '마포구 아현동') — 구 하나로 뭉치면 신도심·구도심이 한 값이 된다

### `realty_nonapt_prices` (~430 tokens)

비아파트 시세 — 빌라·오피스텔·단독주택

빌라(다세대·연립)·오피스텔·단독주택·토지의 실거래 **매매가**를 조회한다 — 아파트 밖
    질문의 1차 도구. 응답 = 최근 거래(recent) + 집계(stats: 표본 수·가격·상위 구성).

    **매매 데이터만 있다** — 전월세를 물으면 이 축엔 데이터가 없다고 답하라(추정 금지).
    면적 기준: villa/officetel은 전용면적(area_m2·area_pyeong), house는 대지(land_*)와
    건물(building_*) 분리, land는 계약면적·지목(land_category)·용도지역(zoning)이 온다.
    land의 share_type='지분' 행은 필지 일부 거래라 면적당 가격 비교에 쓰지 말 것(집계는
    지분·해제 제외 — 응답 note 참조). 아파트는 realty_region_price_stats·search_complexes 담당.

Input parameters:

- `area_band`: 전용면적대로 좁힌다(빌라·오피스텔만 — 단독주택은 전용면적 개념이 없다). 비아파트는 같은 동네에서도 면적 편차가 커서 지역 평균 하나로는 답이 안 된다. 안 넣어도 stats.by_area_band로 밴드별 분포가 온다
- `limit` (integer): 최근 거래 행 수
- `price_max`: 최대 매매가(만원)
- `price_min`: 최소 매매가(만원)
- `property_type` (string, required): villa=다세대·연립(빌라), officetel=오피스텔, house=단독·다가구, land=토지
- `region` (string, required): 지역명 부분일치 (예: 관악구, 서울특별시 강남구, 강남구 역삼동)

### `realty_location_scores` (~359 tokens)

단지 학군·교통 점수

단지의 학군(v5)·교통(지하철·버스) 점수를 조회한다 — "이 아파트 학군 어때? 역세권이야?"
    담당. complex_key/complex_name이면 단지 점수, region만 주면 지역 집계+축별 상위 5 단지.

    학군 점수는 학원가 강도+군집 보정의 **스크리닝 지표**다 — 학원가 데이터가 시 단위라
    도심 외곽 면/읍이 다소 높게 나올 수 있고, 학교 배정·수준 판단이 아니다(그렇게 팔지 말 것).
    subway_distance_m는 최근접역 직선거리(도보 거리 아님). 점수 미산정 단지는 not_found가
    정직한 답이다 — 지어내지 말고 realty_search_complexes로 단지 실존부터 확인하라.
    돌려주는 complex_key는 공백 1칸으로 정규화돼 있어 다른 도구에 그대로 넣을 수 있다.
    "역세권이야?"는 [유료] realty_poi_nearby와 겹친다 — 점수·스크리닝은 이쪽(무료),
    주변 시설의 실제 목록·거리가 필요하면 poi_nearby.

Input parameters:

- `complex_key`: 정확한 단지 키 — realty_search_complexes가 돌려주는 complex_key
- `complex_name`: 단지명 일부 (부분일치)
- `region`: 지역명 — 단독이면 지역 집계+상위 단지, complex_name과 함께면 검색 범위

### `realty_presale` (~632 tokens)

청약 분양 공고

아파트 청약(분양) 공고를 조회한다 — 분양가·청약 접수 일정·당첨자 발표일·입주 예정·위치.
    "다음 달 청약 넣을 만한 데 있어?", "○○에 분양하는 아파트 있어?"류 질문용.
    "넣을 만해?/적정가야?"까지 물으면 이어서 realty_presale_vs_market으로 분양가를
    실거래 시세와 대조하라(응답의 house_manage_no가 그 도구의 입력이다).

    price_min/price_max는 주택형별 분양 최고가의 최소·최대(만원)다 — 한 공고에 여러
    주택형(house_type_count)이 있다. 청약 자격·순위 요건은 이 데이터에 없다(지어내지 말 것).
    경쟁률·당첨 가점 커트라인은 realty_subscription_odds 도구에 있다.

    무순위(줍줍)·취소재공급이 돈 공고에는 `unsold_history`(회차·세대)가 붙는다 — 접수
    경쟁률이 높아도 무순위가 돌았다면 "당첨 후 계약이 안 된" 시장이다. 없다고 이력이
    없던 건 아니다(meta.unsold_note의 연결 한계 참조). 같은 지역 공고들의 분양가가
    올라온 추이("기다림의 비용")는 realty_presale_price_trend.

    규제지역 플래그: speculation_zone(투기과열지구)·adjustment_area(조정대상지역)·
    price_cap_applied(분양가상한제), Y/N — **모집공고일(announced_on) 기준 스냅샷**이라
    이후 지정·해제가 바뀔 수 있다. "현재 규제지역"으로 단정하지 말고 공고일과 함께 전하라.
    전매제한·거주의무 기간은 이 데이터에 없다(플래그에서 유추 금지) —
    realty_notice_facts가 공고 원문 값을 쪽 번호와 함께 준다.

Input parameters:

- `keyword`: 단지명·공급 주소 부분일치 (예: '우미린', '5-2생활권', '다솜동') — 생활권·동 단위 질의는 이걸로
- `limit` (integer)
- `region`: 시도 (예: 서울, 경기, 세종, 부산)
- `sigungu`: 시군구 정확한 이름 (예: 수원시, 강남구). ⚠️세종은 이 필드가 동·생활권·도로명으로 오염돼 있으니 쓰지 말고 keyword를 쓰라
- `upcoming` (boolean): True면 청약 접수 시작일이 오늘 이후인 공고만

### `realty_presale_price_trend` (~420 tokens)

지역 분양가 추이 — 공고 간 연도별 평당 분양가

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

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

    이 축의 자리: 개별 공고의 적정성(분양가 vs 실거래)은 realty_presale_vs_market,
    실거래 가격 추이는 realty_region_price_stats — 이 도구는 **분양가끼리의 시계열**이다.

Input parameters:

- `exclusive_m2_max`: 전용면적 상한(㎡) — 국평만 보려면 85
- `exclusive_m2_min`: 전용면적 하한(㎡) — 국평만 보려면 80
- `keyword`: 단지명·공급 주소 부분일치 (예: '고덕', '동탄') — 동네·지구 단위 추이는 이걸로
- `region`: 시도 (예: 서울, 경기, 세종)
- `sigungu`: 시군구 정확한 이름 (예: 평택시). ⚠️세종은 오염돼 있으니 keyword를 쓰라

### `realty_presale_vs_market` (~459 tokens)

분양가 적정성 분석 — 분양가 vs 주변 실거래 시세

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

    공고 특정: house_manage_no가 없으면 region+keyword로 검색하고, 여러 건이면
    후보 목록을 돌려주니 하나를 골라 다시 호출하라(추측해서 고르지 않는다).
    한계(지어내지 말 것): 실거래 평균은 해당 지역 全단지(구축 포함) 기준이라 신축
    프리미엄이 반영되지 않았다. 청약 경쟁률·당첨 가점 커트라인은 이 도구가 아니라
    realty_subscription_odds에 있다("넣을 만해?"엔 둘을 같이 써라).
    기준선 우선순위: market_avg는 **이상치 미필터** 지역 평균이다 — 결론에는
    comparison_by_size[].comparable_complexes(반경 내 급 맞는 단지 실거래)를 우선하고,
    지역 수준 교차확인은 realty_area_price_bands(이상치 필터·중앙값)로 하라.
    이 도구는 **현재 공고 1건의 적정성**이다 — 같은 지역 공고들의 분양가 시계열
    ("기다릴수록 얼마씩 올랐나")은 realty_presale_price_trend.

Input parameters:

- `house_manage_no`: realty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확
- `keyword`: 단지명·주소 부분일치 (예: '우미린', '5-2생활권', '다솜동')
- `months` (integer): 실거래 비교 창(개월)
- `region`: 시도 (예: 서울, 경기, 세종)

### `realty_notice_facts` (~405 tokens)

모집공고 팩트시트 — 전매제한·자격·층별 분양가·옵션가·중도금

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

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

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

Input parameters:

- `house_manage_no`: 공고 관리번호 (realty_presale 응답의 house_manage_no)
- `keyword`: 단지명 일부 (예: '우미린' — 공백 무관 매칭)

### `realty_notice_text` (~448 tokens)

모집공고 원문 쪽 읽기 — 자격 세부·유의사항 전문

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

    여러 낱말은 AND로 묶인다('가점제 추첨제'→둘 다 있는 쪽). 0쪽이면 막다르지 않고 낱말별
    히트 쪽과 부분일치 상위 쪽을 함께 돌려주니 그걸로 좁혀라(match='any'로 넓힐 수도 있다).
    **쪽을 모를 땐 pages_only=true로 먼저 훑어라** — 전문은 한 번에 수만 자다.
    전문 응답은 최대 6쪽이고, meta.matching_pages에 일치 쪽 전체 목록이 늘 들어 있다.

Input parameters:

- `house_manage_no` (string, required): 공고 관리번호 (realty_presale·realty_notice_facts로 특정)
- `match` (string): 여러 낱말 처리 — all=모두 포함(기본), any=하나라도 포함(넓게 훑을 때)
- `pages`: 쪽 범위 직접 지정 (예: '1-3', '44'). query와 택일
- `pages_only` (boolean): 참이면 본문 없이 일치 쪽 번호+발췌만 준다 — 먼저 이걸로 쪽을 고르고 pages로 좁혀 재호출하면 왕복·토큰이 크게 준다
- `query`: 찾을 키워드. 공백으로 나눈 낱말을 모두 포함하는 쪽을 찾는다(AND, 공백 무관 매칭) — 예 '가점제 추첨제', '신혼부부 소득'

### `realty_policy_rules` (~1144 tokens)

법령·규제 규범 — 세율표·규제지역·대출·임대차·청약·정비사업 규칙

단지에 종속되지 않는 **일반 규범**을 근거 조문·확인일과 함께 준다 — 취득세율표,
    규제지역 **현재** 지정 현황, 주담대 규제 원표, 개인회생×대출, 주택임대차 갱신(갱신권·
    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를 함께 전하라.

Input parameters:

- `topic` (string): **axes=횡단 사실의 진실원**(여러 상품·세목에 걸치는 것 — 6·27이 상품별로 어떻게 걸리나, 대출 6축의 DSR 취급, 수도권/규제지역 축, 세대·인별·물건 기준의 충돌). **'어느 상품이 뭐가 다른가'류 질문은 여기부터**, acquisition_tax=취득세율표(표준·중과·부가세목·예외), regulated_area=규제지역 현재 지정 현…

### `realty_loan_eligibility` (~730 tokens)

쓸 수 있는 대출 상품 나열 — 용도×지역×주택수 교차 판정

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

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

    경계: ① **주택 수·생애최초·신혼은 선언**이다(서버가 사실판정하지 않는다) ② **한도 금액을
    계산하는 건 구입 목적의 은행권뿐**이고 그건 realty_loan_limit이 한다 — 이 도구는 **자격 대조와
    라우팅**이다 ③ 전세·중도금은 보증기관·사업장이 지배해 **한도를 계산하지 않는다**, 전세반환은
    **경과조치 해당 여부가 서류로 보는 사실판단**이라 계산하지 않는다 ④ 규칙의
    근거·불확실성은 각 상품 토픽(응답의 `topic`)에 있으니 함께 읽어라.

Input parameters:

- `annual_income_10k`: 부부합산 연소득(만원) — 정책상품 소득요건 대조에 쓴다
- `homes_owned`: **세대 기준** 보유 주택 수(선언) — 0=무주택, 1, 2+=다주택. 명의가 갈려도 세대로 센다. 서버는 주택 수를 판정하지 않는다
- `house_price_10k`: 대상 주택 가격(만원) — 정책상품 가격요건 대조에 쓴다
- `is_first_time`: 생애최초 해당 여부(**선언** — 서버는 판정하지 않는다)
- `is_newlywed`: 신혼 해당 여부(선언)
- `purpose` (string, required): 자금 용도 — **같은 담보라도 용도가 규제를 가른다**(구입=LTV·가액구간 한도, 생활안정=1억 한도·다주택 금지, **전세반환=세입자에게 보증금 돌려주는 목적(퇴거자금) — 원칙 1억이지만 6·27 이전 계약분 경과조치가 붙는 유일한 축**, 전세=세입자로 들어갈 때 쓰는 전세자금대출, 중도금=집단대출). ⚠️ **'전세'와 '전세반환'을 섞지 마라…
- `region`: 소재지(시군구까지, 예: '서울 마포구'·'세종특별자치시') — 수도권·규제지역 판정에 쓴다
- `total_assets_10k`: 총자산(만원) — **버팀목 전세는 자산 요건이 핵심 관문**이라 전세 문의면 받아라

### `realty_loan_limit` (~1352 tokens)

주담대 규제 상한 판정 — LTV·한도·만기·DSR (선언 조건 기준)

선언된 조건(지역·시가·차주 유형·소득)에 대해 **주담대 규제 상한**을 결정론으로
    계산한다 — 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를 사용자에게 함께 전하라.

Input parameters:

- `annual_income_10k`: 연소득(만원) — interest_rate_pct와 함께 주면 DSR 상한 대출액까지 계산
- `borrower` (string, required): 차주 유형 — **사용자 선언**이다(서버는 생애최초·주택 수를 판정하지 않는다). 생애최초=본인·배우자 모두 주택 소유 이력 없음, 1주택_처분조건부=6개월 내 기존주택 처분 약정, 서민실수요=우대 요건 충족을 선언한 경우
- `credit_loan_10k`: 신용대출 잔액 또는 받을 예정액(만원). **직접 연 원리금을 계산해 넣지 마라** — 산정만기 5년 강제·산식 두 갈래·스트레스 1억 문턱이 전부 함정이라 서버가 계산한다. existing_annual_debt_payment_10k와 함께 주면 둘 다 합산한다
- `credit_loan_rate_pct`: 신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수다(이자 없이는 원리금을 못 낸다)
- `desired_loan_10k`: 받으려는 주담대 금액(만원). 주면 '이만큼 되나'를 판정하고, DSR에 막히면 **무엇을 얼마나 바꾸면 들어가는지**(금리유형·만기·신용대출 축소·금리)를 함께 낸다. '4억 받으려는데 되나요'류 질문의 자리 — 최대치만 받아 모델이 역산하게 두지 마라
- `existing_annual_debt_payment_10k` (integer): 기존 대출의 연간 원리금 상환액 합계(만원) — DSR 계산에서 차감
- `house_price_10k` (integer, required): 주택 시가(만원 단위, 예: 100000=10억). 가액구간 한도가 '시가' 기준이라 분양가·공시가가 아닌 시세를 넣는다
- `interest_rate_pct`: 약정금리 가정(%, 예: 4.2) — DSR 계산에 필요. 없으면 DSR 금액 계산은 생략된다
- `is_metro`: 수도권(서울·경기·인천) 여부 직접 선언 — region 대신/우선 적용
- `is_regulated`: 규제지역(투기과열·조정대상) 여부 직접 선언 — region 대신/우선 적용
- `lender` (string): 업권 — DSR 한도가 은행 40% / 제2금융권 50%로 갈린다
- `loan_term_years` (integer): 희망 만기(년). 수도권·규제지역은 30년 상한으로 조정되며 조정 사실을 응답에 싣는다
- `rate_fixed_years`: 혼합형의 고정금리 기간 또는 주기형의 금리변동주기(년). 미지정이면 시중은행 통상인 5년으로 가정하고 가정 사실을 응답에 싣는다. 변동·순수고정에는 무의미
- `rate_type` (string): 주담대 금리유형 — **스트레스 금리 적용비율이 갈리는 축이다**(변동 100%, 혼합형·주기형은 고정기간 비중별 차등, 순수고정 미적용). 기본값 '변동'은 최악 가정이라 한도가 가장 작게 나온다. 사용자가 상품을 안 정했으면 응답의 by_rate_type 비교표를 함께 전하라. 혼합형=고정기간 후 변동, 주기형=N년 주기로 금리 재산정, 순수고정=만기…
- `region`: 주택 소재지(시군구까지, 예: '서울 마포구'·'성남시 분당구'·'부산 해운대구'). 규제지역·수도권 판정에 쓴다. 해석이 모호하면 후보를 돌려주니 is_regulated·is_metro로 직접 선언해도 된다

### `realty_subscription_score` (~493 tokens)

청약 가점 계산 — 선언된 기간·인원에 배점표(84점) 적용

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

    경계를 지켜라: ① 세 입력 전부 **선언**이다 — 기산점·부양가족 인정은 등본·혼인관계
    사실판단이라 서버가 판정하지 않고, 응답 traps(오기입=부적격 당첨 취소 사유)를 반드시
    함께 전하라. ② 산출 점수는 realty_subscription_odds의 my_score로 넘겨 당첨 커트라인과
    비교하는 것이 다음 수다. ③ 배점표 원문·기산 규칙은
    realty_policy_rules(topic=subscription_account)가 진실원이다.

Input parameters:

- `account_years` (number, required): 청약통장 가입기간(년, 소수 허용 — 예: 0.4=약 5개월). 전환 통장은 종전 통장 최초 가입일 기준
- `dependents_count` (integer, required): 부양가족 수(본인 제외). 직계존속 3년 동거·30세 이상 미혼자녀 1년 동거 등 인정 요건은 사실판단 — 확정해 선언한다
- `is_homeowner` (boolean): 현재 유주택 여부 — True면 무주택기간 점수가 0점이 된다(소형·저가주택 등 무주택 간주 예외 해당 여부는 사실판단이라 호출자가 반영해 선언)
- `no_house_years` (number, required): 무주택기간(년, 소수 허용 — 예: 7.5). 기산점(만 30세 vs 혼인신고일, 유주택 이력 재기산)은 사실판단이라 호출자가 확정해 선언한다 — 응답의 traps를 함께 전하라
- `under30_unmarried` (boolean): 만 30세 미만 미혼 여부 — True면 무주택기간 점수가 0점이 된다(무주택기간 기산 전)

### `realty_redevelopment_burden` (~477 tokens)

정비사업 분담금 계산 — 선언된 감정평가액·비례율로 권리가액·분담금

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

    경계를 지켜라: ① 입력 전부 **선언**이다 — 감정평가액·비례율은 조합 자료에서 가져와야
    하고 서버는 검증하지 않는다. ② 이 산식은 법정 산식이 아니라 통용 실무 산식이며,
    비례율은 관리처분인가 전엔 추정치라 준공까지 계속 변한다 — 응답의 sensitivity(비례율
    ±10%p 스윙)와 disclosures를 반드시 함께 전하라. ③ 산식 출처·변동 함정의 원문은
    realty_policy_rules(topic=redevelopment_rules)의 proportion_formula가 진실원이다.
    분양자격 자체가 불확실하면 topic=redevelopment_entitlement(갈림길 지도)부터.

Input parameters:

- `member_sale_price_10k` (integer, required): 받으려는 주택형의 조합원분양가(만원)
- `prev_asset_value_10k` (integer, required): 조합원 종전자산 감정평가액(만원) — 감정평가 결과이지 시세가 아니다
- `proportion_rate_pct`: 비례율(%, 예: 102.5) — 조합 총회 자료·관리처분계획의 값을 선언. 없으면 아래 사업 전체 3종으로 계산한다
- `total_post_asset_10k`: 종후자산 평가총액=분양수입 총액(만원) — 비례율을 직접 계산할 때
- `total_prev_asset_10k`: 종전자산 평가총액(만원) — 비례율을 직접 계산할 때
- `total_project_cost_10k`: 총사업비(만원) — 비례율을 직접 계산할 때

### `realty_capital_gains_tax` (~1085 tokens)

양도세 계산 — 선언된 양도·취득·보유에 세율표 적용, 합산/연도분산/차손통산 비교

선언된 양도가·취득가·필요경비·보유기간에 **양도소득세 세율표를 결정론으로 적용**한다
    — 기본·단기·분양권 세율, 장특공제 표1, 기본공제, 다주택 중과(선언), 지방소득세 10%.
    두 번째 자산을 주면 **같은 해 합산 vs 연도분산 vs 차손통산**을 비교해 어느 쪽이 유리한지
    산출한다. "지금 팔면 양도세 얼마?"·"두 채를 올해 같이 팔까 나눠 팔까?"의 자리다.

    경계를 지켜라: ① 입력 전부 **선언**이다 — 보유기간 기산·주택 수·조정대상지역 해당은
    사실판단이라 서버가 판정하지 않는다. ② **1세대1주택 비과세·12억 초과 고가주택 안분·
    감면 특례는 계산하지 않는다**(not_curated) — 비과세 가능성이 있으면 이 계산기를 쓰지
    말고 홈택스 모의계산·세무사를 안내하라. 이 결과는 양도 전액이 과세된다는 전제다.
    ③ 세율표·필요경비 분류·중과 경과조치의 원문·근거 조문은
    realty_policy_rules(topic=capital_gains_tax)가 진실원이고, 조정대상지역 지정 현황은
    topic=regulated_area다. 응답의 traps·pending_legislation·disclaimer를 함께 전하라.

Input parameters:

- `acquisition_price_10k` (integer, required): 취득가액(만원). 증여받은 자산은 이월과세(10년)로 증여자 원취득가가 될 수 있다 — 응답 traps 확인
- `asset2_acquisition_price_10k`: 두 번째 자산의 취득가액(만원)
- `asset2_asset_type` (string): 두 번째 자산의 종류
- `asset2_expenses_10k` (integer): 두 번째 자산의 필요경비(만원)
- `asset2_holding_years`: 두 번째 자산의 보유기간(년)
- `asset2_multi_home_surcharge` (string): 두 번째 자산의 중과 선언 — 첫 자산 매도 후 주택 수가 줄어 지위가 달라질 수 있다. 시나리오별 지위 변화도 선언 그대로 쓴다(서버는 판정하지 않는다)
- `asset2_transfer_price_10k`: 두 번째 자산의 양도가액(만원) — 주면 '올해 같이 팔기 vs 내년으로 나누기' 시나리오를 비교한다. asset2_acquisition_price_10k·asset2_holding_years와 함께 줘야 한다
- `asset_type` (string): 자산 종류 — 단기세율·장특공제가 갈린다. 분양권은 보유 2년이 넘어도 60%다
- `holding_years` (number, required): 보유기간(년, 소수 허용 — 예: 1.5). 취득일~양도일이며 상속·증여 기산 특례는 사실판단이라 호출자가 확정해 선언한다
- `multi_home_surcharge` (string): 다주택 중과 **선언** — 양도 시점에 그 주택이 조정대상지역 안이고(현재 지정 현황은 topic=regulated_area) 세대 주택 수가 2/3+인 경우. 주택 수 판정(분양권·입주권 가산, 지방 저가주택 제외)은 사실판단이라 서버가 하지 않는다
- `necessary_expenses_10k` (integer): 필요경비 합계(만원) — 취득·양도 부대비용과 자본적 지출만. 도배·싱크대 같은 수익적 지출은 불인정이다(경계·증빙 요건은 topic=capital_gains_tax 원문)
- `share_pct` (number): 본인 지분율(%, 공동명의면 예: 50). 양도세는 인별 과세라 본인 지분만 계산하고 기본공제 250만원도 각자 받는다 — 배우자 몫은 배우자 지분으로 따로 호출하라. 두 자산 모두에 같은 지분을 적용한다
- `transfer_price_10k` (integer, required): 양도가액(만원, 예: 90000=9억). 예정이면 예상 매도가를 선언
- `transfer_year` (integer, required): 양도(예정) 연도. 2027 이후는 계류 중인 세제개편안이 결과를 뒤집을 수 있어 응답에 실토가 붙는다. 2025 이전 과거 양도는 당시 규칙(중과 유예 등)이라 다루지 않는다

### `realty_member_transfer_check` (~726 tokens)

조합원 지위양도 가능 판정 — 투기과열지구×사업유형×단계 (도시정비법 39조)

투기과열지구에서 재건축·재개발 물건을 **지금 사면 조합원 지위를 승계받을 수 있는지**를
    도시정비법 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를 함께 전하라.

Input parameters:

- `first_approval_application_after_20180125`: **재개발 부칙 선언** — 이 구역의 최초 사업시행계획인가 신청이 2018-01-25(법률 제14943호 시행일) 이후인가. 이전이면 관리처분인가 후에도 지위양도가 가능하다(서울 22개 구역 실재). 모르면 비워두라 — 서버가 미확인으로 실토한다
- `is_speculation_zone`: 투기과열지구 여부 직접 선언 — region 대신/우선 적용
- `project_name`: 사업장·구역 이름(예: '한남3구역') — 서울이면 정비사업 목록에서 진행 단계를 자동으로 잇는다(유일 매치만). 서울 밖은 목록이 없어 project_stage 선언이 필요하다
- `project_stage`: 진행 단계 직접 선언 — project_name 조회 대신/우선 적용
- `project_type` (string, required): 사업 유형 — 제한 개시 시점이 갈린다(재건축=조합설립인가 후, 재개발=관리처분인가 후). 가로주택·소규모재건축 등 소규모정비사업은 별도 법제라 이 도구가 판정하지 않는다
- `region`: 사업장 소재지(시군구까지, 예: '서울 용산구'·'성남시 수정구') — 투기과열지구 판정과 (서울이면) 단계 자동 조회에 쓴다. 모호하면 후보를 돌려주니 is_speculation_zone을 직접 선언해도 된다

### `realty_presale_cost` (~486 tokens)

분양 총 소요자금 계산 — 중도금 이자·취득세·층별 총액

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

    경계(신고 #43의 선 그대로): 여기까지가 "공고+세법에서 결정론적으로 나오는 것"이다.
    월 상환액·매수 vs 전세 손익분기는 개인 파라미터가 지배하므로 계산하지 않는다 — 전세
    시세는 realty_complex_rent_by_pyeong으로 받아 클라이언트가 개인 가정을 얹어라.
    자기자금·차주 조건을 **선언**받아 필요 대출액과 규제 상한 통과까지 판정하는 건
    realty_presale_funding_plan이 한다. 세율표 자체는 realty_policy_rules가 근거 조문과 함께 준다(중과·감면 등
    이 계산이 가정으로 제친 것들이 거기 있다 — assumptions를 반드시 사용자에게 전하라).

Input parameters:

- `extra_options_krw` (integer): 발코니 외 유상옵션 합계(원) — realty_notice_facts의 옵션가에서 골라 넣어라
- `house_manage_no`: 공고 관리번호 (realty_presale의 house_manage_no)
- `house_ty`: 주택형 (예: '59', '84B') — 생략 시 공고의 주택형 목록을 돌려준다
- `keyword`: 단지명 일부 (공백 무관)
- `mid_rate_pct` (number): 중도금 대출 연이율 %(기본 5.0 — 실제 금리는 공고·은행마다 다르다)
- `movein_ym`: 입주 년월 YYYYMM 덮어쓰기 — 공고에 입주예정이 없거나 다른 가정을 쓸 때

### `realty_presale_funding_plan` (~1146 tokens)

분양 자금 흐름 판정 — 계약금·중도금·잔금 시점별 필요액 × 대출 규제 상한

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

    경계: ① 차주 유형·소득은 **선언**이다(서버는 판정하지 않는다). ② 판정은 **현행
    규제·현재 자기자금 기준**이다 — 잔금 시점(수년 뒤)의 규제·금리·저축 증가는 반영하지
    않으며 그 사실을 assumptions에 싣는다. ③ 승인·확약이 아니다. ④ 저축 계획·갈아타기
    전략·매수 적정성 판단은 이 도구 밖이다 — 시세 비교는 realty_presale_vs_market,
    규칙 원표는 realty_policy_rules. 응답의 assumptions·uncertainties를 함께 전하라.
    ⑤ 입주시 시세·전세보증금도 **선언**이다 — 선언하면 각각 시세 기준 잔금대출 시나리오
    (scenario_at_expected_price)와 전세 잔금 시나리오(jeonse_scenario — 거주의무·대출
    병행 불가 게이트)를 병렬로 준다. 서버는 미래 시세·전세가를 추정하지 않는다.

Input parameters:

- `annual_income_10k`: 차주 연소득(만원) — 주면 잔금대출의 DSR 상한까지 반영해 판정한다
- `borrower` (string, required): 잔금대출 차주 유형(사용자 선언 — realty_loan_limit과 동일 계약). 계약자 명의 기준으로 선언하라
- `credit_loan_10k`: 신용대출 잔액·예정액(만원) — realty_loan_limit과 동일 계약(서버가 산정만기 5년 규제식으로 계산한다). 직접 연 원리금을 계산해 넣지 마라
- `credit_loan_rate_pct`: 신용대출 약정금리(%) — credit_loan_10k를 줬으면 필수
- `existing_annual_debt_payment_10k` (integer): 기존 대출 연간 원리금(만원)
- `expected_price_at_movein_10k`: 입주(잔금) 시점 예상 시세 선언(만원) — 잔금대출 LTV는 실무상 입주시 시세·감정가 기준이라, 선언하면 그 값 기준 판정을 병렬로 준다. 서버는 미래 시세를 추정하지 않는다(선언 없으면 분양가 기준만)
- `extra_options_krw` (integer): 발코니 외 유상옵션 합계(원)
- `floor_zone`: 층 구분(예: '5~9층') — 생략하면 첫 밴드로 계산하고 나머지 밴드 총액을 병기한다
- `house_manage_no` (string, required): 공고 관리번호 (realty_presale의 house_manage_no)
- `house_ty`: 주택형 (예: '59', '84B')
- `interest_rate_pct`: 잔금대출 약정금리 가정(%)
- `is_metro`: 수도권 여부 직접 선언
- `is_regulated`: 규제지역 여부 직접 선언
- `jeonse_deposit_10k`: 입주 시점 예상 전세보증금 선언(만원) — 주면 '세입자 보증금으로 잔금 치르기' 시나리오를 판정한다(거주의무·대출 병행 불가 게이트 포함). 시세 확인은 realty_complex_rent_by_pyeong·region_price_stats(metric=rental)
- `lender` (string): 업권
- `loan_term_years` (integer): 잔금대출 만기(년)
- `mid_rate_pct` (number): 중도금 대출 연이율 %(기본 5.0)
- `own_funds_10k` (integer, required): 동원 가능한 자기자금(만원) — 계약금부터 잔금까지 전액 투입 가정으로 계산한다. 0도 유효하다(전액 대출 시나리오 — 계약금 게이트에서 정직하게 걸린다)
- `rate_fixed_years`: 혼합형 고정기간 또는 주기형 변동주기(년) — 미지정 시 5년 가정
- `rate_type` (string): 잔금대출 금리유형 — realty_loan_limit과 동일 계약. 기본 '변동'은 스트레스 금리 전액 가산이라 가장 보수적이다(안 닫힌다는 판정이 유형 때문일 수 있다)
- `region`: 규제 판정용 지역 덮어쓰기 — 생략하면 공고 소재지로 판정한다

### `realty_move_in_supply` (~517 tokens)

입주 예정 물량 — 입주장 리스크

지역의 입주 예정 물량을 연월별로 집계한다 — "○○ 입주장 리스크 있어?", "내년에
    입주 물량 얼마나 쏟아져?"류 질문용. 입주 몰림은 전세가 하락·역전세 압력 신호다.

    **하한 집계다** — 청약홈 공고(2020-02 이후) 기반이라 공고 없는 공급(민간임대·후분양
    일부)이 빠지고, 무엇보다 **공고는 입주 평균 30개월 전에 난다**(전국 실측). 그래서
    조회 구간이 오늘+30개월을 넘어가면 그 구간 입주분은 아직 공고조차 안 된 것이 대부분이다.
    실사고: 세종 2028~2030 조회에 676세대가 나오자 "입주장 리스크 없음"으로 답했으나
    실제 계획은 그 6배였다.

    응답의 **`reading` 문장을 결론에 그대로 반영하라** — `interpretation`이 `lower_bound`면
    "물량 없음/적음"이라 말하지 말고 "공고된 것만 N세대(하한)"라고 답해야 한다.
    `coverage.region_recent_annual_rate`(그 지역 최근 공고 실적)와 비교해 값이 크게 낮으면
    공급이 끊긴 게 아니라 공고 시차다. **그때는 realty_supply_pipeline을 이어서 불러라** —
    사업승인은 났지만 아직 공고 안 난 물량이 거기 있다(세종 실측: 이 도구 676세대 →
    파이프라인 3,483세대). 단 **두 축의 세대수를 더하지 마라**(이중계상) — 공고가 난
    단지는 승인 목록에도 남아 양쪽에 다 잡힌다. 파이프라인 쪽 값이 상위 집합에 가깝다.

Input parameters:

- `from_ym`: YYYYMM (기본 이번 달)
- `region`: 시도 (예: 서울, 경기, 세종, 부산)
- `sigungu`: 시군구 정확한 이름 (예: 수원시, 강남구)
- `to_ym`: YYYYMM (기본 from_ym+36개월)

### `realty_supply_pipeline` (~467 tokens)

공고 전 공급 파이프라인 — 사업승인 기준 예정 물량

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

    청약홈(realty_presale·realty_move_in_supply)은 **모집공고일에야** 등록되므로 공고 전
    물량이 구조적으로 안 보인다. 이 도구의 원천은 주택법 **사업계획승인**이라 공고 2~3년
    전 단계가 잡힌다: 사업명·세대수·승인일·착공예정일·사용검사 예정일(=예상 입주).

    재당첨 제한(분양가상한제 단지는 10년)·전매제한이 걸린 결정에서는 **대안 정보가 없으면
    "지금 아니면 끝"이라는 잘못된 압박**이 생긴다 — 청약 상담이면 이 도구를 함께 불러라.

    두 축을 **더하지 마라**(이중계상) — 이미 공고가 난 단지도 승인 목록에 남아 있다.
    **이미 모집공고가 난 사업**은 블록 표기가 겹치면 행에 `announced_notice`가 붙는다 —
    그 행은 '다음 분양'이 아니라 realty_presale·realty_subscription_odds의 영역이다.
    표식이 없어도 기공고일 수 있다(meta.announced_cross_check 참조).
    승인 전(지구계획·공모) 물량은 여기에도 없으니 이 값도 하한이다(`interpretation`).

Input parameters:

- `from_ym`: YYYYMM (기본 이번 달)
- `limit` (integer): 사업 목록 상한 (기본 30)
- `region`: 지역 — 시도·시군구·동 부분일치 (예: '세종', '세종특별자치시 합강동', '수원시')
- `to_ym`: YYYYMM (기본 from_ym+60개월)

### `realty_subscription_odds` (~1031 tokens)

청약 경쟁률·당첨 가점 — 내 가점으로 되나

청약 경쟁률과 **실제 당첨 가점 커트라인**을 낸다 — "나 가점 52점인데 당첨될까?"의 정량 근거.
    가점 자체를 모르는 사용자는 realty_subscription_score(무주택·부양가족·가입기간 선언 →
    배점표 적용)로 먼저 점수를 만들어 my_score로 넘겨라.

    두 가지 경로를 자동으로 고른다:
      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을 이어서 쓰라.

Input parameters:

- `area_band`: 전용면적대로 좁힌다. 같은 구 안에서도 평형이 바뀌면 커트라인이 움직인다(실측: 노원 59㎡ 58.5점 vs 60~84㎡ 59점, 동작은 반대로 84㎡ 62점·59㎡ 64점)
- `breakdown`: 분포를 쪼갤 축. **시도 하나로 답하지 마라** — 서울 은평 전용 59㎡ 커트라인 중앙 45점, 강남 59㎡ 74점으로 같은 시도 안에서 29점이 갈린다. '어디까지 되나'류 질문에는 sigungu, '언제가 쌌나'는 quarter·year를 쓴다
- `budget_max_10k`: 예산 상한 — 분양 최고가(만원) 기준. 사용자가 '9억까지'라고 하면 90000. 가점만으로 답하면 살 수 없는 단지가 섞인다
- `budget_min_10k`: 예산 하한(만원)
- `house_manage_no`: realty_presale 응답의 공고 관리번호 — 알면 이걸로 특정하는 게 정확
- `keyword`: 단지명·주소 부분일치 (예: '월계 중흥')
- `my_score`: 내 청약 가점(0~84점). 주면 실제 커트라인과 점수 차를 계산해 준다
- `region`: 시도 (예: 서울, 경기, 세종)
- `sigungu`: 시군구 정확한 이름 (예: 노원구, 수원시). 벤치마크를 좁힐 때 쓴다 — 표본이 0이면 시도 단위로 넓혀라
- `since_years` (integer): 지역 벤치마크에 쓸 최근 기간(년). 커트라인은 시장 사이클을 타므로 기본 3년

### `realty_region_rankings` (~348 tokens)

지역 순위 (시세·상승률·전세가율·교통·학군)

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

    price=거래량 가중 전용 평당가(최소 5건, 최신월은 집계 진행 중일 수 있음) ·
    growth=전용 60-85㎡ 고정 YoY(평형 구성 왜곡 제거) · transit/school=단지 점수의 시군구
    평균. **investment는 원천 정지·기준월 혼재로 보류 중**(호출 시 대안 안내 —
    전세가율은 realty_rental_yield). 응답 methodology의 산식·단위를 답변에 반영하라.
    비교 대상이 두어 곳으로 정해진 질문("A vs B 어디가 나아?")은 [유료]
    realty_compare_regions가 시세·추이를 나란히 준다 — 이 도구는 순위·탐색용이다.

Input parameters:

- `limit` (integer)
- `metric` (string, required): price=전용 평당가 / growth=연간 상승률 / investment=전세가율·갭투자 / transit=교통 점수 / school=학군 점수
- `order` (string): desc=상위부터, asc=하위부터
- `region`: 시도명(예: 부산)이면 그 시도 안 순위, 시군구명이면 해당 지역 필터. 비우면 전국

### `realty_macro_indicators` (~256 tokens)

거시 지표 (기준금리·KOSPI·M2 시계열)

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

    ⚠️ 계열마다 신선도가 다르다 — meta.series_as_of가 계열별 실제 최신 시점이다(예: 미
    연준금리·S&P·코인은 최신인데 한국 기준금리·KOSPI는 2024-12 정지, ECOS 재수집 대기).
    밀린 계열을 "지금 금리"로 인용하지 말고 반드시 그 계열의 시점을 함께 밝혀라.

Input parameters:

- `indicators`: 쉼표 구분 지표명: bok_base_rate(한국 기준금리 %), kospi(월말 종가), korea_m2(M2 평잔·원계열, 조원), fed_rate(미 연준금리 월평균 %), sp500, btc_usd, eth_usd(월말 종가). 비우면 전체
- `months` (integer): 최근 몇 개월치

### `realty_demographics` (~312 tokens)

인구통계 (인구·가구·연령·인구이동)

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

    응답 meta.data_as_of가 실제 최신 시점이다 — warning이 있으면 그대로 사용자에게 전달하고,
    밀린 수치를 "지금 인구"로 단정하지 말 것. 연간 계열(households·age)은 기준연도를 밝혀라.
    households만 동명 시군구(중구·서구 등)를 거절한다(원천 단명 수집 결함) — 그 경우
    population·migration(정식 명칭 수집)으로 대신 조회하라.

Input parameters:

- `metric` (string, required): population=월별 인구·세대수 / households=연별 가구원수별 가구(1인가구 등) / age=연령대(5세 구간) 분포·고령화 — 시도 단위만 / migration=월별 전입·전출·순이동
- `months` (integer): population·migration 시계열 창(개월). 연간 계열엔 미적용
- `region` (string, required): 시도(예: 서울)나 시군구(예: 강남구, 수원시). age는 시도 단위만 제공. age에 한해 '전국'도 가능

### `realty_predict_price` (~408 tokens)

[유료] 단지 가격 예측 (XGBoost)

[유료] 단지의 **다음 달** 평균 매매가를 평형대별로 예측한다 (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)를 사용자 답변에 반드시 함께 전달하라 —
    예측은 참고 지표이지 투자 보장이 아니다.

Input parameters:

- `complex_key`: 정확한 단지 키 — realty_complex_report가 돌려주는 complex_key
- `complex_name`: 단지명 (예: 반포자이)
- `months` (integer): (구버전 호환) 예측 지평은 1개월 고정 — 이 값은 무시되고 응답이 그 사실을 실토한다

### `realty_complex_report` (~110 tokens)

[유료] 단지 통합 리포트

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

    응답에 좌표(latitude/longitude)와 complex_key가 들어 있다 — 이어서
    realty_poi_nearby(입지)·realty_predict_price(예측)에 그대로 넣어 심층 분석하라.

Input parameters:

- `complex_key`: 정확한 단지 키
- `name`: 단지명 (예: 반포자이)

### `realty_compare_regions` (~228 tokens)

[유료] 지역 비교

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

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

    ⚠️ 지역별 `warning_baseline`·`warning_dispersion`을 avg_price보다 먼저 읽어라 —
    이 소스는 이상치 미필터·단지급 혼합이라 avg_price를 그대로 "그 지역 시세"로 인용하면
    특정 단지와의 비교 결론이 뒤집힌다(realty_region_price_stats와 같은 공시다).

Input parameters:

- `months` (integer): 추이 개월 수
- `regions` (required): 비교할 시군구 2개 이상 — 배열(['강남구','서초구']) 또는 쉼표 문자열('강남구,서초구')

### `realty_rental_yield` (~195 tokens)

[유료] 전월세 수익률

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

    기본 응답은 최신 완결월 1개월치를 수익률 내림차순으로 자른 것이다 — 전체 기간·전체
    지역이 아니다(truncated 필드 확인). 특정 월은 year_month로 조회하라.

Input parameters:

- `limit` (integer): 반환 행 수 — 수익률 내림차순 상위 N
- `pyeong_supply`: 분양평수 20/25/34/40/50 중
- `region`: 시도(예: 서울특별시) 또는 시군구(예: 강남구). 세종은 시 단위로 나온다
- `year_month`: YYYYMM (기본 최신 완결월)

### `realty_poi_nearby` (~216 tokens)

[유료] 주변 입지 분석

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

    단지 좌표는 realty_complex_report가 준다. "역세권인가", "초품아인가" 판단용.
    단지의 학군·교통 **점수**만 필요하면 무료 realty_location_scores로 충분하다 —
    이 도구는 실제 시설 목록·거리를 셀 때 쓴다.

Input parameters:

- `lat` (number, required): 위도 — realty_complex_report의 latitude를 쓰라
- `lng` (number, required): 경도
- `poi_type`: subway | hospital | school — 쉼표로 조합 가능(예: 'subway,school'), 비우면 전체. 이 3종만 좌표 검색을 지원한다(마트·약국 등은 지역 통계 realty_poi_stats로)
- `radius_m` (integer): 반경(미터)

### `realty_poi_stats` (~178 tokens)

[유료] 지역별 인프라 통계

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

    지역 키는 '시도축약 시군구' 2토큰이다(예: '서울 마포구', 세종은 1토큰). 병원·지하철은
    수집 범위가 수도권·광역시 중심이라 지방 시군구는 0으로 나올 수 있다 — 0을 "없다"로
    단정하지 말고 수집 범위 밖일 수 있다고 말하라.

Input parameters:

- `limit` (integer)
- `region`: 지역명 접두 일치 (예: 서울, 서울 마포구, 마포구). 비우면 전국 전체

### `realty_invest_risk` (~83 tokens)

[유료] 지역 투자위험 분석

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

    응답의 disclaimer(통계 요약이며 투자 권유 아님)를 사용자에게 반드시 함께 전달하라.

Input parameters:

- `region` (string, required): 시군구명 (예: 강남구)

### `realty_market_signals` (~72 tokens)

[유료] 시장 신호 (미분양·심리지수)

[유료] 미분양 추이와 시장심리지수를 한 번에 조회한다. 매수 타이밍 판단의 거시 신호.

Input parameters:

- `months` (integer): 시계열 개월 수
- `region`: 지역명 (예: 서울). 비우면 전국

### `realty_reconstruction` (~199 tokens)

[유료] 재건축 유망 단지

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

    점수 = 건령(최대 70, 30년 연한 기준) + 최근 12개월 거래활성 전국 백분위(최대 30).
    사업성(용적률·대지지분·안전진단·조합 단계)은 반영되지 않는다 — 후보 발굴용이지
    투자 판단 근거가 아니며, 응답의 disclaimer를 사용자에게 그대로 전하라.
    (구버전 점수 포화로 2026-07-30 보류했다가 산식 v2 재계산 검증 후 재개 — DATA-060)

Input parameters:

- `district`: 지역명 (예: 서울, 구로구). 비우면 전국 상위
- `limit` (integer)

### `realty_redevelopment` (~357 tokens)

[유료] 서울 재개발·재건축 사업장

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

    **커버리지는 서울 한정**(정보몽땅 원천) — 타 시도는 이 도구로 답할 수 없다고 밝혀라.
    세대수·준공예정은 원천 목록이 제공하지 않아 null이다(지어내지 말 것). 진행 단계
    필터는 미지원 — 결과의 stage 필드(한글: 조합설립인가·관리처분인가 등)로 판별하라.
    재건축 **유망도 점수**는 이 도구가 아니라 realty_reconstruction이 담당하고,
    "지금 사면 조합원 지위 승계돼?"는 realty_member_transfer_check(무료)가 담당한다.

Input parameters:

- `limit` (integer)
- `offset` (integer): 페이지네이션 오프셋
- `project_type`: reconstruction=재건축, housing_redevelopment=재개발(주택정비형), urban_redevelopment=재개발(도시정비형), street_housing=가로주택정비, small_reconstruction=소규모재건축, small_redevelopment=소규모재개발, regional_housing=지역주택, remodeling…
- `sigungu`: 시군구 (예: 강남구). 비우면 서울 전체

### `report_issue` (~844 tokens)

답변 오류 신고

답이 틀렸을 때 신고하거나(kind='결함'), 남길 값이 있는 **질문 원문을 기록한다**(kind='질문기록').

    **결함**: 사용자가 "그거 틀렸다", "이상하다", "숫자가 안 맞는다"고 하면 **먼저 이 도구를
    호출한 뒤** 정정 답변을 하라. 신고는 서버 운영자에게 전달되어 실제 수정에 쓰인다.
    사용자가 지적하지 않았는데 추측으로 부르지는 말 것.

    **질문기록**: 이 서버는 클라이언트가 이미 도구 호출로 번역한 뒤를 보므로 **사용자의 원문
    질문을 볼 수 없다**. 그래서 어떤 질문이 실제로 오는지, 무엇을 못 답하는지가 계측에 안 잡힌다.
    복합 질문·부분 답변·전제 오류 셋 중 하나면 원문(일반형으로 치환)을 남겨라 — 질문은행과
    로드맵의 원천이 된다. **개인 식별 조합은 반드시 일반형으로 바꿔서** 넣는다.

    두 종류가 한 도구인 이유: 무인증 공개 서버라 쓰기 표면을 하나로 묶어 상한을 함께 건다
    (CLAUDE.md 규칙 2). 시간당 상한도 공유한다.

Input parameters:

- `answered_fully`: kind='질문기록' 전용 — 이 서버 도구만으로 질문에 **완결된 답**을 했는가. false면 missing_axis에 무엇이 없었는지 적어라(질문은행의 ●/◐/○ 판정에 그대로 쓰인다)
- `expected`: 사용자가 맞다고 본 값이 있으면
- `kind` (string): '결함'=답이 틀렸다는 신고(기본). '질문기록'=틀리진 않았지만 **질문 원문을 남길 값이 있는 경우** — 서버는 클라이언트가 번역한 도구 호출만 보고 원문 질문을 볼 수 없어서, 이게 유일한 통로다. **아무 질문이나 남기지 마라**: ①여러 도구를 엮어야 답이 된 복합 질문 ②우리 도구로 일부만 답한 질문(answered_fully=false) ③…
- `missing_axis`: answered_fully=false일 때 **없어서 못 답한 축**(예: '주택법 리모델링 규칙 미큐레이션', '경기 정비사업 단계 조회 불가 — 서울 한정'). 로드맵의 원천이 된다
- `problem`: 무엇이 틀렸는지. 사용자가 지적한 말을 그대로 옮겨도 된다. kind='결함'이면 필수, kind='질문기록'이면 비워도 된다.
- `question`: 사용자의 **원래 질문**(kind='질문기록'이면 필수). ⚠️ **개인 식별 조합은 일반형으로 치환해서 넣어라** — 소득·보유자산·보유단지·거주지 중 **둘 이상이 겹치면** 그대로 적지 말 것(예: '○○아파트 33평 보유 + 주식 10억 + 잠실 거주' → '1주택 보유(대출 없음), 인근 재건축 단지로 갈아타기'). 계산에 꼭 필요한 수치 하나…
- `tool_used`: 문제가 된 답을 만든 도구 이름
- `wrong_value`: 틀린 수치·문장

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/app-sallim-korea-realty/realty-2#diagnostics

## Score history

- 2026-08-17: 70
- 2026-08-16: 70
- 2026-08-15: 69
- 2026-08-14: 69
- 2026-08-13: 68
- 2026-08-12: 68
- 2026-08-11: 68
- 2026-08-10: 65
- 2026-08-09: 66

## Links

- Remote endpoint: https://realty.sallim.app/mcp?via=official
- Repository: https://github.com/sallim-app/korea-realty
- Website: https://realty.sallim.app/mcp/pricing
- Changelog RSS feed: https://verifymcp.io/servers/app-sallim-korea-realty/realty-2.xml
- Changelog JSON feed: https://verifymcp.io/servers/app-sallim-korea-realty/realty-2.json
- HTML version of this page: https://verifymcp.io/servers/app-sallim-korea-realty/realty-2
