| name | ipzitalk-elementary-proximity |
| description | 주소 또는 단지명을 입력받아 최근접 초등학교까지의 직선거리로 "초품아(초등학교를 품은 아파트)" 신호 배지 카드를 생성한다. "우리 집 초품아야?", "초등학교 가까워?", "A단지 초품아", "초품아 맞아" 등의 표현이 있으면 이 스킬을 사용한다. (교육 전반은 교육 환경 분석 스킬로.)
|
| version | 1.0.2 |
| license | proprietary |
초품아 진단 (배지)
주소/단지명 하나로 최근접 초등학교 직선거리를 신호 배지로 낸다.
※ 직선거리 기준 · 참고 신호(진단 아님). 도보 실거리·통학로 횡단·배정은 미확인.
입력
| 파라미터 | 필수 | 설명 |
|---|
query | ✅ | 주소·단지명·지역명·법정동코드 중 1개 |
워크플로우 (검증된 실제 파라미터)
- 입력 해소 —
resolve-site 규약 적용 → 표준번들(좌표·region_code 등). 지점 필수(area_center면 주소/단지명 권장).
- 초등학교 검색 —
search_by_nearby_category(center, radius_m=1500, categories=['school_elementary']) → 최근접 거리.
- 판정 — 최근접 직선거리를 아래 밴드로 신호색 산출.
- 지도 + 카드 —
get_map_embed_url(SITE 파랑 + 인근 초등 마커 + 500m 반경) → 배지 카드(templates/result.html) 렌더.
밴드 (직선거리)
| 신호 | 거리 | 라벨 |
|---|
| g (초록) | ≤300 | 초품아 인접 |
| a (노랑) | 300–500 | 보도권 |
| o (주황) | 500–1000 | 다소 이격 |
| x (회색) | >1000 | 이격 |
🚨 개교 예정 학교를 최근접으로 쓰지 않는다 (실측 2026-07-09)
카카오 장소명에 개교 예정이 문자열로 들어오고 거리도 정상 반환된다. 그대로 두면 미개교 학교로 초품아 판정이 난다.
"산빛초등학교 (2027년 3월 예정)" 311m ← 신호 판정에 쓰면 안 된다
"서울송례초등학교" 411m ← 이것으로 판정
- 장소명에
예정·개교·(20NN년·휴교·폐교 가 있으면 신호 판정에서 제외하고, 목록에 상태 꼬리표(개교 예정/휴교)만 단다.
- 두 학교가 같은 밴드면 결론은 같지만, 밴드가 갈리면 등급이 통째로 바뀐다(311m=초품아 인접 vs 411m=보도권).
필수 단서 · 금지 표현
- 필수: 직선거리 기준 · 최근접 초교가 타 자치구·타 시·도일 수 있음(배정과 무관) · 배정/통학로 미확인 · 학구도 배정 확인 링크(https://schoolzone.emac.kr/gis/gis.do) · 개교 예정 학교는 판정 제외 · 출처(카카오맵)·조회일.
- 금지: "초품아 확정", "배정 초등학교 = OO", "통학로 안전" 단정, 개교 예정·휴교·폐교 학교로 초품아 판정.
검증된 사항 (서울 서초구 방배동 사례 · 2026-07-08)
search_by_nearby_category ['school_elementary'] r1500 정상 작동.
- 최근접 초교 425m → 보도권(노랑). 단 최근접 초교가 타 자치구 소재 → 실제 배정교(서초구 이수초 545m 등)와 다를 수 있음 → "배정 미확인 + 학구도 링크" 자동 첨부.
섹션마다 출처를 작게 단다
데이터 블록 하단에 .src 한 줄. 도구·API 이름은 쓰지 않는다. 사용자가 아는 기관명만.
| 블록 | 출처 표기 |
|---|
| 단지 개요·세대수·준공·주차·연차 | 공동주택관리정보시스템(K-apt) |
| 매매·전세·평당가·거래량 | 국토교통부 실거래가 |
| 학교·교통·생활·상권 등 장소 | 카카오맵 |
| 분양공고·분양가·주택형·입주월 | 청약홈 |
| 지도 (장소 마커) | 네이버 지도 · 카카오맵 |
| 지도 (분양공고 마커) | 네이버 지도 · 청약홈 |
- 🚨 출처 문자열은
ipzi-data JSON으로 받지 않고 템플릿 마크업에 직접 박는다.
어느 블록이 어디서 왔는지는 실행마다 달라지지 않는다. 데이터로 받으면 채우는 걸 잊거나 틀리게 쓸 여지만 생긴다.
- 🚨 한 블록에 두 출처가 섞이면 병기한다. 예:
세대수·주차 — 공동주택관리정보시스템(K-apt) · 위치 — 카카오맵.
하나로 뭉뚱그리면 어느 숫자가 어디서 왔는지 사용자가 알 수 없다.
- 🚨 쓰지 않은 기관을 출처로 적지 않는다. 우리가 부르는 곳은 위 다섯 곳뿐이다.
- 히어로·유의사항·푸터에는 달지 않는다. 데이터 블록에만.
디자인 정본
스킬 폴더 밖 문서에 의존하지 않도록 규칙을 여기 인라인으로 둔다.
- CDN·외부 폰트·이모지 금지. 아이콘은
<symbol> 인라인 + <use> 참조로 self-contained.
- 라이트/다크 양쪽.
prefers-color-scheme + :root[data-theme] 모두 대응.
- 토큰만 사용:
--g/--y/--o/--r/--x/--brand/--up/--down/--zebra (+ -s 배경 변형).
- 예외 상태:
null은 "정보없음"(0 아님) · 표본 부족은 판정 유보.
★·☆는 활자 기호이며 이모지가 아니다. 등급 표기에 사용 가능.
- 지도 카드 CSS:
.map{overflow-x:auto; overflow-y:hidden} + .map iframe{display:block; min-width:720px}.
overflow:hidden만 주면 iframe이 카드 폭에 짓눌려 지도가 최소 줌(한반도)으로 떨어진다.
- 🚨 지도 링크는 발급 후 7일 만료. 산출물 지도 캡션에 유효기간·재발급 필요를 반드시 적는다.
- 🚨 반경 눈금 마커를 넣지 않는다. 예전엔
fitBounds가 반경 원을 무시해 원이 잘리는 걸 막으려고
정북·남·동·서에 회색 더미 마커 4개를 심었다. 사용자에게는 정체를 알 수 없는 점으로 보여 혼란만 준다.
원이 잘리더라도 마커는 실제 장소만 찍는다. (근본 해결은 render.ts가 원을 bounds에 포함하도록 고치는 것 — 발견사항 6번)
🚨 화면 문구는 일반인 언어로 (2026-07-10 결정)
진단 시리즈(초품아·역세권·병세권·쇼세권·숲세권)의 독자는 부동산 전문가가 아니다.
내부 용어를 그대로 화면에 쓰지 않는다. 임계값·색(cls)은 그대로 두고 라벨만 바꾼다.
| 쓰지 않는 말 | 대신 |
|---|
| 최근접 · (최근접·판정 기준) | 제일 가까운 곳 · (제일 가까움) |
| 판정 밴드 · 판정 기준 | 등급 기준 |
| 신호 등급 | 등급 |
| 인접 / 근접 | 아주 가까움 / 가까움 |
| 다소 이격 | 조금 먼 편 |
| 이격 · 역 이격 | 먼 편 · 역이 먼 편 |
| 보도권 | 가까움 |
| 판정 유보 | 자료 부족 |
| 판정창 | 기준 범위 |
| 참고 신호(진단 아님) | 참고용이며 확정 판단이 아닙니다 |
| 1km 내 · 슬라이더 반경 내 | 1km 안 · 선택한 반경 안 |
| 미확인 | 확인되지 않음 |
| 판정에서 제외 | 등급에서 제외 |
거리도 읽기 쉽게: 1313m → 1.3km.
문장도 사람 말로
✕ SITE(파랑) · 반경 3km 원 · 판정 기준 경찰병원(주황, 2.3km) · 서울세계로병원(회색)은 등급에 미반영
✓ 파란 점이 우리 집, 주황 점이 등급 기준이 된 경찰병원(2.3km)입니다.
회색 서울세계로병원(645m)은 종합병원이 아니라 등급에 넣지 않았습니다.
- 🚨 부드럽게 쓰되 사실은 그대로. "가까움"이 "좋음"이 되면 안 된다. 등급은 거리 밴드가 정한다.
- 🚨 숫자는 화면 전체에서 일치해야 한다.
aux 항목을 개수에서 뺐으면 본문 문장의 개수도 함께 고친다.
실제로 목록은 5곳인데 본문이 6곳이라고 적힌 적이 있다.
- 익숙한 말은 남긴다:
역세권·준역세권·초품아·상권.
🚨 휴교·폐교 학교도 그대로 섞인다 (실측 2026-07-10)
개교 예정과 같은 함정이다. 카카오는 학교의 운영 상태를 장소명 문자열에만 적고,
category_name 은 정상 학교와 글자 하나 다르지 않다. 거리도 정상으로 준다.
서울반포초등학교 (휴교) 728m 교육,학문 > 학교 > 초등학교
반포중학교 (휴교) 626m 교육,학문 > 학교 > 중학교
산빛초등학교 (2027년 3월 예정) 311m 교육,학문 > 학교 > 초등학교
카테고리 검색도 걸러주지 않는다. (지하철은 categories:['subway'] 가 미개통역을 빼주지만, 학교는 아니다.)
등급이 실제로 뒤집힌다 — 서울반포초 바로 앞(반경 700m) 실측:
서울반포초등학교 (휴교) 17m ← 그대로 쓰면 🟢 초품아 인접
계성초등학교 520m ← 운영 중 최근접. 올바른 등급은 🟡
- 🚨 운영 중인 학교로만 판정한다. 휴교/폐교/개교 예정은 목록·지도에 참고로만 두고
개수·등급·최근접에서 뺀다(
aux 처리).
- 재건축 이주 구역에서 특히 잦다(반포·둔촌 등). 휴교는 재개교할 수도, 안 할 수도 있다.
재개교 시점을 추정하지 말 것. 장소명에 있는 문자열만 화면에 쓴다.
- 키워드 검색을 쓰면
학교부속시설(교무실·운동장·정문·별관)까지 딸려 온다. 실측 초등학교 15건 중 8건이 부속시설이었다.
category_name 이 > 학교 > 로 끝나는 것만 학교로 센다.
MCP 도구 네임스페이스와 출처
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의 대체 수단으로 사용하지 않는다.
- provenance를 확인할 수 없거나 같은 기본 도구명이 여러 서버에 있어 모호하면 임의 선택하지 말고 중단하여 필요한 Remote 도구명을 안내한다.
클라이언트가 연결 도구 목록에 plugin/server provenance를 구조적으로 제공하지 않을 때만 다음 명시적 fallback을 사용한다.
mcp__plugin_ipzitalk-remote_ipzitalk__<도구명>
mcp__ipzitalk_mcp__<도구명>
mcp__ipzitalk__<도구명>
mcp__claude_ai_ipzitalk__<도구명>
fallback으로도 Remote 출처를 유일하게 확인할 수 없으면 값을 추정하지 말고, 사용자에게 ipzitalk Remote MCP 연결 상태를 확인하도록 안내한 뒤 중단한다.