A human judgment, one tool call away.
Your agent can ask fifty verified people and get a distribution back in about ten minutes, from 12p 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/mcpClaude 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/mcpCursor
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/mcpVS 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/mcpThree 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 = £6.00 · 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 highTools
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, £50 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"