How-to guide

Install as MCP server

Connect chomp to any MCP-compatible client. Three tools, zero config.

What you get

Chomp exposes an MCP endpoint at https://chomp.coey.dev/mcp with three tools:

  • ask — Send a prompt, get a response (dispatches to best free model, polls until done, up to 60s)
  • dispatch — Fire-and-forget, returns a job ID immediately
  • result — Check the status/result of a dispatched job by ID

Auth is via Bearer token (same CHOMP_TOKEN from /api/keys).

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "chomp": {
      "url": "https://chomp.coey.dev/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_CHOMP_TOKEN"
      }
    }
  }
}

Restart Claude Desktop. The three tools appear in the tools menu.

Cursor

In Settings → MCP, add a new server:

  • Type: HTTP
  • URL: https://chomp.coey.dev/mcp
  • Headers: Authorization: Bearer YOUR_CHOMP_TOKEN

Any MCP client (programmatic)

Using the TypeScript SDK:

import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"

const transport = new StreamableHTTPClientTransport(
  new URL("https://chomp.coey.dev/mcp"),
  {
    requestInit: {
      headers: { Authorization: "Bearer YOUR_CHOMP_TOKEN" }
    }
  }
)
const client = new Client({ name: "my-app", version: "1.0.0" })
await client.connect(transport)

const { tools } = await client.listTools()
console.log(tools.map(t => t.name)) // ["ask", "dispatch", "result"]

const result = await client.callTool("ask", {
  prompt: "Explain quicksort in 2 sentences."
})
console.log(result.content[0].text)

Test with MCP Inspector

Quick way to verify everything works:

npx @modelcontextprotocol/inspector

Enter https://chomp.coey.dev/mcp as the server URL, add the Authorization header, connect, and try calling the ask tool.

How it works under the hood

Chomp's MCP server uses Streamable HTTP transport (stateless mode). Each request creates a fresh server instance. The ask tool dispatches your prompt to the best available free model via OpenRouter, then polls with exponential backoff (1s → 2s → 4s…) until the result is ready or 60 seconds pass. Token metadata (model used, token counts, latency) is included in the response _meta.