zulip-mcp
A read-only MCP server that allows Claude Code to securely access Zulip chat messages, streams, topics, and user information without modification capabilities.
README
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.
Requirements
Install
Clone the repo:
git clone https://github.com/shreyan-gupta/zulip-mcp.git
cd zulip-mcp
Then 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 #general
Tip: ask it to call get_own_profile first to confirm the connection works.
Tools
| Tool | Description |
|---|---|
get_own_profile |
Verify connection, see authenticated user info |
list_subscriptions |
List channels you're subscribed to |
list_streams |
List all visible streams in the org |
get_stream_id |
Look up a stream's ID by name |
list_topics |
List topics in a stream |
get_messages |
Fetch messages with stream/topic/sender/search |
get_message |
Fetch a single message by ID |
get_user |
Get user profile by ID or email |
list_users |
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 |
|---|---|---|
ZULIP_EMAIL |
Yes | Your Zulip login email or bot email |
ZULIP_API_KEY |
Yes | API key from Zulip settings |
ZULIP_SITE |
Yes | Base URL of your Zulip instance |
Development
uv sync --extra dev # or: pip install -e ".[dev]"
ruff check .
pytest
The test suite is offline — it never contacts a real Zulip server.
License
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.