docs

MCP server

Connect Claude, ChatGPT, Cursor or any MCP client to Diced. Find audiences, preview them and Reveal leads from a chat.

The Diced MCP server lets an AI assistant search topics, build audiences, preview them and Reveal leads for you. It speaks streamable HTTP at:

https://api.diced.si/mcp

There are two ways to connect:

  • OAuth (Claude.ai, ChatGPT): paste the URL, sign in to Diced, pick a workspace. No key.
  • API key (Claude Code, Cursor, Windsurf and most other clients): send Authorization: Bearer dcd_live_.... Create a key under Developers → API keys.

The assistant spends chips only through reveal_leads, enrich_person and watch_audience with auto-reveal, and each one needs a max_chips or cap budget. The server tells the model to never spend chips you didn't approve.

Claude Code

claude mcp add --transport http diced https://api.diced.si/mcp \
  --header "Authorization: Bearer dcd_live_your_key"

Run claude mcp list to check that diced is connected, then ask for what you need, like "Find homeowners in Texas shopping for solar panels."

Claude.ai

  1. Open Settings → Connectors and choose Add custom connector.
  2. Paste https://api.diced.si/mcp.
  3. Sign in to Diced and pick the workspace to connect. You don't need a key.

Cursor

Add this to .cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project:

mcp.json
{
  "mcpServers": {
    "diced": {
      "url": "https://api.diced.si/mcp",
      "headers": { "Authorization": "Bearer dcd_live_your_key" }
    }
  }
}

Then open Settings → MCP in Cursor and check that diced is on.

ChatGPT

  1. Open Settings → Connectors (Apps & Connectors) and choose to add a custom connector. On some plans this sits under Advanced → Developer mode.
  2. Paste https://api.diced.si/mcp and pick OAuth for authentication.
  3. Sign in to Diced and pick the workspace to connect. You don't need a key.

Other clients

Any client that supports streamable HTTP works. With a key:

{
  "type": "streamable-http",
  "url": "https://api.diced.si/mcp",
  "headers": { "Authorization": "Bearer dcd_live_your_key" }
}

Clients that sign in with OAuth only need the URL. The server is stateless: send every JSON-RPC message as a POST (there is no GET stream and no session to end).

Tools

ToolSpends chipsWhat it does
search_topicsNoFind intent topic ids (tp_...) for a phrase, for b2c or b2b
describe_audienceNoPlain English to filters, a summary and matched topics. Nothing is built
build_audienceNoStart a build from filters or a prompt. Returns the id and building
get_audienceNoStatus, count and a free, masked preview page
reveal_leadsYes, 1 per new leadReveal count leads or exact lead_ids. Requires max_chips
list_leadsNoSearch leads you already revealed
enrich_personYes, 1 on a matchLook up by email, phone, IP, address or MD5. Requires max_chips (1 or more)
watch_audienceWith auto-revealSave and re-run every day, week or month. Auto-reveal needs a cap
get_balanceNoPlan, chip balance and expiry dates

Input schemas are the same as the REST API, and every tool lists an output schema and annotations (readOnlyHint, destructiveHint, idempotentHint). Results come back as JSON text plus structuredContent.

reveal_leads and enrich_person take an optional idempotency_key argument (MCP has no headers per call). Reuse it when retrying and nothing is charged twice, exactly like the API's Idempotency-Key.

The intended flow, which the server's instructions describe to the model: describe_audience, then build_audience, poll get_audience until ready, then reveal_leads with a budget you agreed to.

Errors

Tool failures, including bad arguments and rate limits, come back as tool results with isError: true and the same body as the API:

{ "error": { "code": "max_chips_exceeded", "message": "...", "docs_url": "https://docs.diced.si/api/errors#max_chips_exceeded", "request_id": "req_..." } }

See Errors for every code. Authentication failures are HTTP 401 (or 403) with a WWW-Authenticate header that points OAuth clients at the sign-in flow.

Limits

Each MCP request counts against the 120 per minute of the API key it uses, shared with the REST API. A connected OAuth app has its own 120 per minute. See Rate limits.

OAuth details

For client authors. Diced runs its own OAuth 2.1 authorization server:

Protected resource metadatahttps://api.diced.si/.well-known/oauth-protected-resource (also /mcp suffixed)
Authorization server metadatahttps://api.diced.si/.well-known/oauth-authorization-server
Dynamic client registrationPOST https://api.diced.si/oauth/register
Authorization endpointhttps://app.diced.si/oauth/authorize
Token endpointPOST https://api.diced.si/oauth/token
Scopediced
PKCERequired, S256 only
Grantsauthorization_code, refresh_token
TokensAccess tokens last 1 hour. Refresh tokens last 30 days and rotate on every use

The person approving the connection picks the workspace on the consent screen. The connector then acts as that person in that workspace. See and disconnect connected apps in the app under Developers → MCP.

On this page