Skip to main content

Install

The server is published as @maproll/mcp and listed in the official MCP Registry as io.maproll/maproll. Source is at github.com/maproll-io/mcp. It needs Node 20 or newer, and no credentials to make a map.

Claude Code

claude mcp add maproll -- npx -y @maproll/mcp

Claude Desktop

Settings → Developer → Edit Config, then add:

{
"mcpServers": {
"maproll": {
"command": "npx",
"args": ["-y", "@maproll/mcp"]
}
}
}

Restart Claude Desktop afterwards.

Cursor

Add the same block to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json to make it available everywhere.

VS Code

Add it to .vscode/mcp.json:

{
"servers": {
"maproll": {
"command": "npx",
"args": ["-y", "@maproll/mcp"]
}
}
}

Any other MCP client

The server speaks stdio. Run it directly:

npx -y @maproll/mcp

Checking it works

Ask your assistant for a map — "map coffee consumption per capita" is a reasonable first test. You should get a rendered map back, plus a URL.

If nothing happens, check the tool list your client exposes; the server advertises four tools, create_map, add_layers, find_places and describe_options. If they are absent, the client did not start the server — usually a Node version below 20, or a config file in the wrong place.

Turning the wordmark off

Every render the server makes is tagged src=mcp, and src=mcp without a valid key forces the maproll wordmark on. A logo=false passed through extra is ignored in that case.

Set a key and it stops being forced: logo defaults to off, and extra: { logo: false } works.

  1. Open the editor at app.maproll.io and mint a key in the API keys panel. Keys look like mr_live_… and expire after 90 days.
  2. Put it in the server's environment:
{
"mcpServers": {
"maproll": {
"command": "npx",
"args": ["-y", "@maproll/mcp"],
"env": {
"MAPROLL_API_KEY": "mr_live_…"
}
}
}
}

In Claude Code, claude mcp add maproll -e MAPROLL_API_KEY=mr_live_… -- npx -y @maproll/mcp does the same thing.

What the server does with the key

The render API refuses to read a raw key from a query string, because a key in a URL ends up baked into every embed that URL is pasted into. So the server never sends one. It appends two parameters instead:

ParameterWhat it is
kThe key's payload — the identifying part, without the secret.
tAn HMAC over that exact URL's parameters.

The API recomputes both and verifies them with no database lookup. Two consequences worth knowing before you publish a keyed map:

  • The token is bound to one map. Copying k and t onto a different URL does nothing — the signature no longer matches the parameters.
  • Expiry is visible in published embeds. When the key expires, an embed URL you published months ago starts carrying the wordmark again. Rotate the key before the 90 days are up if you have keyed embeds in the wild, and re-render the maps.

OpenStreetMap attribution is on with or without a key. That is a licence obligation, not branding.

For calling the render API directly rather than through MCP, a key travels as Authorization: Bearer mr_live_… or X-Api-Key — see Authentication.

Configuration

VariableDefaultPurpose
MAPROLL_PLACES_URLhttps://mcp.maproll.io/placesWhere find_places resolves names. Override only for local development.
MAPROLL_API_KEYunsetA mr_live_… key. Signs the URLs the server returns, which is what lets you turn the wordmark off.

Neither is required. Without a key the server still makes every map it can make — the maps just carry the maproll wordmark.