geo-mcp
Provides geocoding (address to coordinates), reverse geocoding (coordinates to address), and nearby places search using OpenStreetMap data.
Click on "Install 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., "@geo-mcpWhat's the weather in Tokyo?"
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.
π geo-mcp
A geospatial MCP server that gives Claude (or any MCP client) real-world location superpowers β weather, geocoding, timezone, and nearby places. Zero API keys required.
What it does
Connect Claude Desktop, Cursor, or any MCP client to live geospatial data through 5 clean tools:
Tool | Description | API Used |
| Address β lat/lon | Nominatim (OSM) |
| lat/lon β address | Nominatim (OSM) |
| Live weather for any city | Open-Meteo |
| Timezone + local time | timeapi.io |
| POIs within a radius | Overpass (OSM) |
All APIs are free and open β no signup, no keys, no rate-limit surprises for personal use.
Quick start
git clone https://github.com/yourname/geo-mcp
cd geo-mcp
pip install -r requirements.txt
python server.pyRun with Docker
docker build -t geo-mcp .
docker run -p 8000:8000 geo-mcpConnect to Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"geo-mcp": {
"command": "python",
"args": ["/absolute/path/to/geo-mcp/server.py"]
}
}
}Config file location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Restart Claude Desktop β you'll see the π¨ tools icon appear.
Example prompts
Once connected, try these in Claude:
What's the weather like in Tokyo right now?Find me hospitals within 500m of the Eiffel Tower.What time is it right now in lat 35.6762, lon 139.6503?Geocode "1600 Pennsylvania Ave NW, Washington DC"Project structure
geo-mcp/
βββ server.py # FastMCP server + tool definitions
βββ adapters/
β βββ geocoding.py # Nominatim geocoder
β βββ weather.py # Open-Meteo weather
β βββ timezone.py # timeapi.io timezone
β βββ places.py # Overpass POI search
βββ requirements.txt
βββ Dockerfile
βββ claude_desktop_config.jsonTool reference
geocode_address(address: str)
{
"display_name": "Paris, Γle-de-France, France",
"lat": 48.8566,
"lon": 2.3522,
"type": "city"
}current_weather(city: str)
{
"city": "London",
"temperature_c": 14.2,
"feels_like_c": 12.8,
"humidity_pct": 76,
"wind_speed_kmh": 18.4,
"condition": "Partly cloudy",
"precipitation_mm": 0.0
}places_nearby(lat, lon, category, radius_m)
Supported categories: restaurant, cafe, hospital, pharmacy, school, supermarket, park, hotel, bank, gas_station
{
"category": "cafe",
"count": 8,
"places": [
{ "name": "Monmouth Coffee", "lat": 51.513, "lon": -0.122, "opening_hours": "Mo-Fr 07:30-18:00" }
]
}Why this project
Built to demonstrate the multi-adapter MCP pattern β the same architecture used in production fleet/telematics MCP servers. Each adapter is:
Independently testable
Easily swappable (swap Nominatim for Google Maps, Open-Meteo for OpenWeather, etc.)
Async-first with
httpxTyped with clear return schemas
This maps directly to real-world MCP server jobs that require connecting multiple vendor APIs under a unified tool layer.
Extending it
Want to add a new data source? Create adapters/yourapi.py:
import httpx
async def your_tool(param: str) -> dict:
async with httpx.AsyncClient() as client:
r = await client.get("https://api.example.com/...", timeout=10)
r.raise_for_status()
return r.json()Then register it in server.py:
from adapters.yourapi import your_tool
@mcp.tool()
async def exposed_tool_name(param: str) -> dict:
"""Tool description shown to the AI."""
return await your_tool(param)Tech stack
FastMCP β MCP server framework
httpx β async HTTP client
Open-Meteo β free weather API
Nominatim β OpenStreetMap geocoding
Overpass API β OpenStreetMap POI data
timeapi.io β timezone lookup
License
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/FjolleI/geo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server