ZChat MCP server
Developers · MCP
Let Claude, ChatGPT, Cursor or any MCP client work in your ZChat workspace: search and read conversations, reply to customers (only if you allow it), set statuses, handle tickets, search and teach the knowledge base, edit the AI's instructions (draft-aware), read reports and run simulated tests. It uses the same workspace API keys and permissions as the REST API.
Before you start
- Difficulty: Developer
- Time: 5 minutes
- You need: A ZChat API key (Settings → API keys). Read only is enough to look; Read & write to change things; tick "Can send messages to customers" only if the assistant may reply to customers
- You need: An MCP client that can send a header to a remote server (Claude Code, Cursor, VS Code, or mcp-remote for Claude Desktop)
Steps
The server
URL: https://api.zchat.com/mcp, Streamable HTTP transport, authenticated with Authorization: Bearer <API key>. The assistant only sees the tools the key's permissions allow: a read-only key gets read-only tools (marked readOnlyHint), and reply_to_conversation appears only for keys with messages:send.
URL: https://api.zchat.com/mcp Header: Authorization: Bearer zck_live_YOUR_KEY
Claude Code
Add it once; the key stays in your local Claude Code config.
claude mcp add --transport http zchat https://api.zchat.com/mcp \ --header "Authorization: Bearer zck_live_YOUR_KEY"
Cursor
In .cursor/mcp.json (or Settings → MCP):
{ "mcpServers": { "zchat": { "url": "https://api.zchat.com/mcp", "headers": { "Authorization": "Bearer zck_live_YOUR_KEY" } } } }Claude Desktop
Claude Desktop's config file starts local servers, so bridge with mcp-remote (Node.js required):
{ "mcpServers": { "zchat": { "command": "npx", "args": ["-y", "mcp-remote", "https://api.zchat.com/mcp", "--header", "Authorization:${AUTH_HEADER}"], "env": { "AUTH_HEADER": "Bearer zck_live_YOUR_KEY" } } } }ChatGPT and claude.ai connectors
Hosted connectors in ChatGPT and on claude.ai sign in with OAuth rather than a pasted key. ZChat's OAuth sign-in for MCP is not available yet; until then use a client that sends a header (above).
Tools
search_conversations: conversations:read, read-only. Search by text, status, channel, contact and start date.get_conversation: conversations:read, read-only. A conversation with its messages.reply_to_conversation: conversations:write and messages:send. Sends a message to the customer on their channel. Cannot be unsent.set_conversation_status: conversations:write. open, pending_human or resolved.list_tickets / get_ticket: tickets:read, read-only.create_ticket: tickets:write. Open a ticket for a customer.search_knowledge: knowledge:read, read-only. Keyword search over the knowledge base.add_qa: knowledge:write. Teach an exact question and answer.list_ai_agents: agents:read, read-only. AI settings (live and draft) and the per-site agents.update_ai_instructions: agents:write. Workspace instructions (to the draft when Require publish is on) or a site agent's instructions.publish_ai_settings: agents:write. Make the draft live.get_reports_summary: reports:read, read-only. Headline numbers.list_ai_tests / run_ai_test: agents:read / agents:write. Simulated customer tests; runs count against the monthly cap.
Good to know
- Same rate limit as the REST API for the key (600 requests a minute on paid plans, 60 on free). Every change is made by the same code as the dashboard: webhooks fire, the audit log records the key, and the AI allowance and test-run caps apply.
- Requests with a browser Origin header are refused, so a web page cannot drive the server with someone's key.
- Revoking the key in Settings → API keys disconnects the assistant immediately.
MCP clients discover the tools themselves: after connecting, ask your assistant "What can you do in ZChat?"