Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

geonames-mcp-server

by cyanheadsversion 0.2.0i★ –iComputer or cloud
Registry nameio.github.cyanheads/geonames-mcp-server

Install

Overview

Description from the maker (original English)

Search GeoNames places, walk admin hierarchies, reverse geocode, get postal codes and country info.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Computer or cloud
  • Transport: stdio, Streamable HTTP
  • Category: Travel, maps & weather
  • You need to fill in: GEONAMES_USERNAME

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 3 of 3 passed
  • Runs on the maker’s server: what you ask it goes through their server.
  • Can do 8 things (tools) geonames_search_places, geonames_get_place, geonames_get_hierarchy, geonames_get_children …
  • You fill in yourself: GEONAMES_USERNAME, MCP_LOG_LEVEL

Values marked secret are keys to your account. Never share them or paste them into a chat.

You need

  • Runs in the cloudNothing to install; it connects over the internet
  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Works in Claude on the web, desktop and mobile:

  1. Open Settings → Connectors
  2. Press Add custom connector
  3. Paste the address below and press Add
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Add2https://…3
https://geonames.caseyjhand.com/mcp

Or run it on your computer

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "geonames": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/geonames-mcp-server"
      ],
      "env": {
        "GEONAMES_USERNAME": "your-value",
        "MCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add --transport http geonames https://geonames.caseyjhand.com/mcp

Or run it on your computer

claude mcp add geonames --env GEONAMES_USERNAME=your-value --env MCP_LOG_LEVEL=your-value -- npx -y @cyanheads/geonames-mcp-server

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "geonames": {
      "url": "https://geonames.caseyjhand.com/mcp"
    }
  }
}

Or run it on your computer

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "geonames": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/geonames-mcp-server"
      ],
      "env": {
        "GEONAMES_USERNAME": "your-value",
        "MCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "geonames": {
      "type": "http",
      "url": "https://geonames.caseyjhand.com/mcp"
    }
  }
}

Or run it on your computer

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "geonames": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/geonames-mcp-server"
      ],
      "env": {
        "GEONAMES_USERNAME": "your-value",
        "MCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

ChatGPT connects only to servers on the internet:

  1. Open ChatGPT on the web → Settings → Connectors (Apps)
  2. Press Create or Add (some plans need Developer mode under Advanced first)
  3. Paste the address below, give it a name and save
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Create2https://…3
https://geonames.caseyjhand.com/mcp

Menu names can differ slightly by plan and over time.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • GEONAMES_USERNAME secret env
    GeoNames account used when a call passes no geonamesUsername. Free accounts must enable free web services on their geonames.org account page.
  • MCP_LOG_LEVEL env
    Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Tool names and descriptions exactly as the server reported them on Nov 7, 2026. The maker wrote them, not us; we show them as plain text.

  • geonames_search_places

    Search the GeoNames gazetteer of 13M+ places by name and filters: country, admin division by its GeoNames code (adminCode1 TX with countries US for Texas), feature class (P populated places, A admin divisions, T mountains and terrain, H water, S buildings and spots), feature code

  • geonames_get_place

    Fetch the full GeoNames record for one geonameId: coordinates, feature type, the admin chain with each level's code, name, and geonameId, timezone, bounding box, recorded and DEM elevation, population, Wikipedia URL, names in other languages, postal codes, and external identifier

  • geonames_get_hierarchy

    Return the parent chain of a GeoNames feature, ordered from Earth and its continent through the country and admin divisions down to the feature itself, each with its geonameId, feature code, and coordinates. Use it to find which country, state, and county contain a place, or to f

  • geonames_get_children

    List the direct children of a GeoNames feature — Earth's continents, a continent's countries, a country's first-level divisions, a state's counties, a city's sections — in the administrative tree, or in the tourism tree (islands, coasts, and their municipalities; almost all in Sp

  • geonames_reverse_geocode

    Resolve a latitude/longitude to the country and admin subdivisions that contain it (down to ADM5, each with its geonameId and ISO 3166-2 code where one exists), or the ocean or sea when the point is offshore, plus the nearest populated places with distances; these include neighbo

  • geonames_find_postal_codes

    Look up postal codes in the GeoNames postal database (122 countries): mode code resolves a postal code to its place, admin names, and centroid; mode place_name finds postal codes for a place name; both page with offset, up to 5000; mode nearby lists postal codes within radiusKm (

  • geonames_get_countries

    Get GeoNames country facts — ISO alpha-2, alpha-3, and numeric codes, FIPS code, geonameId, capital, population, area in km², continent, languages, currency, postal-code format, and mainland bounding box — for the countries named, a continent, or all 250. The geonameId anchors ge

  • geonames_list_reference

    Decode GeoNames vocabulary used by the other tools: topic feature_classes lists the 9 one-letter classes; topic feature_codes lists the 684 feature codes with names and definitions, filterable by class and text; topic postal_countries lists the 122 countries with postal-code data

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account cyanheads, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 210 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 8 tool descriptions and found no hidden instructions to the AI

Compared with others in Travel, maps & weatheri

  • More stars than 0% of the other 1711 servers in this category
  • Published to the registry more recently than 77% of the other 1711 servers in this category
  • Basic checks equal to or better than 100% of the other 1711 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is geonames-mcp-server safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: GEONAMES_USERNAME

Does it run on my computer or in the cloud?

Either way works: install it on your computer or connect to the cloud version.

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.2.0) reached the registry 9 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: Reel-E, Agro API MCP by usefulapi, FieldClimate MCP by usefulapi

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Reel-E

by reel-e.ai

Make and edit real estate listing videos, photos and websites from your AI assistant.

Runs in the cloudUpdated today
Install

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

@cyanheads/geonames-mcp-server Search GeoNames places, walk admin hierarchies, reverse geocode, get postal codes and country info via MCP. STDIO or Streamable HTTP. 8 Tools

Public Hosted Server: https://geonames.caseyjhand.com/mcp


Overview

The GeoNames gazetteer: 13M+ places worldwide, linked into an administrative tree from continent to neighborhood. Search places, read full records, walk the admin hierarchy, reverse geocode coordinates, look up postal codes, and read country facts.

Tools
ToolDescription
geonames_search_placesSearch places by name, country, admin division code, feature class or code, population tier, and bounding box
geonames_get_placeFull record for one geonameId: admin chain, timezone, elevation, alternate names, postal codes, external identifiers
geonames_get_hierarchyParent chain from Earth and the continent down to the feature
geonames_get_childrenDirect children of a feature in the administrative, tourism, or dependency tree
geonames_reverse_geocodeCountry and admin subdivisions (or the ocean) for a coordinate, plus the nearest places or features and an optional timezone
geonames_find_postal_codesPostal codes by code, by place name, or near a coordinate
geonames_get_countriesCountry facts: ISO and FIPS codes, geonameId, capital, population, area, languages, currency, postal-code format
geonames_list_referenceFeature classes, feature codes, and the countries with postal-code data

Capability reference

geonames_search_places tool
  • query (up to 200 characters) compared per match: name_required (default), any_field, exact_name, or name_prefix; filters countries (up to 10, by ISO alpha-2, alpha-3, or numeric code), adminCode1–adminCode4, featureClasses, featureCodes (up to 20), cities (cities1000 / cities5000 / cities15000), and boundingBox. A call needs query or one of countries, featureClasses, featureCodes, boundingBox
  • A listed country also returns the territories GeoNames files under it (GB also returns IM, GG, JE, and GS), each place under its own countryCode; the notice names any country on the page that countries does not list
  • adminCode1–adminCode4 search inside an admin division by its GeoNames code, as geonames_get_place and geonames_reverse_geocode return it in adminLevels (countries: ["US"], adminCode1: "TX", featureCodes: ["AIRP"] lists Texas airports). Codes are case-insensitive and zero padding counts (02, not 2); they are not ISO 3166-2 or postal codes (Bavaria is 02, not BY). Each needs exactly one country, and levels 2–4 need adminCode1
  • limit 1–1,000 (default 10), held to 100 per call with a notice when more remain; offset 0–5000, orderBy relevance or population (omitted, GeoNames' own order); returns totalCount, effectiveQuery, and nextOffset
  • featureClasses, featureCodes, and cities (class P only) intersect: with both lists set, each code's class must be listed and each listed class needs a code; beside cities, only class P and its codes. Anything else fails as feature_filter_mismatch
  • Fails before any request with query_or_filter_required, query_required, unknown_country_code, unknown_feature_code, admin_code_unscoped, feature_filter_mismatch, or invalid_bounding_box

geonames_get_place tool
  • One geonameId; an unknown id returns found: false with guidance
  • Returns adminLevels 1–5 (code, name, geonameId), timezone (UTC offsets on 1 January and 1 July), bounding box, recorded and DEM elevation, population, Wikipedia URL, alternateNames, postalCodes, links, and identifiers (IATA, ICAO, FAA, Transport Canada, UN/LOCODE, Wikidata)
  • The timezone is the zone GeoNames associates with the record. On a record with no country (an ocean, a sea, a continent) a notice says so and gives the geonames_reverse_geocode call for the time at its coordinates
  • postalCodes lists the codes GeoNames links to the feature, which can be fewer than geonames_find_postal_codes returns for the place
  • nameLanguages (up to 20 tags; zh also matches zh-CN) filters alternateNames only

geonames_get_hierarchy tool
  • One geonameId; chain runs from Earth and its continent through the country and admin divisions down to the feature, skipping levels it does not sit under
  • Each level carries geonameId, feature class and code, country and first-level codes, coordinates, and population; an unknown id returns found: false

geonames_get_children tool
  • hierarchy: administrative (default), tourism (islands, coasts, and their municipalities; almost all in Spain), or dependency (a country's dependent territories). Children are mostly admin divisions (class A) and populated places (class P); continents and coasts are class L, islands class T
  • GeoNames answers a tourism or dependency request with the administrative children when the feature has no such tree. The tool compares the two lists and sets sameAsAdministrative, with a notice, when they match; the rows stay, since a real tree can match too
  • Fetches up to 1,000 children per parent once and caches them, so nameContains, limit (1–1,000, default 100, held to 500 per call with a notice when more remain), and offset cost no extra credits; a notice says when GeoNames lists more. A nameContains with no letter or digit fails before any request as name_contains_unsearchable
  • An unknown id returns found: false; a leaf returns an empty children list with a notice

geonames_reverse_geocode tool
  • lat / lng resolve to country and adminLevels (down to ADM5, each with its geonameId and ISO 3166-2 subdivision code where one exists) or, offshore, the ocean
  • coastalBufferKm (0–50, default 0) matches the nearest country within that distance when none contains the point, for harbor, pier, and shoreline fixes; a buffered match carries country.distanceInKm, and the nearby and timezone lookups keep the exact point
  • nearby lists the nearest populated places (nearbyLimit 0–1,000, default 5, held to 50 per call with a notice when more lie within the radius; radiusKm up to 300, default 20; optional cities tier) or, when featureClasses / featureCodes is set, the nearest features of that type; nearbyKind says which. featureClasses and featureCodes intersect
  • When more than 50 lie within the radius, the notice prints the geonames_search_places call, with a boundingBox enclosing the radius, that lists them, up to the search's 5,100-row reach. The search returns rows by relevance, not distance, so read every page and keep the rows within radiusKm
  • Fails before any request with conflicting_filters (cities with a feature filter), unknown_feature_code, or feature_filter_mismatch (a code whose class is not listed, or a listed class with no code)
  • includeTimezone adds the IANA id, UTC offsets, local time, sunrise, and sunset (offsets only offshore, where both dates are reported at the standard offset)

geonames_find_postal_codes tool
  • mode: code (needs postalCode), place_name (needs placeName), or nearby (needs lat and lng; radiusKm up to 30, default 10); a missing field, or countries or an offset above 0 in nearby, fails as mode_fields_mismatch
  • countries filter for code and place_name, by ISO alpha-2, alpha-3, or numeric code (the 250 country codes plus the retired AN, CS, and YU; any other, such as EL or ZZZ, fails as unknown_country_code)
  • A listed country also returns the territories GeoNames files under it (GB also returns IM, JE, and GG), each postal code under its own countryCode; the notice names any country on the page that countries does not list
  • limit 1–1,000 (default 10), held to 100 per call with a notice when more remain; code and place_name page with offset 0–5000 and return nextOffset while more rows remain below offset 5000; GeoNames reports no total, so truncated says whether more rows exist, never how many
  • Covers 122 countries; Ireland returns only Eircode routing keys and Malta only letter prefixes
  • Admin codes on postal rows come from the postal dataset and can differ from the gazetteer's (Bavaria is BY here, 02 in search), so they are not geonames_search_places filters

geonames_get_countries tool
  • Up to 250 countries by ISO alpha-2, alpha-3, or numeric code, a continent, nameContains, or no filter for all 250; limit 1–1,000 (default 50), held to 250 per call, with offset; a nameContains with no letter or digit fails before any request as name_contains_unsearchable
  • Rows carry ISO and FIPS codes, geonameId (the starting point for geonames_get_children), capital, population, area, continent, languages, currency, postal-code format, and mainland bounding box; unknown codes land in notFound

geonames_list_reference tool
  • topic: feature_classes (9), feature_codes (684, filterable by featureClass), or postal_countries (122, with each country's code range and count); featureClass with another topic fails as filter_not_applicable
  • nameContains, limit 1–1,000 (default 100, held to 700 per call, which fits every topic), and offset; feature classes and codes are bundled and spend no credits. A nameContains with no letter or digit fails before any request as name_contains_unsearchable

Features

Built on [@cyanheads/mcp-ts-core](https://github.com/cyanheads/mcp

Only the beginning is shown; read the rest in the repo

Ask PopNx