Skip to main content
Glama
superchat
by Anou4r

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 build

Create 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 login

Do 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

get_me

—

—

Catalogs

list_channels, get_channel, list_inboxes, get_inbox, list_users, get_user, list_labels, get_label

—

—

Contacts

list_contacts, get_contact, search_contacts, list_contact_conversations, list_contact_lists_for_contact

create_contact, update_contact, add_contact_to_contact_list

delete_contact, remove_contact_from_contact_list

Contact metadata

list_contact_lists, get_contact_list, list_custom_attributes

—

—

Conversations

list_conversations, get_conversation, list_conversation_messages (Enterprise access checked by Superchat)

update_conversation

delete_conversation

Internal notes

list_conversation_notes, get_conversation_note

create_conversation_note, update_conversation_note

delete_conversation_note

Exports

get_conversation_export

create_conversation_export

—

Templates

list_templates, get_template

—

—

Files

list_files, get_file

—

—

Messaging

—

send_text, send_template, send_media, send_email

—

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_cursor as after, or previous_cursor as before. The server never silently downloads every page or follows API-provided URLs.

  • Contact search: exactly one equality expression for mail, phone, instagram, or custom_attribute. Custom attributes require an identifier. 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_conversations returns the contact's conversation threads and their metadata across channels. get_conversation reads one thread's metadata; neither returns messages.

  • Contact updates: the documented schema requires first_name, last_name, and gender. Read the contact and preserve values you want to keep; explicit null clears these fields. Supplied handles and custom_attributes replace the entire lists. Omit them to leave them unchanged.

  • Conversation updates: assigned_users and labels specify complete lists. An empty array clears the list. Conversation status and the channel's messaging time_window are separate concepts.

  • Sending: uses one recipient identifier plus channel_id, not conversation_id. in_reply_to is a message ID. Check WhatsApp template approval, channel and variables before sending. Successful submission is not proof of delivery.

  • Message history: list_conversation_messages uses a documented, Enterprise-only endpoint and is registered by default so a real request can discover the workspace/API key's access. A 403 includes a recommendation to contact Superchat Support to request access. The paginated result contains inbound/outbound messages with timestamps and supports optional created_after and created_before ISO 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

SUPERCHAT_API_KEY

unset

Fallback credential for non-macOS and CI; macOS Keychain takes precedence

SUPERCHAT_DISABLE_KEYCHAIN

false

Bypass Keychain lookup and use only SUPERCHAT_API_KEY

SUPERCHAT_ENABLE_WRITES

false

Register the write tools

SUPERCHAT_ENABLE_DELETES

false

Register delete tools; requires writes

SUPERCHAT_TIMEOUT_MS

30000

Total request deadline, including retries/body reading; 1–300000 ms

SUPERCHAT_MAX_RETRIES

2

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.js

The 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 dev

check 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 configuration

Packaging 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 pack

The 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 tools
superchat_get_channelA
Read-onlyIdempotent

Read one connected channel's configuration by ID, for example before choosing a channel for a message.

Inputs: channel_id (required).

superchat_get_contactA
Read-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_listA
Read-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_conversationA
Read-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_exportA
Read-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_noteA
Read-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_fileA
Read-onlyIdempotent

Read metadata for one uploaded file by ID. This does not download its contents.

Inputs: file_id (required).

superchat_get_inboxA
Read-onlyIdempotent

Read one inbox's details by ID.

Inputs: inbox_id (required).

superchat_get_labelA
Read-onlyIdempotent

Read one conversation label by ID. Labels apply to conversations, not contacts.

Inputs: label_id (required).

superchat_get_meA
Read-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_templateA
Read-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_userA
Read-onlyIdempotent

Read one workspace user's details by ID.

Inputs: user_id (required).

superchat_list_channelsA
Read-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_conversationsA
Read-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_listsA
Read-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_contactA
Read-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_contactsA
Read-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_notesA
Read-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_conversationsA
Read-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_attributesA
Read-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_filesA
Read-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_inboxesA
Read-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_labelsA
Read-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_templatesA
Read-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_usersA
Read-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_contactsA
Read-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

    A3.9/5.0

    Scored across 26 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count2/5

    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.

    Completeness2/5

    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.

      https://www.quallaa.com/api/mcp
    • Operate WhatsApp from an agent: read conversations and contacts, send messages, by API key.

      https://nodium.io/api/v1/mcp
    • 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

      https://mcp.chatway.app/mcp

    Related MCP Servers

    • A
      license
      Not graded
      quality
      F
      maintenance
      Secure 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
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides local MCP access to RocketReach's REST API, enabling person and company search, profile lookups, and account management without OAuth.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables programmatic WhatsApp automation through MCP, including sending messages, managing chats and contacts, searching conversation history, and exchanging media files.
      MIT