MCP Server for the Zulip API, enabling AI assistants like Claude to interact with Zulip workspaces.
-
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
-
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)
Add the following to your claude_desktop_config.json
:
{
"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"
}
}
}
}
{
"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"
}
}
}
}
If you encounter permission errors, verify that:
- The bot API key is correct
- The bot has been subscribed to the channels it needs to access
- The Zulip URL is correct and accessible
Docker build:
docker build -t mcp/zulip .
This MCP server is licensed under the MIT License.