{"openapi":"3.0.3","info":{"title":"K-Address Geocoder API","version":"1.1.0","description":"한국 주소 → 좌표 변환 및 역지오코딩. OSM Nominatim 기반. API 키 불필요.","contact":{"url":"https://github.com/lazymac2x"},"license":{"name":"ODbL (data)","url":"https://www.openstreetmap.org/copyright"}},"servers":[{"url":"https://api.lazy-mac.com/k-address-geocoder"}],"paths":{"/geocode":{"get":{"summary":"한국 주소 → 좌표 (순방향 지오코딩)","operationId":"geocode","parameters":[{"name":"q","in":"query","required":true,"description":"검색할 주소 (도로명/지번 모두 가능)","schema":{"type":"string","example":"강남구 테헤란로 212"}},{"name":"limit","in":"query","required":false,"description":"최대 결과 수 (1–10, 기본 5)","schema":{"type":"integer","minimum":1,"maximum":10,"default":5}}],"responses":{"200":{"description":"지오코딩 결과","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"count":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"lat":{"type":"number","description":"위도"},"lon":{"type":"number","description":"경도"},"display_address":{"type":"string"},"address":{"type":"object","properties":{"road":{"type":"string"},"suburb":{"type":"string"},"borough":{"type":"string"},"city":{"type":"string"},"postcode":{"type":"string"}}}}}},"source":{"type":"string"},"license":{"type":"string"}}}}}},"400":{"description":"q 파라미터 누락"},"502":{"description":"Nominatim 업스트림 오류"}}}},"/reverse":{"get":{"summary":"좌표 → 한국 주소 (역지오코딩)","operationId":"reverseGeocode","parameters":[{"name":"lat","in":"query","required":true,"description":"위도 (33–39)","schema":{"type":"number","example":37.5665}},{"name":"lon","in":"query","required":true,"description":"경도 (124–132)","schema":{"type":"number","example":126.978}},{"name":"zoom","in":"query","required":false,"description":"Nominatim zoom 레벨 (상세도, 1–18, 기본 18)","schema":{"type":"integer","minimum":1,"maximum":18,"default":18}}],"responses":{"200":{"description":"역지오코딩 결과","content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"display_address":{"type":"string"},"address":{"type":"object","properties":{"building":{"type":"string"},"house_number":{"type":"string"},"road":{"type":"string"},"borough":{"type":"string"},"city":{"type":"string"},"postcode":{"type":"string"}}},"source":{"type":"string"}}}}}},"400":{"description":"lat/lon 누락"},"404":{"description":"해당 좌표에 주소 없음"},"422":{"description":"한반도 범위 벗어남"},"502":{"description":"Nominatim 업스트림 오류"}}}},"/health":{"get":{"summary":"헬스 체크","operationId":"healthCheck","responses":{"200":{"description":"서비스 정상"}}}},"/mcp":{"get":{"summary":"MCP 엔드포인트 정보","operationId":"mcpInfo","responses":{"200":{"description":"MCP 엔드포인트 안내 JSON"}}},"post":{"summary":"MCP JSON-RPC 2.0 엔드포인트","operationId":"mcpEndpoint","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"method":{"type":"string","enum":["initialize","tools/list","tools/call","notifications/initialized"]},"id":{"type":"integer"},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"JSON-RPC 응답"}}}}}}