MCP server
Pitch2Sale runs a Model Context Protocol server, so an AI agent can read your pipeline and log work in the CRM.
| Endpoint | POST https://api.pitch2sale.com/mcp |
| Transport | Streamable HTTP, stateless; every response is plain JSON (no SSE stream). GET /mcp returns 405 (with a valid key; without one, 401 first). |
| Authentication | Authorization: Bearer pat_… — a personal access token only |
| Scopes | mcp:read for the read tools; mcp:write for the write tools (it also allows the read tools) |
| Rate limit | 120 requests per minute per key |
The MCP scopes are never granted by default. Create a key with them explicitly:
curl -X POST "https://api.pitch2sale.com/api/v1/settings/api-keys" \ -H "Authorization: Bearer <token>" -H "Content-Type: application/json" \ -d '{ "label": "Claude Desktop", "scopes": ["mcp:read"] }'Connect a client
Section titled “Connect a client”Claude Desktop, Cursor and other clients that accept a remote server URL use a config like this:
{ "mcpServers": { "pitch2sale": { "url": "https://api.pitch2sale.com/mcp", "headers": { "Authorization": "Bearer pat_…" } } } }Keep the token out of shared or committed config files. Every tool runs as the key’s user inside that user’s organization.
Read tools
Section titled “Read tools”Available to keys with mcp:read or mcp:write. tools/list returns each tool’s description and input schema.
| Area | Tools |
|---|---|
| Leads | stale_leads, leads_summary, top_leads, search_leads, search_semantic, lead_source_performance, follow_up_gaps |
| Pipeline and deals | pipeline_summary, deals_at_risk, hot_deals, win_loss_analysis |
| Activity and calls | recent_activities, upcoming, team_call_stats, response_time_stats, best_time_to_contact, meeting_outcomes, call_detail, call_quality_trend |
| Sequences and templates | sequence_performance, template_performance |
| Email and conversations | email_threads, email_thread_messages, conversation_timeline, conversation_memory |
| Clients and contacts | find_client, client_overview, contacts_lookup |
| Invoices and revenue | invoices_query, revenue_summary, unpaid_balance, price_lookup |
| Proposals and projects | proposals_query, projects_query, project_detail |
| Help and memory | product_help, sales_playbook, list_memory |
Write tools
Section titled “Write tools”Listed and callable only with mcp:write. Each one also requires the caller’s role permission and an idempotency_key.
| Tool | Does | Role permission | Arguments |
|---|---|---|---|
create_lead |
Create a lead | leads.create |
name; optional description, source |
log_activity |
Log a call or note on a lead | leads.create |
lead_id, type (call or note), body; optional subject, duration_seconds |
create_task |
Create a follow-up task | tasks.create |
title, due_date (ISO date); optional lead_id, description, priority (low, medium, high) |
idempotency_key is a string you choose (1–200 characters), unique per write. Retrying a call with the same key returns the first call’s result instead of creating a duplicate; if the first call is still running you get an error asking you to retry shortly. A write that failed releases its key, so you can fix the arguments and retry with it. Every successful write is recorded in the audit log.
Errors
Section titled “Errors”| Situation | Response |
|---|---|
| Missing or invalid token | HTTP 401, {"error":"…"} (see Authentication) |
| Key has neither MCP scope | HTTP 403, {"error":"Token does not have any of the required scopes: mcp:read, mcp:write"} |
| Rate limit exceeded | HTTP 429, JSON-RPC error -32000 “Rate limit exceeded. Please slow down.” |
| Internal failure | HTTP 500, JSON-RPC error -32603 “Internal error” |
Write tool without mcp:write |
JSON-RPC error -32600 (invalid request) |
| Unknown tool | JSON-RPC error -32601 (method not found) |
| Bad arguments, missing permission, record not found | A tool result with isError: true and a readable message |