MCP Hub
Back to servers

Zulip MCP Server

Enables AI agents to interact with Zulip by reading, sending, and searching messages across streams and direct messages. It provides tools for stream management, topic organization, and handling emoji reactions via the Model Context Protocol.

glama
Updated
Mar 16, 2026

zulip-mcp

An MCP (Model Context Protocol) server for Zulip, enabling AI agents (Claude, etc.) to read and interact with Zulip streams, messages, and direct messages.

Features

  • Send & manage messages — stream messages, direct messages, edit, delete
  • Search messages — by stream, topic, sender, or keyword
  • Read direct messages — list all DMs or fetch a conversation with a specific user
  • Stream management — subscribe, unsubscribe, create streams, list topics
  • Reactions & flags — add/remove emoji reactions, mark messages read, update flags
  • Resources — read-only access to streams, subscriptions, users, presence, and DMs

Tools

ToolDescription
zulip_send_stream_messageSend a message to a stream/topic
zulip_send_direct_messageSend a DM to one or more users
zulip_get_direct_messagesRetrieve DMs (all or with a specific user)
zulip_update_messageEdit a message or move it to another topic
zulip_delete_messageDelete a message
zulip_get_messageFetch a single message by ID
zulip_search_messagesSearch messages by stream, topic, sender, or keyword
zulip_subscribe_to_streamSubscribe to a stream (creates it if needed)
zulip_unsubscribe_from_streamUnsubscribe from a stream
zulip_create_streamCreate a new stream
zulip_get_stream_topicsList topics in a stream
zulip_add_reactionAdd an emoji reaction to a message
zulip_remove_reactionRemove an emoji reaction
zulip_update_message_flagsBulk-update message flags
zulip_mark_messages_as_readMark messages as read

Resources

URIDescription
zulip://streamsAll streams
zulip://me/subscriptionsCurrent user's subscriptions
zulip://streams/{id}/topicsTopics in a stream
zulip://streams/{id}/messages/{topic}Messages in a stream topic
zulip://usersAll users
zulip://me/profileAuthenticated user's profile
zulip://me/direct-messagesRecent direct messages
zulip://me/direct-messages/{email}DM conversation with a specific user
zulip://users/{id}Specific user's profile
zulip://users/{id}/presenceUser presence/status

Setup

1. Get Zulip API credentials

  1. Log in to your Zulip organization
  2. Go to Settings → Your account → API key
  3. Copy your email and API key

2. Configure environment

cp .env.example .env

Edit .env:

ZULIP_USERNAME=yourbot@your-org.zulipchat.com
ZULIP_API_KEY=your_api_key_here
ZULIP_REALM=https://your-org.zulipchat.com

3. Build

npm install
npm run build

4. Configure Claude Desktop (or other MCP client)

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "zulip": {
      "command": "node",
      "args": ["/path/to/zulip-mcp/dist/index.js"],
      "env": {
        "ZULIP_USERNAME": "yourbot@your-org.zulipchat.com",
        "ZULIP_API_KEY": "your_api_key_here",
        "ZULIP_REALM": "https://your-org.zulipchat.com"
      }
    }
  }
}

Or if installed globally via npm:

{
  "mcpServers": {
    "zulip": {
      "command": "zulip-mcp",
      "env": {
        "ZULIP_USERNAME": "yourbot@your-org.zulipchat.com",
        "ZULIP_API_KEY": "your_api_key_here",
        "ZULIP_REALM": "https://your-org.zulipchat.com"
      }
    }
  }
}

Environment Variables

VariableRequiredDefaultDescription
ZULIP_USERNAMEYesBot/user email address
ZULIP_API_KEYYesZulip API key
ZULIP_REALMYesZulip server URL (e.g. https://your-org.zulipchat.com)
ZULIP_REQUEST_TIMEOUT_MSNo20000HTTP request timeout in milliseconds
ZULIP_MAX_RETRIESNo3Max retries on transient errors

Development

npm run dev   # run with tsx (no build step)
npm run build # compile TypeScript to dist/

License

MIT

Reviews

No reviews yet

Sign in to write a review