50heads MCP
Ask fifty verified people a five-second question from Claude, ChatGPT, Cursor or your own agent, and see what they think. 50 answers at Tier 1: 1000 credits, priced in your account's currency.
There are two ways in, with the same tools:
- Hosted (recommended):
https://mcp.50heads.com/mcp. Streamable HTTP, sign in with OAuth in the browser. Nothing to install. - Local:
npx -y @50heads/mcp, a stdio server for hosts that launch a command. Needs Node 20 or later and an API key (or a one-timelogin).
Install
Pick your host below. The hosted server needs nothing installed: add the URL and sign in with OAuth in the browser, which also sets the connection's daily spend cap. The local server (npx -y @50heads/mcp) needs Node 20 or later and an API key.
Make an API key, if you need one, on the Developers page of the dashboard: https://50heads.com/app/developers. Keys start fh_live_ and are shown once. Or run npx -y @50heads/mcp login once and leave the key out.
npx -y @50heads/mcp config [host] prints any of these. The same instructions are on https://50heads.com/en-us/docs/mcp.
Claude (claude.ai and Claude Desktop)
Hosted, sign in with OAuth. Settings, Connectors, Add custom connector. Paste the URL and sign in when asked. On Team and Enterprise plans an owner adds it for the organization first.
https://mcp.50heads.com/mcp
Or with an API key, in claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude).
{
"mcpServers": {
"50heads": {
"command": "npx",
"args": [
"-y",
"@50heads/mcp"
],
"env": {
"FIFTYHEADS_API_KEY": "fh_live_…"
}
}
}
}
Claude Code
Hosted, sign in with OAuth. Run in a terminal, then /mcp in Claude Code to sign in.
claude mcp add --transport http 50heads https://mcp.50heads.com/mcp
Or with an API key (CI and scripts):
claude mcp add --transport http 50heads https://mcp.50heads.com/mcp --header "Authorization: Bearer fh_live_…"
Cursor
Hosted, sign in with OAuth. ~/.cursor/mcp.json (or .cursor/mcp.json in a project). Cursor opens the sign-in page.
{
"mcpServers": {
"50heads": {
"url": "https://mcp.50heads.com/mcp"
}
}
}
Or with an API key:
{
"mcpServers": {
"50heads": {
"url": "https://mcp.50heads.com/mcp",
"headers": {
"Authorization": "Bearer fh_live_…"
}
}
}
}
ChatGPT
Hosted, sign in with OAuth. Settings, Apps and Connectors, Advanced settings, turn on Developer mode, then Create. Paste the URL and choose OAuth. On Business and Enterprise plans an admin turns on Developer mode first.
https://mcp.50heads.com/mcp
VS Code
Hosted, sign in with OAuth. .vscode/mcp.json in the workspace, or MCP: Add Server from the command palette.
{
"servers": {
"50heads": {
"type": "http",
"url": "https://mcp.50heads.com/mcp"
}
}
}
Or from a terminal:
code --add-mcp '{"name":"50heads","type":"http","url":"https://mcp.50heads.com/mcp"}'
Windsurf
Local, with an API key. ~/.codeium/windsurf/mcp_config.json, or Windsurf Settings, Cascade, MCP servers, View raw config.
{
"mcpServers": {
"50heads": {
"command": "npx",
"args": [
"-y",
"@50heads/mcp"
],
"env": {
"FIFTYHEADS_API_KEY": "fh_live_…"
}
}
}
}
Or the hosted server with an API key:
{
"mcpServers": {
"50heads": {
"serverUrl": "https://mcp.50heads.com/mcp",
"headers": {
"Authorization": "Bearer fh_live_…"
}
}
}
}
Any other host
Local, with an API key. Hosts that launch a local command. Needs Node 20 or later and an API key from the dashboard.
FIFTYHEADS_API_KEY=fh_live_… npx -y @50heads/mcp
Hosts that speak Streamable HTTP: https://mcp.50heads.com/mcp with the header "Authorization: Bearer fh_live_…", or OAuth.
{
"mcpServers": {
"50heads": {
"url": "https://mcp.50heads.com/mcp",
"headers": {
"Authorization": "Bearer fh_live_…"
}
}
}
}
Check it works
Ask your host to "use 50heads to estimate asking fifty people which of two names they prefer". estimate (action quote) is free and never spends credits. In Claude Code, /mcp lists the server and its tools; elsewhere, look for 50heads in the host's tools or connectors list.
Signing in on the command line
npx -y @50heads/mcp login # opens the browser; the token goes in your keychain
npx -y @50heads/mcp status
npx -y @50heads/mcp logout
login uses the OAuth device flow against https://auth.50heads.com. Tokens are kept in the macOS Keychain or the Secret Service on Linux, else in ~/.config/50heads/credentials.json (mode 600). An API key in FIFTYHEADS_API_KEY wins when both are present.
--proxy forwards stdio to the hosted server instead of running the tools locally.
Tools (9, each takes an action)
There are nine tools, never more than ten. Each tool takes an action and that action's own arguments, validated per action (the input is a discriminated union on action), and tools/list documents every action in the tool's description. Scopes belong to actions, not tools: a connection that lacks the scope for an action is refused with insufficient_scope for that action alone, and a read-only grant never reaches an action that changes something. Tool annotations are true of every action in the tool: estimate, results, organization and audit are read-only (readOnlyHint: true); questions, projects and webhooks each hold a cancel or delete, so they carry destructiveHint: true; ask and help change something but destroy nothing. Each tool's _meta["com.50heads/scopes"] lists the scope of each action.
Actions and scopes
Before and after
This release replaces the 44 single-purpose tools with the nine above (decision G12: at most ten tools, so a model can choose well). Every old tool is one action of one new tool, with the same arguments; two details changed: build_ask_link now takes its question fields inside draft, and the audit filter action is event_action (so it cannot clash with action). wait_for_results is now results with action: "wait" on every host.
The webhook and app scopes are not granted unless asked for: a connection made before them, or one that did not ask, gets insufficient_scope and can reconnect to add them.
Every connection has a daily spend cap (default 5,000 credits). Asking past it returns spend_cap_exceeded with what is left and when it resets.
Errors are JSON-RPC errors with error.data.code (validation, not_found, insufficient_credits, spend_cap_exceeded, idempotency_conflict, content_refused, rate_limited, unavailable) and a retryable hint.
Resources: 50heads://guide (the skill), 50heads://templates, 50heads://question-types, 50heads://pricing, 50heads://countries, 50heads://webhook-events (event types, what each carries, links to their JSON Schemas and how deliveries are signed), 50heads://results/{question_id}. Prompts: ask_the_heads, read_results. Hosts that show MCP Apps get the estimate and the results as cards.
Tool annotations: read-only tools carry readOnlyHint: true; questions (cancel), projects (delete) and webhooks (delete) are the only tools marked destructiveHint: true; every tool has openWorldHint: true and an output schema (a union of its actions' outputs). Hosts that show MCP Apps get the quote and the results as cards: they appear for estimate and results, and only for the replies they were made for.
Privacy
Privacy policy: https://50heads.com/en-gb/legal/privacy. We don't use your questions, the answers you buy or the reasons heads write to train AI models, and we don't sell them: https://50heads.com/en-gb/help/privacy/ai-and-your-data. Answers never identify a head.
Where to find it
- Hosted:
https://mcp.50heads.com/mcp. - npm:
@50heads/mcp. - Official MCP Registry, as
com.50heads/mcp, and MCP directories: coming soon.
The Agent Skill
The package ships the 50heads Agent Skill in skills/50heads (@50heads/mcp/skills/50heads/SKILL.md): when to ask, the eight rules for a good question, how to read results, and references for question types and pricing. Copy the folder into your host's skills directory, or let a host that speaks the com.50heads/skills extension fetch it from the server.
As a library
import { serveStdio } from "@modelcontextprotocol/server/stdio";
import { serverFactory } from "@50heads/mcp";
serveStdio(serverFactory({ apiKey: process.env.FIFTYHEADS_API_KEY }));
serveStdioServer(options) runs the whole stdio server, tasks included. configSnippets() returns the install snippets above.
Versions
Releases use calendar versions, YYYY.MDD.N: 2026.924.1 is the first release on 24 September 2026, and a second that day is 2026.924.2. The npm package, the hosted server (serverInfo.version), the registry manifest, --version and the Agent Skill all carry the same number. See CHANGELOG.md.
server.json is ready for the official MCP Registry as com.50heads/mcp. The registry has no listing yet (a search returns no servers). Publishing it needs MCP_REGISTRY_ED25519_KEY on the release workflow. See docs/publishing.md. The npm package itself is published.
Development
This package lives in the 50heads monorepo. The hosted server (apps/mcp) and the stdio server share one module, src/server.ts, so they cannot drift.
pnpm --filter @50heads/mcp generate # skill module, skill references, server.json, README install section
pnpm --filter @50heads/mcp test
pnpm --filter @50heads/mcp build # dist/cli.js, dist/index.js, types, skills/ and skills/50heads.zip
Releasing (npm with provenance from the public mirror, the MCP Registry and a GitHub Release) is described in docs/publishing.md.
MIT license.
Spelling
Everything the server says, accepts and returns is US English: tool names, actions, descriptions, arguments, outputs and error codes (organization, authorized, canceled). One word is not ours to spell: the status of an MCP task that was stopped is cancelled, because the MCP tasks protocol defines it that way and clients validate it. A question stopped through questions with action: "cancel" has status canceled.