ZulipChat MCP Server
Allows AI assistants to interact with Zulip workspaces, enabling messaging, search, user resolution, and agent session management.
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., "@ZulipChat MCP Serversend a message to #general saying 'Hello everyone!'"
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.
ZulipChat MCP Server
Quick Start · Setup Wizard · Integrations · Two-Tier Tools · Contributing
Quick Start
uvx zulipchat-mcp --zulip-config-file ~/.zuliprcThat'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:
uvx --from zulipchat-mcp zulipchat-mcp-setupRelated MCP server: Telegram Bridge MCP
What This Does
ZulipChat MCP bridges any MCP-compatible AI assistant (Claude Code, Gemini CLI, Cursor, Windsurf, etc.) to your Zulip workspace. The assistant can:
Send and read messages — stream messages, DMs, replies, reactions
Search conversation history — full-text search with filters for sender, stream, time range
Resolve people by name — "message Jaime" just works, no hunting for formal emails
Switch identities — post as yourself or as a bot, in the same session
Monitor activity — search recent messages, get stream info, check who's online
Bind sessions to Zulip topics — give long-running agent sessions a stable control topic
Request approvals in-topic — owner replies with
approve/denyin the session topic
Two-Tier Tool Architecture
v0.6.0 introduced a deliberate split: 20 core tools by default, 60 tools when you need more.
Core Mode (default)
The 20 tools that cover most daily use:
Category | Tools |
Messaging |
|
Search |
|
Users |
|
Agent Comms |
|
System |
|
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.
Extended Mode
Need scheduled messages, event queues, file uploads, analytics, or advanced search?
uvx zulipchat-mcp --zulip-config-file ~/.zuliprc --extended-toolsOr via environment variable:
ZULIPCHAT_EXTENDED_TOOLS=1 uvx zulipchat-mcp --zulip-config-file ~/.zuliprcExtended 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.
Installation
Full per-client setup guide: docs/integrations/README.md
Claude Code
claude mcp add zulipchat -- uvx zulipchat-mcp --zulip-config-file ~/.zuliprcWith dual identity (you + a bot):
claude mcp add zulipchat -- uvx zulipchat-mcp \
--zulip-config-file ~/.zuliprc \
--zulip-bot-config-file ~/.zuliprc-botOptional Claude hook bridge for lifecycle and approval routing:
uvx zulipchat-mcp-hook \
--zulip-config-file ~/.zuliprc \
--zulip-bot-config-file ~/.zuliprc-botOptional Claude package export for project-local hooks, skills, and subagents:
uvx zulipchat-mcp-integrate export \
--client claude-code \
--mode standalone \
--output-dir . \
--zulip-config-file ~/.zuliprc \
--zulip-bot-config-file ~/.zuliprc-botGemini CLI
Add to ~/.gemini/settings.json under mcpServers:
{
"zulipchat": {
"command": "uvx",
"args": ["zulipchat-mcp", "--zulip-config-file", "/path/to/.zuliprc"]
}
}Claude Desktop / Cursor / Any MCP Client
Add to your MCP configuration:
{
"mcpServers": {
"zulipchat": {
"command": "uvx",
"args": ["zulipchat-mcp", "--zulip-config-file", "/path/to/.zuliprc"]
}
}
}Configuration Options
Option | Description |
| Path to your zuliprc file |
| Bot zuliprc for dual identity |
| Register all 60 tools instead of the 20-tool core set |
| Transport to serve on (default: |
| Bind host for HTTP transport (default: |
| Bind port for HTTP transport (default: |
| Bearer auth token for HTTP transport (or |
| Enable administrative tools (use with caution) |
| Enable debug logging |
Remote HTTP Transport
ZulipChat MCP supports stateless HTTP deployments under the MCP 2026-07-28 protocol:
# Run server over HTTP with bearer authentication
ZULIPCHAT_HTTP_AUTH_TOKEN=your-secret-token \
uvx zulipchat-mcp --zulip-config-file ~/.zuliprc --transport http --host 0.0.0.0 --port 8000Generate client integration snippets for remote HTTP connections:
uvx zulipchat-mcp-integrate print --client claude-code --remote-url http://mcp.internal:8000/mcp --remote-token your-secret-tokenNote 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 Analytics & LLM Provider
AI-powered analytics tools (analyze_stream_with_llm, analyze_team_activity_with_llm, intelligent_report_generator) execute using a server-side Anthropic LLM provider:
Set
ANTHROPIC_API_KEYon the server process for LLM generation.Optionally set
ANTHROPIC_MODELto override the default model (claude-opus-5).Without an API key, analytics tools return structured data summaries with
llm_unavailable: trueso your client assistant can analyze the data directly.
More clients
Dedicated setup pages:
Dual Identity
Configure both a user and a bot zuliprc to let your assistant switch between identities mid-session:
uvx zulipchat-mcp \
--zulip-config-file ~/.zuliprc \
--zulip-bot-config-file ~/.zuliprc-botThe 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.
Real-World Examples
"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.
Development
git clone https://github.com/akougkas/zulipchat-mcp.git
cd zulipchat-mcp
uv sync
uv run zulipchat-mcp --zulip-config-file ~/.zuliprcRun checks:
uv run pytest -q # full test suite, 60% coverage gate
uv run ruff check . # Linting
uv run mypy src # Type checkingFor packaging, dependency, FastMCP, or startup changes, run the release smoke:
uv build
scripts/pre_release_smoke.sh --version X.Y.Z --allow-dirtySee CONTRIBUTING.md for the full guide, and CLAUDE.md / AGENTS.md for AI agent instructions.
Architecture
src/zulipchat_mcp/
├── core/ # Client wrapper, identity, caching, security
├── tools/ # MCP tool implementations (two-tier registration)
├── services/ # Background listener and session event routing
├── utils/ # Logging, DuckDB persistence, metrics
└── config.py # config loading (zuliprc + environment fallback)Built on FastMCP with async-first design, DuckDB for agent state persistence, and smart user/stream caching for fast fuzzy resolution.
Privacy
No data collection — nothing leaves your machine except Zulip API calls
No telemetry — zero analytics, tracking, or usage reporting
Local execution — all processing happens on your hardware
Credentials stay local — API keys are never logged or transmitted beyond your Zulip server
Full policy: PRIVACY.md
License
MIT — See LICENSE
Links
This server cannot be deployed
Maintenance
Related MCP Connectors
Chat with your Zihin.ai agents, list them and load platform skills from any MCP client.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- AlicenseAqualityFmaintenanceA bridge server that enables MCP-compatible AI assistants like Claude to seamlessly discover, communicate with, and manage A2A protocol agents.7148Apache 2.0
- FlicenseAqualityAmaintenanceBridges AI assistants to a Telegram bot to enable two-way messaging, interactive confirmations, and live status updates. It supports automatic voice transcription via local Whisper models and provides secure, single-user communication for MCP-compatible hosts.46-
- AlicenseAqualityBmaintenanceRun AI agents in Zulip as @mentionable bots — or wire into any MCP client.2716Apache 2.0
- AlicenseNot gradedqualityDmaintenanceBridges Web of Things (WoT) devices to AI assistants via MCP, enabling discovery, monitoring, and control of IoT devices through natural language.9GPL 3.0