Zulip MCP. Let your agent read history, send DMs, and manage presence.
Works with every AI agent you already use
…and any MCP-compatible client
Just plug in your AI agents and start using Vinkius.
Zulip MCP Server connects any AI client—Claude, Cursor, etc.—directly to your Zulip workspace. It gives agents tools to read message history, send messages to specific streams or DMs, manage user presence status, and interact with topics across the entire organization.
What your AI agents can do
Zulip add reaction
Adds a specified emoji reaction to an existing message in Zulip.
Zulip get messages
Retrieves message history from any specified stream or channel, allowing you to target the newest messages specifically.
Zulip get own profile
Gets the profile details of the authenticated bot or user account currently running the agent.
The agent fetches message threads from specific streams or channels, using anchors like 'newest' to get the latest content.
You send messages either into a public stream (channel) or directly as a private message (DM) to a user.
The agent updates the status indicator for the authenticated bot/user, marking them as active, away, etc.
You list all available streams, topics within a stream, and every user in the Zulip organization to understand context.
The agent automatically subscribes the bot/user account to specific streams so it can participate in future conversations.
Ask AI about this MCP
Supported MCP Clients
Zulip MCP Server: 9 Tools for Chat Management
These nine tools let your agent interact with every core function of Zulip—from sending messages to listing user profiles.
019d762bzulip add reaction
Adds a specified emoji reaction to an existing message in Zulip.
019d762bzulip get messages
Retrieves message history from any specified stream or channel, allowing you to target the newest messages specifically.
019d762bzulip get own profile
Gets the profile details of the authenticated bot or user account currently running the agent.
019d762bzulip get stream topics
Lists all distinct topics that exist within a single, specified Zulip stream (channel).
019d762bzulip get streams
Retrieves a list of every available public and private streams in the entire organization.
019d762bzulip get users
Lists all user accounts registered within your Zulip organizational instance.
019d762bzulip send message
Sends a message either to a designated stream (channel) or as a private direct message (DM) to a single user.
019d762bzulip set presence
Updates the status indicator for the connected account, changing its presence state in Zulip.
019d762bzulip subscribe to stream
Subscribes the authenticated user to a specific stream so they can receive notifications and participate fully.
Choose How to Get Started
Build a custom MCP for your own tools, or connect a ready-made integration from our catalog.
Build Your Own
Turn any API into an MCP. Import a spec, define Agent Skills, or deploy with MCPFusion.
- Import from OpenAPI, Swagger, or YAML specs
- Create Agent Skills with progressive disclosure
- Deploy to edge with MCPFusion framework
- Built in DLP, auth, and compliance on every call
- Real time usage dashboard and cost metering
- Publish to catalog or keep private
Make Your AI Do More
Start with Zulip, then connect any of our 4,700+ other servers whenever your AI needs more. One click, no limits.
- Use this MCP plus 4,700+ others, all in one place
- Add new capabilities to your AI anytime you want
- Every connection is secured and compliant automatically
- Track usage and costs across all your servers
- Works with Claude, ChatGPT, Cursor, and more
- New servers added to the catalog every week
What you can do with this MCP connector
Listen up—the zulip_ toolset gives your AI client direct control over your entire Zulip workspace. Instead of you manually copying threads or checking statuses, your agent can perform every chat action, from reading history to managing who's online. It’s about making the platform truly actionable for your automation.
Understanding Your Workspace Structure:
The server lets your agent map out your whole organization first. You can run zulip_get_streams to pull a comprehensive list of every public and private stream available across Zulip. If you need to know who's talking, zulip_get_users lists every account registered in the instance. To narrow down context, zulip_get_stream_topics reads out all distinct topics within any single specified stream.
You can also grab your own details using zulip_get_own_profile, which fetches the profile information for the bot or user that's running the agent.
Getting Set Up and Staying Current:
To make sure your agent is ready to talk, you'll use zulip_subscribe_to_stream to automatically subscribe the account to any specific stream. This ensures it can participate in future conversations and receive notifications. The agent keeps track of its status using zulip_set_presence, letting you update the connected account’s presence indicator—you can mark it as active, away, or whatever state you need.
Reading Messages: History Retrieval:
When your agent needs information, it pulls thread data directly. The zulip_get_messages tool retrieves message history from any specified stream or channel; this function is powerful because you can anchor the search to get only the newest messages, which is critical for keeping up with real-time conversations.
Writing and Interacting: Sending Messages:
For sending information out, zulip_send_message handles two scenarios. You can send a message into a designated public stream—a full channel conversation—or you can bypass the group chat entirely by sending it directly as a private direct message (DM) to one specific user.
Beyond just sending text, your agent can interact with existing content. zulip_add_reaction lets your client add any specified emoji reaction to an already posted message, letting you acknowledge or reference specific points in the thread without writing a whole new reply. This means it can read messages using zulip_get_messages, update who's online using zulip_set_presence, map out all available communication channels by listing streams with zulip_get_streams, and send targeted responses via zulip_send_message—all without you ever having to open the Zulip app yourself.
How Zulip MCP Works
- 1 First, your AI client authenticates with Vinkius and establishes a connection using the
zulip_tools. You specify which action you need—for example, sending a message. - 2 Next, your agent calls the specific tool (e.g.,
zulip_send_message), passing all required parameters: the target stream/user type and the content of the message. - 3 The Zulip API executes the command, and the result—the sent message confirmation or retrieved data payload—is returned directly to your AI client.
The bottom line is that your agent treats the Zulip platform like another callable API endpoint, giving it full conversational control.
Who Is Zulip MCP For?
This is for Ops Engineers or Support Managers who spend too much time coordinating across multiple channels. If you're constantly pulling message snippets into a separate ticketing system or need an agent to monitor status updates without human intervention, this server is key.
Uses zulip_get_messages and zulip_add_reaction to have the AI summarize ticket history from a stream or mark messages as 'resolved' without reading every thread.
Employs zulip_set_presence and zulip_get_users so that automated deployment bots can report their current status (e.g., 'Maintenance Mode') and list active team members.
Calls zulip_get_streams and zulip_get_topics to audit which channels are being used, identifying stale or unused project streams for cleanup.
What Changes When You Connect
- Get full message context with
zulip_get_messages. Instead of manually pulling threads or asking a human to summarize the last 50 messages, your agent retrieves the complete payload instantly. This is critical for deep debugging or incident reporting. - Keep track of team status using
zulip_set_presence. Your bot can change its own presence—saying 'Maintenance' or 'On Call'—so the rest of the team knows exactly how to route communication without checking a separate status board. - Automate follow-up actions with
zulip_add_reaction. If your agent identifies an action item in history, it can automatically reply with a specific reaction (like 🔥) rather than just leaving a message, streamlining accountability tracking. - Map out the entire communication graph using
zulip_get_streamsandzulip_get_topics. Before building a workflow, you check these tools to list all available channels and topics. You never want your agent trying to send something to a stream that doesn't exist. - Maintain user visibility with
zulip_get_users. Need to know who worked on this project? The agent lists every single user in the organization so you can direct messages or assign tasks precisely.
Real-World Use Cases
Onboarding a new hire into a team stream
The problem: A new developer joins and needs to catch up on weeks of discussion in the #project-alpha stream. Manual reading is impossible. Solution: Your agent runs zulip_get_messages, targeting the 'newest' anchor for the last 30 days, gathering all relevant context into a single report that can be delivered directly to the new hire.
Running an automated status check during deployment
The problem: The team needs to know if the primary contact is available for emergency fixes. Solution: Your agent first calls zulip_get_own_profile and then uses zulip_set_presence to update its own status, while simultaneously querying other users via zulip_get_users to confirm who is marked 'Online' before proceeding with any action.
Auditing channel activity for compliance
The problem: You need to know exactly what was discussed in the #finance-review stream last month. Solution: Your agent systematically uses zulip_get_messages, iterating through dates and streams, assembling a comprehensive, searchable transcript that is stored outside of Zulip.
Escalating an issue to the right person
The problem: A support ticket was mentioned in a large general channel, but you don't know who owns it. Solution: Your agent first uses zulip_get_topics on the relevant stream to identify the topic owner, then uses zulip_send_message to DM that specific user with all the necessary details.
The Tradeoffs
Trying to read everything at once
Calling zulip_get_messages without specifying an anchor or date range, leading to API timeouts and massive data dumps that crash your agent.
→
Always use the 'newest' anchor in zulip_get_messages when fetching history. If you need old data, segment your requests by date range, never try to pull everything at once.
Forgetting user scope
Attempting to send a message via zulip_send_message without knowing if the recipient is in a stream or needs a direct DM (DMs vs. Streams).
→
Always check your context first. Use zulip_get_users to get valid IDs, and then decide if the communication must be a 'stream' message or a 'direct' message type when calling zulip_send_message.
Assuming subscription status
Running an automation that relies on notifications from Stream B without first confirming the bot is subscribed.
→
Before any monitoring task, call zulip_subscribe_to_stream for every stream your agent needs to monitor. This ensures the connection works and you won't miss critical updates.
When It Fits, When It Doesn't
Use this server if your core problem involves automated communication within Zulip. Specifically, if you need an AI agent to read message history (zulip_get_messages), update status indicators (zulip_set_presence), or send proactive messages based on chat data, then proceed.
Don't use this if you only need a simple notification feed—a basic webhook might be enough. Don't use it if file sharing is the main goal; these tools are purely for text/status updates. If your workflow requires complex database interactions (like updating a Jira ticket), you'll need to pair this with other MCP servers, but zulip_send_message handles sending the final confirmation message perfectly.
Independent Platform Disclaimer: Vinkius is an independent platform and is not affiliated with, endorsed by, sponsored by, verified by, or otherwise authorized by Zulip. All third-party trademarks, logos, and brand names are the property of their respective owners. Their use on this website is strictly for informational purposes to identify service compatibility and interoperability.
VINKIUS INFRASTRUCTURE
Cloud Hosted
Managed infra
V8 Isolated
Sandboxed per request
Zero-Trust Proxy
No stored credentials
DLP Enforced
Policy on every call
GDPR Compliant
EU data residency
Token Compression
~60% cost reduction
Works with Claude, ChatGPT, Cursor, and more
The Model Context Protocol standardizes how applications expose capabilities to LLMs. Instead of operating in isolation, your AI gains direct access to external platforms, live data, and real-world actions through secure, standardized connections.
This server provides 9 capabilities that interface natively with Claude, ChatGPT, Cursor, and any MCP client. No middleware. No custom integration required.
Available Capabilities
Sifting through chat history is tedious and slow.
Right now, if you need a full transcript of what was discussed last week in the `#project-x` stream, you're stuck clicking into Zulip. You copy sections, paste them into Notion, then maybe upload that to another tool just to get it searchable. It takes 20 minutes and requires three different windows.
With this MCP server, your agent runs `zulip_get_messages`. You tell it the stream name and the date range, and boom—you get a clean, structured message payload instantly. No clicks required. Just data.
Zulip MCP Server: Control messages, topics, and presence.
Manually updating status or sending an update means logging into Zulip and clicking the profile icon. If you're building a system that needs to communicate its own operational status (e.g., 'System Down for Maintenance'), this manual process breaks your automation flow.
Now, your agent calls `zulip_set_presence`. The status updates instantly in Zulip without any human intervention or browser interaction. It just works.
Common Questions About Zulip MCP
How do I get the message history using zulip_get_messages? +
You must specify a target stream/channel and an anchor, like 'newest,' to tell the agent where to start looking. The tool returns structured data containing the full conversation thread.
Can I use zulip_send_message for DMs or streams? +
Yes. When calling zulip_send_message, you must specify the message type parameter. Use 'stream' to post in a channel, or 'direct' if you want it to go as a private DM.
What does zulip_get_topics do? +
It lists all distinct conversation topics within one specific stream. This helps your agent understand the organizational structure of the chat before trying to extract messages from it.
How do I make my bot appear online using zulip_set_presence? +
You call zulip_set_presence and pass the required status payload. This changes your visible status in Zulip, letting teammates know if you're available.
How do I use `zulip_get_users` to check who is in my Zulip organization? +
It returns a list of every user account within your connected Zulip domain. This helps you build an accurate roster or verify membership before sending messages.
What do I need to know about available channels using `zulip_get_streams`? +
This tool lists all the stream names (channels) your bot has access to. You must run this first if you aren't sure of the channel name before calling zulip_send_message.
How do I use `zulip_add_reaction` when I want to reply with an emoji? +
You pass the target message ID and the desired emoji identifier. This tool adds a visible reaction directly under a specific message in any stream.
Why would I need `zulip_subscribe_to_stream`? +
This tool ensures your bot receives messages from a particular stream, even if it wasn't initially configured for that channel. It manages the necessary access rights.
Use it with your favorite AI tools
Connect this server to Cursor, Claude, VS Code, and more.
More in this category
X Ads (Twitter)
Manage your X Ads campaigns — audit accounts, line items, and analytics via AI.
Anthropic Alternative
Access Claude models via Anthropic API — send messages, count tokens, manage batches and discover models from any AI agent.
Tesla Fleet API
Physical actuator proxy mapping explicitly native commands evaluating telemetry tracking active Tesla vehicles cleanly.
You might also like
GitHub Alternative
Manage repositories, issues, pull requests and workflows via GitHub — search code, audit commits and track CI/CD from any AI agent.
Google Ads
Equip your AI agent with direct access to Google Ads — manage search, display, and shopping campaigns, track conversions, and optimize ad spend without opening the Google Ads console.
Google Roads
Access Google Roads API — snap GPS tracks to roads, find nearest road segments, and get speed limit data for any road segment worldwide from any AI agent.