search_cities
Search for cities by name, country, population range, or region. Returns results with geographic information and name translations.
Instructions
Search cities by name, country, population range, and more. Returns matching cities with geographic and translation data.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | City name prefix to search for | |
| countryCode | No | ISO 3166-1 alpha-2 country code (e.g. "US", "DE") | |
| regionId | No | Filter by region UUID | |
| minPopulation | No | Minimum population | |
| maxPopulation | No | Maximum population | |
| sort | No | Sort order | |
| preferredLanguages | No | Comma-separated BCP 47 language tags for name translations (e.g. "fr,en") | |
| limit | No | Max results (default 20) | |
| offset | No | Pagination offset |
Implementation Reference
- src/server.ts:35-38 (handler)Handler function for the 'search_cities' tool. Accepts the params object (name, countryCode, regionId, minPopulation, maxPopulation, sort, preferredLanguages, limit, offset) and calls client.cities.search(params) to execute the search, returning results as JSON text.
async (params) => { const result = await client.cities.search(params); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; }, - src/server.ts:18-34 (schema)Zod schema definitions for the 'search_cities' tool inputs: optional name prefix, countryCode (ISO alpha-2), regionId (UUID), minPopulation/maxPopulation (integers), sort (enum with 4 options), preferredLanguages (comma-separated BCP 47 tags), limit (1-100), and offset.
{ name: z.string().optional().describe('City name prefix to search for'), countryCode: z.string().optional().describe('ISO 3166-1 alpha-2 country code (e.g. "US", "DE")'), regionId: z.string().optional().describe('Filter by region UUID'), minPopulation: z.number().int().optional().describe('Minimum population'), maxPopulation: z.number().int().optional().describe('Maximum population'), sort: z .enum(['population_desc', 'population_asc', 'name_asc', 'name_desc']) .optional() .describe('Sort order'), preferredLanguages: z .string() .optional() .describe('Comma-separated BCP 47 language tags for name translations (e.g. "fr,en")'), limit: z.number().int().min(1).max(100).optional().describe('Max results (default 20)'), offset: z.number().int().min(0).optional().describe('Pagination offset'), }, - src/server.ts:15-39 (registration)Registration of the 'search_cities' tool on the MCP server via server.tool() with its name, description, Zod schema, and async handler function.
server.tool( 'search_cities', 'Search cities by name, country, population range, and more. Returns matching cities with geographic and translation data.', { name: z.string().optional().describe('City name prefix to search for'), countryCode: z.string().optional().describe('ISO 3166-1 alpha-2 country code (e.g. "US", "DE")'), regionId: z.string().optional().describe('Filter by region UUID'), minPopulation: z.number().int().optional().describe('Minimum population'), maxPopulation: z.number().int().optional().describe('Maximum population'), sort: z .enum(['population_desc', 'population_asc', 'name_asc', 'name_desc']) .optional() .describe('Sort order'), preferredLanguages: z .string() .optional() .describe('Comma-separated BCP 47 language tags for name translations (e.g. "fr,en")'), limit: z.number().int().min(1).max(100).optional().describe('Max results (default 20)'), offset: z.number().int().min(0).optional().describe('Pagination offset'), }, async (params) => { const result = await client.cities.search(params); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; }, );