geomelon-mcp
This server provides an MCP interface to the Geomelon geographic API, enabling AI clients to query detailed data about cities, countries, regions, and languages worldwide.
Cities
Search by name, country code, region, population range, and sort order
Get full details, translations, and settlement-type classifications by UUID
Find cities nearest to coordinates (by distance or population)
Calculate distance in km between two cities
Countries
List countries, filtered by name prefix or telephone dialing code
Get full details, translations, and administrative regions by UUID
Regions
List regions (optionally filtered by country) and get full details/translations by UUID
Languages
List all available languages and get details by UUID
Compound Tools (multi-step queries in one call)
Find cities near a city — resolves coordinates and returns nearby cities by distance or population
City context — fetch a city with its full country and region details
Country overview — fetch a country (by UUID or name), its regions, and top cities by population
Compare cities — full details for two cities plus the distance between them
Search cities in country — search cities using a country name instead of an ISO code
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@geomelon-mcpsearch for cities named London"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
geomelon-mcp
MCP server for the Geomelon geographic API. Exposes cities, countries, regions, and languages as tools any MCP-compatible AI client can call.
Looking for other ways to integrate? See all official libraries at geomelon.dev/libraries.
Two transports are included:
Binary | Transport | Use case |
| stdio | Claude Desktop, Cursor, Cline, Continue |
| HTTP (Streamable) | Claude Code, remote / hosted server |
Requirements
Node.js 18+
A RapidAPI key with the Geomelon API subscribed — optional, see keyless demo mode below
Related MCP server: bamwor-mcp-server
Keyless demo mode
No GEOMELON_API_KEY? Run the server anyway — it starts up with just the search_cities_autocomplete tool, backed by the free oneshot host, no signup required. Every other tool needs a key. This is the fastest way to try the server before subscribing on RapidAPI.
Try it with zero setup
Geomelon also runs a public hosted instance of this same keyless demo — no npx, no local process. Point any remote-MCP-capable client (Claude web/desktop connectors, ChatGPT connectors, MCP Inspector, etc.) at:
https://mcp.geomelon.dev/mcpIt exposes only search_cities_autocomplete, same as running the server yourself with no API key. For the full 22-tool set, run your own instance (below) with your RapidAPI key.
Claude Code (HTTP)
Create a .env file in the directory you'll run the server from:
cp .env.example .env
# then edit .env and set GEOMELON_API_KEYStart the server (dotenv loads .env automatically):
npx geomelon-mcp-httpRegister it with Claude Code:
claude mcp add --transport http geomelon http://localhost:3000/mcpVerify it's connected:
claude mcp listThe server must be running whenever you use Claude Code. To use a different port set PORT=your_port and update the URL in the claude mcp add command accordingly.
Claude Desktop (stdio)
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"geomelon": {
"command": "npx",
"args": ["-y", "geomelon-mcp"],
"env": {
"GEOMELON_API_KEY": "your_rapidapi_key_here"
}
}
}
}Restart Claude Desktop after saving.
Cursor / Windsurf / Cline (stdio)
Add to your editor's MCP config:
{
"geomelon": {
"command": "npx",
"args": ["-y", "geomelon-mcp"],
"env": {
"GEOMELON_API_KEY": "your_rapidapi_key_here"
}
}
}Remote / hosted HTTP server
Create a .env file on your server:
cp .env.example .env
# set GEOMELON_API_KEY and PORT in .envStart the server:
npx geomelon-mcp-httpThen register with any MCP client using http://your-host:3000/mcp as the URL.
The HTTP transport is stateless — each request is independent, no session management needed. CORS is wide open (Access-Control-Allow-Origin: *) since this transport is meant to be reachable by browser-based remote-MCP clients too. GET / (or /health) returns a small JSON status object — useful for uptime checks — reporting whether the instance has a key configured ("mode": "full" or "mode": "keyless-demo").
Available tools
Cities
Tool | Description |
| Search by name, country code, region, population range, sort order |
| Full details for a city by UUID |
| All name translations for a city by UUID |
| Settlement-type classifications for a city by UUID |
| Cities nearest to a lat/lon, ordered by distance |
| Largest cities near a lat/lon, ordered by population |
| Distance in km between two cities |
Countries
Tool | Description |
| List countries, filter by name prefix or telephone dialing code |
| Full details for a country by UUID (includes translations and regions) |
| Name translations for a country by UUID |
| All administrative regions for a country by UUID |
Regions
Tool | Description |
| List regions, filter by country UUID |
| Full details for a region by UUID |
| Name translations for a region by UUID |
Languages
Tool | Description |
| List all languages in the database |
| Details for a language by UUID |
Oneshot prefix search (free, no API key)
Tool | Description |
| Country-scoped, language-specific city name prefix search backed by pre-built static files. The only tool available in keyless demo mode. Works in keyed mode too — it's the fastest search path. |
See geomelon.dev/free-city-autocomplete-api for supported country/language pairs and the underlying HTTP endpoint.
Compound tools
These tools chain multiple API calls internally to save round-trips.
Tool | Description |
| Given a city UUID, find nearby cities ordered by distance or population |
| Fetch a city together with its full country and region details in one call |
| Fetch a country (by UUID or name), its regions, and top cities by population |
| Fetch two cities and the distance between them in one call |
| Search cities using a country name instead of an ISO code |
Available Tools
1 toolsearch_cities_in_countryARead-only
Search cities using a country name instead of an ISO code. Resolves the country first, then searches cities within it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | City name prefix to filter by | |
| sort | No | Sort order | |
| limit | No | Max results (default 20) | |
| offset | No | Pagination offset | |
| countryName | Yes | Country name prefix (e.g. "France", "United States") | |
| maxPopulation | No | Maximum population | |
| minPopulation | No | Minimum population | |
| preferredLanguages | No | Comma-separated BCP 47 language tags |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the description's mention of 'Resolves the country first' adds some behavioral context but does not provide additional safety or limitation details. Description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that directly describe the tool's core purpose without any redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description gives a high-level overview of the two-step process (resolve country, search cities) but does not mention pagination or return format despite pagination parameters existing. Adequate but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are described there. The description does not add meaning beyond the schema, but baseline is 3 due to high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'search' and resource 'cities', and specifies the mechanism: using a country name instead of an ISO code. It distinguishes the tool's function clearly despite no siblings listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for searching cities by country name (as opposed to ISO code), providing some context. However, it does not explicitly state when to use or avoid this tool, nor does it reference alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v1.1.1- Removed
cities_by_coordinates_closest - Removed
cities_by_coordinates_largest - Removed
cities_distance - Removed
city_context - Removed
compare_cities - Removed
country_overview - Removed
find_cities_near_city - Removed
get_city - Removed
get_city_settlement_types - Removed
get_city_translations - Removed
get_country - Removed
get_country_regions - Removed
get_country_translations - Removed
get_language - Removed
get_region - Removed
get_region_translations - Removed
list_countries - Removed
list_languages - Removed
list_regions - Removed
search_cities
21 tool updates
v1.0.9- Added
cities_by_coordinates_closest - Added
cities_by_coordinates_largest - Added
cities_distance - Added
city_context - Added
compare_cities - Added
country_overview - Added
find_cities_near_city - Added
get_city - Added
get_city_settlement_types - Added
get_city_translations - Added
get_country - Added
get_country_regions - Added
get_country_translations - Added
get_language - Added
get_region - Added
get_region_translations - Added
list_countries - Added
list_languages - Added
list_regions - Added
search_cities - Added
search_cities_in_country
21 tool updates
- Removed
cities_by_coordinates_closest - Removed
cities_by_coordinates_largest - Removed
cities_distance - Removed
city_context - Removed
compare_cities - Removed
country_overview - Removed
find_cities_near_city - Removed
get_city - Removed
get_city_settlement_types - Removed
get_city_translations - Removed
get_country - Removed
get_country_regions - Removed
get_country_translations - Removed
get_language - Removed
get_region - Removed
get_region_translations - Removed
list_countries - Removed
list_languages - Removed
list_regions - Removed
search_cities - Removed
search_cities_in_country
21 tool updates
v1.0.8- First observed
cities_by_coordinates_closest - First observed
cities_by_coordinates_largest - First observed
cities_distance - First observed
city_context - First observed
compare_cities - First observed
country_overview - First observed
find_cities_near_city - First observed
get_city - First observed
get_city_settlement_types - First observed
get_city_translations - First observed
get_country - First observed
get_country_regions - First observed
get_country_translations - First observed
get_language - First observed
get_region - First observed
get_region_translations - First observed
list_countries - First observed
list_languages - First observed
list_regions - First observed
search_cities - First observed
search_cities_in_country
TDQS
Scored across 1 tool
With only one tool, there is no risk of confusion or overlap with other tools.
The single tool name follows a clear verb_noun pattern (search_cities_in_country), which is consistent and descriptive.
A single tool feels thin for a geographic data server; while it serves a specific purpose, users might expect more capabilities like listing countries or city details.
The tool only allows searching cities by country name, missing essential operations like retrieving city details, listing countries, or reverse lookups, making the surface severely incomplete.
Maintenance
Related MCP Connectors
Geo-based flight search MCP server. Find more flights between any two places on earth
Geospatial MCP server for earthquake, tsunami, volcano, disaster, and FX data queries.
MCP server for Japan geodata: cadastral lot numbers (chiban) and reverse geocoding, for AI agents.
Geospatial AI MCP server — satellite imagery, embeddings, weather, GNS governance
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA geospatial MCP server that provides tools for geocoding, routing, elevation profiles, and spatial analysis. It enables AI agents to process GIS file formats like GeoJSON and Shapefiles while performing complex coordinate transformations and distance calculations.4MIT
- AlicenseAqualityFmaintenanceMCP server providing structured geographic data for AI agents. Access 261 countries and millions of cities via Bamwor API.538 npm2MIT
- AlicenseNot gradedqualityDmaintenanceMCP Server that gives AI assistants access to comprehensive country data from 250+ countries.1MIT
- AlicenseAqualityDmaintenanceMCP server for spatial queries via the Terranode Geospatial API, enabling AI agents to perform point-in-polygon lookups, nearest feature search, distance calculations, and spatial joins.639 npmMIT