LabscoMCP early access ↗
Monadical-SASMCP SERVER

Zulip MCP Server

Read and post in a Zulip workspace — channels and topics, channel history, direct messages, emoji reactions and the user directory.

by Monadical-SAS ↗Team Chat PlatformsCommunity

LABSCO SUMMARY

Topic-aware, which is what makes Zulip searchable in the first place.

Reading history by channel and topic rather than by channel alone means an assistant can pull one conversation instead of an interleaved firehose — the reason Zulip is organised that way. Posting works the same, so a reply lands in the thread it belongs to. The bot's own subscriptions are the boundary of what it can see, and there is a tool to change that, so a permission error usually means one missing subscription rather than a wrong key.

What it is

An MCP server over the Zulip API that runs as a bot in your organization. It covers Zulip's stream-and-topic model rather than flattening it: messages are posted into a named topic within a channel, and history is read the same way.

What you get

  • Channels listed with their ids, with private and web-public streams included or excluded as you choose — zulip_list_channels
  • The topics inside a channel, by channel id — zulip_get_topics
  • Recent messages from a specific channel and topic, with a message count and an anchor to page backwards from — zulip_get_channel_history
  • A message posted into a channel and topic, and direct messages sent to one or more people by email or user id — zulip_post_message, zulip_send_direct_message
  • An emoji reaction added to a message by id — zulip_add_reaction
  • The organization's users listed with their basic information — zulip_get_users
  • The bot subscribed to a channel it needs to reach — zulip_subscribe_to_channel

Requirements

A Zulip bot, created under Settings → Personal → Bots as a generic bot. That gives you the three values it needs: ZULIP_EMAIL for the bot's address, ZULIP_API_KEY for its key, and ZULIP_URL for the instance. The package is not on npm under its own name (@modelcontextprotocol/server-zulip), so npx runs it straight from the GitHub repository (github:Monadical-SAS/zulip-mcp); the mcp/zulip Docker image is one you build yourself from a clone. Bots start with limited permissions: subscribe the bot to every channel you expect it to read, or history calls will come back empty. Licensed Apache 2.0.

Setup effort

Add the configuration to your client