Zulip MCP Server
The Zulip MCP Server acts as a bridge between the Zulip chat platform and AI assistants like Claude. Essentially, it gives an AI the ability to "talk" and "listen" within a Zulip workspace. Instead of a user having to copy and paste conversations or manually post status updates, this tool …
About this Protocol
How to Use
1. Installation
To install and set up the Zulip MCP server, you must first configure a bot within your Zulip workspace:
- Create a Zulip Bot:
- Log in to your Zulip instance.
- Navigate to Settings > Personal > Bots.
- Click "Add a new bot".
- Select "Generic bot" type and fill in the required information.
- Click "Create bot".
- Gather Credentials:
- Bot Email address
- Bot API key (displayed upon creation)
- Zulip instance URL (e.g.,
https://example.zulipchat.com)
- Permissions: Ensure the bot is subscribed to the specific channels (streams) it needs to access.
For Docker users, you can build the image locally:
docker build -t mcp/zulip .
2. Configuration
Add the following configuration to your MCP settings file (e.g., claude_desktop_config.json).
Using npx
{
"mcpServers": {
"zulip": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-zulip"
],
"env": {
"ZULIP_EMAIL": "[email protected]",
"ZULIP_API_KEY": "your-bot-api-key",
"ZULIP_URL": "https://example.zulipchat.com"
}
}
}
}
Using Docker
{
"mcpServers": {
"zulip": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ZULIP_EMAIL",
"-e",
"ZULIP_API_KEY",
"-e",
"ZULIP_URL",
"mcp/zulip"
],
"env": {
"ZULIP_EMAIL": "[email protected]",
"ZULIP_API_KEY": "your-bot-api-key",
"ZULIP_URL": "https://example.zulipchat.com"
}
}
}
}
3. Available Tools
zulip_list_channels: List available channels (streams). Optional inputs:include_private,include_web_public,include_subscribed.zulip_post_message: Post a new message to a stream. Required inputs:channel_name,topic,content.zulip_send_direct_message: Send a DM to one or more users. Required inputs:recipients(array of emails/IDs),content.zulip_add_reaction: Add an emoji reaction to a message. Required inputs:message_id,emoji_name.zulip_get_channel_history: Get recent messages from a channel and topic. Required inputs:channel_name,topic.zulip_get_topics: Get topics within a specific channel. Required input:channel_id.zulip_subscribe_to_channel: Subscribe the bot to a channel. Required input:channel_name.zulip_get_users: Retrieve a list of users in the Zulip organization.
4. Example Prompts
(Note: While not explicitly listed as a section in the content, the following are inferred from the available tools):
- "List all the public channels in my Zulip workspace."
- "Post a message to the 'Engineering' stream under the 'Sprint Planning' topic saying 'The update is complete'."
- "Send a direct message to [email protected] saying 'Hello from Claude'."
- "Show me the last 10 messages from the 'General' channel in the 'Announcements' topic."
- "Add a 'thumbs_up' reaction to message ID 12345."
Use Cases
Use Case 1: Automated Daily Standup and Topic Summarization
Problem: In fast-moving engineering teams, team members often struggle to catch up on long discussion threads across multiple Zulip streams and topics, leading to "notification fatigue" or missed decisions.
Solution: An AI assistant can use the Zulip MCP to fetch recent message history across specific channels and topics to generate concise executive summaries, highlighting action items and key decisions.
Example: A user asks, "What were the main takeaways from the #backend-dev 'database-migration' topic today?" The AI uses zulip_get_channel_history, processes the messages, and provides a bulleted summary of the consensus reached by the team.
Use Case 2: Seamless Code-to-Chat Integration for Developers
Problem: Developers often need to share code snippets, error logs, or refactoring ideas with their team. Switching back and forth between a code editor (like Cursor) and the Zulip desktop app breaks cognitive flow.
Solution: Using this MCP within an AI-integrated IDE, a developer can command the AI to post code directly to a relevant Zulip stream or send it to a specific colleague for review without leaving the environment.
Example: After finishing a function, the developer tells the AI: "Post this function to the #code-review channel under the 'Auth-Module' topic and ask @SeniorDev for feedback." The AI uses zulip_get_users to identify the recipient and zulip_post_message to share the code.
Use Case 3: Intelligent Knowledge Base Retrieval
Problem: Zulip serves as a repository of tribal knowledge, but searching for specific technical answers using standard keyword searches can be difficult if the user doesn't remember the exact phrasing.
Solution: The AI can act as a semantic search layer. It can browse topics and message history to find answers to complex questions, effectively turning the chat history into a searchable wiki.
Example: A new employee asks the AI, "How do we handle environment variables for the staging server?" The AI uses zulip_get_topics and zulip_get_channel_history to find past discussions in the #dev-ops stream, then explains the process based on those historical conversations.
Use Case 4: Automated Incident Triage and Notification
Problem: When a system alert occurs, DevOps engineers need to quickly notify the right people and acknowledge the issue to prevent duplicate alerts, which often requires manual typing and tagging in Zulip.
Solution: An AI assistant can be triggered by an incident to automatically post details to an incident stream, tag the on-call engineer, and even add an initial "eyes" emoji reaction to signify the system has acknowledged the event.
Example: Upon a server failure, the AI is instructed to: "Post the error log to #production-alerts, tag the SRE team, and react to the message with a 🚨." The AI uses zulip_post_message and zulip_add_reaction to execute the workflow instantly.
Use Case 5: Team Sentiment and Engagement Check-in
Problem: Managers of remote teams may find it difficult to gauge the "pulse" of the team or ensure that important announcements are being seen and acknowledged.
Solution: The AI can scan a specific announcement topic to see who has reacted to a post and who hasn't, then send friendly direct message reminders to those who might have missed it.
Example: A manager asks, "Who hasn't acknowledged the 'New Vacation Policy' post in #general?" The AI uses zulip_get_channel_history to check for reactions on the specific message ID, compares it against the list from zulip_get_users, and offers to send a DM (zulip_send_direct_message) to the remaining staff.