Skip to main content

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:

  1. You'll see a capability picker where you choose which tools to enable
  2. You'll be redirected to SendSeven to sign in and authorize the connection
  3. 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:

CapabilityWhat it enablesEnabled by default
ConversationsView, reply to, snooze, close, reopen, and assign conversations; internal notes; email transcriptsYes
MessagingSend messages and WhatsApp templates via WhatsApp, Telegram, SMS, Messenger, InstagramYes
EmailSend emails with subject, HTML body, CC/BCC, and mailbox selectionYes
ContactsSearch, create, update, and manage contacts and tagsYes
CampaignsCreate, send, and monitor messaging and email campaignsNo
Knowledge BaseAI-powered search across your contentNo
Agent BuilderCreate, test and publish Conversational Agents and skills; attach an agent to a channelYes
Knowledge Base AuthoringCreate folders, upsert documents and FAQ entries, crawl websitesYes
Contact Data ModelManage custom fields, lists and tagsYes
FlowsValidate, save, publish and test-run flowsYes
Team Chat BotsList Team Chat channels; send bot messages to channels and direct messagesNo
Webhooks (Developer)List, create, and delete webhook endpointsNo

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​

ToolDescription
list_conversationsList and filter conversations by status (open/snoozed/closed), assignment, channel type, or search term
get_conversationView a conversation with its message history
send_replyReply to an existing conversation (auto-detects channel, handles email threading, supports attachments)
close_conversationClose a conversation with optional notes and AI summarization
reopen_conversationReopen a closed conversation
snooze_conversationSnooze a conversation until a given time (or clear an active snooze)
assign_conversationAssign a conversation to a team member
add_internal_noteAdd an agent-only note with optional @mentions — never sent to the customer
email_conversation_transcriptEmail the full conversation transcript as a branded HTML email

Messaging​

ToolDescription
send_message_to_contactSend a message via the best available channel (WhatsApp, Telegram, SMS, Messenger, Instagram), with optional attachments
send_whatsapp_templateSend 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_emailSend 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​

ToolDescription
upload_attachmentUpload 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_summaryRead 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​

ToolDescription
search_contactsFind 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_contactCreate a new contact, optionally with a contact owner (owner_user_id)
update_contactUpdate a contact's name, phone, email, spoken languages, birthday, or contact owner (owner_user_id; null removes the owner)
list_tagsList workspace tags
create_tagCreate a new tag with optional color
tag_contact / untag_contactAdd or remove a tag on a contact
tag_conversation / untag_conversationAdd or remove a tag on a conversation

Campaigns​

ToolDescription
list_contact_listsView contact lists with subscriber counts
list_campaignsView messaging campaigns with status and delivery counts
get_campaign_statusDelivery statistics (sent/delivered/failed) for a messaging campaign
create_and_send_campaignCreate and send multi-channel campaigns (incl. WhatsApp template campaigns and scheduling)
list_email_campaignsView email campaigns with status and analytics
get_email_campaign_analyticsGet detailed email campaign performance data

Channels​

ToolDescription
list_channelsView connected channels with health status
list_whatsapp_templatesList approved WhatsApp message templates, with true pagination
get_whatsapp_templateGet full detail for one WhatsApp template by ID — carousel cards, quick-reply captions, default header media, parameter format
list_email_mailboxesView email sender identities (mailboxes)
list_verified_email_domainsList domains verified with your email provider(s), for validating send_email's from_email

Team​

ToolDescription
list_team_membersList team members with user IDs and roles (for assignment and @mentions)
set_out_of_officeSwitch 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_officeEnd 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​

ToolDescription
query_knowledge_baseAI-powered search across FAQ, website content and uploads (conversation summaries are never searched)
list_knowledge_base_foldersList 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.

ToolDescription
list_agents, get_agentFind agents; read draft, skills, knowledge sources
create_agentCreate a draft (publish:false, is_active:false forced; idempotent by name)
update_agent_draftEdit the draft with base_revision; re-reads and retries once on a draft_conflict
set_agent_skills, set_agent_knowledge_sourcesWritten through the draft, never the live agent
test_agentRun a test turn against the draft; reports AI credits
get_agent_readinessWhat blocks publishing
publish_agentPublish (destructive, needs confirm=true, optional activate)
attach_agent_to_channelRoute a channel to the agent (maps agent_publish_not_allowed)
upsert_skill, manage_skill_versionsCreate or update skills with goals; list or restore versions

Knowledge Base Authoring​

ToolDescription
list_knowledge_base_documentsDocuments with indexing status
create_knowledge_base_folderCreate a folder (reuses an existing one)
upsert_knowledge_base_documentCreate or replace a markdown document by title
crawl_websitepreview, start, status or cancel a crawl
upsert_faq_entriesAdd FAQ items, skipping duplicates

Contact Data Model​

ToolDescription
manage_custom_fieldsList, create or update custom fields (ai_access: none, read, read_write, fill_if_empty)
manage_listsList, create or update contact lists and members

Flows​

ToolDescription
validate_flowPOST /flows/validate; returns valid and errors
save_flow_draftCreate or update a draft; refuses live flows
publish_flowPublish (destructive, needs confirm=true)
test_flowstart, 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​

ToolDescription
list_team_chat_channelsRead-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_messagePost 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_messageSend 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)​

ToolDescription
list_webhooksList webhook endpoints with health status and recent failures
create_webhookCreate a webhook endpoint (HTTPS URL + event subscriptions) — the full list of subscribable event types is in its description
delete_webhookDelete 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.

CodeMeaning
reauthorization_requiredThe sign-in expired or was revoked. Reconnect SendSeven in your AI client
permission_missingThe connection was not granted the needed permission. Reconnect and approve the named capability (see Missing scope, reason: token_scope)
forbiddenThe member's workspace role does not allow it. Ask a workspace admin; reconnecting does not help
plan_upgrade_requiredThe feature is not part of the workspace plan
billing_requiredThe workspace needs a valid payment method or balance
workspace_deactivatedThe workspace is deactivated
whatsapp_window_expiredThe 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_conflictThe 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​

See also: Contact Owner and Availability and Out of Office in the API guides.