Compose Mapbox MCP tools to produce grounded, cited location-aware responses from live data instead of training data
npx skills add https://github.com/mapbox/mapbox-agent-skills --skill mapbox-location-grounding
Teaches AI assistants how to ground location-aware responses in live Mapbox data by composing MCP tools into a structured, cited answer. Use this instead of relying on training data for place names, POIs, ratings, or travel times — which are stale and prone to hallucination.
Ground responses when the user asks about:
Never answer location questions from training data alone. Always retrieve live data.
If ground_location_tool is available, use it — it handles reverse geocoding, POI search, place details enrichment, isochrone, and a static map image in one call:
ground_location_tool(
longitude, latitude,
query: "restaurant", // optional — category or subcategory of nearby places to find
profile: "mapbox/walking", // optional — travel profile for isochrone
contours_minutes: [5, 10, 15]
)
Returns:
Do not call reverse_geocode_tool, category_search_tool, place_details_tool, or isochrone_tool separately — they are already composed inside this tool.
The query parameter accepts category or subcategory terms — not attribute preferences:
"restaurant", "coffee", "park", "Italian restaurant", "EV charging station""family-friendly", "fast charging", "outdoor seating" — these are not filterable attributes in Mapbox dataTo help users find places matching a preference (e.g. "family-friendly"), search by category ("restaurant") and use the returned rating and price data to inform the recommendation.
If ground_location_tool is not available, build the grounded response by composing these tools in order:
reverse_geocode_tool(longitude, latitude, types: "neighborhood,locality,place")
Returns: neighborhood, city, region, country. This is the anchor for the response.
For specific names or brands:
search_and_geocode_tool(query, proximity: {longitude, latitude}, limit: 10)
For generic categories:
category_search_tool(category, proximity: {longitude, latitude}, limit: 10)
For each POI with a mapbox_id, call in parallel:
place_details_tool(mapbox_id, attribute_sets: ["visit"])
Returns: rating, price level, popularity, and opening hours per place.
isochrone_tool(
coordinates: {longitude, latitude},
profile: "mapbox/walking", // or "mapbox/driving", "mapbox/cycling", "mapbox/driving-traffic"
contours_minutes: [5, 10, 15]
)
Returns a polygon showing what's reachable within each time threshold.
static_map_image_tool(longitude, latitude, zoom: 14)
Returns a map image that can be included in the response for visual context.
Always structure grounded responses with explicit citations:
Place: [neighborhood, city from reverse_geocode]
Nearby [category]: [list from search/category tool, with names, ratings, prices, and distances]
Travel context: [X min walk / Y min drive from isochrone]
Sources: Mapbox Search, Mapbox Directions (live data)
Example grounded response:
> SoMa, San Francisco, CA (live Mapbox data)
>
> Restaurants within walking distance:
>
> - Bix Restaurant $$ ★8.4 — 56 Gold St (180m)
> - The Bird $ ★7.9 — 115 New Montgomery St (320m)
> - Oren's Hummus $$ ★8.1 — 131 Townsend St (510m)
>
> Reachable by walking: 5 min, 10 min, 15 min
>
> _Sources: Mapbox Geocoding API, Mapbox Search API, Mapbox Place Details API, Mapbox Isochrone API, Mapbox Static Images API_
For questions about travel between two locations, use directions_tool. For questions about reachable area, use isochrone_tool. For comparing travel times across multiple locations, use matrix_tool.
> "How long does it take to drive from Pike Place Market to Capitol Hill?"
> "What's the fastest route from the hotel to the airport?"
directions_tool(
waypoints: [{longitude, latitude}, {longitude, latitude}],
profile: "mapbox/driving-traffic" // live traffic; or "mapbox/walking", "mapbox/cycling", "mapbox/driving"
)
Returns: duration (with live traffic), distance, turn-by-turn steps, and an encoded polyline for map rendering. Supports up to 25 waypoints for multi-stop routes.
> "What's reachable within a 10-minute walk?"
> "Show me what I can reach in 15 minutes by car from here"
isochrone_tool(
coordinates: {longitude, latitude},
profile: "mapbox/walking",
contours_minutes: [5, 10, 15]
)
Returns a polygon showing the area reachable within each time threshold. Combine with category_search_tool or ground_location_tool to answer "what restaurants are within a 10-minute walk?" — use the isochrone to define the boundary, then search within it.
> "Which of these three offices is closest to my location?"
> "What are travel times from this warehouse to each of our delivery zones?"
> "Compare commute times to multiple locations"
Use matrix_tool — do NOT call directions_tool separately for each pair. Matrix batches all pairs in a single API call.
matrix_tool(
sources: [{longitude, latitude}, ...],
destinations: [{longitude, latitude}, ...],
profile: "mapbox/driving-traffic"
)
Returns a matrix of durations and distances between every source/destination pair. Rank results by duration to find the nearest location. One matrix_tool call replaces N separate directions_tool calls.
For "find [category] within X minutes of [location]":
search_and_geocode_tool(address)isochrone_tool(coordinates, profile, contours_minutes)ground_location_tool(longitude, latitude, query: "category") — the isochronecontours tell the user what's within each time band
Or more directly: ground_location_tool returns both nearby POIs and isochrone reachability in one
call, which covers most proximity + routing use cases without additional composition.
> Pike Place Market → Capitol Hill, Seattle
>
> By car (with traffic): 12 min, 3.2 km via Pine St
> By walking: 28 min, 2.1 km
> By cycling: 14 min, 2.3 km
>
> _Source: Mapbox Directions API (live traffic)_
| | Training Data | Mapbox Grounding |
| ------------------ | ------------------- | --------------------------- |
| POI accuracy | Stale, hallucinated | Live, verified |
| Ratings/price | Often wrong | Live via Place Details |
| Business hours | Often wrong | Live via Place Details |
| Travel times | Estimated | Live traffic via Directions |
| Reachable area | Not available | Isochrone polygons |
| Multi-stop routing | Not available | Up to 25 waypoints |
| New places | Missing | Indexed |
| Map image | None | Inline static map |
| Citations | None | Tool + API source |
search_and_geocode_tool before running category search.directions_tool or isochrone_toolreverse_geocode_tool + category_search_tool + place_details_tool separately when ground_location_tool is availableCreate new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
Access NCBI GEO for gene expression/genomics data. Search/download microarray and RNA-seq datasets (GSE, GSM, GPL), retrieve SOFT/Matrix files, for transcriptomics and expression analysis.
Bayesian modeling with PyMC. Build hierarchical models, MCMC (NUTS), variational inference, LOO/WAIC comparison, posterior checks, for probabilistic programming and inference.
Multi-objective optimization framework. NSGA-II, NSGA-III, MOEA/D, Pareto fronts, constraint handling, benchmarks (ZDT, DTLZ), for engineering design and optimization problems.
Statistical modeling toolkit. OLS, GLM, logistic, ARIMA, time series, hypothesis tests, diagnostics, AIC/BIC, for rigorous statistical inference and econometric analysis.
Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.
Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.
Write docstrings for PyTorch functions and methods following PyTorch conventions. Use when writing or updating docstrings in PyTorch code.
Take mapbox/mapbox-location-grounding from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.