This uses the googlemaps Python package (which hasn't been updated since 2023, but does appear to still be active)
For this example, you will need a Google Maps Platform API key. I restricted my APIs to the following:
- Directions API
- Distance Matrix API
- Geocoding API
- Places API
You may need to expand on this if you wish to add more functionality. Here is the Google Maps Platform API Picker to help you decided what you need. You will also need an set an additional environment variable, GOOGLE_MAPS_API_KEY
.
Of course, there will be a cost to using the Maps API as well. It's got a pretty generous free-tier, depending on what you're using, just don't go crazy with it ;)
fastmcp run server.py --transport stdio
You can substitute stdio
with streaming-http
or sse
(deprecated) depending on your deployment method.
NOTE: if you use the fastmcp
option, it ignores the if __name__ == "__main__"
, so you need to pass --transport
and any other settings you wish to override.
pytest -v tests/
Run server with:
fastmcp run server --transport streaming-http
Run client with:
python tests/client_list_tools.py
- sample output:
[Tool found]: get_directions
[Tool found]: get_distance
[Tool found]: get_geocode
[Tool found]: find_place
[Tool found]: place_nearby
[Tool found]: place_details
model="gemini-2.5-flash"
google_maps_api_key=os.getenv("GOOGLE_MAPS_API_KEY")
maps_agent = LlmAgent(
name="maps_agent",
model=model,
instruction=(
"You are an AI Google Maps assistant. Your primary function is to find places that meet the user's criteria. Include with your findings the name of the place, its rating, and its address. Limit the results to a maximum of 10. Use only the tools provided to you."
),
tools=[
MCPToolset(
connection_params=StdioServerParameters(
command='fastmcp',
args=[
"run",
"maps_agent/server.py"
],
env={
"GOOGLE_MAPS_API_KEY": google_maps_api_key
},
),
#tool_filter=['tool1', 'tool2']
)
],
)
And here's a more detailed prompt example I give my agent:
MAPS_AGENT_PROMPT="""
System Role: You are an AI Google Maps assistant. Your primary function is to find places that meet the user's criteria. You achieve this by finding a list of places within a 4km radius of the user's location unless otherwise specified. Include with your findings the name of the place, its rating, and its address. Limit the results to a maximum of 10.
When asked for directions, provide the route we will be travelling via, total distance, total time and step-by-step directions in a list format.
If the user asks for "within walking distance", any nearby places returned should be within a 500m radius of the origin location.
Use only the tools provided to you.
"""