- Upgrade
@opentelemetry/*packages to latest minor versions — resolves transitiveprotobufjsCRITICAL CVE (GHSA-xq3m-2v4x-88gg) present in older OTEL exporter packages, and high-severity transitives (flattedGHSA-25h7-pfq9-p65f / GHSA-rf6f-7fwh-wjgh,picomatchGHSA-3v7f-55p6-f55p / GHSA-c2c7-rcm5-vvqj). Updated packages:@opentelemetry/auto-instrumentations-node:^0.72.0→^0.74.0@opentelemetry/exporter-trace-otlp-http:^0.214.0→^0.216.0@opentelemetry/instrumentation:^0.214.0→^0.216.0@opentelemetry/resources:^2.6.1→^2.7.1@opentelemetry/sdk-node:^0.214.0→^0.216.0@opentelemetry/sdk-trace-base:^2.6.1→^2.7.1
- Resolve critical
handlebarsCVE (GHSA-3mfm-83xf-c92r et al.) —handlebars4.7.8 → 4.7.9 vianpm audit fix - Resolve high-severity
honoand@hono/node-serverCVEs —hono4.11.7 → 4.12.17,@hono/node-server1.19.9 → 1.19.14 vianpm audit fix - Resolve high-severity
express-rate-limitCVE (GHSA-46wh-pxpv-q5gq) —express-rate-limit8.2.1 → 8.5.0 vianpm audit fix
- Prevent path traversal in style and tileset tool URL construction (#103) — Five tools (
RetrieveStyle,DeleteStyle,UpdateStyle,PreviewStyle,TilequeryTool) concatenated user-supplied path parameters directly into Mapbox API URLs without validation. Because Node.js fetch uses the WHATWG URL parser,../sequences were normalized before sending, allowing requests to reach unintended API endpoints.- Added shared
styleIdSchemawith allowlist regex rejecting path separators, dots, percent-encoded sequences, and null bytes (src/tools/shared/styleId.schema.ts) - Added
owner.nameformat validation toTilequeryTooltilesetId - Wrapped username and styleId/tilesetId in
encodeURIComponentat every URL construction site (defense-in-depth) - Replaced silent fallback in output schema validation with explicit
isError: trueresponses across all API tools — prevents unintended API responses from being forwarded to callers - Removed unused
BaseTool.validateOutput()method - Added
test/security/path-traversal.test.tswith 52 tests covering schema rejection, valid ID acceptance, URL encoding, and response schema mismatch behavior
- Added shared
- Reject cross-origin Link headers (#103) — Pagination
next-pageURLs fromLinkresponse headers are now validated to share the same origin as the configured API endpoint; cross-origin URLs are rejected to prevent access token exfiltration via crafted API responses - Redact tokens from logs (#103) — Added
redactToken()utility that stripsaccess_tokenquery parameter values from strings before they reach log output or MCP client error responses (network errors include the full request URL which would otherwise expose the token)
get_latest_mapbox_docs_toolandget_reference_toolremoved — documentation fetching has moved to mcp-docs-server. Use mcp-docs-server alongside this server for Mapbox documentation access. Static reference data (style layers, Streets v8 fields, token scopes, layer type mapping) remains available as MCP Resources.- Removed
CLIENT_NEEDS_RESOURCE_FALLBACKenvironment variable and resource fallback tool pattern
- Upgrade OpenTelemetry to 2.x — upgraded
@opentelemetry/resourcesand@opentelemetry/sdk-trace-basefrom^1.30.1to^2.6.1; upgraded experimental packages (sdk-node,instrumentation,exporter-trace-otlp-http) from^0.56.0to^0.214.0; upgradedauto-instrumentations-nodeto^0.72.0andsemantic-conventionsto^1.40.0; migratednew Resource()toresourceFromAttributes()following the 2.x API change - Upgrade
tshyto^4.1.1,vitest/@vitest/coverage-istanbulto^4.1.4,typescriptto^6.0.2— removed deprecatedbaseUrlfromtsconfig.base.json(TS6) - Upgrade
zodfrom^3.25.42to^4.3.6— migrated allz.record()calls to require explicit key schema (z.string()), updated test assertions for changed error message format
- CVE-2026-4926: Upgraded
@modelcontextprotocol/sdkto^1.29.0, resolvingpath-to-regexpto8.4.1and fixing the ReDoS vulnerability GHSA-j3q9-mxjg-w52f; regenerated output-validation patch for the new version
- Add
getAllToolsandgetVersionInfoto public exports —getAllToolsis now re-exported from@mapbox/mcp-devkit-server/toolsandgetVersionInfo(plusVersionInfotype) from@mapbox/mcp-devkit-server/utils. These are needed byhosted-mcp-serverto import server functionality via npm packages instead of submodule filesystem paths. - Added
test/exports.test.tsto verify public barrel exports
- Upgrade
@mcp-ui/serverfrom^5.13.1to^6.1.0(security advisory); update tests for mimeType change (text/uri-list→text/html;profile=mcp-app) - Upgrade
@modelcontextprotocol/sdkfrom^1.26.0to^1.27.1(security advisory); regenerated output-validation patch for new version
- MCP Apps support for preview_style_tool, style_comparison_tool, geojson_preview_tool (#62)
- All three panels now render inline with Mapbox GL JS — no inner iframes, works in Claude Desktop regardless of
frame-srcCSP restrictions - GeoJSON Preview: renders GeoJSON (points, lines, polygons) on a GL map with auto-fit bounds. Auto-generates a short-lived scoped
pk.*token on the customer's Mapbox account via the Token API (scopes:styles:tiles,styles:read,fonts:read); cached for 1 hour - Style Preview: renders the user's style directly via
mapbox://styles/...; shows the human-readable style name as a pill overlay (frommap.getStyle().name) - Style Comparison: two synced GL maps with a draggable reveal slider using
mapbox-gl-compare; shows both style names as pills; respects initial map position from tool result hash fragment - Full MCP Apps handshake:
ui/initialize→ response →ui/notifications/initialized; errors silently ignored for hosts that don't implement the handshake - Added
↗ Open in browserbutton (ui/open-link) to all three panels as fallback - Fullscreen toggle on all panels;
map.resize()called on display mode change - Compatible with Claude Desktop, VS Code, and Goose
- All three panels now render inline with Mapbox GL JS — no inner iframes, works in Claude Desktop regardless of
- Hosted MCP Server: Added remote entry in
server.jsonfor the hosted DevKit MCP server athttps://mcp-devkit.mapbox.com/mcpusing streamable-http transport
- Updated
@modelcontextprotocol/sdkfrom 1.25.3 to 1.26.0 - Updated patch file for SDK 1.26.0
- Upgrade
@modelcontextprotocol/ext-appsfrom^1.0.1to^1.1.1
- PR Guidelines: Added CHANGELOG requirement to CLAUDE.md (#67)
- All pull requests must now update CHANGELOG.md
- Document what changed, why, and any breaking changes
- Add entry under "Unreleased" section with PR number
- Release Process: Added automated CHANGELOG preparation script (#67)
- New
npm run changelog:prepare-release <version>command - Automatically replaces "Unreleased" with version and date
- Adds new empty "Unreleased" section for next changes
- Includes validation for version format and CHANGELOG structure
- New
- CVE-2026-0621: Updated
@modelcontextprotocol/sdkto 1.25.3 to fix ReDoS vulnerability in UriTemplate regex patterns
- Migrated from deprecated
server.resource()toserver.registerResource()API in BaseResource - Fixed TypeScript implicit
anytype error in BaseTool registerTool callback
- Updated
@modelcontextprotocol/sdkfrom 1.17.5 to 1.25.3
- Added structured content with schemas to all tool outputs
- Added new resources to server with fallback tool support
- Fixed schema compatibility issues for Cursor and GPT clients
- Updated to latest MCP registry schema version (2025-10-17)
- Added mcpName field to package.json
- Add to MCP registry
- New fetch pipeline with automatic retry behavior
- Dual emits ESM and CommonJS bundles with types per target
- Migrated from Jest to vitest
- Added EditorConfig support for development work