Maps for AI agents
maproll ships an MCP server, so an AI assistant can build a map from your data and hand back a URL you can embed.
{
"mcpServers": {
"maproll": {
"command": "npx",
"args": ["-y", "@maproll/mcp"]
}
}
}
That is the whole setup. No signup, no credentials — the server runs from npm on demand and talks to the same public render API as everything else in these docs. One optional key changes whose wordmark the map carries; see the wordmark below.
Why a server rather than just the URL
An assistant that can already make HTTP requests can already call
api.maproll.io. What the server adds is the part it cannot guess:
- The grammar. Nothing in a model's training says that region data packs
as
US:200:#ff0000, or that markers arelat,lon[:icon][:label][:position][:size]. The tools take structured arguments and write the URL themselves. - Coordinates. Models recall latitude and longitude badly, and a map
renders a wrong marker exactly as confidently as a right one.
find_placesresolves them against real data. - The rendered result. Every map-making tool returns the PNG alongside the URL, so the assistant — and you — can see what was made.
What comes back
Every tool that makes a map returns the same shape:
| Field | What it is |
|---|---|
svg_url | The map. Embeddable, permanent, and the handle other tools accept. |
png_url | The same map as PNG. |
editor_url | Opens the map in app.maproll.io, loaded and editable. |
embed | A ready <img> tag. |
warnings | Non-fatal problems, such as region ids the renderer did not recognise. |
Alongside those fields, the rendered PNG comes back as an image content block, so a client that displays images shows the map without fetching anything.
There is no session. svg_url is the state — pass it to
add_layers and you get a new URL back with the
addition applied. That means a map can be built up over several turns, and
any URL from any point in the conversation still renders. See
working with existing maps.
The wordmark
Every render the MCP server makes is tagged src=mcp. For that traffic, with
no key present, the maproll wordmark is forced on — a logo=false passed
through extra is ignored. So today, with no key, every map your assistant
makes carries the wordmark.
A key changes that. Keys are minted in the editor at
app.maproll.io and set as MAPROLL_API_KEY in the
server's environment. The returned URLs then come back signed, logo
defaults to off, and extra: { logo: false } is honoured — see
Install.
No other caller is affected. The editor and plain URL embeds keep whatever they ask for, and the wordmark is off by default there. Attribution to OpenStreetMap stays on in every case — that is a licence obligation, not a branding choice.
Next
- Install — per-client configuration, and the key.
- Tools — what the server can do.
- Working with existing maps — how a URL carries the state from one call to the next.
- Agent recipes — what to ask for, and what it produces.
- Resources and prompts — the catalogs your assistant reads, and the shortcuts you can invoke.