zulip-mcp
Enable interaction with Zulip workspaces by managing channels, posting messages, sending direct messages, adding reactions, and retrieving conversation history for effective communication and automation.
Author

Monadical-SAS
Quick Info
Actions
Tags
Zulip MCP Server
MCP Server for the Zulip API, enabling AI assistants like Claude to interact with Zulip workspaces.
Tools
zulip_list_channels- List available channels (streams) in the Zulip organization
- Optional inputs:
include_private(boolean, default: false): Whether to include private streamsinclude_web_public(boolean, default: true): Whether to include web-public streamsinclude_subscribed(boolean, default: true): Whether to include streams the bot is subscribed to
-
Returns: List of streams with their IDs and information
-
zulip_post_message - Post a new message to a Zulip channel (stream)
- Required inputs:
channel_name(string): The name of the stream to post totopic(string): The topic within the streamcontent(string): The message content to post
-
Returns: Message posting confirmation and ID
-
zulip_send_direct_message - Send a direct message to one or more users
- Required inputs:
recipients(string[]): Email addresses or user IDs of recipientscontent(string): The message content to send
-
Returns: Message sending confirmation and ID
-
zulip_add_reaction - Add an emoji reaction to a message
- Required inputs:
message_id(number): The ID of the message to react toemoji_name(string): Emoji name without colons
-
Returns: Reaction confirmation
-
zulip_get_channel_history - Get recent messages from a channel (stream) and topic
- Required inputs:
channel_name(string): The name of the streamtopic(string): The topic name
- Optional inputs:
limit(number, default: 20): Number of messages to retrieveanchor(string, default: "newest"): Message ID to start from
-
Returns: List of messages with their content and metadata
-
zulip_get_topics - Get topics in a channel (stream)
- Required inputs:
channel_id(number): The ID of the stream
-
Returns: List of topics in the stream
-
zulip_subscribe_to_channel - Subscribe the bot to a channel (stream)
- Required inputs:
channel_name(string): The name of the stream to subscribe to
-
Returns: Subscription confirmation
-
zulip_get_users - Get list of users in the Zulip organization
- Returns: List of users with their basic information
Setup
- Create a Zulip Bot:
- Log in to your Zulip instance
- Navigate to Settings > Personal > Bots
- Click "Add a new bot"
- Select "Generic bot" type
- Fill in the required information
-
Click "Create bot"
-
Permissions:
- By default, Zulip bots have limited permissions
- Make sure to subscribe the bot to any streams it needs to access
-
If you need the bot to have more permissions, consider using a full user account instead
-
Get the API credentials:
- Bot's email address
- Bot's API key (displayed when you create the bot)
- Zulip instance URL (e.g., https://example.zulipchat.com)
Usage with Claude Desktop
Add the following to your claude_desktop_config.json:
npx
{
"mcpServers": {
"zulip": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-zulip"
],
"env": {
"ZULIP_EMAIL": "your-bot@example.zulipchat.com",
"ZULIP_API_KEY": "your-bot-api-key",
"ZULIP_URL": "https://example.zulipchat.com"
}
}
}
}
docker
{
"mcpServers": {
"zulip": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ZULIP_EMAIL",
"-e",
"ZULIP_API_KEY",
"-e",
"ZULIP_URL",
"mcp/zulip"
],
"env": {
"ZULIP_EMAIL": "your-bot@example.zulipchat.com",
"ZULIP_API_KEY": "your-bot-api-key",
"ZULIP_URL": "https://example.zulipchat.com"
}
}
}
}
Troubleshooting
If you encounter permission errors, verify that: 1. The bot API key is correct 2. The bot has been subscribed to the channels it needs to access 3. The Zulip URL is correct and accessible
Build
Docker build:
docker build -t mcp/zulip .
License
This MCP server is licensed under the MIT License.
