superchat
Connects local MCP clients to the Superchat API for read-only access by default, with optional write/delete tools when enabled.
Identify the authenticated Superchat user and workspace.
Browse channels, inboxes, users, labels, contact lists, custom attributes, templates, and uploaded files.
List, get, and exact-search contacts by email, phone, Instagram, or custom attribute; inspect handles, attributes, conversations, and contact-list memberships.
List and get conversations, internal notes, and export job status/download links.
Retrieve conversation message history when the workspace/API key has Enterprise access.
With writes enabled: create/update contacts, add contact-list membership, update conversations, create/update notes, create exports, and send text, template, media, or email messages.
With deletes enabled: delete contacts, remove contact-list membership, delete conversations, and delete notes.
Click 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., "@superchat Find contact jane@example.com and show their conversations."
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.
Superchat MCP
An unofficial MCP server that connects Claude Desktop and other local MCP clients to the public Superchat API.
Search contacts, inspect their cross-channel conversations, manage contact-list membership, review message history when Enterprise access is available, and send messages using your own Superchat API key. Each user runs their own process. No hosted service, account with this project, or database is required.
This project is not affiliated with, endorsed by, or supported by Superchat.
Quick start with Claude Desktop
Requires Node.js 22+, npm, and a Superchat workspace with API access.
From a checkout of this repository:
npm ci
npm run buildCreate and name an API key in Superchat under Settings → Integrations → Explore; scroll to the API key area. See Superchat authentication.
On macOS, save the key in Keychain from your own Terminal. The prompt hides your input; the key is not part of the command, Claude config, or server environment:
node /absolute/path/to/superchat-mcp/dist/cli.js loginDo not paste the API key into an AI chat. login is interactive and refuses to run without a terminal. On other systems, use the SUPERCHAT_API_KEY environment variable as a fallback.
Open Claude Desktop's Settings → Developer → Edit Config and merge this entry into claude_desktop_config.json:
{
"mcpServers": {
"superchat": {
"command": "node",
"args": ["/absolute/path/to/superchat-mcp/dist/cli.js"],
"env": {
"SUPERCHAT_ENABLE_WRITES": "false",
"SUPERCHAT_ENABLE_DELETES": "false"
}
}
}
}Replace the absolute path, then fully quit and reopen Claude Desktop. On macOS, run login first and remove any old SUPERCHAT_API_KEY entry from the config. If Claude cannot find node, set command to its absolute executable path. On non-macOS systems, configure SUPERCHAT_API_KEY through the client's environment settings. An editable example is in examples/claude-desktop.json.
Use node /path/to/superchat-mcp/dist/cli.js status to see which credential source is active without showing the key. Use node /path/to/superchat-mcp/dist/cli.js logout to remove the saved macOS Keychain entry. The first Keychain access may prompt macOS to allow the security utility to read it.
This is a local stdio integration. Add it through the desktop application's developer configuration, not a remote connector URL. The official MCP local-server guide explains the connection model.
Try:
Find the contact with email jane@example.com and show their conversations and internal notes.
List our WhatsApp channels and the templates available for a channel. Do not send anything yet.
Enable writes
Reading is enabled by default. To create/update contacts, change conversations, add notes, create exports, or send messages, add this to the server's env configuration and restart the client:
"SUPERCHAT_ENABLE_WRITES": "true"Deletion requires both write access and:
"SUPERCHAT_ENABLE_DELETES": "true"Disabled tools are not registered and cannot be called directly. Tool annotations also tell the client which actions write or delete data; the client remains responsible for its user-approval experience. Enabling writes is not blanket permission for the assistant to send messages.
Related MCP server: sendpilot-actions
Available tools
There are 27 read tools by default, including the Enterprise-only conversation-message history endpoint, 11 optional write tools, and 4 optional delete tools. Every tool name starts with superchat_.
Group | Read tools | Write tools | Delete tools |
Workspace |
| — | — |
Catalogs |
| — | — |
Contacts |
|
|
|
Contact metadata |
| — | — |
Conversations |
|
|
|
Internal notes |
|
|
|
Exports |
|
| — |
Templates |
| — | — |
Files |
| — | — |
Messaging | — |
| — |
The resource superchat://guide explains discovery, safe update semantics, messaging windows, pagination and exports to the assistant.
Superchat assigns each person a contact ID and can associate that contact with conversations on several channels. A conversation is one thread on one channel. Contact lists group contacts for segmentation and campaigns; labels organize conversations. list_contact_lists and get_contact_list return list metadata (ID, name and URL), not its participants. Use list_contact_lists_for_contact to see a specific contact's memberships, add_contact_to_contact_list to add membership, and remove_contact_from_contact_list to remove membership without deleting either the contact or the list.
list_conversation_messages is registered by default because only Superchat can determine whether the configured workspace/API key has Enterprise access. When message content or timestamps matter, call it for the relevant conversation rather than estimating dates from conversation metadata. If the API returns 403, report that message-history access is unavailable and recommend contacting Superchat Support to request access. No local Enterprise setting or restart is needed.
API behavior and limits
Pagination: list calls return one page (25 records by default, up to 100). The Enterprise message-history endpoint defaults to 20. Pass the returned
pagination.next_cursorasafter, orprevious_cursorasbefore. The server never silently downloads every page or follows API-provided URLs.Contact search: exactly one equality expression for
mail,phone,instagram, orcustom_attribute. Custom attributes require anidentifier. There is no fuzzy name search in this wrapper.Contact handles: a person may have handles on several channels, but the public create/update contact schema lets API clients set email and phone handles. Platform-owned IDs such as Instagram or Messenger IDs are assigned by those platforms. Superchat generates the contact ID.
Contact lists: list/get endpoints expose list metadata only, not list members. Membership is inspected per contact and can be added or removed separately; removing membership does not delete the contact or list.
Conversation lookup:
list_contact_conversationsreturns the contact's conversation threads and their metadata across channels.get_conversationreads one thread's metadata; neither returns messages.Contact updates: the documented schema requires
first_name,last_name, andgender. Read the contact and preserve values you want to keep; explicitnullclears these fields. Suppliedhandlesandcustom_attributesreplace the entire lists. Omit them to leave them unchanged.Conversation updates:
assigned_usersandlabelsspecify complete lists. An empty array clears the list. Conversation status and the channel's messagingtime_windoware separate concepts.Sending: uses one recipient identifier plus
channel_id, notconversation_id.in_reply_tois a message ID. Check WhatsApp template approval, channel and variables before sending. Successful submission is not proof of delivery.Message history:
list_conversation_messagesuses a documented, Enterprise-only endpoint and is registered by default so a real request can discover the workspace/API key's access. A403includes a recommendation to contact Superchat Support to request access. The paginated result contains inbound/outbound messages with timestamps and supports optionalcreated_afterandcreated_beforeISO 8601 filters. It is separate from internal notes. Conversation exports also return an asynchronous job's download link; they do not download or parse it.Media: sending uses already uploaded file IDs. Local file upload and downloads are outside this version's scope.
Other endpoints: webhook administration, template creation, custom attribute administration, analytics and interactive WhatsApp message types are not implemented in this version. This is a curated integration, not full API coverage.
The API uses X-API-KEY against https://api.superchat.com/v1.0. The documented rate limit is 2,500 requests per workspace per five minutes, shared across its API keys.
GET requests retry network failures and HTTP 429/502/503/504 up to the configured limit, within a total request deadline. Retry-After is respected; waits over 30 seconds are returned to the client instead of retrying early. Writes are never automatically retried, including POST contact search. After a timed-out send, verify its outcome before repeating it. Responses larger than 5 MiB are rejected.
Configuration
Variable | Default | Meaning |
| unset | Fallback credential for non-macOS and CI; macOS Keychain takes precedence |
|
| Bypass Keychain lookup and use only |
|
| Register the write tools |
|
| Register delete tools; requires writes |
|
| Total request deadline, including retries/body reading; 1–300000 ms |
|
| Maximum GET retries after the first attempt; 0–5 |
On macOS, superchat-mcp login saves the API key in Keychain and the server reads it at startup before checking SUPERCHAT_API_KEY. superchat-mcp status reports only the source; superchat-mcp logout removes the Keychain entry. Other systems and CI can continue to use SUPERCHAT_API_KEY. Set SUPERCHAT_DISABLE_KEYCHAIN=true to use only the environment variable, including for credential-free discovery on a Mac with a saved key. Boolean settings accept only true or false. Invalid configuration fails startup. Restart the MCP process after changing settings.
Without an API key the server can start, advertise its tools and return the guide. API calls then return a MISSING_API_KEY tool error. This permits credential-free discovery and registry inspection.
For non-macOS or CI terminal development, copy .env.example to .env, fill it locally, and explicitly load it:
node --env-file=.env dist/cli.jsThe server command waits for MCP input; it is not an interactive terminal application. It does not implicitly load .env from an arbitrary working directory. Use login, logout, or status directly in your terminal; never pass the API key as a command argument.
Data handling
The server does not persist API responses, log message content, or send telemetry. It passes selected results to the connected MCP client, which may send them to its model provider. Configure that client according to your organization's requirements.
Keep API keys out of source control, command arguments, and AI chats. On macOS, the Keychain is checked before the environment fallback, so remove any old key from the MCP client's env block after running login. The key is read by a local security subprocess and is never included in MCP tool calls or logged by this server. Superchat keys currently grant global read/write access; this server's local tool gates do not change the key's upstream permissions. API errors redact the configured key. Redirects and arbitrary request URLs are rejected. Returned contact, note and template text is treated as untrusted content, not instructions.
Development
npm ci
npm run check
npm run devcheck runs formatting, strict TypeScript checks, offline tests and a production build. Tests cover the HTTP client, access gates, request schemas, cursor validation, errors, and compiled stdio startup using both legacy and current MCP clients. They never access a real Superchat workspace or send customer messages.
The saved public API contract records source URLs and the retrieval date. Every tool's representative request is validated against it. See docs/api-contract.md for provenance and maintenance.
src/
cli.ts stdio entry point
credentials.ts Keychain lookup and environment fallback
server.ts transport-independent server factory
config.ts environment validation
client.ts authenticated HTTP client, deadlines, retries, errors
guide.ts assistant-readable workflow guide
tools/ catalogs, contacts, conversations, messages
test/ unit, protocol, CLI and public-contract tests
examples/ Claude Desktop configurationPackaging and publication
This checkout is ready to build and package locally; it has not been published to npm as part of its creation. Do not assume an existing registry package with the same name belongs to this project.
npm run check
npm pack --dry-run
npm packThe tarball contains the compiled server and documentation. Maintainers should set the final npm name, repository URL and ownership before publishing. Once released under that verified name, clients can use npx instead of a checkout path. No publishing credentials or automatic release workflow are included.
License
MIT. Superchat is a trademark of its respective owner.
Available Tools
26 toolssuperchat_get_channelARead-onlyIdempotent
Read one connected channel's configuration by ID, for example before choosing a channel for a message.
Inputs: channel_id (required).
superchat_get_contactARead-onlyIdempotent
Read one contact's details, handles and custom attributes by ID. Use this before update_contact because supplied handle and attribute arrays replace their full lists.
Inputs: contact_id (required).
superchat_get_contact_listARead-onlyIdempotent
Read a contact list's metadata (ID, name and URL) by ID. This endpoint does not return participants; use list_contact_lists_for_contact for a contact's memberships.
Inputs: contact_list_id (required).
superchat_get_conversationARead-onlyIdempotent
Read one conversation thread's contact, channel, inbox, status and channel-specific messaging time window. Use list_conversation_messages for its message history when Enterprise access is enabled. Conversation status (such as open) does not determine whether a channel's messaging window is open.
Inputs: conversation_id (required).
superchat_get_conversation_exportARead-onlyIdempotent
Check the status of an asynchronous conversation export job and retrieve its download link. Use after create_conversation_export; this tool returns the URL but does not fetch or parse the file.
Inputs: export_id (required), conversation_id (required).
superchat_get_conversation_noteARead-onlyIdempotent
Read one internal note from a conversation by note ID. This does not retrieve a customer message.
Inputs: note_id (required), conversation_id (required).
superchat_get_fileARead-onlyIdempotent
Read metadata for one uploaded file by ID. This does not download its contents.
Inputs: file_id (required).
superchat_get_inboxARead-onlyIdempotent
Read one inbox's details by ID.
Inputs: inbox_id (required).
superchat_get_labelARead-onlyIdempotent
Read one conversation label by ID. Labels apply to conversations, not contacts.
Inputs: label_id (required).
superchat_get_meARead-onlyIdempotent
Identify the Superchat user associated with this API key. Use this to confirm which account the server is connected to.
Inputs: no named parameters.
superchat_get_templateARead-onlyIdempotent
Read one template's content, approval status and positional variables before sending it. Use this instead of list_templates when you already have the template ID.
Inputs: template_id (required).
superchat_get_userARead-onlyIdempotent
Read one workspace user's details by ID.
Inputs: user_id (required).
superchat_list_channelsARead-onlyIdempotent
List one page of connected channels in this workspace, such as WhatsApp, Instagram Direct, Facebook Messenger, SMS, email, Telegram, Live Chat or phone. Use a returned channel_id when sending. Use after or before to continue from a previous page; each call returns only one page.
Inputs: after, limit, before.
superchat_list_contact_conversationsARead-onlyIdempotent
List one page of conversation threads for a contact across its channels. Results are conversation records, not message history; use list_conversation_messages for messages when Enterprise access is enabled.
Inputs: contact_id (required), after, limit, before.
superchat_list_contact_listsARead-onlyIdempotent
List one page of contact lists used to group contacts for segmentation and campaigns. Results contain list metadata (ID, name and URL), not participants; use list_contact_lists_for_contact to find a contact's memberships. Use after or before to continue from a previous page; each call returns only one page.
Inputs: after, limit, before.
superchat_list_contact_lists_for_contactARead-onlyIdempotent
List one page of contact lists that contain this contact. Use this to inspect membership; list_contact_lists and get_contact_list return only list metadata, not participants.
Inputs: contact_id (required), after, limit, before.
superchat_list_contactsARead-onlyIdempotent
List one page of contacts, newest first. For an exact email, phone, Instagram or custom-attribute match, use search_contacts instead of scanning pages.
Inputs: after, limit, before.
superchat_list_conversation_notesARead-onlyIdempotent
List one page of internal notes attached to a conversation. These notes are visible to the team, not customer messages; use list_conversation_messages for message history when Enterprise access is enabled.
Inputs: conversation_id (required), after, limit, before.
superchat_list_conversationsARead-onlyIdempotent
List one page of conversation threads across the workspace. Results contain conversation metadata, not messages, and the public endpoint has no status, inbox or text filter. Use list_contact_conversations to scope the list to one contact.
Inputs: after, limit, before.
superchat_list_custom_attributesARead-onlyIdempotent
List one page of custom contact attributes with their IDs, types and allowed values. Look up an attribute ID here before searching by or updating that attribute.
Inputs: after, limit, before.
superchat_list_filesARead-onlyIdempotent
List one page of metadata for files already uploaded to Superchat. Use file IDs for message attachments; this does not download file contents. Use after or before to continue from a previous page; each call returns only one page.
Inputs: after, limit, before.
superchat_list_inboxesARead-onlyIdempotent
List one page of inboxes that organize conversations in this workspace. Use inbox IDs when routing a conversation. Use after or before to continue from a previous page; each call returns only one page.
Inputs: after, limit, before.
superchat_list_labelsARead-onlyIdempotent
List one page of labels used to organize conversations. Labels belong to conversations, not contacts. Use after or before to continue from a previous page; each call returns only one page.
Inputs: after, limit, before.
superchat_list_templatesARead-onlyIdempotent
List one page of message templates. Filter by channel_id or template type, then inspect approval status and positional variables before sending a template.
Inputs: type, after, limit, before, +2 more.
superchat_list_usersARead-onlyIdempotent
List one page of workspace users. Use their IDs when assigning conversations. Use after or before to continue from a previous page; each call returns only one page.
Inputs: after, limit, before.
superchat_search_contactsARead-onlyIdempotent
Find contacts with one exact equality match on email, phone, Instagram ID or a custom attribute. This is a read-only POST; it does not support fuzzy name search or combining conditions. Use list_contacts to browse instead.
Inputs: field (required), value (required), after, limit, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 26 tools
Each tool targets a distinct resource or granularity (list vs get vs search), and potentially confusable pairs like list_contact_lists vs list_contact_lists_for_contact are explicitly disambiguated in the descriptions. No two tools appear to do the same thing.
Every tool follows the same superchat_<verb>_<noun> pattern with snake_case throughout, using get_ for single-item reads, list_ for paginated reads, and search_ for the one query operation. The naming is predictable and consistent.
26 tools is above the threshold where a tool set becomes too large for easy navigation, and most are simple one-resource list/get pairs that could be consolidated into parameterized read operations. The count adds cognitive load without a matching increase in capability.
The set is entirely read-only: there are no tools to send messages, update contacts, manage conversations, or create/update/delete any resource. The export-status tool even references create_conversation_export, which is not present, creating a dead end and leaving core Superchat workflows unusable.
Related MCP Connectors
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Operate WhatsApp from an agent: read conversations and contacts, send messages, by API key.
MCP server for SuperPhone — contacts, conversations, tags and consent-based text messages.
Connect Chatway, an AI-powered website live chat and customer support platform, to ChatGPT, Claude, Gemini, Cursor, and other AI assistants using MCP. Chatway helps businesses communicate with website visitors, manage customer conversations, and deliver faster support across multiple channels, including website live chat, email, WhatsApp, Instagram, and Facebook Messenger. Native mobile apps for iOS and Android let support teams manage conversations and respond to customers on the go. With Chatway's MCP server, AI agents can access and manage customer support operations. Search and read conversations, send replies, add private notes, resolve and assign chats, manage contacts, retrieve customer information, and search knowledge base articles. Chatway also includes a built-in AI Support Agent for automated customer service, a shared team inbox, support ticket management, a customizable website chat widget, a help center, team management, automated workflows, visitor tracking, and integrations with popular platforms, including WordPress and Shopify. Connect external AI agents to automate customer support, answer customer questions, access conversation history, and streamline support workflows without building custom integrations. Manage your customer support from anywhere using Chatway's web dashboard or mobile apps. The hosted MCP server supports Streamable HTTP and secure OAuth 2.1 authentication with scoped permissions. Available on all Chatway plans, including the Free plan. Conversation limits apply. Website: https://chatway.app Documentation: https://developers.chatway.app/mcp/guides.mcp_overview
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceFacilitates integration of PrivateGPT with MCP-compatible applications, enabling chat functionalities and secure management of knowledge sources and user access.-
- AlicenseNot gradedqualityFmaintenanceSecure local MCP server for SendPilot Lead Database searches and workspace read operations. Exposes tools for creating searches, checking status/results, credits, and campaigns without sending messages or modifying campaigns.MIT
- FlicenseNot gradedqualityDmaintenanceProvides local MCP access to RocketReach's REST API, enabling person and company search, profile lookups, and account management without OAuth.-
- AlicenseNot gradedqualityCmaintenanceEnables programmatic WhatsApp automation through MCP, including sending messages, managing chats and contacts, searching conversation history, and exchanging media files.MIT