This project provides a Model Context Protocol (MCP) server that exposes tools for interacting with the Google Maps API. It's built using FastMCP and can be used as an example for creating your own MCP servers.
The server exposes the following MCP features:
-
Tools:
geocode: Geocodes an address string and returns the latitude and longitude.get_map: Returns a URL to a static map image for a given latitude and longitude.
-
Prompts:
get_map_for_address: A template that generates a user-friendly prompt to ask for a map of a specific address.
.
├── src
│ └── googlemaps_mcp_server
│ └── main.py # The MCP server implementation
├── tests
│ └── __init__.py
├── .gitignore
├── poetry.lock
├── pyproject.toml
├── README.md
└── test_client.py # An example client to test the server
- Python 3.10+
- Poetry for dependency management.
Use Poetry to install the project dependencies from the `poetry.lock` file.
```bash
poetry install
```
This server requires a Google Maps API key to function.
-
Create a
.envfile: Create a file named.envin the root of the project.touch .env
-
Add your API key: Open the
.envfile and add your Google Maps API key in the following format:GOOGLE_MAPS_API_KEY="YOUR_GOOGLE_MAPS_API_KEY"Replace
"YOUR_GOOGLE_MAPS_API_KEY"with your actual key. The server loads this key from the environment.
To start the MCP server, run the main.py script:
poetry run python src/googlemaps_mcp_server/main.pyThe server will start and listen on http://0.0.0.0:8000/mcp.
An example client is provided in test_client.py to demonstrate how to connect to the server and use its tools.
To run the client:
poetry run python test_client.pyThe client will:
- Call the
geocodetool. - Use the result to call the
get_maptool for several zoom levels. - List and use the
get_map_for_addressprompt.
Geocoding 'University of Passau, Germany'...
Geocode Result: {
"latitude": 48.5677779,
"longitude": 13.4527974
}
Getting map for lat=48.5677779, lon=13.4527974 at zoom=18...
Map Result (zoom=18): { "map_url": "https://maps.googleapis.com/maps/api/staticmap?center=48.5677779%2C13.4527974&zoom=18&size=1024x1024&maptype=hybrid&scale=2&key=..." }
...
--- Testing Prompts ---
Available Prompts: ['get_map_for_address']
Generated Prompt: You are a maps assistant that is supposed to first use geocode tool to get geo coordinates of the address. Then use get_map tool to get a url of the map snippet of the address.By default show map of hybrid type.Now Show me a map of University of Passau, Germany.
--- Prompt Test Complete ---
/mcp/geocode?address=<address>: Geocodes an address string and returns the latitude and longitude./mcp/get_map?lat=<latitude>&lon=<longitude>&maptype=<maptype>: Returns a URL to a static map image.maptypecan be one ofroadmap,satellite,hybrid,terrain.
