Skip to content

gvergnaud/maps

v0.1.0Apache-2.0

maps: places near a place (restaurants, shops of a kind, a pharmacy...) on a map with a card each, directions from A to B (walk, transit, car, bike) and your own maps with markers and routes, in a map view in the thread. OpenStreetMap with no key; Google Maps with a key in the plugin's settings. Use it when the user asks where something is, what is near, how to get somewhere, or to plan a day on a map

maps

A map in the thread (an MCP Apps view): places near a place with a card each, directions from A to B, and maps the agent draws itself (a day, a trip, a shortlist). Built in, off by default: turn it on in the plugins page.

Ask

askwhat you get
"find good ramen near Gare de Lyon"10 pins nearest first, a card each (rating, open now with Google); pick one, Directions, Open ↗
"a pharmacy open now around me, I'm at 12 rue de Lyon"the same, 5 at most, closed ones left out (Google)
"how do I get from Bastille to the Louvre by metro?"the route on the map, the time, each step; switch Walk / Transit / Car / Bike above the map
"plan my Saturday in Lyon on a map, walking"your stops pinned and colored by part of the day, the legs drawn, a legend to filter
"where is Shibuya Station?"its coordinates and address (no map)

Move the map, then "Search this area" looks again there. ⌘/ctrl + scroll zooms (a plain scroll scrolls the thread). "Google Maps ↗" opens the same place or route on google.com/maps.

Tools

toolforview
search_places {query, near, radius_m?, open_now?, limit?, title?}what is nearyes
directions {from, to, mode?, depart_at?, title?}A to B: walk, transit, drive, bikeyes
show_map {title?, markers?, routes?, near?}your own map; group on markers and routes for daysyes
geocode {query, near?, limit?}coordinates and addressno
search_area, route, map_tilesthe view's own calls (app only, the model never sees them)

The agent's guide with examples: skills/maps/SKILL.md.

Providers

lib/providers/ is the seam: one module per maps service, the same shapes out (index.mjs says them).

OpenStreetMap (no key, the default)Google Maps (GOOGLE_MAPS_API_KEY in the plugin's settings)
placesOverpass: OSM's tags (amenity=restaurant, cuisine=ramen...) or a namePlaces API (New), Text Search
ratings, price, open nownone (opening hours as written in OSM)yes
geocodingNominatimPlaces API (New), Text Search
directionsOSRM (routing.openstreetmap.de): walk, bike, carRoutes API: walk, bike, car with traffic, transit
transitno: the walking route, said soyes, lines and stops
maptile.openstreetmap.orgMap Tiles API (2D roadmap); OSM's when it is off for the key

For the key: in the Google Cloud console, turn on Places API (New), Routes API and Map Tiles API for a project with billing, make a key restricted to those three APIs, paste it in the plugin's settings. The key goes to the server's environment only: the model never sees it, nor a tool's result; the view gets the tile URL through map_tiles.

MAPS_PROVIDER=fake|osm|google forces one (fake: made-up places around real landmarks, no network but the tiles: tests, demos and shots).

Check

node --test plugins/maps/test/*.test.mjs                 # no network: each API stubbed
python3 tests/fixtures/mcp-apps/check.py plugins/maps/