SAPOT.AI - Sales Assistant Performance Optimization Tool
SAPOT AI is an AI-powered sales enablement platform that helps organizations standardize sales processes. We transform offline and in-person sales conversations into actionable insights.
https://sapot.ai/Connect straight to this server’s public endpoint.
https://mcp.sapot.ai/mcpWe add this server to your workspace, walk through sign-in once, then open Studio with tools ready to run.
Last probed Sep 14, 2026 · mcp.sapot.ai
60tools discovered
Showing 25 of 60 from the live probe.
List Conversations
List conversations in the account, newest activity first (25 per page). status: one of open (default), resolved, pending, snoozed, all. assignee_type: me, unassigned, assigned, or all. inbox_id: restrict to a single inbox. labels: conversation label titles; matches conversations having ANY of them. page: 1-based page number. Returns {data:{meta:{...counts}, payload:[conversation,...]}}.
Count Conversations
Return only the conversation counts for a filter, without the conversation list. Same filters as list_conversations. Returns {meta:{mine_count, assigned_count, unassigned_count, all_count}}. Use this when you only need totals.
Search Conversations
Full-text search conversations by message content. query: the text to search for. Returns {meta:{...counts}, payload:[conversation,...]}.
Filter Conversations
Advanced conversation filtering with structured predicates. payload: a list of predicate objects, each shaped like {"attribute_key": "status", "filter_operator": "equal_to", "values": ["open"], "query_operator": "and"}. page: 1-based page number. Returns {meta:{...counts}, payload:[conversation,...]}.
Get Conversation
Fetch a single conversation by its display id (the per-account number shown in the UI). conversation_id: the conversation's display id (NOT a global database id). Returns the full conversation object (meta.sender/assignee/team, status, labels, priority, and the most recent message).
Get Conversation Messages
List messages in a conversation (cursor-paginated by message id, newest ~20 by default). conversation_id: the conversation display id. before: return the ~20 messages older than this message id. after: return up to ~100 messages newer than this message id. filter_internal_messages: when true, excludes private notes and activity messages. Returns {meta:{contact, assignee, ...}, payload:[message,...]}.
Reply To Conversation
Post a message to a conversation — a customer-visible reply or an internal note. conversation_id: the conversation display id. content: the message text. private: when true, creates an internal note (not sent to the customer) instead of a reply. message_type: "outgoing" (default, agent -> customer). "incoming" is only accepted on API-channel inboxes and will otherwise be rejected. Returns the created message object.
Assign Conversation
Assign a conversation to an agent and/or a team. conversation_id: the conversation display id. assignee_id: id of the agent to assign; pass 0 to unassign the agent. team_id: id of the team to assign; pass 0 to unassign the team. Provide at least one. Returns the assigned agent/team object (or {} when unassigned).
Set Conversation Status
Resolve, reopen, mark pending, or snooze a conversation. conversation_id: the conversation display id. status: one of "resolved", "open", "pending", "snoozed". Always required — sending no status would silently flip open<->resolved. snoozed_until: ISO8601 timestamp; only used (and required) when status is "snoozed". Returns {payload:{success, conversation_id, current_status, snoozed_until}}.
Set Conversation Priority
Set (or clear) a conversation's priority. conversation_id: the conversation display id. priority: one of "urgent", "high", "medium", "low", or null to clear it. Returns {} on success.
Add Conversation Labels
Set the labels on a conversation. conversation_id: the conversation display id. labels: the complete list of label titles. This REPLACES the conversation's current labels (it is not additive) — to add one, first read the existing labels and send the union. Returns {payload:[label,...]}.
List Contacts
List contacts in the account (15 per page). page: 1-based page number. sort: a sortable field (name, email, phone_number, last_activity_at, created_at, company_name, city, country); prefix with "-" for descending, e.g. "-last_activity_at". labels: contact label titles; matches contacts having ANY of them. Returns {meta:{count, current_page}, payload:[contact,...]}.
Search Contacts
Search contacts by name, email, phone number, or identifier. query: the text to search for. Returns {meta:{count, current_page, has_more}, payload:[contact,...]}.
Filter Contacts
Advanced contact filtering with structured predicates. payload: a list of predicate objects, each shaped like {"attribute_key": "email", "filter_operator": "contains", "values": ["@acme"], "query_operator": "and"}. page: 1-based page number. Returns {meta:{count, current_page}, payload:[contact,...]}.
Create Contact
Create a new contact in the account. Provide at least one identifying field (name, email, phone_number, or identifier). phone_number should be in E.164 form (e.g. "+14155550100"). custom_attributes: arbitrary key/value metadata for the contact. Returns {payload:{contact:{...}, contact_inbox:{...}}}.
Update Contact
Update an existing contact. contact_id: the contact's database id (from a list/search result's `id`, NOT a conversation display id). Only the fields you pass are changed. custom_attributes are MERGED into the existing ones (existing keys you don't send are preserved). Returns {payload:{contact...}}.
List Labels
List the account's labels with their numeric ids and titles. Use this to resolve the label ids that preview_campaign_audience / draft_campaign need (they take numeric label ids, not titles). Returns {payload:[{id, title, description, color, ...}]}.
Create Label
Create an account label (so it can be used as a campaign audience or a filter). Contact/conversation tagging alone does not define a reusable account label — a campaign audience needs a real label (with an id). Create it here first, then tag contacts with the same title (add_contact_labels) and target it by id (preview_campaign_audience / draft_campaign). title: a SINGLE TOKEN, not a phrase. It is auto-lowercased and must match letters/numbers plus hyphen/underscore only — NO spaces, minimum
List Inboxes
List the account's inboxes (channels) — id, name, channel_type, and provider. Use this to find the inbox_id for a campaign (draft_campaign), a WhatsApp template action, or a flow-agent inbox attachment. For a WhatsApp Cloud (WABA) inbox, channel_type is "Channel::Whatsapp" and provider is "whatsapp_cloud". Returns {payload:[{id, name, channel_type, provider}]} (channel secrets are never exposed to an agent token).
Add Contact Labels
Set the labels on a contact. contact_id: the contact's database id. labels: the complete list of label titles. This REPLACES the contact's current labels (not additive). Returns {payload:[label,...]}.
Get Report Summary
KPI summary for a time window, plus the equivalent prior window. since / until: UNIX epoch SECONDS as strings (e.g. "1719792000"), NOT ISO dates. report_type: the grouping — "account" (default, whole account) or one of "agent"/"inbox"/"label"/"team" together with entity_id to scope to a single one. entity_id: the agent/inbox/label/team id; required only when report_type is not "account". Returns {conversations_count, incoming_messages_count, outgoing_messages_count, avg_first_response_time,
Get Report Timeseries
Time-bucketed values for a single metric. metric: e.g. conversations_count, incoming_messages_count, avg_first_response_time, resolutions_count, reply_time. since / until: UNIX epoch SECONDS as strings. group_by: bucket size, e.g. "day", "week", "month". report_type: the grouping — "account" (default) or "agent"/"inbox"/"label"/"team" with entity_id. entity_id: the agent/inbox/label/team id; required only when report_type is not "account". Returns a list of {value, timestamp} buckets.
Get Conversation Counts
Conversation count metrics grouped by a dimension. report_type: one of "account", "agent", "inbox", "label", "team" (required). Returns the conversation-count metrics for that grouping.
Get Entity Summary
Per-entity leaderboard summary (one aggregated row per agent/team/inbox/label/channel). entity: one of "agent", "team", "inbox", "label", "channel". ("channel" is capped to a 6-month range by the API.) since / until: UNIX epoch SECONDS as strings. Returns a list of rows, one per entity, with its aggregated metrics.
Get Live Reports
Current live conversation counts (a real-time snapshot, no time window). team_id: optionally restrict to a single team. Returns {open, unattended, unassigned, pending}.
Get your MCP into directories
A working endpoint is step one. Directory coverage is the coordinated launch across ChatGPT, Claude, Cursor, the MCP Registry, and community indexes.
Directory coverage for brandsSAPOT AI is an AI-powered sales enablement platform that helps organizations standardize sales processes. We transform offline and in-person sales conversations into actionable insights.
Use the MCP endpoint listed on this page in your MCP client configuration. One-click install pills support Claude, Cursor, VS Code, and other hosts. Copy the remote MCP URL if your client needs a manual entry.
Operate SAPOT.AI - Sales Assistant Performance Optimization Tool? Verify ownership to take over this directory entry.
This server appears in the MCPBundles directory. Verify you operate it to take over the listing — name, description, logo, contact email, and skill content. We email a 6-digit code to a maintainer address your server publishes in /.well-known/security.txt or /.well-known/mcpbundles.json. Free, takes about a minute.
MCPBundles probed 60 tools on the live server. The tool list on this page reflects what was discovered at the last refresh — connect your client to see the full set available to your session.
SAPOT.AI - Sales Assistant Performance Optimization Tool may require signing in to the provider before tools can run. Connect through MCPBundles or your MCP client and complete any provider login when prompted.
MCPBundles is an independent platform built on the open Model Context Protocol standard. Not affiliated with Anthropic PBC or Claude.