For agents and developers

A human judgment, one tool call away.

Your agent can ask fifty verified people and get a distribution back in about ten minutes, from 15.2¢ an answer. The 50heads MCP server works with Claude, Cursor, ChatGPT and anything that speaks MCP.

Add it to your host

Claude

In Claude, open Settings, then Connectors, and add a custom connector with this URL. You'll sign in and set a daily spend cap.

https://mcp.50heads.com/mcp

Claude Code

Run this in a terminal. Claude Code opens a browser for you to sign in and set a daily spend cap.

claude mcp add --transport http 50heads https://mcp.50heads.com/mcp

Cursor

Add this to ~/.cursor/mcp.json, then sign in when Cursor asks.

{
  "mcpServers": {
    "50heads": {
      "url": "https://mcp.50heads.com/mcp"
    }
  }
}

ChatGPT

In ChatGPT, open Settings, then Apps and connectors, then Advanced settings, and turn on Developer mode. Choose Create, paste this URL and pick OAuth.

https://mcp.50heads.com/mcp

VS Code

Add this to .vscode/mcp.json in your workspace, or run MCP: Add Server. VS Code opens the sign-in page.

{
  "servers": {
    "50heads": {
      "type": "http",
      "url": "https://mcp.50heads.com/mcp"
    }
  }
}

Windsurf

Add this to ~/.codeium/windsurf/mcp_config.json, with an API key from the portal.

{
  "mcpServers": {
    "50heads": {
      "command": "npx",
      "args": [
        "-y",
        "@50heads/mcp"
      ],
      "env": {
        "FIFTYHEADS_API_KEY": "fh_live_…"
      }
    }
  }
}

Other (npx)

For hosts that launch a local command. Needs Node 20 or later and an API key from the portal.

FIFTYHEADS_API_KEY=fh_live_… npx -y @50heads/mcp

Three calls

Estimate is free and never spends. Ask reserves the credits. Waiting happens on our side, so your agent makes one call instead of polling.

> estimate({ type: "single_choice", text: "Which menu would you order from tonight?",
             options: [{ label: "Menu A" }, { label: "Menu B" }], n: 50, tier: 1 })
  12 credits × 50 = $7.62 · eta 10 min

> ask({ ...same question, idempotency_key: "4f9c…" })
  task q_8k2f · working · 0 of 50 answered

> get_results("q_8k2f")        # or wait_for_results on older hosts
  complete · winner "Menu B" · margin 36 points · confidence high

Tools

estimate
Price, time and validation for a question. Never spends.
ask
Posts a question. Needs an idempotency key, so a retry is never a second ask.
get_results
The results so far, without waiting.
wait_for_results
Waits on our side until the question is answered.
list_questions
Recent questions, so an agent can reuse a result before re-asking.
cancel
Stops a live question and refunds the answers not given.
templates
Fixed-price question templates.
balance
Credits, and what's left under the connection's daily cap.

Safe to leave running

  • Every connection has a daily spend cap, $63.5 unless you change it. An agent can't spend past it.
  • Ask needs an idempotency key. The same key returns the same question.
  • Questions pass the same content rules as everyone else's. A refused question costs nothing.
  • Results never identify a head.

Or call the API

Everything the MCP server does is a plain HTTPS call. Keys start fh_live_ and are shown once.

curl https://api.50heads.com/v1/billing/estimate \
  -H "Content-Type: application/json" \
  -d '{"draft":{"type":"single_choice","text":"Which menu would you order from tonight?",
       "options":[{"label":"Menu A"},{"label":"Menu B"}],"n":50,"tier":1}}'

curl https://api.50heads.com/v2/questions \
  -H "Authorization: Bearer $FIFTYHEADS_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"draft":{"type":"single_choice","text":"Which menu would you order from tonight?",
       "options":[{"label":"Menu A"},{"label":"Menu B"}],"n":50,"tier":1,"language":"en"}}'

curl "https://api.50heads.com/v2/questions/q_8k2f/wait?seconds=25" \
  -H "Authorization: Bearer $FIFTYHEADS_API_KEY"

A human judgment, one tool call away.