Agent quickstart
Connect an MCP client to Olympus and make a first tool call in four steps.
Add the MCP server
The server speaks Streamable HTTP at
https://mcp.olympus.new-odyssey.com/mcp. Clients that take a JSON configuration:mcp.json { "mcpServers": { "olympus": { "type": "http", "url": "https://mcp.olympus.new-odyssey.com/mcp", "headers": { "X-API-Key": "${OLYMPUS_API_KEY}" } } } }Claude Code:
shell claude mcp add --transport http olympus https://mcp.olympus.new-odyssey.com/mcp \ --header "X-API-Key: $OLYMPUS_API_KEY"Or sign in with OAuth. Add the server URL without a key. Clients that support MCP authorization (OAuth 2.1) register themselves and open the Olympus consent screen. There you choose the organization and the APIs the client may use. The client then refreshes its tokens on its own. Connected apps are listed in the console under Connected apps, where you can revoke them.
shell claude mcp add --transport http olympus https://mcp.olympus.new-odyssey.com/mcpWithout a key or token the server answers with an OAuth sign-in challenge. The machine-readable descriptions (llms.txt, registry.json) need no credentials.
Call a tool
Your client lists 7 tools. Each has an input schema and an output schema, and its description states coverage limits and failure cases. A raw
tools/callrequest:JSON-RPC { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "lookup_us_sales_tax", "arguments": { "zip": "68508", "state": "NE" } } }Results come back as structured content: the REST response's
data,meta.datasets(provenance), coverage, notices and therequest_id. From the TypeScript SDK:agent.ts import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const client = new Client({ name: "my-agent", version: "1.0.0" }); await client.connect( new StreamableHTTPClientTransport(new URL("https://mcp.olympus.new-odyssey.com/mcp"), { requestInit: { headers: { "X-API-Key": process.env.OLYMPUS_API_KEY! } }, }), ); const { tools } = await client.listTools(); const result = await client.callTool({ name: "get_us_demographics", arguments: { zcta: "02139" }, }); console.log(result.structuredContent); // data, provenance, coverage, request_idWatch your quota
Every tool call that reaches a data endpoint counts as one request against that product's monthly quota.
get_remaining_usageshows what is left. So does:shell curl -s "https://api.olympus.new-odyssey.com/v1/usage/remaining" \ -H "X-API-Key: $OLYMPUS_API_KEY"
Without MCP
Agents that call HTTP directly can use the REST API with the same key. Each tool maps to a documented endpoint (see registry.json). The OpenAPI contracts are listed at /openapi.json.
curl -s "https://api.olympus.new-odyssey.com/v1/sales-tax/rates/zip/68508?state=NE" \
-H "X-API-Key: $OLYMPUS_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"A retry with the same Idempotency-Key within an hour is not counted again.