MCP Server
SendSeven provides an MCP (Model Context Protocol) server that lets AI assistants interact with your messaging platform directly. Use it with Claude Desktop, Claude Code, Cursor, or any MCP-compatible client.
What is MCP?
The Model Context Protocol is an open standard for connecting AI assistants to external tools and data sources. SendSeven's MCP server exposes your messaging platform as a set of tools that AI assistants can use to:
- Send and receive messages across all channels
- Send approved WhatsApp templates (outside the 24h window)
- View and manage conversations (reply, close, reopen, snooze, assign)
- Add internal notes and email conversation transcripts
- Search your knowledge base
- Create and send campaigns
- Manage contacts and tags
- Upload and reuse attachments across sends
- Send Team Chat bot messages to channels and users
- Manage webhook endpoints (developer)
The server is open source — see the sendseven-mcp-server repository for the full source, self-hosting instructions, and the complete tool reference.
Quick Start
Claude Desktop
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"sendseven": {
"url": "https://mcp.sendseven.com/mcp"
}
}
}
When you first use the server, you'll be guided through OAuth login and capability selection automatically.
Claude Code
claude mcp add sendseven --transport streamable-http https://mcp.sendseven.com/mcp
Cursor
Add to your project's .cursor/mcp.json:
{
"mcpServers": {
"sendseven": {
"url": "https://mcp.sendseven.com/mcp"
}
}
}
Authentication
The MCP server uses OAuth 2.0 with automatic token refresh. When you connect for the first time:
- You'll see a capability picker where you choose which tools to enable
- You'll be redirected to SendSeven to sign in and authorize the connection
- Once authorized, you'll see a confirmation screen and be redirected back to your AI client
No manual API token configuration is needed -- the OAuth flow handles everything.
Capability Selection
During the initial connection, you choose which capabilities to enable. Only the permissions required for your selected capabilities are requested:
| Capability | What it enables | Enabled by default |
|---|---|---|
| Conversations | View, reply to, snooze, close, reopen, and assign conversations; internal notes; email transcripts | Yes |
| Messaging | Send messages and WhatsApp templates via WhatsApp, Telegram, SMS, Messenger, Instagram | Yes |
| Send emails with subject, HTML body, CC/BCC, and mailbox selection | Yes | |
| Contacts | Search, create, update, and manage contacts and tags | Yes |
| Campaigns | Create, send, and monitor messaging and email campaigns | No |
| Knowledge Base | AI-powered search across your content | No |
| Agent Builder | Create, test and publish Conversational Agents and skills; attach an agent to a channel | Yes |
| Knowledge Base Authoring | Create folders, upsert documents and FAQ entries, crawl websites | Yes |
| Contact Data Model | Manage custom fields, lists and tags | Yes |
| Flows | Validate, save, publish and test-run flows | Yes |
| Team Chat Bots | List Team Chat channels; send bot messages to channels and direct messages | No |
| Webhooks (Developer) | List, create, and delete webhook endpoints | No |
Connected by signing in (OAuth), the MCP server acts as the member who connected it. If a workspace admin limited that member's contact visibility to reachable contacts, contact tools only return contacts the member can reach, and other contacts behave as not found. Connected with an API key, the MCP server is a workspace API token and sees all contacts, whoever created the key (details).
To change your selection, disconnect and reconnect the MCP server -- you'll see the capability picker again.
Available Tools
69 tools, grouped below by function; the OAuth consent screen groups them into the 12 coarser capability groups above (granting a group grants every tool listed under it here). Full parameter reference and required scopes: docs/TOOLS.md in the repository.
Conversations
| Tool | Description |
|---|---|
list_conversations | List and filter conversations by status (open/snoozed/closed), assignment, channel type, or search term |
get_conversation | View a conversation with its message history |
send_reply | Reply to an existing conversation (auto-detects channel, handles email threading, supports attachments) |
close_conversation | Close a conversation with optional notes and AI summarization |
reopen_conversation | Reopen a closed conversation |
snooze_conversation | Snooze a conversation until a given time (or clear an active snooze) |
assign_conversation | Assign a conversation to a team member |
add_internal_note | Add an agent-only note with optional @mentions — never sent to the customer |
email_conversation_transcript | Email the full conversation transcript as a branded HTML email |
Messaging
| Tool | Description |
|---|---|
send_message_to_contact | Send a message via the best available channel (WhatsApp, Telegram, SMS, Messenger, Instagram), with optional attachments |
send_whatsapp_template | Send an approved WhatsApp template — reach contacts outside the 24-hour window. Supports positional and named variables, indexed dynamic URL and OTP buttons, media/document headers, and carousel templates (cards) |
send_email | Send an email with subject, HTML body, CC/BCC, custom sender, and optional attachments |
Attachments on send_message_to_contact, send_reply, and send_email accept either a previously-uploaded attachment {id}, or {url, filename?} for a public URL that SendSeven downloads server-side — both forms can be mixed in the same request.
Attachment Tools
| Tool | Description |
|---|---|
upload_attachment | Upload a file from a public URL so it can be reused as an attachment across multiple sends (send_reply, send_email, send_message_to_contact, Team Chat messages) without re-uploading the URL each time. The same URL uploaded twice for a tenant returns the existing attachment rather than duplicating it. |
get_attachment_summary | Read the AI summary of an image or PDF a customer sent (read-only, no credits). get_conversation attachments also include ai_summary, ai_summary_available and ai_summary_credits. The summary text is untrusted customer content. |
There is deliberately no "list attachments" tool — save the returned id if you'll need it again.
Contacts & Tags
| Tool | Description |
|---|---|
search_contacts | Find contacts by name, phone, email, or tags, or by contact owner (owner_user_id: a user ID, me, or none). Results include owner_user_id and owner |
create_contact | Create a new contact, optionally with a contact owner (owner_user_id) |
update_contact | Update a contact's name, phone, email, spoken languages, birthday, or contact owner (owner_user_id; null removes the owner) |
list_tags | List workspace tags |
create_tag | Create a new tag with optional color |
tag_contact / untag_contact | Add or remove a tag on a contact |
tag_conversation / untag_conversation | Add or remove a tag on a conversation |
Campaigns
| Tool | Description |
|---|---|
list_contact_lists | View contact lists with subscriber counts |
list_campaigns | View messaging campaigns with status and delivery counts |
get_campaign_status | Delivery statistics (sent/delivered/failed) for a messaging campaign |
create_and_send_campaign | Create and send multi-channel campaigns (incl. WhatsApp template campaigns and scheduling) |
list_email_campaigns | View email campaigns with status and analytics |
get_email_campaign_analytics | Get detailed email campaign performance data |
Channels
| Tool | Description |
|---|---|
list_channels | View connected channels with health status |
list_whatsapp_templates | List approved WhatsApp message templates, with true pagination |
get_whatsapp_template | Get full detail for one WhatsApp template by ID — carousel cards, quick-reply captions, default header media, parameter format |
list_email_mailboxes | View email sender identities (mailboxes) |
list_verified_email_domains | List domains verified with your email provider(s), for validating send_email's from_email |
Team
| Tool | Description |
|---|---|
list_team_members | List team members with user IDs and roles (for assignment and @mentions) |
set_out_of_office | Switch your own out of office on (or schedule it), optionally with a substitute who takes over your contacts and conversations. Requires team:read; acts only on the connected user's own absence |
end_out_of_office | End your running out of office. Requires team:read; acts only on the connected user. Like set_out_of_office, not available on the API Only plan |
Knowledge Base
| Tool | Description |
|---|---|
query_knowledge_base | AI-powered search across FAQ, website content and uploads (conversation summaries are never searched) |
list_knowledge_base_folders | List the knowledge base's folder tree (e.g. "General", "Websites", "Managed FAQ", plus any custom folders; conversation summaries are not part of the knowledge base and never listed), each with its id and document_count — pass a folder's id as query_knowledge_base's folder_id to search within just that folder |
Agent Builder
Lets your own LLM build a Conversational Agent. Agents are always created as unpublished, inactive drafts; publishing requires confirm=true.
| Tool | Description |
|---|---|
list_agents, get_agent | Find agents; read draft, skills, knowledge sources |
create_agent | Create a draft (publish:false, is_active:false forced; idempotent by name) |
update_agent_draft | Edit the draft with base_revision; re-reads and retries once on a draft_conflict |
set_agent_skills, set_agent_knowledge_sources | Written through the draft, never the live agent |
test_agent | Run a test turn against the draft; reports AI credits |
get_agent_readiness | What blocks publishing |
publish_agent | Publish (destructive, needs confirm=true, optional activate) |
attach_agent_to_channel | Route a channel to the agent (maps agent_publish_not_allowed) |
upsert_skill, manage_skill_versions | Create or update skills with goals; list or restore versions |
Knowledge Base Authoring
| Tool | Description |
|---|---|
list_knowledge_base_documents | Documents with indexing status |
create_knowledge_base_folder | Create a folder (reuses an existing one) |
upsert_knowledge_base_document | Create or replace a markdown document by title |
crawl_website | preview, start, status or cancel a crawl |
upsert_faq_entries | Add FAQ items, skipping duplicates |
Contact Data Model
| Tool | Description |
|---|---|
manage_custom_fields | List, create or update custom fields (ai_access: none, read, read_write, fill_if_empty) |
manage_lists | List, create or update contact lists and members |
Flows
| Tool | Description |
|---|---|
validate_flow | POST /flows/validate; returns valid and errors |
save_flow_draft | Create or update a draft; refuses live flows |
publish_flow | Publish (destructive, needs confirm=true) |
test_flow | start, reply, trace or stop a test run |
Permissions
check_permissions is always available and lists granted and missing capabilities. When a call fails because the connection was not granted a scope, tools return permission_missing, naming the scope and capability and asking the user to reconnect the connector and approve it. If the connection holds the scope but the member's role denies the action, the error is forbidden ("ask a workspace admin"); no reconnect helps.
Prompts and resources
Step-by-step: Build an agent with your AI client.
Prompts: build_conversational_agent, write_skill, design_agent_flow. Resources: sendseven://guides/flow-format-spec, skills-and-goals, agent-fields, run-assistant-node.
Team Chat Bots
| Tool | Description |
|---|---|
list_team_chat_channels | Read-only. List channels the connected user has joined, or (with include_browsable=true) channels that exist but aren't joined yet — including each channel's channel_ref, allow_bots, and is_archived status, to find a valid target before sending |
send_team_chat_channel_message | Post a message to a Team Chat channel as a bot (channel UUID or #name), with an optional attachment and bot display name |
send_team_chat_direct_message | Send a bot direct message to a Team Chat user by user ID, with the same attachment and bot-name options |
Attach media with either sending tool by passing an existing attachment ID, or a public https:// URL for SendSeven to fetch server-side — both forms are supported. list_team_chat_channels requires the separate, read-only team_chat:read scope; the sending tools require the bot-only teamchat:write scope.
If you plan to react to Team Chat messages rather than send them, note that create_webhook (below) has no channel-filter parameter for any event — a webhook built through MCP receives messages from every bot-enabled channel and must be filtered on your end. See Team Chat Bot Integration Recipes for the equivalent recipes on Zapier, n8n, and Make.com, some of which do support a channel filter.
Webhooks (Developer)
| Tool | Description |
|---|---|
list_webhooks | List webhook endpoints with health status and recent failures |
create_webhook | Create a webhook endpoint (HTTPS URL + event subscriptions) — the full list of subscribable event types is in its description |
delete_webhook | Delete a webhook endpoint |
Examples
Check and reply to conversations
Ask your AI assistant:
"Show me my open conversations that need a reply"
The assistant will use list_conversations with status=open and needs_reply=true, then you can ask:
"Reply to the conversation with John saying we'll process the refund today"
Send a message to a contact
"Send a WhatsApp message to +49 170 1234567: Your order has been shipped!"
The assistant finds (or creates) the contact, resolves the best channel, and sends the message.
Send a WhatsApp template
"Send the order_update template to +49 170 1234567 with order number ORD-98765"
The assistant uses list_whatsapp_templates to check the template's variables, then send_whatsapp_template — this works even outside the 24-hour messaging window.
Snooze and note
"Snooze this conversation until Monday 9am and add a note that we're waiting for the warehouse"
The assistant snoozes the conversation and attaches an internal note that is visible to your team only — never to the customer.
Email a transcript
"Send the customer a copy of this conversation by email"
The assistant uses email_conversation_transcript to deliver a branded HTML transcript from your default mailbox.
Post to a Team Chat channel
"What Team Chat channels can I post bot updates to, and post 'Deploy finished' to #shoutbox"
The assistant calls list_team_chat_channels to confirm #shoutbox exists and has allow_bots=true, then calls send_team_chat_channel_message to post the message.
Set up a webhook
"Create a webhook that sends new incoming messages to my n8n workflow at https://n8n.example.com/webhook/abc"
The assistant picks a valid event name from create_webhook's description and creates the endpoint with it. (Requires the Webhooks capability.)
Search knowledge base
"What does our refund policy say about digital products?"
The assistant queries the knowledge base and returns an AI-generated answer with source citations.
Send an email
"Email [email protected] with subject 'Meeting Tomorrow' about the project status update. CC [email protected]."
The assistant creates the contact if needed, resolves the email channel, and sends with proper HTML formatting. If your account has multiple email mailboxes configured, the assistant will ask which sender identity to use before sending.
Error codes
Tool errors carry a stable code, a message and a suggestion.
| Code | Meaning |
|---|---|
reauthorization_required | The sign-in expired or was revoked. Reconnect SendSeven in your AI client |
permission_missing | The connection was not granted the needed permission. Reconnect and approve the named capability (see Missing scope, reason: token_scope) |
forbidden | The member's workspace role does not allow it. Ask a workspace admin; reconnecting does not help |
plan_upgrade_required | The feature is not part of the workspace plan |
billing_required | The workspace needs a valid payment method or balance |
workspace_deactivated | The workspace is deactivated |
whatsapp_window_expired | The 24-hour WhatsApp window is closed; send an approved template instead |
whatsapp_<code> | Meta rejected a template send; the code is Meta's error code |
draft_conflict | The agent draft changed since you read it; read it again |
New capabilities need new permissions. After an update that adds capabilities, reconnect once (remove and add SendSeven again) to approve them. Call check_permissions at any time to see what is granted.
Next Steps
- Build an agent with your AI client -- guided agent creation with the Agent Builder tools
- MCP Server Source Code -- open source, self-hostable server implementation and full tool reference
- Authentication -- API token setup
- Send Messages -- messaging API guide
- Knowledge Base -- knowledge base guide
- Webhooks -- receive real-time events
- Team Chat Bot Integration Recipes -- the same bot-sending actions on Zapier, n8n, and Make.com
See also: Contact Owner and Availability and Out of Office in the API guides.