Provider REST API
CRMConnect Claude to Pipedrive
Search and update deals, people, organizations, activities and notes in the Pipedrive CRM. Toolspoke puts 14 of its actions behind one MCP endpoint that Claude, Cursor, and Codex all speak.
- Connection
- Provider REST API
- Authentication
- API token
- Actions exposed
- 14
- Cost per call (typical)
- 1 credit
- Adapter
- Maintained by Toolspoke
Connected in three steps
- 1
Install Pipedrive
Open the marketplace in your workspace, add Pipedrive to the project your agents work in, and it appears on the gateway immediately.
- 2
Connect the credential
Authenticate with api token. Where to get one, and what it has to be able to reach, is the next section.
- 3
Point your agent at the gateway
Give your client one address, https://toolspoke.com/mcp. Claude Code takes it as a command, Claude and Claude Desktop add it as a custom connector, and Cursor, Codex and VS Code each read it from a config file of their own.
.mcp.json{
"mcpServers": {
"toolspoke": {
"type": "http",
"url": "https://toolspoke.com/mcp"
}
}
}One block covers every tool you have installed. Pipedrive shows up in the client as soon as your policy allows it, and so does everything else you install later.
Where the address goes, per client
- Claude Code
Run it in your project, then /mcp to sign in
claude mcp add --transport http toolspoke https://toolspoke.com/mcp- Claude and Claude Desktop
Settings, then Connectors, then Add custom connector
https://toolspoke.com/mcp- Cursor
~/.cursor/mcp.json, or .cursor/mcp.json for one project
{ "mcpServers": { "toolspoke": { "url": "https://toolspoke.com/mcp" } } }- Codex
~/.codex/config.toml
[mcp_servers.toolspoke] url = "https://toolspoke.com/mcp"- VS Code
.vscode/mcp.json, or the MCP: Add Server command
{ "servers": { "toolspoke": { "type": "http", "url": "https://toolspoke.com/mcp" } } }
What Pipedrive asks for
API token. You provide it once, when you install the connector. Toolspoke encrypts it at rest and decrypts it only for the length of a single call, and the gateway attaches it to the outbound request itself, so it is never part of the arguments an agent sends.
- API tokenRequired
- Pipedrive → your profile menu → Personal preferences → API → Your personal API token. The token carries your own user's permissions, so what this connection can see and change is what you can see and change. It is sent as an x-api-token header, never in the URL.
- Pipedrive personal API token
What Claude can do in Pipedrive
14 actions, each one declared and named by the connector rather than discovered at runtime. A workspace policy grants a person all of them, a hand-picked selection, everything on the read side, everything on the write side, or none.
- Reads
- 9Reads
- Writes
- 5Writes
- Destructive
- 0Destructive
Reads
9Fetches data and changes nothing.
search_dealsSearch deals by free text. `term` is required and must be at least two characters - Pipedrive has no "list every deal" search, so start from a name, a company or a keyword. Narrow with person_id or organization_id when you already know who the deal belongs to, and with status to separate open work from won and lost. Returns deal ids; pass one to get_deal for the whole record. Pages by cursor rather than by offset.
get_dealFetch one deal in full, by the id search_deals returns. Ask for custom_fields when the account keeps anything important in them, and for include_option_labels when you want a dropdown's label rather than its numeric id. The returned stage_id is an internal id, which list_stages translates into a name.
search_personsSearch people by name, email address or phone number. `term` is required and must be at least two characters. Set `fields` to "email" to look somebody up by address without matching their name as well. Returns person ids and the matching contact details; pass an id to get_person for the whole record.
get_personFetch one person in full - their name, every email address and phone number on the record, their employer, owner and custom fields. Takes the id search_persons returns.
search_organizationsSearch organizations by name or address. `term` is required and must be at least two characters. Returns organization ids; use one as org_id on a deal or a person, or as organization_id when narrowing search_deals or search_persons. Unlike the deal and person searches this one takes no owner filter and no include_fields.
list_activitiesList activities - Pipedrive's calls, meetings, emails and tasks - newest change first. Narrow by deal_id, person_id, org_id or owner_id to see one thing's history, and by done to separate what is outstanding from what is finished. Note what v2 does not have: there is no start_date or end_date window any more, so bound a query with updated_since and updated_until, or sort by due_date and page.
list_pipelinesList the account's pipelines, each with its id and name. A pipeline id is what create_deal and update_deal take, and it is also the filter list_stages needs. This is account configuration - it holds no deal and no person.
list_stagesList pipeline stages with their ids, names and order. This is the translation table between what a person says and what the API takes: "Negotiation" is a name, and create_deal and update_deal only accept the numeric stage_id. Pass pipeline_id to see one pipeline's stages rather than every stage in the account. Account configuration - no deal and no person appears here.
list_usersList the account's own Pipedrive users, with their ids, names and email addresses. Call it to turn a colleague's name into the owner_id that create_deal, update_deal, create_activity and add_note take. These are the caller's own colleagues rather than anybody the account sells to, which is why the response stays in the audit log. It is the connection check as well, because it takes no parameters at all and reads no record. This is the second of the two operations still on API v1 - Pipedrive built no v2 user list.
Writes
5Creates or updates something on the other side.
create_dealCreate a deal. Only `title` is required; everything else is optional and Pipedrive fills in the account's defaults. pipeline_id and stage_id are internal ids rather than the names shown in the UI - call list_pipelines and list_stages first and copy the ids from there. owner_id is the Pipedrive user the deal belongs to, from list_users. These are the v2 field names: it is org_id and owner_id, not the v1 organization_id and user_id.
update_dealChange fields on an existing deal - this is how a deal moves to another stage, gets re-priced, or is marked won or lost. Only the fields you send are touched. v2 uses PATCH here; v1's PUT is gone. stage_id must be an internal id from list_stages, not a stage name. This cannot delete the deal.
create_personCreate a person. Nothing is strictly required, but a record with no name is not useful. Note the v2 shape for contact details: `emails` and `phones` are lists of objects, each {"value": "[email protected]", "label": "work", "primary": true} - v1's single `email` and `phone` strings are gone. Search first; Pipedrive will happily create a second record for somebody who is already there.
create_activitySchedule an activity - a call, a meeting, a task - and attach it to a deal, a person or an organization. `type` is the account's own activity type key from its settings, e.g. "call", "meeting", "task"; "call" and "meeting" exist in every account. due_date is a plain date and due_time a 24-hour clock time, both in the account's time zone. This is internal scheduling only: Pipedrive's calendar attendee list, which mails an invitation to an outside address when calendar sync is switched on, is deliberately not offered here, so nothing this operation does is visible to anybody outside the account.
add_noteLog a note against a deal, a person or an organization. The note appears on that record's timeline for the account's own users and is not sent to anybody outside it, which is why this is a write. `content` is HTML, so line breaks want <br> rather than \n, and Pipedrive sanitises what it is given. Pipedrive requires at least one of deal_id, person_id, org_id or lead_id - a note attached to nothing is refused. This is one of the two operations in this connector still on API v1: Pipedrive never built a v2 for notes, and the v1 endpoint remains supported.
What it will not do
Enforced by the gateway rather than left to convention, which is why each of these can be stated flatly.
- It cannot call anything else
- The 14 actions above are the whole of it. A call to any other name is refused before it reaches Pipedrive rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time.
- Nothing here deletes
- This connector writes to Pipedrive, but nothing in it deletes or permanently alters anything.
- It reaches no further than your credential
- Toolspoke holds no access to Pipedrive of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either.
- It never hears from Pipedrive
- Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Pipedrive. An agent has to ask.
- It does not smooth over provider limits
- Toolspoke does not retry, queue or back off around Pipedrive's own rate limits. A call that Pipedrive refuses comes back to the agent as a failed call.
Before you connect it
What can Claude do in Pipedrive?
14 named actions: 9 that only read and 5 that write. They include search_deals, get_deal and create_deal. Nothing outside that list is reachable: the connector declares each operation by name rather than proxying whatever an agent asks for.
What credentials does the Pipedrive connector need?
API token. The connector asks for api token. Values are encrypted at rest and attached to the outbound request by the gateway, so they are never part of the arguments an agent sends and never reach the audit log.
Does the Pipedrive connector work with Cursor and Codex, or only Claude?
Any client that speaks MCP, and every one of them gets the same 14 actions. There is a single address, https://toolspoke.com/mcp. Claude Code adds it with claude mcp add --transport http, Claude and Claude Desktop take it as a custom connector in settings, Cursor reads it from .cursor/mcp.json, Codex from ~/.codex/config.toml, and VS Code from .vscode/mcp.json. Each of them signs in to the gateway itself, so there is no key to paste.
What does the Pipedrive connector not do?
The 14 actions above are the whole of it. A call to any other name is refused before it reaches Pipedrive rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time. This connector writes to Pipedrive, but nothing in it deletes or permanently alters anything. Toolspoke holds no access to Pipedrive of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either. Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Pipedrive. An agent has to ask. Toolspoke does not retry, queue or back off around Pipedrive's own rate limits. A call that Pipedrive refuses comes back to the agent as a failed call.
Can I limit which actions an agent can call?
Yes, in two places. The project switches Pipedrive's actions on and off one at a time, for everyone in the project at once, and the screen groups them by read, write and destructive so turning off everything that deletes is one click. An individual agent key can then be narrowed further, to particular toolkits in a project and to particular actions in a toolkit. Whatever it was granted, a key never reaches a project its owner cannot.
What gets recorded when an agent calls Pipedrive?
Every attempt, with the agent that made it and the person that agent belongs to, the full request payload, the response payload, the status, the duration, and the credits spent. Values whose key names a secret are masked out before the record is shown to anyone. An operation the connector marks as not retained never has its response body written at all, so the gateway keeps no second copy of what was read.