Bridges AI assistants to Zulip workspaces through 20 core tools for messaging, search, and user resolution, with an optional extended mode unlocking 56 total operations including event queues, file uploads, and analytics. Ships with dual identity support so your assistant can post as you or switch to a bot mid-session, plus agent-specific tools like topic binding and in-chat approval requests. The two-tier architecture keeps token overhead low for everyday tasks while exposing the full Zulip API when you need scheduled messages or presence tracking. Works with Claude Code, Gemini CLI, Cursor, and any MCP client via stdio transport.
Quick Start · Setup Wizard · Integrations · Two-Tier Tools · Contributing
uvx zulipchat-mcp --zulip-config-file ~/.zuliprc
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:
uvx --from zulipchat-mcp zulipchat-mcp-setup
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, 56 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 56? 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?
uvx zulipchat-mcp --zulip-config-file ~/.zuliprc --extended-tools
Or via environment variable:
ZULIPCHAT_EXTENDED_TOOLS=1 uvx zulipchat-mcp --zulip-config-file ~/.zuliprc
Extended mode adds: toggle_reaction, cross_post_message, advanced_search, construct_narrow, get_scheduled_messages, manage_scheduled_message, 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
claude mcp add zulipchat -- uvx zulipchat-mcp --zulip-config-file ~/.zuliprc
With dual identity (you + a bot):
claude mcp add zulipchat -- uvx zulipchat-mcp \
--zulip-config-file ~/.zuliprc \
--zulip-bot-config-file ~/.zuliprc-bot
Optional Claude hook bridge for lifecycle and approval routing:
uvx zulipchat-mcp-hook \
--zulip-config-file ~/.zuliprc \
--zulip-bot-config-file ~/.zuliprc-bot
Optional 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-bot
Add to ~/.gemini/settings.json under mcpServers:
{
"zulipchat": {
"command": "uvx",
"args": ["zulipchat-mcp", "--zulip-config-file", "/path/to/.zuliprc"]
}
}
Add to your MCP configuration:
{
"mcpServers": {
"zulipchat": {
"command": "uvx",
"args": ["zulipchat-mcp", "--zulip-config-file", "/path/to/.zuliprc"]
}
}
}
| 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 56 tools instead of the 20-tool core set |
--unsafe | Enable administrative tools (use with caution) |
--debug | Enable debug logging |
Dedicated setup pages:
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-bot
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.
git clone https://github.com/akougkas/zulipchat-mcp.git
cd zulipchat-mcp
uv sync
uv run zulipchat-mcp --zulip-config-file ~/.zuliprc
Run checks:
uv run pytest -q # full test suite, 60% coverage gate
uv run ruff check . # Linting
uv run mypy src # Type checking
For packaging, dependency, FastMCP, or startup changes, run the release smoke:
uv build
scripts/pre_release_smoke.sh --version X.Y.Z --allow-dirty
See CONTRIBUTING.md for the full guide, and CLAUDE.md / AGENTS.md for AI agent instructions.
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.
Full policy: PRIVACY.md
MIT — See LICENSE
ZULIP_EMAILYour Zulip account email address
ZULIP_API_KEYsecretYour Zulip API key
ZULIP_SITEYour Zulip server URL (e.g., https://yourorg.zulipchat.com)
io.github.mindstone/mcp-server-microsoft-teams
com.mintmcp/outlook-email
helbertparanhos/resend-email-mcp
marlinjai/email-mcp
io.github.mindstone/mcp-server-email-imap
io.github.osamahassouna/email-playbook-mcp