MCP Server

Last updated

coords.zone runs a stateless streamable-HTTP MCP server at POST https://coords.zone/mcp, exposing three tools an agent can call directly: get_zone (USDA hardiness zone plus local zone), get_country (name, ISO code, zone scale), and get_climate (raw temperature extremes and frost dates) — each taking lat and lng in decimal degrees. No handshake is required: server/discover, tools/list, and tools/call all work on the first request, on protocol revision 2026-07-28. Authentication is the same Authorization: Bearer czk_… header as the REST API; omit it and the call rides a free, quota-limited anonymous tier, or pass a key from the dashboard to bill against your own account instead. Any MCP client that speaks streamable HTTP — Claude Code, Claude Desktop, Cursor, or a custom agent — can connect with just that URL.

Claude Code

One command, no config file:

claude mcp add --transport http coords-zone https://coords.zone/mcp

With an API key, so the calls count against your account rather than the anonymous quota:

claude mcp add --transport http coords-zone https://coords.zone/mcp \
  --header "Authorization: Bearer czk_your_key_here"

Check it connected with /mcp inside Claude Code, or claude mcp list from the shell.

Claude Desktop, Cursor, and other clients

Most clients take the same JSON. Drop it into the client's MCP config — claude_desktop_config.json for Claude Desktop, .cursor/mcp.json for Cursor:

{
  "mcpServers": {
    "coords-zone": {
      "type": "http",
      "url": "https://coords.zone/mcp"
    }
  }
}

With an API key:

{
  "mcpServers": {
    "coords-zone": {
      "type": "http",
      "url": "https://coords.zone/mcp",
      "headers": {
        "Authorization": "Bearer czk_your_key_here"
      }
    }
  }
}

Tools

All three take lat and lng as numbers in decimal degrees, and return the same fields as the REST endpoint of the same name — see the API reference for the response schemas.

Name Returns
get_zone USDA hardiness zone, plus the local zone where the country has its own system
get_country Country name, ISO code, and the zone scale used there
get_climate Raw temperature extremes and first/last frost dates

New to hardiness zones? See how zone numbers work , getting frost dates from a coordinate , and what other countries use instead of USDA zones .

Authentication & quotas

Authentication is the same Authorization: Bearer czk_… header as the REST API, and the server works without one — an unauthenticated agent rides the anonymous free tier. Create a key on your dashboard.

Only tools/call counts against your quota: connecting, discovering the server, and listing tools are all free. A call that runs out of quota comes back as a tool error naming the page to sign up or upgrade on, rather than as an HTTP error — MCP clients treat a non-200 as a transport failure and drop the body, so the link would never reach the agent.

Leave the key's allowed domains blank. That allowlist matches the browser's Origin header, which an MCP client never sends — setting it will reject every call your agent makes.

Protocol details

  • Streamable HTTP transport at POST https://coords.zone/mcp.
  • Protocol revision 2026-07-28. A client that declares no revision is served rather than turned away; one that declares an older revision is refused with -32022. The initialize handshake belonged to the earlier revision and is gone with it — use server/discover.
  • Stateless: there is no session id, and server/discover, tools/list and tools/call all work without a prior handshake.
  • Responses are SSE-framed, one message per request.

Check it by hand

curl -s https://coords.zone/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

© 2026 coords.zone