MCP server (Claude Desktop)
Use your SalesLobe leads directly from Claude: the CRM API is also available as an MCP server. Claude can read your leads with their CRM fields and update phase, deal, next action and notes of existing leads. It never creates leads and never sends email.
Endpoint: https://slazbvfvliieskvkjtav.supabase.co/functions/v1/crm-mcp (Streamable HTTP)
Authentication: your API key in the X-SalesLobe-Key header (or Authorization: Bearer sl_live_…). The key must be locked to one client and have crm.read (and crm.write to update). No OAuth.
Getting a key
- Agency: Settings → API Keys → Connect your AI → Your clients' CRM → Connect a client. Pick the client; the key gets CRM rights only. (Your agency on the same screen is the separate Agency MCP.) Other apps that support MCP, such as ChatGPT or Cursor, work with the same URL and key.
- The client itself: switch on Can connect Claude in the client's portal permissions. The client then finds Settings → Connect Claude in its portal, creates its own key (max 3) and copies the ready-made Claude Desktop config. It can disconnect its keys there; the agency sees them under Connect your AI → Your clients' CRM too.
claude.ai connector (recommended for clients)
No key and no installation; works in claude.ai, Claude Desktop and the Claude mobile app.
- The agency switches on Can connect Claude in the client's portal permissions.
- In Claude: Settings → Connectors → Add custom connector, name SalesLobe, URL
https://app.saleslobe.com/mcp/crm. - Click Connect. SalesLobe asks for the email address the person uses for the portal and mails a login link; it opens the consent screen. Pick the portal and click Approve.
The connection is a client-scoped key with exactly the portal key rights (crm.read + crm.write), named after the person ("Claude.ai (name@company.com)"): that name is the note author and the actor in the Decision Trail. It counts towards the 3 connections per person and shows in the portal under Settings → Connect Claude, where it can be disconnected. OAuth 2.1 with PKCE on the same authorization server as the Agency MCP connector; the resource indicator decides which of the two you connect. No refresh token: when the connection is disconnected, Claude asks to log in again.
Claude Desktop with a key
Claude Desktop connects to remote MCP servers with a key header through mcp-remote, pinned to the version we test (mcp-remote@0.14.3). It needs Node.js 20 or newer, installed with the installer from nodejs.org: with Node 18 mcp-remote crashes, and Claude Desktop often cannot find Node installed with Homebrew or nvm (spawn npx ENOENT). Open Settings → Developer → Edit Config and add the saleslobe-… entry under mcpServers. If the file already has content (recent Claude Desktop versions write "preferences" there), merge it into that object instead of pasting below it: two JSON objects in one file is invalid and Claude Desktop then starts no server at all.
{
"mcpServers": {
"saleslobe-crm": {
"command": "npx",
"args": [
"-y", "mcp-remote@0.14.3",
"https://slazbvfvliieskvkjtav.supabase.co/functions/v1/crm-mcp",
"--header", "X-SalesLobe-Key:${SALESLOBE_KEY}"
],
"env": { "SALESLOBE_KEY": "sl_live_your_key_here" }
}
}
}
Quit Claude Desktop completely (Cmd+Q on Mac) and open it again. Settings → Developer shows the server as running; the tools appear under the tools icon.
Tools
| Tool | What it does | API call |
|---|---|---|
list_leads | Leads of your client with CRM fields (same leads as the portal); filters classification, phase, has_next_action; updated_since, cursor, limit for sync | GET /v1/crm/leads |
get_lead | One lead with notes | GET /v1/crm/leads/:id |
get_thread | The conversation: only mails really sent or received, oldest first (no drafts or notes); logged in the Decision Trail | GET /v1/crm/leads/:id/thread |
update_crm | Phase, deal, next action of an existing lead (if_updated_at optional) | PATCH /v1/crm/leads/:id |
get_performance | What works: results, campaigns and segments with replies vs the client's average, lead segments (industry, the agency's lead fields), why leads reply or say no. Exactly what the agency shares on the portal's Performance page; optional from / to | GET /v1/crm/performance |
add_note | Add a note (author = key name) | POST /v1/crm/leads/:id/notes |
Every tool calls the CRM API with your own key, so the same rules apply: writes are in the Decision Trail with the key name, won/lost cancels planned follow-ups, other updates send Corty's planned follow-ups to review.
Errors
- CRM API not enabled for the account: HTTP
403 feature_not_enabled(the server does not start a session). - Too many writes (more than 60 per minute per key): the tool answers "SalesLobe rate limit: at most 60 CRM updates per minute for this key. Nothing was changed. Wait one minute, then try again."
- Lead changed after you read it (
if_updated_at): the tool asks Claude to read the lead again. - Unknown lead: the tool says leads are never created through the CRM API.