Timezone Truth

API and MCP setup

The same engine behind the web page is exposed as markdown, a JSON API, and an MCP server. All four surfaces are thin wrappers over one pure function, so they cannot disagree.

MCP server

Streamable HTTP at https://timezone-truth.gumballtools.com/api/mcp. No authentication required.

Claude Code

claude mcp add --transport http timezone-truth https://timezone-truth.gumballtools.com/api/mcp

Claude Desktop or Cursor

{
  "mcpServers": {
    "timezone-truth": {
      "type": "http",
      "url": "https://timezone-truth.gumballtools.com/api/mcp"
    }
  }
}

Verify it works

curl -X POST 'https://timezone-truth.gumballtools.com/api/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

JSON API

Every endpoint accepts GET with query parameters or POST with a JSON body. CORS is open. Full machine-readable description at /.well-known/openapi.json.

curl 'https://timezone-truth.gumballtools.com/api/v1/convert?time=2026-03-08%2002:30&from=America/New_York&to=UTC'

Markdown instead of HTML

Every page has a markdown representation at the same canonical URL. Send Accept: text/markdown or append ?format=md. Responses set Vary: Accept. Do not parse the HTML.

curl -H 'Accept: text/markdown' 'https://timezone-truth.gumballtools.com/'

Errors

Every failure returns the same shape, with a stable code and a hint describing what to change before retrying.

{
  "error": {
    "code": "invalid_input",
    "message": "...",
    "fix_hint": "...",
    "docs": "https://timezone-truth.gumballtools.com/docs"
  }
}

Rate limits and pricing