Zum Inhalt springen

MCP Server

Enrichment inside your AI tools

Connect the SalesQL MCP to Claude, ChatGPT, Gemini or Cursor — authorize once, no key to paste — then prospect, reveal verified emails and check credits without leaving the chat.

Endpointhttps://mcp.salesql.com/mcp
TransportStreamable HTTP
AuthOAuth 2.1 — or an MCP key, if your client can't
Works in

Connect your client

Every client points at the same endpoint, and most of them can authorize themselves against it — you approve a consent screen and never handle a credential. An MCP key stays available under each client's advanced section, for tools that can't do OAuth. Jump to yours:

Claude

OAuth

The easiest path, and no key involved. Claude reaches the server from Anthropic’s cloud, so the same connector works in the browser and in the desktop app.

  1. On a personal account: open Customize → Connectors, click “+” and then Add custom connector.
  2. On a Team or Enterprise account an owner adds it once, under Organization settings → Connectors → Add → Custom → Web. Members then just hit Connect on it under Customize → Connectors.
  3. Paste https://mcp.salesql.com/mcp as the remote MCP server URL and click Add.
  4. Click Connect. Claude opens the SalesQL consent screen — approve the scopes and the tools appear in the composer.

Leave the Advanced settings OAuth client ID and secret empty: the server registers Claude for you.

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · Claude

Help me connect the SalesQL MCP server to Claude. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for Claude specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

Only needed if you want a long-lived key instead of a connection you can revoke per client. Claude Desktop reads this file at startup; it bridges to the HTTP server through mcp-remote, which needs Node 18+.

Claude Desktop · claude_desktop_config.json
{
  "mcpServers": {
    "salesql": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://mcp.salesql.com/mcp",
        "--header", "Authorization: Bearer YOUR_MCP_KEY"
      ]
    }
  }
}

Check with node -v and which npx; a stale nvm default is the usual cause of "Server disconnected". Fully quit Claude (Cmd+Q) and reopen after editing.

Claude Code

OAuth

One command, then authorize in the browser. Keep --transport http — it is the only transport that carries OAuth.

Claude Code · terminal
claude mcp add --transport http salesql https://mcp.salesql.com/mcp
  1. Run the command above.
  2. Type /mcp inside Claude Code, pick salesql, and choose Authenticate.
  3. Approve the scopes in the browser tab that opens.

Tokens go to your system keychain and refresh on their own. The same /mcp panel has Clear authentication when you want to disconnect.

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · Claude Code

Help me connect the SalesQL MCP server to Claude Code. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for Claude Code specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

Pass the key as a header instead of authorizing — useful in CI, or on a machine with no browser.

Claude Code · terminal
claude mcp add --transport http salesql \
  https://mcp.salesql.com/mcp \
  --header "Authorization: Bearer YOUR_MCP_KEY"

ChatGPT

Developer ModeOAuth

Custom MCP apps live behind Developer mode. Once it is on, adding SalesQL is a few fields and a consent screen — no key to generate.

  1. Open Settings → Apps → Advanced settings and turn on Developer mode. Older builds label this section Connectors.
  2. Back in Settings → Apps, choose Create.
  3. Name it SalesQL, paste https://mcp.salesql.com/mcp as the MCP server URL, and set Authentication to OAuth.
  4. Save, then Connect and approve the SalesQL consent screen.

On ChatGPT web. SalesQL exposes tools that act on your account, which needs full MCP — OpenAI documents that for Business and Enterprise/Edu workspaces, where an admin may also have to allow custom MCP connectors first; other plans may be limited to search and fetch. OpenAI moves this surface often, so check their Developer mode help article if the menus don’t match.

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · ChatGPT

Help me connect the SalesQL MCP server to ChatGPT. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for ChatGPT specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

If you would rather authenticate with a key, pick API key instead of OAuth when you create the connector.

ChatGPT · connector
# Settings → Apps → Create  (older builds: Connectors)
Name:  SalesQL
URL:   https://mcp.salesql.com/mcp
Auth:  Bearer YOUR_MCP_KEY

Gemini CLI

OAuth

Declare the server with OAuth enabled, then authorize once from inside the CLI. No token in your settings file.

Gemini CLI · ~/.gemini/settings.json
{
  "mcpServers": {
    "salesql": {
      "httpUrl": "https://mcp.salesql.com/mcp",
      "oauth": { "enabled": true }
    }
  }
}
  1. Add the block above to ~/.gemini/settings.json.
  2. Run /mcp auth inside the CLI and pick salesql.
  3. Approve the scopes in the browser.

Gemini CLI discovers the endpoints from the server itself. Tokens are cached in ~/.gemini/mcp-oauth-tokens.json and refreshed automatically — re-run /mcp auth if they ever expire.

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · Gemini CLI

Help me connect the SalesQL MCP server to Gemini CLI. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for Gemini CLI specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

Send the key as a header instead. Anything in this file is stored in plain text, so prefer OAuth on a shared machine.

Gemini CLI · ~/.gemini/settings.json
{
  "mcpServers": {
    "salesql": {
      "httpUrl": "https://mcp.salesql.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_MCP_KEY" }
    }
  }
}

Perplexity

ConnectorsOAuth

Add SalesQL as a custom remote connector and let Perplexity discover the rest.

  1. Settings → Connectors → Add connector.
  2. Paste https://mcp.salesql.com/mcp, set Transport to Streamable HTTP and Authentication to OAuth.
  3. Save, connect, and approve the consent screen.

Leave Client ID and Client Secret empty — the server supports dynamic registration, so Perplexity registers itself. Remote connectors require a paid Perplexity plan.

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · Perplexity

Help me connect the SalesQL MCP server to Perplexity. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for Perplexity specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

Choose API key instead of OAuth when you add the connector.

Perplexity · connector
# Settings → Connectors → Add connector
Name:  SalesQL
URL:   https://mcp.salesql.com/mcp
Auth:  Bearer YOUR_MCP_KEY

VS Code

OAuth

For GitHub Copilot agent mode. VS Code notices the server wants OAuth and prompts you to sign in — the file holds no secret, so you can commit it.

VS Code · .vscode/mcp.json
{
  "servers": {
    "salesql": {
      "type": "http",
      "url": "https://mcp.salesql.com/mcp"
    }
  }
}
  1. Save the block above as .vscode/mcp.json.
  2. Click Auth in the CodeLens above the server entry — or just ask Copilot for a SalesQL tool and let it prompt you.
  3. Approve the scopes in the browser window VS Code opens.

Because there is no key in it, this file is safe to commit — every teammate authorizes with their own SalesQL account.

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · VS Code

Help me connect the SalesQL MCP server to VS Code. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for VS Code specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

Header auth works too, but it puts a live credential in a file people commit by accident.

VS Code · .vscode/mcp.json
{
  "servers": {
    "salesql": {
      "type": "http",
      "url": "https://mcp.salesql.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_MCP_KEY" }
    }
  }
}

Cursor

OAuth

Point Cursor at the endpoint and let it handle the handshake — OAuth 2.1 with PKCE, registering itself as it goes.

Cursor · ~/.cursor/mcp.json
{
  "mcpServers": {
    "salesql": {
      "url": "https://mcp.salesql.com/mcp"
    }
  }
}
  1. Add the block above to ~/.cursor/mcp.json — or .cursor/mcp.json to scope it to one project.
  2. Open Settings → MCP and click Connect (or Needs login) next to salesql.
  3. Approve the scopes in the browser.

No client ID or secret to fill in: the server registers Cursor dynamically.

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · Cursor

Help me connect the SalesQL MCP server to Cursor. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for Cursor specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

Header auth, for a machine that can’t open a browser.

Cursor · ~/.cursor/mcp.json
{
  "mcpServers": {
    "salesql": {
      "url": "https://mcp.salesql.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_MCP_KEY" }
    }
  }
}

Any client

OAuth

Any client that speaks Streamable HTTP and the MCP authorization spec can connect unaided: the server publishes its own metadata and accepts dynamic client registration, so there is nothing to pre-register and no secret to exchange.

Any MCP client · OAuth
Endpoint:   https://mcp.salesql.com/mcp
Transport:  Streamable HTTP
Auth:       OAuth 2.1 — authorization code + PKCE (S256)
Discovery:  https://mcp.salesql.com/.well-known/oauth-protected-resource/mcp

Or let your assistant do it

Paste this in and it will walk you through authorizing, then read your plan and credits back so you know the connection works.

Connect prompt · Any client

Help me connect the SalesQL MCP server to Any client. The server URL is https://mcp.salesql.com/mcp and it uses OAuth, so there is no API key to paste anywhere. Walk me through it step by step for Any client specifically, including where to approve the SalesQL consent screen. When it reports connected, call get_account_status and read back my plan, remaining credits and next refresh date so we know the connection really works. Then run one free search_people query as a smoke test — don't spend credits.

Manual setup with an MCP key (advanced)

Or send a key on every request.

Any MCP client · Streamable HTTP
Endpoint:  https://mcp.salesql.com/mcp
Header:    Authorization: Bearer YOUR_MCP_KEY

Prompt library

Copy a playbook, or open it straight in your assistant. Searching is free, so most of these start by shaping a list before spending a single credit.

Build an ICP

"Here is my website: acme.com. Propose an ideal customer profile — job titles, industries, company sizes and countries — then resolve those filters with lookup and show me how many people match."

Search then enrich

"Find 25 Heads of Talent at software companies with 51–200 employees in Spain who have a verified work email. Show them first, and only enrich the ones I pick."

Map a team

"Map the marketing team at acme.com — group them by job title, most senior first. Enrich only the top two."

Size before spending

"How many VPs of Sales are there in fintech companies in Germany with 201–500 employees and a direct phone on file? Just the count and a sample — don’t spend credits yet."

Tenure signals

"Find RevOps leaders who started their current role less than 12 months ago at US SaaS companies — new leaders are the ones changing tools."

Alumni play

"Find people who used to work at Stripe and are now heads of engineering somewhere else in Europe."

Enrich & write

"Enrich linkedin.com/in/jane-doe and draft a short intro email in my voice."

Find a dial

"Find the direct dial and verified email for Acme's VP of Marketing."

Bulk list

"Enrich these 40 LinkedIn URLs with verified emails and export as CSV."

Company intel

"Enrich acme.com — give me size, industry and the key decision-makers."

Reverse email

"Who is behind jane.doe@acme.com? Give me their full name, title, company and LinkedIn."

Credits

"How many enrichment credits do I have left this month, and when do they refresh?"

Available tools

Enrichment consumes credits. Everything else is free, so you can search and size a list before spending anything:

lookupsearch_peopleget_account_status
Tool What it does Cost
lookupResolve the exact filter values (company_size, company_type, industry, country, region) that search_people expects. Always pass the returned `value`, never the human-readable `label`.Free
search_peopleProspect for people by job title, industry, location, company and contact availability. Pass at least one filter — an empty request is rejected. Emails and phones come back obfuscated, so you can size and refine a list before spending anything — enrich a match with its linkedin_url to reveal the real contact data.Free
enrich_personReveal a contact’s work email, phone, job title, company and LinkedIn. Prefer a LinkedIn URL; otherwise name + company.1 credit
enrich_person_bulkEnrich up to 100 people in a single request. Each item takes a LinkedIn URL, an email, or a name + organization.1 credit
enrich_organizationEnrich a company: domain, industry, size, location, logo and LinkedIn. Prefer a LinkedIn URL, then a domain, then a name.1 credit
enrich_organization_bulkEnrich up to 100 companies in a single request. Each item takes a LinkedIn URL, a domain, or a name.1 credit
get_account_statusReturn the current plan, available credits, next refresh date, role and rate limits for the authenticated key.Free

Scopes

One list, two ways of granting it: an OAuth connection asks you to approve scopes on the consent screen, and an MCP key carries the ones you tick when you create it. Approve only what the client needs — searching and enrichment are separate grants. The enrichment tools accept either enrich scope; the one you grant decides whether emails, phones or both come back. verify:verify exists for API keys but no MCP tool uses it yet.

account:readget_account_statusPlan, credit balance, refresh date and rate limits. Live
search:readsearch_peoplelookupProspect for people and resolve the filter values a search needs. Live
enrich:emailsenrich_personenrich_person_bulkenrich_organizationenrich_organization_bulkReveal verified work and personal email addresses. Live
enrich:phonesenrich_personenrich_person_bulkenrich_organizationenrich_organization_bulkReveal direct dials and mobile numbers. Live
campaigns:readRead outbound campaigns and their stats. Later
campaigns:writeCreate and edit outbound campaigns. Later
campaigns:sendSend outbound campaigns. Later

Connected clients

Every OAuth connection is its own grant, listed under Connectors → MCP → Connected clients in the dashboard, with the scopes it was approved for and who approved it.

Disconnecting a client revokes that grant immediately and only that one — your other connected tools keep working. Reconnecting is the same consent screen again.

A client that can’t prove which product it is shows as Unverified: the name is self-reported by whatever software connected. Treat an Unverified entry you don’t recognise as something to disconnect.

Rate limits & credits

Unified API & MCP quota · shared

The MCP runs on the same access as the SalesQL API: it’s available on the Professional and Organization plans. The Basic plan and free accounts can’t connect it yet.

The MCP and REST API draw on one shared credit balance and rate limit — across all your API keys, MCP keys and connected clients, based on your plan. Bursts above your plan’s per-minute limit return 429 — back off and retry.

Enrichment spends 1 credit per matched contact. Everything else is free — lookup, search_people, get_account_status — so you can search, size a list and check your balance without spending anything. Ask get_account_status for your live balance, plan and limits.

Troubleshooting

The consent screen refuses, or every tool fails right after connecting
The MCP runs on the same access as the SalesQL API: the Professional and Organization plans. Check which account the browser is signed into before you approve — approving with a personal free account is the usual cause. On the Basic plan the consent screen may let you through and the tools still refuse, because the two checks are not the same one.
The client can’t connect
Confirm the transport is Streamable HTTP and the URL ends in /mcp. Opening that URL in a browser is not the connection test — a plain GET is refused by design (405 today), so “it doesn’t open” tells you nothing either way. Let the client connect instead.
A tool answers “This MCP key lacks a required scope”
The connection was approved without that capability. For an OAuth connection, disconnect it under Connectors → MCP → Connected clients and reconnect, approving every scope you need. For an MCP key, edit its scopes in the same screen.
“Your OAuth connection has no backing SalesQL API key”
The connection outlived the key minted for it — usually because that key was revoked. Reconnect SalesQL from your client’s settings and the connection is rebuilt.
Tools return “insufficient credits”
Ask for get_account_status: it reports your plan, remaining credits and the next refresh date, and costs nothing. Only enrichment spends credits — searching and status checks never do.
Enrichment returns no match
Unmatched lookups don’t spend credits. Prefer the linkedin_url from a search_people result — it’s the most reliable identifier — and drop match_if_direct_email / match_if_direct_phone if you set them.
Claude Desktop: “Server disconnected” or npm errors (E405)
That’s the mcp-remote bridge, which only the MCP-key path uses, and it needs Node 18+. Run node -v and which npx; a stale nvm default is the usual cause. The OAuth connector needs none of this — switch to it and the problem disappears.