Skip to content

Changelog

The release notes of each version, also on GitHub, which has a feed for following new releases.

2026-09-26 · On GitHub

  • martin_list_sources treats an empty MARTIN_URL as unset and reads http://localhost:3000, instead of failing. Settings forms like Docker's pass an empty value for a setting left blank.
  • The repository has a Dockerfile, which runs maplibre-mcp with the headless Chromium it renders with.
  • Security issues can be reported privately through GitHub's vulnerability reporting.

2026-09-26 · On GitHub

inspect_tile now also reads the metadata of a source, like the TileJSON of a Martin source, and says which zoom levels it has tiles for, and which of its source layers the tile at the place lacks. In the middle of the Atlantic, the tile holds 4 of the 16 source layers of OpenFreeMap's planet, and the report names the others:

Tile 6/26/32 of https://tiles.openfreemap.org/planet, at [-30, 0], MVT, 19.1 kB.
The source has tiles from zoom 0 to 14.
...
The source also has 12 source layers with no features in this tile: aerodrome_label, aeroway, building, housenumber, landcover, landuse, mountain_peak, poi, transportation, transportation_name, water_name, waterway.

Asked for a source layer the tile lacks, it says whether the source has that layer elsewhere.

  • Commands take negative coordinates, like --center -74,40.7. Node's argument parser took them for options, so places west of Greenwich or south of the equator failed.
  • maplibre-mcp is in the MCP Registry as io.github.birkskyum/maplibre-mcp, and each release updates it.

2026-09-26 · On GitHub

A new tool, describe_gl_js_api, looks up a class, method, option or event of MapLibre GL JS in the type definitions GL JS ships, and returns its signature, documentation, default and examples, with a link to the docs page. Agents can check a method before they use it, instead of writing it from memory, where Mapbox GL JS methods and older versions mix in.

Map has no member "setFog" in MapLibre GL JS 6.11.2.
MapOptions.maxPitch (property of MapOptions, MapLibre GL JS 6.11.2)
maxPitch?: number | null
The maximum pitch of the map (0-180).
Default: 60
Docs: https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MapOptions/#maxpitch

It answers for the GL JS version the server renders with, and version looks a name up in another one instead, like the "5" a project uses, from jsDelivr. It's in the gl-js toolset, so it's on by default, and npx -y maplibre-mcp describe-gl-js-api Map#flyTo runs it from a shell.

2026-09-26 · On GitHub

debug_layers now asks the glyph server for the fonts each label layer uses. GL JS draws text in a font the server doesn't have with local fonts instead, and MapLibre Native leaves it out, so the layer says so:

places (symbol): draws 16 of the 16 features in source layer "place". Its text is drawn with local fonts, since the glyph server lacks the font stack "Open Sans Bold".

A layer without text-font is checked against the default, "Open Sans Regular,Arial Unicode MS Regular", which many glyph servers don't have, OpenFreeMap's among them.

  • debug_layers no longer says that the text layers of a style without a glyphs URL draw nothing. GL JS has drawn such text with local fonts since 5.11.0, and debug_layers now notes that instead.

2026-09-26 · On GitHub

A new tool, debug_layers, reads the tiles at a place and says for each layer of a style whether it draws, and if it draws nothing, why. It catches layers that are hidden or outside their zoom range, a source layer the tiles don't have, a filter that matches no feature, a fill layer without polygons, paint that comes out as 0 or transparent at the zoom, text without a glyphs URL, and icons the sprite lacks. For a filter that matches nothing, it lists the values the data really has.

buildings (fill): draws nothing, since the tile has no source layer "buildings". It has: boundary, building, housenumber, ...
motorways (line): draws nothing, since its filter matches none of the 568 features in source layer "transportation". No feature has the field "kind".

It's in the style toolset, so it's on by default, and npx -y maplibre-mcp debug-layers style.json --center 12.57,55.68 --zoom 14 runs it from a shell.

  • maplibre-mcp now starts when its repository is built with pnpm. 0.2.0 imported @mapbox/point-geometry without declaring it, which installs from npm covered but a pnpm checkout doesn't.

2026-09-25 · On GitHub

A new tool, inspect_tile, reads the vector tile at a place and lists each source layer with its geometry types, the values of every field and how often they occur, and a few example features. An agent can now see that roads are "motorway", "primary" or "path" before it writes a filter, instead of guessing.

transportation: 67 features (67 LineString)
brunnel (in 8 of 67): "tunnel" (6), "bridge" (2)
class: "primary" (28), "secondary" (19), "motorway" (10), "rail" (5), "trunk_construction" (2), "trunk" (2), "ferry" (1)

It reads a source of a style, a TileJSON URL like a Martin source, a PMTiles archive on the web or on disk, or a tile URL, with MVT or MLT tiles. It's in the style toolset, so it's on by default.

Agents that work in a shell, and people, can now run the rendering and data tools as commands, without setting up MCP first. Each command runs one tool and exits.

npx -y maplibre-mcp render style.json --center 12.57,55.68 --zoom 12
npx -y maplibre-mcp compare before.json after.json --zoom 10
npx -y maplibre-mcp compare-renderers style.json --renderers gl-js,native
npx -y maplibre-mcp describe-sources style.json
npx -y maplibre-mcp inspect-tile https://tiles.openfreemap.org/planet --center 12.57,55.68 --zoom 14

npx -y maplibre-mcp --help lists the options, and the command line docs have the details.

  • describe_sources and martin_list_sources point agents to inspect_tile when they need the values of a field.
  • The tool reference and the examples cover the new tool.

2026-09-25 · On GitHub

Full Changelog: https://github.com/birkskyum/maplibre-mcp/commits/v0.1.1