zulip-mcp
The zulip-mcp server provides a read-only interface to browse and search Zulip chat data — no creating, modifying, or deleting anything.
Verify connection:
get_own_profileto confirm authentication and view your user info (ID, email, full name)Browse streams:
list_streams(all visible streams) orlist_subscriptions(only your subscribed streams)Look up stream ID:
get_stream_idby stream name (needed for topic listing)Explore topics:
list_topicsto list conversation threads in a stream, ordered most recent firstFetch messages:
get_messageswith flexible filters (stream, topic, sender email, full-text search) and anchor-based paginationGet a single message:
get_messageby numeric message IDList all users:
list_usersto get a directory of the entire organizationLook up a user:
get_userby numeric ID or email address
The server is designed with a hardened, secure architecture: no code execution, no filesystem access, no telemetry, local credential handling, and stdio-only communication.
Provides read-only access to Zulip chats, allowing listing of streams, topics, messages, and users, with search capabilities.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zulip-mcpList all streams I'm subscribed to"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
zulip-mcp
Minimal, secure, read-only MCP server for reading Zulip chats from Claude Code (or any MCP client). Browse streams, topics, messages, and users — nothing can be created, modified, or deleted.
Why this exists
A security review of an existing Zulip MCP server surfaced serious issues
(eval()-based remote code execution, arbitrary local file read/write, SSRF).
This is a clean, minimal alternative built around a strict read-only,
no-code-execution design. See Security.
Related MCP server: SQL Server MCP
Requirements
Install
Clone the repo:
git clone https://github.com/shreyan-gupta/zulip-mcp.git
cd zulip-mcpThen install with either uv or pip:
# Option A — uv (recommended; also installs the right Python)
uv sync
# Option B — pip + venv
python3 -m venv .venv
.venv/bin/pip install -e .Get your Zulip API key
Open your Zulip instance (e.g.
https://your-org.zulipchat.com).Avatar → Personal settings → Account & privacy.
Under API key, click Manage your API key and copy it.
Add to Claude Code
Run this from inside the cloned repo ($(pwd) expands to its absolute path):
# Option A — uv
claude mcp add zulip \
-e ZULIP_EMAIL=you@example.com \
-e ZULIP_API_KEY=your-api-key \
-e ZULIP_SITE=https://your-org.zulipchat.com \
-- uv run --directory "$(pwd)" zulip-mcp
# Option B — venv entry point
claude mcp add zulip \
-e ZULIP_EMAIL=you@example.com \
-e ZULIP_API_KEY=your-api-key \
-e ZULIP_SITE=https://your-org.zulipchat.com \
-- "$(pwd)/.venv/bin/zulip-mcp"Restart Claude Code, then try:
> List the streams I'm subscribed to
> Show messages in #engineering about "sync redesign"
> Summarize my last week of messages in #generalTip: ask it to call get_own_profile first to confirm the connection works.
Tools
Tool | Description |
| Verify connection, see authenticated user info |
| List channels you're subscribed to |
| List all visible streams in the org |
| Look up a stream's ID by name |
| List topics in a stream |
| Fetch messages with stream/topic/sender/search |
| Fetch a single message by ID |
| Get user profile by ID or email |
| List all users in the org |
get_messages supports anchor-based pagination and combines filters (stream,
topic, sender, full-text search) into a single query.
Security
This server is designed to be safe by construction:
Read-only — cannot create, modify, or delete any Zulip data.
No code execution — no
eval(),exec(),subprocess, or dynamic imports.No filesystem access — tools never read or write local files.
No telemetry — every network request goes exclusively to your Zulip instance.
Stdio only — no HTTP listener, no open ports.
Credentials stay local — read from env vars, never logged or returned in output.
Configuration
Configuration is via environment variables only (no .env auto-loading):
Environment Variable | Required | Description |
| Yes | Your Zulip login email or bot email |
| Yes | API key from Zulip settings |
| Yes | Base URL of your Zulip instance |
Development
uv sync --extra dev # or: pip install -e ".[dev]"
ruff check .
pytestThe test suite is offline — it never contacts a real Zulip server.
License
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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