zulip-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZULIP_SITE | Yes | Base URL of your Zulip instance | |
| ZULIP_EMAIL | Yes | Your Zulip login email or bot email | |
| ZULIP_API_KEY | Yes | API key from Zulip settings |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_streamsA | List all visible Zulip streams (channels). Use this to discover what streams/channels exist in the organization. Returns stream names, IDs, descriptions, and subscriber counts. Args: include_public: Include public streams. Defaults to True. include_subscribed: Include streams you're subscribed to. Defaults to True. exclude_archived: Exclude archived streams. Defaults to True. Returns: JSON list of streams with their metadata. |
| list_subscriptionsA | List streams (channels) you are subscribed to. Use this to see which streams the authenticated user can access. More focused than list_streams — only shows your subscriptions. Returns: JSON list of subscribed streams with names and IDs. |
| get_stream_idA | Look up a stream's numeric ID by its name. Use this when you know a stream's name but need its ID for other API calls (e.g., list_topics requires a stream_id). Args: stream_name: Exact name of the stream (case-sensitive). Returns: JSON object with the stream_id. |
| list_topicsA | List topics (threads) in a stream, most recent first. Use this to discover what conversations exist in a stream before fetching messages. Each topic is like a thread/subject line. Args: stream_id: The numeric ID of the stream. Use get_stream_id to look this up. Returns: JSON list of topics with names and last message IDs. |
| get_messagesA | Fetch messages from Zulip with flexible filtering. This is the primary tool for reading chat history. Combine filters to narrow down results — e.g., stream + topic to get a specific conversation, or sender + search to find specific messages from a person. Pagination: Results are anchored at a point and fetch messages before/after it. To paginate through history:
Args: stream: Filter by stream/channel name (e.g., "eng-resharding"). topic: Filter by topic/thread name within a stream. sender: Filter by sender email (e.g., "shreyan@nearone.org"). search: Full-text search query across message content. anchor: Reference point — a message ID (as string) or "newest", "oldest", "first_unread". Defaults to "newest". num_before: Number of messages before the anchor. Max 5000. Defaults to 100. num_after: Number of messages after the anchor. Max 5000. Defaults to 0. include_html: If True, return HTML-rendered content. If False (default), return raw Markdown source — better for analysis. Returns: JSON object with keys: - messages: list of message objects (id, sender, content, timestamp, etc.) - found_newest: whether there are no newer messages matching the filter - found_oldest: whether there are no older messages matching the filter - anchor: the anchor message ID used |
| get_messageA | Fetch a single message by its ID. Use this when you have a specific message ID and want its full content, or when following up on a message reference from another tool's output. Args: message_id: The numeric message ID. include_html: If True, return HTML. If False (default), raw Markdown. Returns: JSON object with the full message details. |
| get_own_profileA | Get the authenticated user's own profile. Use this to verify the connection is working and to see who is authenticated. This is the first tool to call when setting up. Returns: JSON object with user profile: user_id, email, full_name, etc. |
| get_userA | Get a user's profile by their numeric ID or email address. Args: identifier: Either a numeric user ID (e.g., "12345") or an email address (e.g., "alice@example.com"). Returns: JSON object with user profile details. |
| list_usersA | List all users in the Zulip organization. Returns all active and deactivated users. Use this to find user IDs or email addresses for filtering messages. Returns: JSON list of user objects with basic profile info. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shreyan-gupta/zulip-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server