67Leads / Docs / MCP

67Leads MCP server

Connect Claude Code, Claude Desktop, Cursor, VS Code or ChatGPT to 67Leads. Count, search and sample US local-business leads for free, then quote and export them with the same credits as the web app. Setup, tools and limits.

Endpoint and authentication

https://67leads.com/api/mcp speaks MCP over Streamable HTTP (protocol 2025-11-25; 2025-06-18, 2025-03-26, 2024-11-05 also accepted). It is stateless: every request is one JSON-RPC POST and gets one JSON reply.

Send your API key as X-API-Key: YOUR_API_KEY or Authorization: Bearer YOUR_API_KEY. To get it, sign in at 67leads.com/app and press Copy API key in the export bar. Keys in the URL are not accepted, because URLs end up in logs.

Without a key the free tools still work: counts, parsing, coverage, masked search and the free sample (limited per IP). Quoting and exporting need a key.

Set it up

Claude Code

claude mcp add --transport http 67leads https://67leads.com/api/mcp --header "X-API-Key: YOUR_API_KEY"

Claude Desktop

Add this to claude_desktop_config.json (Settings, Developer, Edit config). It uses the mcp-remote package to reach the remote server with your header, so it needs Node.js.

{
  "mcpServers": {
    "67leads": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://67leads.com/api/mcp",
        "--header",
        "X-API-Key:${LEADS67_KEY}"
      ],
      "env": {
        "LEADS67_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Cursor

In ~/.cursor/mcp.json, or .cursor/mcp.json in a project:

{
  "mcpServers": {
    "67leads": {
      "url": "https://67leads.com/api/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

VS Code

In .vscode/mcp.json:

{
  "servers": {
    "67leads": {
      "type": "http",
      "url": "https://67leads.com/api/mcp",
      "headers": {
        "X-API-Key": "${input:leads67-key}"
      }
    }
  },
  "inputs": [
    {
      "id": "leads67-key",
      "type": "promptString",
      "description": "67Leads API key",
      "password": true
    }
  ]
}

ChatGPT and claude.ai connectors

Add a custom connector with the URL https://67leads.com/api/mcp and no authentication. In ChatGPT this is under Settings, Apps, with Developer mode on; in claude.ai it is Settings, Connectors, Add custom connector. These connectors sign in with OAuth rather than a header, and this server does not offer OAuth yet, so they get the free tools only. To export from a chat, use Claude Desktop, Claude Code or Cursor with your key. Both vendors rename these menus from time to time; if a label differs, follow their guide.

Any client, or plain curl

curl https://67leads.com/api/mcp \
  -H "X-API-Key: $LEADS67_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"count_leads","arguments":{"q":"roofers in Dallas TX with no website"}}}'

Tools

ToolCostAPI keyWhat it does
count_leadsFreeOptionalExact count of matching businesses, with how many have a verified email, an owner's name or no website, and the top cities. Free. Use this first to answer 'how many'.
search_leadsFreeOptionalUp to 25 matching businesses. Phone, email, owner surname and website are masked unless the caller owns the lead. Free.
parse_queryFreeOptionalWhat a plain-English lead search means (niche, city, state, filters) without running it. Free.
list_nichesFreeOptionalEvery niche id with the leads, states and verified emails in stock. Niches with 0 leads can be requested on the site. Free.
coverageFreeOptionalLead counts per state (or per city when a state is given), optionally for one niche, so you can avoid empty searches. Free.
get_sampleFreeOptionalUp to 5 unmasked rows for one niche in one city. 3 different samples a day per account (per IP without a key); asking again for the same one replays it. Free.
quote_exportFreeRequiredPrice an export before taking it: rows, credits, the daily allowance left and a quote_token valid 10 minutes. Free. Show the user say_to_user and wait for an explicit yes before export_leads. Up to 1000 rows per MCP export.
export_leadsSpends creditsRequiredTake the leads in a quote and return them as CSV text. Spends credits exactly like the web export, and each lead is charged once ever. Never call without the user's explicit confirmation of the quoted price.

How an export works

Exporting is two calls on purpose. quote_export prices the request (rows, credits, what you already own, the daily allowance left) and returns a quote_token that lasts 10 minutes. The assistant shows you the price and waits for your yes; only then does it call export_leads with the token. If the price has gone up since the quote, the export is refused and has to be quoted again.

export_leads runs the same code as the Export button in the app: the same credits per new lead, the same daily cap, and a lead you already own is free to take again. The CSV comes back in the tool result, up to 1,000 rows a call. For bigger files use the app or the HTTP API, up to 25,000 rows a request.

Pass preset to get the file in the column layout of the tool you will import it into: 67leads, instantly, smartlead, lemlist, gohighlevel, clay, hubspot, apollo. The Instantly, Smartlead, lemlist, HubSpot layouts only take leads with an email, and that narrowing is part of the quote, so you are never charged for a row the tool would reject.

Limits

Errors

Prompts to try