From ipzitalk-remote
주소·단지명·K-apt 코드 중 하나 또는 비교할 단지 2개 이상을 입력받아 K-apt 단지 기본/상세정보를 조회하고, 세대수·동수·사용승인일·시공사·주차·승강기·CCTV·지하철 도보분·면적 믹스를 단지 스펙 카드 또는 비교표로 정리한다. "단지 스펙", "단지 비교", "주차 몇 대", "몇 년식", "단지 정보", "K-apt 정보", "아파트 상세"를 물을 때 사용한다.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ipzitalk-remote:ipzitalk-complex-spec-cardThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> tier: L1
tier: L1
단지명 하나로 K-apt의 basic + detail 정보를 가져와 단일 단지 스펙 카드와 지도를 만든다.
입력 단지가 2개 이상이면 비교 모드로 전환해 단지별 스펙 카드와 차이표를 만든다.
(템플릿은 ipzi-data.complexes 길이로 단일/비교를 분기한다. 1개=스펙 카드, 2개 이상=비교표.)
| 파라미터 | 필수 | 기본값 | 설명 |
|---|---|---|---|
target | ✅ | - | 단지명, 주소, kapt_code 중 하나. 단일 단지 특정 필요 |
compare_targets | ✕ | - | 비교할 단지명, 주소, kapt_code 배열. 2개 이상이면 비교 모드 |
target_type | ✕ | auto | `auto |
output_format | ✕ | html | `markdown |
| 도구 | 용도 |
|---|---|
resolve-site 규약 | 입력을 단지/주소/코드 표준 번들로 해소 |
get_complex_info(detail=true) | K-apt 기본·상세정보 조회 |
get_map_embed_url | SITE 지도 링크/iframe 생성 |
target이 kapt_code면 바로 사용. 단지명/주소면 resolve-site 규약으로 좌표·주소·법정동코드 확보.get_complex_info(kapt_code 또는 complex_query, detail=true) 호출. 후보 다수면 자동확정 금지.
compare_targets가 있으면 각 단지를 같은 규칙으로 확정한다.parking_total = parking_ground + parking_underground. 한쪽만 결측이면 합산 금지(과소값). 자료없음 처리.parking_per_unit = derived.parking_per_unit 우선. 없으면 parking_total / total_units 계산 가능하나 결측은 계산 금지.use_approval_date와의 차이.A vs B 스펙 비교처럼 주어지면 동등 비교로 처리하고 검색 기준/비교 단지 라벨을 화면에 노출하지 않는다.자료없음으로 표기하고 임의 보정하지 않는다.데이터 불일치 라벨을 붙인다.방배롯데캐슬아르떼 → exact match, 세대수 744, 주차 1.57대/세대, K-apt 지하철 15~20분이내방배롯데캐슬아르떼 vs 방배1차현대 → 세대수 744 vs 644, 주차 1.57 vs 1.24, 연차 12.6 vs 26.7templates/result.html공동주택관리정보시스템(K-apt) · 카카오맵 · 네이버 지도.| 상황 | 처리 |
|---|---|
| 단지명 후보 다수 | 후보명·주소·kapt_code 제시 후 선택 요청 |
| 법정동코드만 입력 | 단일 단지 특정 불가. 단지명 또는 kapt_code 추가 요청 |
| K-apt 미등록 | NOT_FOUND 명시, 정보 생성 금지 |
| parking 값 결측 | 0으로 간주하지 말고 자료없음 표기 |
| 비교 대상 일부 detail 결측 | 결측 셀은 자료없음 표기. 다른 단지 값으로 보정 금지 |
공동주택관리정보시스템(K-apt)과 링크 https://www.k-apt.go.kr/web/main/index.do를 함께 표시한다.데이터 블록 하단에 .src 한 줄. 도구·API 이름은 쓰지 않는다. 사용자가 아는 기관명만.
| 블록 | 출처 표기 |
|---|---|
| 단지 개요·세대수·준공·주차·연차 | 공동주택관리정보시스템(K-apt) |
| 매매·전세·평당가·거래량 | 국토교통부 실거래가 |
| 학교·교통·생활·상권 등 장소 | 카카오맵 |
| 분양공고·분양가·주택형·입주월 | 청약홈 |
| 지도 (장소 마커) | 네이버 지도 · 카카오맵 |
| 지도 (분양공고 마커) | 네이버 지도 · 청약홈 |
ipzi-data JSON으로 받지 않고 템플릿 마크업에 직접 박는다.
어느 블록이 어디서 왔는지는 실행마다 달라지지 않는다. 데이터로 받으면 채우는 걸 잊거나 틀리게 쓸 여지만 생긴다.세대수·주차 — 공동주택관리정보시스템(K-apt) · 위치 — 카카오맵.
하나로 뭉뚱그리면 어느 숫자가 어디서 왔는지 사용자가 알 수 없다.스킬 폴더 밖 문서에 의존하지 않도록 규칙을 여기 인라인으로 둔다.
<symbol> 인라인 + <use> 참조로 self-contained.prefers-color-scheme + :root[data-theme] 모두 대응.--g/--y/--o/--r/--x/--brand/--up/--down/--zebra (+ -s 배경 변형).null은 "정보없음"(0 아님) · 표본 부족은 판정 유보 · 45건 캡 도달은 "목록 불완전" 표기.★·☆는 활자 기호이며 이모지가 아니다. 등급 표기에 사용 가능..map{overflow-x:auto; overflow-y:hidden} + .map iframe{display:block; min-width:720px}.
overflow:hidden만 주면 iframe이 카드 폭에 짓눌려 지도가 최소 줌(한반도)으로 떨어진다.fitBounds가 반경 원을 무시해 원이 잘리는 걸 막으려고
정북·남·동·서에 회색 더미 마커 4개를 심었다. 사용자에게는 정체를 알 수 없는 점으로 보여 혼란만 준다.
원이 잘리더라도 마커는 실제 장소만 찍는다. (근본 해결은 render.ts가 원을 bounds에 포함하도록 고치는 것 — 발견사항 6번)enrich_complex_info 는 이름이 같은 단지도 떨어뜨린다 (실측 2026-07-10)"K-apt 미매칭 = 그 단지가 없다"가 아니다. 좌표가 어긋나면 이름이 글자까지 같아도 제외된다.
위례2차아이파크아파트 실측 — K-apt 에 분명히 있다(A10027553 · 495세대 · 세대당 주차 1.76):
카카오 좌표 37.479738, 127.143743
K-apt 좌표 └─ 261m 떨어져 있음 ← 기본 radius_m=250 을 11m 넘긴다
radius_m | 이름 완전일치 후보 | 이름 무관 후보(힐스테이트) | 결과 |
|---|---|---|---|
| 250 (기본) | 후보에 없음 | 104m | NEARBY_BUT_NAME_MISMATCH |
| 400 | 0.543 | 0.558 ← 더 높다 | NEARBY_BUT_NAME_MISMATCH |
| 500 | 0.635 (임계 0.65에 0.015 부족) | 0.594 | LOW_CONFIDENCE_MATCH |
점수가 radius_m 에 따라 움직이고, 이름 완전일치가 거리에 밀린다. 반경을 늘려도 해결되지 않는다.
not_found 를 "K-apt 미매칭"으로 뭉뚱그려 적지 않는다. 도구가 주는 reason 을 그대로 구분해 쓴다.
NO_COMPLEX_WITHIN_RADIUS(반경 안에 후보 없음) · NEARBY_BUT_NAME_MISMATCH(후보는 있으나 이름 불일치)
· LOW_CONFIDENCE_MATCH(임계 미달). 사유가 다르면 사용자가 할 일도 다르다.candidates[] 에 입력과 이름이 사실상 같은 후보가 있으면 화면에 보인다.
조용히 버리면 "반경 내 전수"라고 읽힌다. 표본 수를 인용할 때 누락 가능성을 함께 적는다.matched(score 0.75)가 난다.
→ 후보 좌표는 반드시 그 단지의 카카오 좌표를 넣는다. 기준 단지 좌표를 돌려쓰면 엉뚱한 단지로 바뀐다.not_found 여도 candidates[] 는 kapt_code 를 함께 준다. 반경만 넓히면 이름 완전일치 후보가 그 안에 나타난다.
1. enrich_complex_info(complexes, radius_m=500) ← 기본 250 으로는 후보에조차 안 뜬다
2. status != "matched" 인 항목의 candidates[] 를 훑는다
3. 정규화한 이름이 입력과 같으면(공백·'아파트' 꼬리 제거 후 일치) 그 kapt_code 를 채택
4. get_complex_info(kapt_code, detail=true) 로 값을 직접 가져와 랭킹에 넣는다
5. 화면에 "좌표 불일치로 자동 매칭 실패 → 이름 일치로 복구" 를 명시한다
실측: 위례2차아이파크아파트 는 radius_m=500 에서 candidates[0] 으로 나오고(A10027553, 261m, score 0.635),
get_complex_info 는 parking_per_unit 1.76 을 정상 반환한다.
아파트 꼬리 제거 후 완전일치만 복구한다.
위례아이파크 와 위례2차아이파크 는 다른 단지다. 애매하면 복구하지 말고 제외 사유를 적는다.ipzitalk MCP 도구의 네임스페이스는 실행 환경(Codex, Claude Code, Hermes, claude.ai 커넥터 등)에 따라 다르다.
이 문서에 적힌 도구 이름(search_announcement_info, get_geocode, get_map_embed_url 등)은 접두사 없는 기본 도구명(base tool name) 이다.
ipzitalk-remote 플러그인의 ipzitalk 서버 provenance가 확인되는 도구만 우선 사용한다. Codex에서는 실제 도구 호출 이벤트의 server: ipzitalk과 기본 도구명을 기준으로 확인한다.presale-mcp 또는 다른 로컬 MCP provenance의 동명 도구는 Remote Skill의 대체 수단으로 사용하지 않는다.클라이언트가 연결 도구 목록에 plugin/server provenance를 구조적으로 제공하지 않을 때만 다음 명시적 fallback을 사용한다.
mcp__plugin_ipzitalk-remote_ipzitalk__<도구명>mcp__ipzitalk_mcp__<도구명>mcp__ipzitalk__<도구명>mcp__claude_ai_ipzitalk__<도구명>fallback으로도 Remote 출처를 유일하게 확인할 수 없으면 값을 추정하지 말고, 사용자에게 ipzitalk Remote MCP 연결 상태를 확인하도록 안내한 뒤 중단한다.
npx claudepluginhub chatdaeri/ipzitalk --plugin ipzitalk-remote기준 주소·단지명·지역 주변 반경의 K-apt 단지를 수집하고, 사용승인연차 분포를 0~10년, 10~20년, 20~30년, 30년+ 밴드로 분석한다. "노후도 분석", "신축/구축 비율", "주변 단지 연식", "오래된 아파트 많아?"를 물을 때 사용한다.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Creates platform-native content for X, LinkedIn, TikTok, YouTube, and newsletters from source material. Adapts voice and format per platform while avoiding engagement bait and filler.