Zulip MCP Server
# Zulip MCP Server
MCP Server for the Zulip API, enabling AI assistants like Claude to interact with Zulip workspaces.
## Tools
1. `zulip_list_channels`
- List available channels (streams) in the Zulip organization
- Optional inputs:
- `include_private` (boolean, default: false): Whether to include private streams
- `include_web_public` (boolean, default: true): Whether to include web-public streams
- `include_subscribed` (boolean, default: true): Whether to include streams the bot is subscribed to
- Returns: List of streams with their IDs and information
2. `zulip_post_message`
- Post a new message to a Zulip channel (stream)
- Required inputs:
- `channel_name` (string): The name of the stream to post to
- `topic` (string): The topic within the stream
- `content` (string): The message content to post
- Returns: Message posting confirmation and ID
3. `zulip_send_direct_message`
- Send a direct message to one or more users
- Required inputs:
- `recipients` (string[]): Email addresses or user IDs of recipients
- `content` (string): The message content to send
- Returns: Message sending confirmation and ID
4. `zulip_add_reaction`
- Add an emoji reaction to a message
- Required inputs:
- `message_id` (number): The ID of the message to react to
- `emoji_name` (string): Emoji name without colons
- Returns: Reaction confirmation
5. `zulip_get_channel_history`
- Get recent messages from a channel (stream) and topic
- Required inputs:
- `channel_name` (string): The name of the stream
- `topic` (string): The topic name
- Optional inputs:
- `limit` (number, default: 20): Number of messages to retrieve
- `anchor` (string, default: "newest"): Message ID to start from
- Returns: List of messages with their content and metadata
6. `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
7. `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
8. `zulip_get_users`
- Get list of users in the Zulip organization
- Returns: List of users with their basic information
## Setup
1. 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"
2. 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
3. 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
```json
{
"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
```json
{
"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:
```bash
docker build -t mcp/zulip .
```
## License
This MCP server is licensed under the MIT License.