geocode
Convert city names or addresses into latitude and longitude coordinates using the Nominatim OpenStreetMap service.
Instructions
도시명 또는 주소를 입력받아 위도·경도 좌표를 반환합니다. (Nominatim OpenStreetMap)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 검색할 도시명 또는 주소 | |
| limit | No | 반환할 결과 수 (기본값: 1, 최대: 5) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | 좌표 결과 |
Implementation Reference
- src/index.ts:161-218 (handler)The 'geocode' tool is registered using `server.registerTool`. The handler logic uses Nominatim's OpenStreetMap API to fetch coordinates for a given query.
server.registerTool( 'geocode', { description: '도시명 또는 주소를 입력받아 위도·경도 좌표를 반환합니다. (Nominatim OpenStreetMap)', inputSchema: z.object({ query: z.string().describe('검색할 도시명 또는 주소'), limit: z .number() .int() .min(1) .max(5) .optional() .default(1) .describe('반환할 결과 수 (기본값: 1, 최대: 5)') }), outputSchema: z.object({ content: z .array( z.object({ type: z.literal('text'), text: z.string().describe('좌표 결과') }) ) .describe('좌표 결과') }) }, async ({ query, limit }) => { const url = new URL('https://nominatim.openstreetmap.org/search') url.searchParams.set('q', query) url.searchParams.set('format', 'json') url.searchParams.set('limit', String(limit)) const res = await fetch(url.toString(), { headers: { 'User-Agent': 'my-mcp-server/1.0' } }) const data = (await res.json()) as Array<{ lat: string lon: string display_name: string }> if (data.length === 0) throw new Error('검색 결과가 없습니다.') const text = data .map( (r, i) => `[${i + 1}] ${r.display_name}\n 위도: ${r.lat}, 경도: ${r.lon}` ) .join('\n') return { content: [{ type: 'text' as const, text }], structuredContent: { content: [{ type: 'text' as const, text }] } } } )