ZulipChat MCP: Connect AI to Zulip with 60+ tools for messaging, streams, events, and analytics
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Quick Start Β· Setup Wizard Β· Integrations Β· Two-Tier Tools Β· Contributing
That's it. Your AI assistant can now read and write Zulip messages.
Need a zuliprc? Zulip Settings > Personal > Account & privacy > API key β download the file, save it as ~/.zuliprc.
Interactive onboarding:
ZulipChat MCP bridges any MCP-compatible AI assistant (Claude Code, Gemini CLI, Cursor, Windsurf, etc.) to your Zulip workspace. The assistant can:
approve / deny in the session topicv0.6.0 introduced a deliberate split: 20 core tools by default, 60 tools when you need more.
The 20 tools that cover most daily use:
| Category | Tools |
|---|---|
| Messaging | send_message, edit_message, get_message, add_reaction |
| Search | search_messages, get_streams, get_stream_info, get_stream_topics |
| Users | resolve_user, get_users, get_own_user |
| Agent Comms | teleport_chat, register_agent, ensure_agent_session, agent_message, request_user_input, wait_for_response |
| System | switch_identity, server_info, manage_message_flags |
Why 20 instead of 60? Fewer tools means faster tool selection, lower token overhead, and less confusion for the AI. Most tasks β sending messages, searching, reacting, and binding an agent session to Zulip β only need the core set.
Need scheduled messages, event queues, file uploads, analytics, or advanced search?
Or via environment variable:
Extended mode adds: toggle_reaction, cross_post_message, advanced_search, construct_narrow, get_scheduled_messages, manage_scheduled_message, get_drafts, create_draft, edit_draft, delete_draft, register_events, get_events, listen_events, upload_file, manage_files, get_daily_summary, manage_user_mute, get_user, get_presence, get_user_groups, and more.
Full per-client setup guide: docs/integrations/README.md
With dual identity (you + a bot):
Optional Claude hook bridge for lifecycle and approval routing:
Optional Claude package export for project-local hooks, skills, and subagents:
Add to ~/.gemini/settings.json under mcpServers:
Add to your MCP configuration:
| Option | Description |
|---|---|
--zulip-config-file PATH | Path to your zuliprc file |
--zulip-bot-config-file PATH | Bot zuliprc for dual identity |
--extended-tools | Register all 60 tools instead of the 20-tool core set |
--transport {stdio,http} | Transport to serve on (default: stdio) |
--host HOST | Bind host for HTTP transport (default: 127.0.0.1) |
--port PORT | Bind port for HTTP transport (default: 8000) |
--auth-token TOKEN | Bearer auth token for HTTP transport (or ZULIPCHAT_HTTP_AUTH_TOKEN) |
--unsafe | Enable administrative tools (use with caution) |
--debug | Enable debug logging |
ZulipChat MCP supports stateless HTTP deployments under the MCP 2026-07-28 protocol:
Generate client integration snippets for remote HTTP connections:
Note on Multi-Replica Deployments: DuckDB state persistence is single-writer. When deploying multiple HTTP replicas, ensure each instance points to a distinct DuckDB path or run a single-instance deployment.
AI-powered analytics tools (analyze_stream_with_llm, analyze_team_activity_with_llm, intelligent_report_generator) execute using a server-side Anthropic LLM provider:
ANTHROPIC_API_KEY on the server process for LLM generation.ANTHROPIC_MODEL to override the default model (claude-opus-5).llm_unavailable: true so your client assistant can analyze the data directly.Dedicated setup pages:
Configure both a user and a bot zuliprc to let your assistant switch between identities mid-session:
The assistant posts as you by default. Call switch_identity to post as the bot β useful for automated notifications, agent-to-agent communication, or keeping human vs. bot messages distinct.
"Catch me up on what happened in #engineering today"
β Assistant calls search_messages with stream + time filter, summarizes the thread.
"Tell the team we're deploying at 3pm"
β Assistant calls send_message to #engineering with the announcement.
"Who sent that message about the API migration?"
β Assistant calls search_messages with keywords, returns sender and context.
"React with :thumbs_up: to Sarah's last message"
β Assistant calls resolve_user ("Sarah"), search_messages (sender), then add_reaction.
"DM Jaime that the PR is ready"
β Assistant calls teleport_chat with fuzzy name resolution β no email needed.
Run checks:
For packaging, dependency, FastMCP, or startup changes, run the release smoke:
See CONTRIBUTING.md for the full guide, and CLAUDE.md / AGENTS.md for AI agent instructions.
Built on FastMCP with async-first design, DuckDB for agent state persistence, and smart user/stream caching for fast fuzzy resolution.
Full policy: PRIVACY.md
MIT β See LICENSE
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/zulipchat-mcp-server)<a href="https://allmcps.com/mcp/zulipchat-mcp-server"><img src="https://allmcps.com/api/badge/zulipchat-mcp-server?style=directory" alt="ZulipChat MCP Server on AllMCPs" /></a>