Skip to content

Add mapbox-map-display and mapbox-reachability-analysis skills - #94

Open
mattpodwysocki wants to merge 3 commits into
mainfrom
feat/mcp-server-skills
Open

mattpodwysocki wants to merge 3 commits into
mainfrom
feat/mcp-server-skills

Conversation

@mattpodwysocki

@mattpodwysocki mattpodwysocki commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds the two skills the Mapbox MCP Server serves over the MCP Skills extension (SEP-2640), so this repo is the only copy of them. mapbox/mcp-server#295 bundles them from a pinned commit of this repo at build time instead of keeping its own.

  • mapbox-map-display: showing tool results with render_map_tool by passing refs, several results on one map, hand-placed markers with mapbox_id, base map restyling, and when a static image is right instead.
  • mapbox-reachability-analysis: places within a travel time or distance. Isochrone, then bbox_tool, then category search in that box, then points_within_polygon_tool to drop places in the box's corners, then one map with the area and only the places inside it.

Each has evals/evals.json (4 and 3 evals) and a README entry.

Fixes to existing skills

mcp-server#295 will also serve mapbox-location-grounding and mapbox-search-patterns, and it checks that every tool a skill names exists. These had a few that don't match the server:

  • mapbox-location-grounding: the visual step used static_map_image_tool. It now uses render_map_tool with the results' refs, and keeps static images for when the user asks for an image file. That matches the MCP server's own instructions.
  • mapbox-location-grounding: said ground_location_tool returns a static map image. It returns a mapboxRender.ref for render_map_tool.
  • mapbox-search-patterns/references/optimization-combining.md: point_in_polygon_tool (doesn't exist) is now points_within_polygon_tool, and the static-map example is now render_map_tool.
  • mapbox-search-patterns/references/workflows.md: bounding_box_tool is the DevKit server's; the runtime server's is bbox_tool.

Testing

  • npm run check passes on a clean checkout: format, spellcheck, markdownlint, Codex plugin build and validation, and skill validation.
  • The two new skills' content is what mcp-server#295 already tests: it loads them strictly through the MCP SDK's skills support and reads them back with the SDK's SkillsClient (sizes, digests, frontmatter), and MCP Inspector --verify --require-digests reports no conformance errors.

🤖 Generated with Claude Code

Moves the two skills the Mapbox MCP Server serves over the MCP Skills
extension here, so this repo is their only copy; mcp-server bundles them
from a pinned commit at build time.

Also fixes tool references in mapbox-location-grounding and
mapbox-search-patterns: show maps with render_map_tool (static images only
when asked for), points_within_polygon_tool instead of the nonexistent
point_in_polygon_tool, and bbox_tool instead of the devkit's
bounding_box_tool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mattpodwysocki
mattpodwysocki requested a review from a team as a code owner October 26, 2026 16:16
@mattpodwysocki mattpodwysocki added the enhancement New feature or request label Oct 26, 2026
It returns a mapboxRender.ref for render_map_tool, not a static map image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mattpodwysocki

Copy link
Copy Markdown
Contributor Author

@ctufts could you take a look at this one when you get a chance? mcp-server#295 bundles these two skills at build time, so it's waiting on this to merge before we can cut the release.


# Places within reach

Answers questions like "what's within a 10 minute walk of my hotel?" with the

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't this skill have direct overlap with the location-grounding skill? Is it solving a specific problem? From grounding skill:

### Proximity search with routing context

For "find [category] within X minutes of [location]":

1. Geocode the origin if needed: `search_and_geocode_tool(address)`
2. Get the reachable area: `isochrone_tool(coordinates, profile, contours_minutes)`
3. Search for POIs: `ground_location_tool(longitude, latitude, query: "category")` — the isochrone
contours 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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair question. They overlap on the question but not the answer: ground_location_tool fetches nearby POIs and the isochrone in parallel and never filters one by the other (it only returns a contour summary, no polygon). So "coffee within a 10 minute walk" can include a place across a river that's close as the crow flies but 25 minutes on foot. This skill keeps only places actually inside the reachable area.

Updated the grounding skill in e111a40 so there's one owner: its "Proximity search with routing context" and "Area reachability" sections now hand "within X minutes" questions to this skill, and keep ground_location_tool for "what's near here" and neighborhood context.


# Showing results on a Mapbox map

Use `render_map_tool` whenever the user wants to see something on a map. It

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be explicit to be used during a non-"build" use case?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, good call. In e111a40 the description now says it's for showing results in the conversation and not for building a page or app, and there's a "When not to use it" section: when you're building, write GL JS code (mapbox-web-integration-patterns) with a token from list_public_tokens_tool. A render_map_tool preview is still fine for checking data along the way. Same note in the README entry.

…o chat

The location-grounding skill said ground_location_tool covers "find
[category] within X minutes", but it fetches POIs and the isochrone side
by side without filtering one by the other. Point those questions at
mapbox-reachability-analysis, which keeps only places inside the
polygon, and leave ground_location_tool for "what's near here".

mapbox-map-display now says it's for showing results in the
conversation, and that building a page or app means writing GL JS code
with a token from list_public_tokens_tool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants