SalesSuite MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SalesSuite MCP Server find all deals for jane@acme.com and summarize the latest notes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
salessuite-mcp
MCP server for the SalesSuite CRM API: contacts, contact persons, deals, pipelines, notes, calls, emails, forms, action buttons and webhook subscriptions.
The only configuration is your SalesSuite API key; the tenant is derived from it.
Usage
Create an API key in SalesSuite (Settings > General) and add the server to your MCP client.
Claude Code
claude mcp add salessuite --scope user --env SALESSUITE_API_KEY=your-api-key -- npx -y salessuite-mcpKeep the -- before npx: without it, --env also swallows the command and the server is registered without
arguments (it then hangs on "connecting"). --scope user makes it available in every project.
Claude Desktop / Cursor / other clients (claude_desktop_config.json, .cursor/mcp.json, …)
{
"mcpServers": {
"salessuite": {
"command": "npx",
"args": ["-y", "salessuite-mcp"],
"env": { "SALESSUITE_API_KEY": "your-api-key" }
}
}
}Variable | Required | Description |
| yes | SalesSuite API key (sent as |
| no | Comma-separated toolsets to load (default: all), e.g. |
| no |
|
| no | Override the API URL (default |
Related MCP server: pipedrive-mcp
Tools
One tool per non-deprecated API operation, plus get_api_guide, which returns the API's own documentation (property
identification, note HTML, pagination, archived records, rate limits, webhooks), and describe_webhook_event.
Toolset | Tools |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Path and query parameters are top-level tool arguments; request bodies go into body.
Context size. All tools together take about 24k tokens of tool definitions (measured as JSON at ~3.5 characters
per token); SALESSUITE_TOOLSETS=contacts,deals,notes about 16k, SALESSUITE_READ_ONLY=true about 13k. The webhook
subscription tools advertise a compact schema; describe_webhook_event returns the event-specific filter and payload
schema on demand, and the full generated schema still validates the body before it is sent.
Custom properties. The SalesSuite OpenAPI spec is tenant-specific: custom properties appear as extra fields in
the create/update schemas. The bundled schemas only know the system properties, so the create/update payloads of
contacts, contact persons and deals also accept additional keys. Custom properties are keyed by their
propertyIdentifier, which starts with x_ (e.g. x_budget); search filters use the full identifier
(e.g. contact_x_budget). list_properties with propertyType: "dynamic" lists them with their value types and select
options.
License
Available Tools
53 toolscreate_call_activityCreate Call ActivityC
Create Call Activity.
Creates a call activity for a contact and optionally associates it with a deal.
Inputs: body (required).
create_contactCreate ContactB
Create Contact.
Creates a new contact along with its main contact person and optional additional contact persons.
Use Contact Persons to manage contact persons and change the main contact person.
Inputs: body (required).
create_contact_personCreate Contact PersonC
Create Contact Person.
Creates a new contact person for an existing contact. The email address is required.
Inputs: body (required).
create_dealCreate DealA
Create Deal.
Creates a new deal for a specific contact and phase.
Get a phaseId from list_pipelines first.
Inputs: body (required).
create_noteCreate noteA
Create note.
Creates a note on a contact or deal. Use GET /v1/note/{noteId} to retrieve the created note. Exactly one of contactId or dealId must be provided.
Supported formats:
text/html: formatted note content. See Notes for the supported tags.text/plain: plain text note content. Line breaks are supported.
Inputs: body (required), dealId, contactId.
create_webhook_subscriptionCreate Webhook SubscriptionA
Create Webhook Subscription.
Registers a webhook subscription. Registering an identical subscription (same hookUrl, event type, and filter) does not create a duplicate: the existing subscription is returned, and a deactivated one is reactivated.
Delivery: When the selected event happens, the application sends a POST request to hookUrl with the related payload in the request body.
Payload types:
Event Type | Payload Type |
| WebhookContactPropertyChangedPayload |
| WebhookDealPropertyChangedPayload |
| WebhookDealStageChangedPayload |
| WebhookActivityCreatedPayload |
| WebhookFormSubmittedPayload |
| WebhookContactCreatedPayload |
| WebhookDealCreatedPayload |
| WebhookActionButtonExecutedPayload |
Filters: Supported filter fields and matching behaviour depend on the selected event type.
Inputs: body (required).
delete_call_activityDelete Call ActivityCDestructiveIdempotent
Delete Call Activity.
Deletes a call activity by ID.
Inputs: callActivityId (required).
delete_contact_personDelete Contact PersonBDestructiveIdempotent
Delete Contact Person.
Deletes an additional contact person by ID and returns the owning contact ID.
Inputs: contactPersonId (required).
delete_email_activityDelete email activityADestructiveIdempotent
Delete email activity.
Deletes a logged email activity by emailActivityId. Email activities that were sent by SalesSuite cannot be deleted with this operation and return 409 Conflict.
Inputs: emailActivityId (required).
delete_noteDelete noteCDestructiveIdempotent
Delete note.
Deletes a note by noteId.
Inputs: noteId (required).
delete_webhook_subscriptionDelete Webhook SubscriptionBDestructiveIdempotent
Delete Webhook Subscription.
Deletes a webhook subscription by ID and stops future event delivery to its URL.
Inputs: id (required).
describe_webhook_eventDescribe webhook eventARead-only
Returns, for one webhook event type, the JSON Schema of the subscription body (incl. the event-specific filter) for create_webhook_subscription / update_webhook_subscription, and the JSON Schema of the payload delivered to hookUrl.
Inputs: type (required).
find_deals_by_emailFind Deals by EmailBRead-onlyIdempotent
Find Deals by Email.
Retrieves all deals linked to contacts that have at least one contact person with the specified primary email address.
Inputs: email (required).
get_api_guideSalesSuite API guideARead-only
Returns the SalesSuite API guide: data model, property identification for search filters, supported note HTML, cursor pagination, archived records, rate limits and webhooks. Optionally filter by a section heading.
Inputs: section.
get_call_activityGet call activityCRead-onlyIdempotent
Get call activity.
Retrieves a single call activity by callActivityId.
Inputs: callActivityId (required).
get_contactGet Contact by IDBRead-onlyIdempotent
Get Contact by ID.
Retrieves a single contact along with its associated contact persons.
Inputs: contactId (required).
get_contact_by_emailGet Contact by EmailARead-onlyIdempotent
Get Contact by Email.
Retrieves all contacts that have at least one contact person with the specified primary email address.
For more flexible contact filtering and sorting, use POST /v2/contact/search.
Inputs: email (required).
get_contact_personGet Contact Person by IDBRead-onlyIdempotent
Get Contact Person by ID.
Retrieves a single contact person with the related contact.
Inputs: contactPersonId (required).
get_dealGet Deal by IDCRead-onlyIdempotent
Get Deal by ID.
Retrieves a single deal by its unique identifier.
Inputs: dealId (required).
get_email_activityGet email activityBRead-onlyIdempotent
Get email activity.
Retrieves a single email activity by emailActivityId.
Inputs: emailActivityId (required).
get_noteGet noteBRead-onlyIdempotent
Get note.
Retrieves a single note by noteId. Use POST /v1/note to create notes.
Inputs: noteId (required).
get_tenant_infoGet Authentication DataARead-onlyIdempotent
Get Authentication Data.
Validates the API key and returns basic tenant metadata used by integrations such as Zapier.
The values can be changed in the web app under Settings > General (https://app.salessuite.com/t/{tenantId}/settings/general).
Inputs: no named parameters.
get_userGet User by IDCRead-onlyIdempotent
Get User by ID.
Retrieves a single user by ID.
Inputs: userId (required).
get_user_by_emailGet User by EmailARead-onlyIdempotent
Get User by Email.
Retrieves a single user by normalised exact email match. Email matching is case-insensitive after normalisation.
Inputs: email (required).
get_webhook_subscriptionGet Webhook SubscriptionCRead-onlyIdempotent
Get Webhook Subscription.
Returns a webhook subscription by ID.
Inputs: id (required).
list_action_button_executionsList Action Button ExecutionsARead-onlyIdempotent
List Action Button Executions.
Lists target records with stored executions for one trigger action-button property. The records array is grouped by contact, contact person, or deal; each record contains its stored executions.
Available trigger action buttons: GET /v1/action-button/trigger
Inputs: propertyIdentification (required), limit, cursor, executionsPerRecord.
list_call_activitiesList call activitiesARead-onlyIdempotent
List call activities.
Retrieves call activities directly attached to the requested contact or deal. See also GET /v1/call-activity/feed.
The fixed sort order is pinIndex DESC, callStartedAt DESC, id DESC.
Provide contactId or dealId. Paginate with the returned cursor until it is null.
Inputs: limit, cursor, dealId, contactId.
list_call_activity_feedList call activity feedARead-onlyIdempotent
List call activity feed.
Retrieves a call activity feed for the requested contact or deal. See also GET /v1/call-activity.
For a contact, the feed contains direct contact call activities and call activities from readable related deals.
For a deal, the feed contains direct deal call activities and call activities from the related contact.
The fixed sort order is pinIndex DESC, callStartedAt DESC, id DESC.
Provide contactId or dealId. Paginate with the returned cursor until it is null.
Inputs: limit, cursor, dealId, contactId.
list_call_typesGet Call TypesARead-onlyIdempotent
Get Call Types.
Retrieves all available call types. The values can be changed in the web app under Settings > Calls (https://app.salessuite.com/t/{tenantId}/settings/calls).
Inputs: no named parameters.
list_cardsGet CardsCRead-onlyIdempotent
Get Cards.
Returns cards with optional filters.
Inputs: sortBy, cardType, isPropertyRequired, contactCardVisibility, +1 more.
list_contactsGet ContactsARead-onlyIdempotent
Get Contacts.
Retrieves a paginated list of all contacts.
For more flexible filtering and sorting, use POST /v2/contact/search.
Inputs: page, pageSize.
list_dealsGet DealsCRead-onlyIdempotent
Get Deals.
Returns a list of deals
For more flexible filtering and sorting, use POST /v1/deal/search.
Inputs: page, sortBy, phaseId, pageSize, +3 more.
list_deals_by_contactGet DealsCRead-onlyIdempotent
Get Deals.
Returns a list of deals
Inputs: contactId (required), page, pageSize, pipelineId.
list_email_activitiesList email activitiesARead-onlyIdempotent
List email activities.
Retrieves email activities directly attached to the requested contact or deal. See also GET /v1/email-activity/feed.
The fixed sort order is pinIndex DESC, createdAt DESC, id DESC.
Provide contactId or dealId. Paginate with the returned cursor until it is null.
Inputs: limit, cursor, dealId, contactId.
list_email_activity_feedList email activity feedARead-onlyIdempotent
List email activity feed.
Retrieves an email activity feed for the requested contact or deal. See also GET /v1/email-activity.
For a contact, the feed contains direct contact email activities and email activities from readable related deals.
For a deal, the feed contains direct deal email activities and email activities from the related contact.
The fixed sort order is pinIndex DESC, createdAt DESC, id DESC.
Provide contactId or dealId. Paginate with the returned cursor until it is null.
Inputs: limit, cursor, dealId, contactId.
list_formsGet FormsBRead-onlyIdempotent
Get Forms.
Retrieves active forms sorted by creation date, newest first.
Inputs: page, pageSize.
list_form_submissionsGet Form SubmissionsBRead-onlyIdempotent
Get Form Submissions.
Retrieves a page of submissions for a specific form.
Inputs: formId (required), page, after, before, +1 more.
list_note_feedList note feedARead-onlyIdempotent
List note feed.
Retrieves a note feed for the requested contact or deal. See also GET /v1/note.
For a contact, the feed contains direct contact notes and notes from related deals.
For a deal, the feed contains direct deal notes and notes from the related contact.
The fixed sort order is pinIndex DESC, createdAt DESC, id DESC.
Provide contactId or dealId. Paginate with the returned cursor until it is null.
Inputs: limit, cursor, dealId, contactId.
list_notesList notesARead-onlyIdempotent
List notes.
Retrieves notes directly attached to the requested contact or deal. See also GET /v1/note/feed.
The fixed sort order is pinIndex DESC, createdAt DESC, id DESC.
Provide contactId or dealId. Paginate with the returned cursor until it is null.
Inputs: limit, cursor, dealId, contactId.
list_pipelinesGet PipelinesARead-onlyIdempotent
Get Pipelines.
Retrieves the readable pipelines and their phases.
Use this to find phaseIds for creating or moving deals.
Inputs: no named parameters.
list_propertiesGet PropertiesARead-onlyIdempotent
Get Properties.
Returns persisted property definitions with optional filters.
Use this to discover property identifiers (incl. custom properties) for search filters and create/update payloads.
Inputs: cardType, dataType, required, propertyType, +1 more.
list_trigger_action_buttonsList Trigger Action ButtonsBRead-onlyIdempotent
List Trigger Action Buttons.
Returns all trigger-type action buttons with optional filtering by card type.
Inputs: dynamicDbTableName.
list_usersGet UsersCRead-onlyIdempotent
Get Users.
Retrieves a page of users.
Inputs: page, role, sortBy, pageSize, +2 more.
list_webhook_subscriptionsList Webhook SubscriptionsBRead-onlyIdempotent
List Webhook Subscriptions.
Returns all webhook subscriptions for the current tenant.
Inputs: no named parameters.
log_email_activityLog email activityA
Log email activity.
Logs an email activity. This operation does not send the email. Use it to log emails that were sent by an external application or email client.
Inputs: body (required).
search_contactsSearch ContactsARead-onlyIdempotent
Search Contacts.
Search contacts using flexible filters and sorting.
For filters, condition.type must match the selected property's type (string, number, boolean, dateTime, select). Type mismatches return 400.
Property identifiers look like contact_companyName or contactPerson_email; see list_properties and get_api_guide.
Inputs: body (required).
search_dealsSearch DealsARead-onlyIdempotent
Search Deals.
Search deals using flexible filters and sorting.
For filters, condition.type must match the selected property's type (string, number, boolean, dateTime, select). Type mismatches return 400.
Property identifiers look like deal_name or contact_companyName; see list_properties and get_api_guide.
Inputs: body (required).
set_main_contact_personSet Main Contact PersonBDestructiveIdempotent
Set Main Contact Person.
Makes an existing contact person the main contact person of its owning contact. The contact person must belong to a non-archived contact.
Inputs: contactPersonId (required).
update_contactUpdate ContactADestructiveIdempotent
Update Contact.
Updates an existing contact by ID. This endpoint only accepts contact fields and does not update contact persons.
Use Contact Persons to manage contact persons and change the main contact person.
Inputs: body (required), contactId (required), appendMultiSelectValues.
update_contact_personUpdate Contact PersonBDestructiveIdempotent
Update Contact Person.
Updates an existing contact person by ID. This endpoint only accepts contact person fields.
Inputs: body (required), contactPersonId (required).
update_dealUpdate DealBDestructiveIdempotent
Update Deal.
Updates a deal by its ID.
Deal properties can be changed, the deal can be moved to another phase, and the deal can be assigned to another contact.
Inputs: body (required), dealId (required), appendMultiSelectValues.
update_webhook_subscriptionUpdate Webhook SubscriptionBDestructiveIdempotent
Update Webhook Subscription.
Updates an existing webhook subscription.
Delivery: When the selected event happens, the application sends a POST request to hookUrl with the related payload in the request body.
Filters: Supported filter fields and matching behaviour depend on the selected event type. Omit active to preserve the current state. Set active: true to reactivate or active: false to deactivate. Reactivation enables future notifications without replaying missed deliveries.
Inputs: id (required), body (required).
upsert_contact_by_emailCreate or Update Contact by Contact Person EmailA
Create or Update Contact by Contact Person Email.
The submitted email identifies the contact person. This can be the main contact person or an additional contact person.
If no contact person uses this email, a new contact with a main contact person is created.
If exactly one non-archived contact person uses this email, that contact person and its parent contact are updated.
If multiple non-archived contact persons use this email, the request fails with
409 Conflict.
Inputs: body (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 53 tools
Many retrieval tools overlap by resource: list_deals, list_deals_by_contact, find_deals_by_email, and search_deals all return deals; similarly list_notes vs list_note_feed and direct vs feed activity listings are easy to confuse. Descriptions clarify the differences, but the large number of near-parallel list/search/feed variants creates real misselection risk.
Most tools follow a clear snake_case verb_noun convention (list_contacts, get_deal, create_note, delete_webhook_subscription). Minor deviations such as find_deals_by_email and log_email_activity break the otherwise predictable pattern, but overall naming remains readable and mostly consistent.
At 53 tools, the surface is far beyond the typical well-scoped range and feels heavy for an MCP server. While many tools map to distinct CRM resources, the count is excessive and increases selection burden.
The tool set covers core CRM workflows well: contacts, contact persons, deals, notes, call activities, email activities, webhooks, forms, action buttons, users, pipelines, and properties. Gaps such as deal deletion and contact deletion/archival exist, but they are relatively minor for typical sales workflows.
Maintenance
Related MCP Connectors
Native MCP access to CRM contacts, organizations, deals and tasks with user permissions.
Read deals, persons, organizations, activities and pipelines; create and update CRM records.
CRM1Manage contacts, organizations and their recorded relationships in your workspace. Setup: In a remote MCP client that supports Streamable HTTP and OAuth, add https://platform.samuelz.com/api/v1/mcp/operator?toolset=crm. Sign in to Samuelz and select your authorized workspace. An active workspace membership and the relevant module permissions are required. Review the requested permissions before authorizing. Existing approval requirements continue to apply.
CRM1API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to read and write CRM data—companies, contacts, opportunities, tasks, and interactions—through MCP, with OAuth and provenance tracking for every value.MIT
- AlicenseNot gradedqualityBmaintenanceEnables reading and managing Pipedrive CRM records—deals, people, organizations, activities, and notes—over MCP, including searching, writing, and moving deals through pipelines.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage a fully customizable CRM, including contacts, companies, sales pipelines, custom objects and fields, file uploads, and data relationships via MCP over HTTP.MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to search, create, and update Yacrum CRM records, log activities, manage tasks, read pipelines and forecasts, and summarize deals through the Yacrum REST API using an API key.303 npmMIT