Built for AI agents, not retrofitted.
An agent can find MapMap, read the price, get a working key and route, all without a human. No dashboard to click through, no sales call, no scraping marketing pages. The machine surface is the product.
Orientation an agent can read
Every deployment serves /llms.txt (endpoints, auth, pricing, MCP) and machine-readable /pricing.json. Read those first. Do not scrape the marketing pages.
One call, no card
POST /v1/keys returns a usable snk_ key immediately: provisional, 1,000 calls over 72 hours. A magic verification link upgrades the same key to the free tier of 50,000 calls a month.
curl -fsS -X POST "https://api.mapmap.ai/v1/keys" \
-H "Content-Type: application/json" \
-d '{"email": "agent@example.com", "accept_tos": true}'
# 201 Created
# { "key": "snk_…", "state": "provisional",
# "calls": 1000, "expires_in_h": 72 }HTTP/1.1 402 Payment Required
Content-Type: application/json
{
"x402Version": 1,
"error": "monthly free quota exhausted and no prepaid credit",
"accepts": [ /* PaymentRequirements, or empty when x402-ready */ ],
"instructions": "pay per call, or top up prepaid credit"
}Our MCP server, ten tools.
The sn-mcp server speaks stdio for local processes and streamable HTTP at /mcp for remote agents. Full JSON Schemas and structured outputs, so a model can call it correctly on the first try.
| Tool | What it does |
|---|---|
| route | Turn-by-turn route for auto or truck; the truck profile merges dimensional and ADR costing. Returns distance, duration, maneuvers and geometry. |
| check_adr_tunnel | Pure ADR 8.6.4 tunnel-entry decision from a load and a tunnel category. Decision, reason, explanation. No network. |
| geocode | Forward geocoding through our geocoder. |
| matrix | Many-to-many travel-time and distance matrix. |
| optimise_routes | Multi-vehicle, multi-stop optimisation with truck and ADR constraints, fed by our own matrices. |
| list_style_layers / get_style | Inspect a map style so an agent can see what it can restyle. |
| create_style / set_palette / set_layer_paint | Build and restyle maps: recolour a palette or override a single layer's paint, e.g. road width or opacity. |
{
"mcpServers": {
"sovereign-nav": {
"type": "http",
"url": "https://mcp.mapmap.ai/mcp"
}
}
}Or with Claude Code: claude mcp add --transport http sovereign-nav https://mcp.mapmap.ai/mcp
Agents pay per call.
When a key runs out of free quota and prepaid credit, the gateway answers 402 in the x402 wire format. Agents that implement x402 pay inline with an X-PAYMENT header. Agents that do not keep using prepaid credit. Same response shape either way, and it fails closed: routing is served only after a valid payment.
How machine payments work →- 402 Payment required, x402 body, top up or pay inline
- 429 Rate or quota limit, honour Retry-After and back off
- RFC 9457 problem+json with stable urn: type URIs, match on the type
- /openapi.json the authoritative contract on every deployment
Wire an agent up in minutes.
Start at the discovery files, issue a key in one call, connect the MCP server.