Skip to main content
Glama

Zulip MCP Server

A Model Context Protocol (MCP) server that exposes Zulip REST API capabilities as tools for LLMs. This server allows AI assistants to interact with your Zulip workspace programmatically.

Features

🔄 Resources (Contextual Data)

  • User Directory: Browse organization members with roles and status

  • Stream Directory: Explore available streams and permissions

  • Message Formatting Guide: Complete Zulip markdown syntax reference

  • Organization Info: Server settings, policies, and custom emoji

  • User Groups: Available groups for mentions and permissions

🛠️ Tools (25 Available Actions)

Helper Tools (LLM-Friendly Discovery)

  • search-users - Find users by name/email before sending DMs

  • get-started - Test connection and get workspace overview

Message Operations

  • send-message - Send to streams or direct messages

  • get-messages - Retrieve with advanced filtering and search

  • get-message - Get detailed information about specific message

  • upload-file - Share files and images

  • edit-message - Modify content or move topics

  • delete-message - Remove messages (admin permissions required)

  • get-message-read-receipts - Check who read messages

  • add-emoji-reaction - React with Unicode or custom emoji

  • remove-emoji-reaction - Remove emoji reactions from messages

Scheduled Messages & Drafts

  • create-scheduled-message - Schedule future messages

  • edit-scheduled-message - Modify scheduled messages

  • create-draft - Create new message drafts

  • get-drafts - Retrieve saved drafts

  • edit-draft - Update draft content

Stream Management

  • get-subscribed-streams - List user's stream subscriptions

  • get-stream-id - Get stream ID by name

  • get-stream-by-id - Detailed stream information

  • get-topics-in-stream - Browse recent topics

User Operations

  • get-users - List organization members

  • get-user-by-email - Find users by email

  • get-user - Get detailed user information by ID

  • update-status - Set status message and availability

  • get-user-groups - List available user groups

Related MCP server: Zulip MCP Server

📝 Zulip Terminology: Streams vs Channels

In Zulip, "streams" and "channels" refer to the same concept:

  • Stream = Official Zulip terminology (used in API, tools, interface)

  • Channel = Common term from Slack/Discord/Teams

  • Same thing = Conversation spaces where teams discuss topics

This MCP server uses "stream" to match Zulip's official documentation and API.

Installation & Setup

Prerequisites

Quick Start

  1. Clone and install dependencies:

git clone <repository-url>
cd zulip-mcp-server
npm install
  1. Configure environment variables:

cp .env.example .env
# Edit .env with your Zulip credentials
  1. Build and run:

npm run build
npm start

Environment Configuration

Create a .env file with your Zulip credentials:

ZULIP_URL=https://your-organization.zulipchat.com
ZULIP_EMAIL=your-bot-email@yourcompany.com
ZULIP_API_KEY=your-api-key-here
NODE_ENV=production

Getting Zulip API Credentials

  1. For Bot Access (Recommended):

    • Go to your Zulip organization settings

    • Navigate to "Bots" section

    • Create a new bot or use existing one

    • Copy the bot email and API key

  2. For Personal Access:

    • Go to Personal Settings → Account & Privacy

    • Find "API key" section

    • Generate or reveal your API key

Claude Desktop Integration

To use this MCP server with Claude Desktop, add the following configuration to your Claude Desktop config file:

Add to your Claude Desktop configuration:

{
  "mcpServers": {
    "zulip": {
      "command": "node",
      "args": ["/path/to/zulip-mcp-server/dist/server.js"],
      "env": {
        "ZULIP_URL": "https://your-organization.zulipchat.com",
        "ZULIP_EMAIL": "your-bot-email@yourcompany.com", 
        "ZULIP_API_KEY": "your-api-key-here"
      }
    }
  }
}

Option 2: Using .env File

If you prefer using a .env file, ensure it's in the project directory and use:

{
  "mcpServers": {
    "zulip": {
      "command": "node",
      "args": ["/path/to/zulip-mcp-server/dist/server.js"],
      "cwd": "/path/to/zulip-mcp-server"
    }
  }
}

Claude Desktop Config Location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Cursor Integration

To use this MCP server with Cursor IDE, add the following to your Cursor MCP settings:

Cursor MCP Configuration

Add to Cursor's MCP settings file (.cursor-mcp/config.json in your workspace or global settings):

{
  "mcpServers": {
    "zulip": {
      "command": "node",
      "args": ["/path/to/zulip-mcp-server/dist/server.js"],
      "env": {
        "ZULIP_URL": "https://your-organization.zulipchat.com",
        "ZULIP_EMAIL": "your-bot-email@yourcompany.com",
        "ZULIP_API_KEY": "your-api-key-here"
      },
      "capabilities": {
        "tools": true,
        "resources": true
      }
    }
  }
}

Cursor MCP Config Location:

  • Workspace: .cursor-mcp/config.json in your project root

  • Global: Platform-specific Cursor settings directory

Raycast MCP Extension

To use this MCP server with Raycast, configure it in the MCP extension settings:

Raycast MCP Configuration

Add to Raycast MCP extension configuration:

{
  "servers": {
    "zulip": {
      "name": "Zulip Integration",
      "description": "Send messages and interact with Zulip workspace",
      "command": "node",
      "args": ["/path/to/zulip-mcp-server/dist/server.js"],
      "env": {
        "ZULIP_URL": "https://your-organization.zulipchat.com",
        "ZULIP_EMAIL": "your-bot-email@yourcompany.com",
        "ZULIP_API_KEY": "your-api-key-here"
      },
      "icon": "💬",
      "categories": ["communication", "productivity"]
    }
  }
}

Raycast Setup Steps:

  1. Install the Raycast MCP extension

  2. Open Raycast preferences → Extensions → MCP

  3. Add new server configuration

  4. Paste the JSON configuration above

  5. Update paths and credentials accordingly

Raycast Usage:

  • Use ⌘ + Space to open Raycast

  • Search for "Zulip" commands

  • Execute MCP tools directly from Raycast interface

Supported MCP Clients

This server is compatible with any MCP-compliant client. Here are the verified integrations:

Platform

Config Type

Status

Usage

Claude Desktop

JSON config

✅ Verified

AI conversations with Zulip integration

Cursor IDE

Workspace/Global config

✅ Verified

Code editor with Zulip notifications

Raycast

Extension config

✅ Verified

Quick commands and automation

Other MCP Clients

Standard MCP protocol

🔄 Compatible

Any MCP-compliant application

Universal MCP Command:

node /path/to/zulip-mcp-server/dist/server.js

Development

Scripts

npm run dev          # Development with hot reload
npm run build        # Build for production
npm test            # Run tests
npm run lint        # Lint TypeScript
npm run typecheck   # Type checking

Project Structure

src/
├── server.ts        # Main MCP server
├── zulip/
│   └── client.ts    # Zulip API client
└── types.ts         # TypeScript definitions

Testing

Test the server using MCP Inspector:

npx @modelcontextprotocol/inspector npm start

Usage Examples

Sending Messages

// Send to a stream
await callTool("send-message", {
  type: "stream",
  to: "general",
  topic: "Daily Standup",
  content: "Good morning team! 👋\n\n**Today's Goals:**\n- Review PR #123\n- Deploy feature X"
});

// Direct message
await callTool("send-message", {
  type: "direct",
  to: "user@example.com",
  content: "Hey! Can you review the latest changes when you have a moment?"
});

Getting Messages

// Get recent messages from a stream
await callTool("get-messages", {
  narrow: [["stream", "general"], ["topic", "announcements"]],
  num_before: 50
});

// Search messages
await callTool("get-messages", {
  narrow: [["search", "deployment"], ["sender", "admin@example.com"]]
});

Stream Management

// List subscribed streams
await callTool("get-subscribed-streams", {
  include_subscribers: true
});

// Get stream topics
await callTool("get-topics-in-stream", {
  stream_id: 123
});

Markdown Formatting Support

The server includes a comprehensive formatting guide resource. Zulip supports:

  • Standard Markdown: Bold, italic, code, links, lists

  • Mentions: @**Full Name** (notify), @_**Name**_ (silent)

  • Stream Links: #**stream-name**

  • Code Blocks: With syntax highlighting

  • Math: LaTeX expressions with $$math$$

  • Spoilers: ||hidden content||

  • Custom Emoji: Organization-specific emoji

Error Handling

The server provides comprehensive error handling:

  • Network connectivity issues

  • Authentication failures

  • Permission errors

  • Rate limiting

  • Invalid parameters

  • Zulip API errors

All errors include helpful messages for debugging.

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Add tests for new functionality

  4. Ensure TypeScript compilation passes

  5. Submit a pull request

Support

For issues and questions:

Available Tools

25 tools
add-emoji-reactionC

Add an emoji reaction to a message.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesID of the message to react to
emoji_nameYesEmoji name (e.g., 'thumbs_up', 'heart', 'rocket') or custom emoji name
emoji_codeNoUnicode code point for the emoji
reaction_typeNoType of emoji reaction

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It only states the basic operation without addressing idempotency, error handling, authentication requirements, or impact of duplicate reactions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that communicates the core purpose without redundancy. However, it is so minimal that it does not add much value beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters and no annotations or output schema, the description is insufficient. It does not explain optional parameter behavior, return values, or edge cases, relying entirely on schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, so the schema already documents each parameter. The tool description adds no extra meaning beyond the schema, resulting in a baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add an emoji reaction') and the target resource ('to a message'), distinguishing it from siblings like 'remove-emoji-reaction'. However, it lacks any additional specificity about context or scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., remove-emoji-reaction). The description does not mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-draftB

📝 CREATE DRAFT: Save a message as draft for later editing or sending. For user IDs in the 'to' field, use search-users or get-users tool to discover available users and their IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesDraft message type: 'stream' for channels, 'private' for direct messages
toYesArray of user IDs for private messages, or single channel ID for stream messages
topicYesTopic for stream messages (required even for private messages in API)
contentYesDraft message content with Markdown formatting
timestampNoUnix timestamp for draft creation (optional, defaults to current time)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that the tool saves a draft for later editing/sending and notes the topic requirement from the schema, but lacks details on permissions, rate limits, success/failure behavior, or how to later send the draft.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded, and efficient. Minor stylistic fluff (emoji, all-caps) does not detract significantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters, no output schema, and no annotations, the tool description is incomplete. It explains purpose and gives a usage tip but omits return values, error handling, and lifecycle context (e.g., how to later send the draft).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds a tip about user IDs but otherwise does not enrich parameter understanding beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('save a message as draft') and resource ('draft'), distinguishing it from send-message and edit-draft. However, it does not explicitly differentiate from create-scheduled-message, missing a chance to clarify scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a specific, actionable guideline: use search-users or get-users to find user IDs for the 'to' field. It does not, however, explain when not to use this tool or mention alternatives for similar tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-scheduled-messageB

Schedule a message to be sent at a future time. For direct messages, use comma-separated email addresses or get user info from the users-directory resource (zulip://users).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesMessage type: 'stream' for channels, 'direct' for private messages
toYesFor streams: channel name (e.g., 'general'). For direct: comma-separated user emails (e.g., 'user@example.com,user2@example.com')
contentYesMessage content with Markdown formatting
topicNoTopic for stream messages
scheduled_delivery_timestampYesUnix timestamp when message should be sent (seconds since epoch)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It only states it schedules a message at a future time, but lacks details on behavior like whether messages are editable, cancelable, or any side effects. Minimal disclosure for a scheduling tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundant words, front-loaded with the main purpose. Every part adds value without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is too thin. It does not explain post-scheduling behavior (confirmation, errors), timezone handling, or relationship with sibling tools like edit-scheduled-message. Users need more context for correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers all parameters with 100% description coverage. The description adds context for the 'to' parameter (comma-separated emails and resource hint), but no additional semantics for other parameters. Baseline 3 with slight improvement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it schedules a future message, with a specific verb and resource. It implicitly distinguishes from 'send-message' (immediate) and 'edit-scheduled-message' (edit), but does not explicitly differentiate from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance for the 'to' parameter (comma-separated emails for direct, reference to users-directory resource), but does not explain when to use this tool versus alternatives like 'send-message' (for immediate sending) or 'edit-scheduled-message'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-messageB

Delete a message by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesUnique ID of the message to delete

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey behavioral traits. It only states 'Delete', missing details about whether the deletion is permanent, any notifications triggered, or side effects on related resources.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no extraneous words. It is front-loaded and efficiently communicates the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one parameter, no output schema), the description is minimally adequate but fails to cover important behavioral aspects like permanence or authorization. It is not fully complete for an agent to use confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides full coverage and a description for the single parameter. The tool description adds no additional meaning beyond what the schema already offers, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the resource ('a message by its ID'), effectively distinguishing it from siblings like edit-message or send-message. However, it could be more specific about permanence or scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites (e.g., ownership or permissions) or when it should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit-draftC

Update an existing message draft. For user IDs in the 'to' field, use the users-directory resource (zulip://users) or get-users tool to discover available users and their IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idYesUnique draft ID to edit
typeYesDraft message type
toYesArray of user IDs or channel ID
topicYesTopic for the draft
contentYesDraft content
timestampNoUpdated timestamp

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It only states 'update' without detailing side effects, idempotency, prerequisites (e.g., draft existence), or return value. This is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two sentences that directly convey the purpose and a key usage hint. It is concise and front-loaded, though the hint could be more concisely integrated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters, no output schema, and no annotations, the description lacks information about expected output, error conditions, update semantics (partial vs. full), and constraints like the 'type' enum. It is incomplete for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description adds value by explaining how to use the 'to' parameter (use users-directory tool), but provides no additional semantics for the other five parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an existing message draft,' specifying the verb and resource. It differentiates from siblings like create-draft and edit-message by focusing on drafts, but does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., create-draft, edit-message). The only guidance is for using a complementary tool to discover user IDs, not for choosing this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit-messageB

Edit an existing message's content or topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesUnique ID of the message to edit
contentNoNew message content with Markdown formatting
topicNoNew topic name (for stream messages only)

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It fails to disclose important behavioral traits such as editing permissions, time limits, notification impacts, or reversibility. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, clear sentence that is front-loaded with the key action and object. Every word adds value; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three parameters, no output schema, and no annotations, the description is too minimal. It lacks information about post-edit behavior, constraints (e.g., can't edit after a time limit), or prerequisites (e.g., user must be message author).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions. The description adds minor details ('with Markdown formatting', 'for stream messages only') that are already present in schema descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (edit) and resource (existing message), and specifies that content or topic can be edited. This distinguishes it from sibling tools like delete-message or send-message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives (e.g., send-message for new messages, edit-draft for drafts). Usage context is only implied by the verb 'edit'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit-scheduled-messageA

Modify a scheduled message before it's sent. For direct messages, use comma-separated email addresses or get user info from the users-directory resource (zulip://users).

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduled_message_idYesUnique scheduled message ID to edit
typeNoMessage type
toNoRecipients (channel name or comma-separated emails)
contentNoNew message content
topicNoNew topic for stream messages
scheduled_delivery_timestampNoNew delivery timestamp

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. However, it only states the basic function without detailing mutation behavior, restrictions (e.g., cannot modify sent messages), or side effects. The description is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences: first defines purpose, second adds a practical tip. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete. It does not explain return values, error conditions, permissions, or behavior on success. For a mutation tool with 6 parameters, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all 6 parameters, so baseline is 3. The description does not add any extra meaning beyond the schema; it just restates the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Modify a scheduled message before it's sent,' which is a specific verb+resource. It distinguishes from siblings like create-scheduled-message (creation) and delete-message (deletion). It also provides context for direct messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives guidance on how to handle direct messages (comma-separated emails, using users-directory resource). It implies 'before it's sent' but does not explicitly state when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-draftsA

Retrieve all saved message drafts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description bears the burden. It states 'Retrieve', implying read-only behavior, but does not explicitly confirm non-destructive nature, rate limits, or scope (e.g., user-specific drafts). Adequate for a simple retrieval.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words. Perfectly concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with no parameters and no output schema, the description is almost complete. Could optionally mention that it returns drafts for the current user, but it's not strictly necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the baseline is 4 as per guidelines. The description adds no parameter details, but none are needed since the schema already covers all (empty).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb-resource combination ('Retrieve all saved message drafts'), which exactly describes the tool's function. It distinguishes from siblings like 'create-draft' and 'edit-draft' by specifying retrieval of all drafts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. There is no mention of when not to use it, nor any comparison to sibling tools like 'get-message' or 'search-users'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-messageA

🔍 SINGLE MESSAGE: Get complete details about one specific message when you have its ID. Use this for in-depth analysis, checking edit history, reactions, or metadata. Returns single message with full details.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesUnique message ID to retrieve
apply_markdownNoReturn HTML content (true) or raw Markdown (false). Default: true
allow_empty_topic_nameNoAllow empty topic names in response (default: false)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description implies read-only operation but does not explicitly state behavioral traits like no side effects or authorization requirements. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with emoji, front-loaded with purpose. Every word adds value, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 params, no output schema, and is a simple retrieval, the description adequately states it returns a single message with full details. Could mention return format but not strictly necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions for all three parameters. Description adds no extra detail beyond schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it gets a single message by ID, with specific use cases like in-depth analysis, edit history, reactions. Distinguishes from sibling get-messages (plural) and others.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'when you have its ID' and lists use cases. Does not explicitly say when not to use, but context is clear there are alternatives for batch operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-message-read-receiptsB

Get list of users who have read a specific message.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesUnique message ID to get read receipts for

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility. It does not disclose what happens if the message_id is invalid, whether the list is empty or includes user details, or any permissions needed. The description is too brief for a mutation-free read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. However, it could be more informative without losing conciseness, such as mentioning the output format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one required parameter, no output schema, no annotations), the description is minimally adequate. It states the purpose and the parameter, but lacks details about the response format and error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter 'message_id' is fully described in the schema as 'Unique message ID to get read receipts for.' The description adds no extra meaning beyond the schema, and with 100% schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get list of users who have read a specific message.' It uses a specific verb ('Get') and resource ('list of users'), and it distinguishes itself from sibling tools like 'add-emoji-reaction' or 'send-message' by focusing solely on read receipts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool vs. alternatives, such as when to use it over other message-related tools. It does not mention prerequisites (e.g., message must exist) or conditions for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-messagesA

📋 BULK RETRIEVAL: Get multiple messages with filtering, pagination, and search. Use this to browse conversations, search for content, or get message history. Returns array of messages with basic details.

ParametersJSON Schema
NameRequiredDescriptionDefault
anchorNoStarting point: message ID, 'newest', 'oldest', or 'first_unread'
num_beforeNoNumber of messages before anchor (max 1000)
num_afterNoNumber of messages after anchor (max 1000)
narrowNoFilters: [['stream', 'channel-name'], ['topic', 'topic-name'], ['sender', 'email'], ['search', 'query']]
message_idNoGet specific message by ID instead of using anchor/num parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must cover behavioral traits. It correctly implies a read-only operation and mentions return type ('array of messages with basic details'), but does not disclose potential side effects, authentication needs, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with front-loaded key information ('BULK RETRIEVAL'). Minor waste from emoji and capitalization, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should explain return values; 'array of messages with basic details' is vague. Parameters are well-covered in schema, but lack of specifics on 'basic details' is a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions for all 5 parameters. The description adds no additional meaning beyond summarizing the existing schema fields (filtering, pagination, search).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get multiple messages' with verbs 'get' and resource 'messages'. It distinguishes from siblings like get-message (singular) and search-users by explicitly mentioning bulk retrieval and filtering capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides usage context: 'browse conversations, search for content, or get message history.' However, it lacks explicit guidance on when not to use this tool compared to alternatives like get-message or search-users.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-startedA

🚀 START HERE: Test connection and get workspace overview. Use this first to verify everything is working and see available streams. Perfect for orientation and troubleshooting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It implies a safe, read-only operation ('test connection', 'get overview') without side effects, but could explicitly state it does not modify data or require special permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using a single sentence plus a short follow-up. It front-loads key information with an emoji and 'START HERE', making it immediately scannable. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, no output schema, no annotations), the description fully covers its purpose and usage context. It explains why an agent might need this tool first, which is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description cannot add parameter-level details. The schema coverage is 100% (trivially), earning a baseline score of 4 as per guidelines.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Test connection and get workspace overview' with action-oriented language like 'verify everything is working' and 'see available streams'. It distinguishes itself from sibling tools which are more specific (e.g., get-stream-by-id, get-messages).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises to 'Use this first' and labels it as 'Perfect for orientation and troubleshooting', providing clear guidance on when to use. No alternative tools are mentioned, but given its unique starter role, it's acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-stream-by-idB

📊 STREAM DETAILS: Get comprehensive information about a stream (channel) when you have its numeric ID. Returns stream settings, description, subscriber count, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
stream_idYesUnique stream ID to get details for
include_subscribersNoInclude subscriber list

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states what is returned ('stream settings, description, subscriber count') but does not disclose behavioral traits like authentication requirements, rate limits, or data freshness. More details on the response structure would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with an emoji, but it conveys the purpose and key return items efficiently. No unnecessary words; however, the emoji may be seen as informal. Could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description provides a basic overview of what is returned ('stream settings, description, subscriber count'). However, it lacks details on exact fields, pagination, or error cases. For a simple retrieval tool, it is minimally adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds minimal extra meaning: it implies stream_id is numeric (matching schema) and mentions returning subscriber count, but does not elaborate on the include_subscribers parameter beyond the schema's description. No significant value added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get comprehensive information about a stream (channel) when you have its numeric ID.' It uses a specific verb (get) and resource (stream) and distinguishes from siblings like get-stream-id (which likely retrieves ID) and get-subscribed-streams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some guidance ('when you have its numeric ID') but does not explicitly mention when not to use this tool or name alternatives. Siblings like get-stream-id (for when you don't have the ID) are not referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-stream-idA

🔢 STREAM ID LOOKUP: Get the numeric ID of a stream (channel) when you know its name. Use this to get the stream ID needed for other operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
stream_nameYesName of the stream to get ID for

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must carry the burden. It only mentions getting a numeric ID but does not disclose behavior on stream not found, authentication needs, or rate limits. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence with emoji and bold, no fluff, front-loaded. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple lookup tool with one parameter and no output schema, the description is fairly complete. It lacks details on return format or error handling, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and description of parameter is clear. Description adds 'when you know its name' but no additional semantics beyond schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Get' and the resource 'stream ID', and distinguishes it from sibling tool 'get-stream-by-id' which does the opposite. The emoji and bolding also help.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description says to use this tool to get stream ID for other operations, implying a prerequisite. However, it does not provide when-not-to-use or explicit alternatives to this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-subscribed-streamsA

📺 USER STREAMS: Get all streams you're subscribed to. Use this to see what streams are available before sending messages. Note: In Zulip, 'streams' and 'channels' refer to the same thing - conversation spaces for teams.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_subscribersNoInclude subscriber lists for streams

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Implies a read operation but does not disclose behavioral traits like authorization requirements, rate limits, or data freshness. Adequate but limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no waste. Front-loaded with the core purpose, followed by a usage hint and terminology note. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no output schema), the description covers purpose, usage context, and terminology clarification. Sufficient for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single optional parameter 'include_subscribers'. The description does not add any additional meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all streams you're subscribed to', specifying the verb (get) and resource (subscribed streams). It distinguishes from sibling tools like get-stream-by-id and get-topics-in-stream by focusing on user's subscribed streams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete use case: 'Use this to see what streams are available before sending messages.' Also clarifies terminology equivalence (streams and channels). Lacks explicit when-not-to-use or alternatives but gives clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-topics-in-streamA

💬 STREAM TOPICS: Get all recent topics (conversation threads) in a specific stream (channel). Use this to browse what's being discussed in a stream.

ParametersJSON Schema
NameRequiredDescriptionDefault
stream_idYesUnique stream ID to get topics for

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It describes the tool as retrieving 'recent topics', implying a read-only operation, but does not specify ordering, pagination, or permission requirements. This is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, each serving a distinct purpose: first explains the tool's function, second gives usage guidance. No redundant information, and the key info is front-loaded. The emoji adds visual clarity without detracting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description covers the main action and use case. However, since there is no output schema, the return format (e.g., what fields are included, whether paginated) is omitted, leaving the agent without complete context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides a clear description for the sole parameter (stream_id). The tool description does not add extra semantic meaning beyond reiterating that it's for topics in a stream. Baseline score of 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('all recent topics in a specific stream'), and differentiates from sibling tools like get-messages by focusing on conversation threads (topics). The emoji and bolded 'STREAM TOPICS' reinforce the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Use this to browse what's being discussed in a stream' provides a clear usage context. However, it lacks explicit contrasts with alternatives (e.g., when to use get-messages instead) or exclusions, leaving some ambiguity for complex queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-userA

🆔 DETAILED LOOKUP: Get comprehensive user profile when you have their user ID (from search-users results). Returns complete user information including role, timezone, avatar, and custom profile fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesUnique user ID to retrieve information for
client_gravatarNoInclude Gravatar URL (default: true)
include_custom_profile_fieldsNoInclude custom profile fields (default: false)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must cover transparency. It states the tool 'Returns complete user information', implying a safe read operation. It does not disclose if any side effects occur or permission requirements, but for a GET-like tool, this is adequate. No contradiction with annotations as none exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using a single sentence with an emoji for emphasis. It front-loads the purpose and includes key return fields without unnecessary fluff. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, 1 required, no output schema, no annotations), the description covers the input context (user ID source) and output (profile fields). It lacks mention of default values or error handling, but the schema complements these gaps. Fairly complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description adds that user_id comes from search-users, but does not elaborate on the boolean parameters beyond what the schema provides. With high schema coverage, baseline 3 is appropriate; description adds marginal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get comprehensive user profile' when you have their user ID, specifying the resource (user profile) and action (get). It distinguishes from siblings by mentioning the ID comes from search-users results, and lists returned fields (role, timezone, avatar, custom profile fields).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'when you have their user ID (from search-users results)', guiding the agent to use this tool only after obtaining the ID via search-users. It implies alternatives like search-user-by-email for email-based lookups, but lacks explicit when-not-to-use or direct sibling comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-user-by-emailA

📧 EXACT LOOKUP: Find a user when you have their exact email address. Use this when you know the specific email and need detailed profile information. Returns single user with complete details.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address of the user to look up
client_gravatarNoInclude Gravatar profile image URL
include_custom_profile_fieldsNoInclude organization-specific custom profile fields

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states 'Returns single user with complete details' but does not disclose behavior for missing emails, rate limits, authentication needs, or any side effects. For a read-only lookup, this is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with emoji, clear and to the point. Every word adds value, and the structure is front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the tool's function and result (single user with complete details). Could optionally mention edge cases (e.g., if email not found), but overall sufficient for the 3 parameters and sibling context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema's descriptions, which already explain the parameters (email, client_gravatar, include_custom_profile_fields). No extra depth provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'EXACT LOOKUP: Find a user when you have their exact email address.' It specifies the verb (find), resource (user), and condition (exact email), and distinguishes from siblings like 'get-user' and 'search-users' by emphasizing exact match.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Use this when you know the specific email and need detailed profile information,' implying when to use, but does not explicitly state when not to use or mention alternatives. Siblings include 'get-user' (for other identifiers) and 'search-users' (for partial matching), but no exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-user-groupsB

Get all user groups in the organization.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden for transparency. It only states the action without disclosing any behavioral traits such as rate limits, authentication requirements, or whether the result includes group members.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It is front-loaded and effectively communicates the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and annotations, the description is insufficient for an agent to fully understand what the tool returns (e.g., group IDs, names, members). It leaves too much to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and schema coverage is 100%. The description does not need to add meaning beyond the schema, and it correctly implies that no input is needed. Baseline 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and resource 'user groups', clearly distinguishing it from sibling tools like 'get-users' and 'get-user'. It unambiguously states it retrieves all groups in the organization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or comparisons to similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-usersA

👥 ALL USERS: Get complete list of all users in the organization with their profile information. Use this to see everyone at once or when you need the full user directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_gravatarNoInclude Gravatar URLs for users (default: true)
include_custom_profile_fieldsNoInclude custom profile fields (default: false)

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It only states 'complete list' and 'profile information', lacking details on pagination, rate limits, or any side effects. For a list tool, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with emoji, front-loaded purpose, no wasted words. Excellent conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple with 2 optional booleans and no output schema. Description covers what it returns (users, profile info) but omits pagination details. Adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions. Description adds no extra meaning beyond schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get complete list of all users' with specific verb and resource. Differentiates from 'get-user' (singular) and 'search-users' (filtered).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to see everyone at once or when you need the full user directory', providing clear context. Does not explicitly mention when not to use but implies alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove-emoji-reactionB

Remove an emoji reaction from a message.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesID of the message to remove reaction from
emoji_nameYesEmoji name to remove (e.g., 'thumbs_up', 'heart')
emoji_codeNoUnicode code point for the emoji
reaction_typeNoType of emoji reaction

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description only states 'remove' without disclosing side effects (e.g., error if reaction missing), auth requirements, or idempotency. Minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence of 7 words, directly stating purpose. No wasted words, front-loaded with action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has 4 parameters and no output schema. Description is minimal but sufficient for a straightforward deletion action. However, missing context like required conditions or error states.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all 4 parameters have descriptions), so baseline is 3. The description adds no further meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Remove an emoji reaction from a message.' uses a specific verb (remove) and resource (emoji reaction), and clearly distinguishes from sibling 'add-emoji-reaction'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'delete-message' or 'add-emoji-reaction'. No mention of prerequisites or context (e.g., reaction must exist, user must own it).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search-usersA

🔍 DISCOVERY: Search for users by partial name or email when you don't know exact details. Use this first to explore and find users before sending direct messages. Returns multiple matching results with basic info (name, email, ID).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesName, email, or partial match to search for users
limitNoMaximum number of results to return (default: 10)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the burden. It states the tool returns multiple matching results with basic info (name, email, ID), implying a read-only, non-destructive operation. It lacks explicit statements about idempotency or error handling, but the purpose is clear. Slightly lacking in stating limits or pagination, but adequate for a simple search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with key information. The emoji and 'DISCOVERY:' label are slightly extraneous but not harmful. Every sentence earns its place, and the description is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with no output schema, the description provides essential information: what it does, when to use it, what parameters it accepts (via schema), and what it returns. It is complete enough for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds context about partial name or email matching, which aligns with the schema. It does not add significant meaning beyond what the schema already provides, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search for users' and the resource 'users'. It distinguishes from siblings by specifying 'when you don't know exact details' and 'use this first to explore... before sending direct messages', which differentiates it from tools like get-user or get-user-by-email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance on when to use: 'when you don't know exact details' and 'use this first to explore and find users before sending direct messages'. This sets clear expectations compared to other sibling tools that require exact identifiers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send-messageA

💬 SEND MESSAGE: Send a message to a Zulip stream (channel) or direct message to users. IMPORTANT: For streams use exact names from 'get-subscribed-streams'. For DMs use actual email addresses from 'search-users' tool (NOT display names). Always include 'topic' for stream messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes'stream' for channel messages, 'direct' for private messages
toYesFor streams: channel name (e.g., 'general'). For direct: comma-separated user emails (e.g., 'user@example.com' or 'user1@example.com,user2@example.com')
contentYesMessage content using Zulip Markdown syntax. Support mentions (@**Name**), code blocks, links, etc.
topicNoTopic name for stream messages (required for streams, max length varies by server)

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behaviors. It explains that the tool sends messages and gives input validation notes (e.g., 'topic' required for streams), but does not cover idempotency, rate limits, or error scenarios. Adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The purpose is stated first, followed by critical usage tips. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and moderate complexity. The description covers core functionality, parameter usage, and prerequisites. Could add more about error handling or limitations, but is sufficient for a basic messaging tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds significant value: it explains the 'type' enum values, how to format 'to' for streams vs. DMs, gives Markdown examples for 'content', and clarifies the conditional requirement for 'topic'. This goes well beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Send a message') and the resources ('Zulip stream' or 'direct message to users'). It distinguishes between the two message types, and the purpose is unique among siblings such as delete-message or edit-message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: use exact stream names from 'get-subscribed-streams', use email addresses from 'search-users' for DMs (not display names), and include 'topic' for stream messages. These instructions prevent common errors but do not contrast with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update-statusA

Update user status message with emoji and availability. Examples: Unicode emoji (emoji_name: 'coffee', emoji_code: '2615'), custom org emoji (reaction_type: 'realm_emoji'), or Zulip special emoji (reaction_type: 'zulip_extra_emoji').

ParametersJSON Schema
NameRequiredDescriptionDefault
status_textNoStatus message text (max 60 chars, empty string clears status)
awayNoSet away status (deprecated in Zulip 6.0, will be removed)
emoji_nameNoEmoji name: for unicode use short name (e.g., 'coffee', 'airplane'), for realm_emoji use custom name, for zulip_extra use special names like 'zulip'
emoji_codeNoEmoji identifier: for unicode_emoji use codepoint (e.g., '2615' for coffee), for realm_emoji use custom emoji ID, for zulip_extra use emoji ID
reaction_typeNoEmoji type: 'unicode_emoji' for standard emojis (default), 'realm_emoji' for organization custom emojis, 'zulip_extra_emoji' for special Zulip emojis

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behavioral traits. It only mentions updating status with emoji and availability, but fails to mention that away is deprecated, that empty status_text clears status, or any side effects. The description adds minimal behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence with additional examples, making it relatively concise. However, it is front-loaded but could be better structured with separate guidance for each emoji type.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main functionality but omits details about the away parameter deprecation, behavior when status_text is empty, and the response format. Given the number of parameters and no output schema, it is somewhat complete but lacks depth.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by providing concrete examples of how emoji parameters work together (e.g., emoji_name: 'coffee', emoji_code: '2615' for unicode). This clarifies parameter usage beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates user status message with emoji and availability. It specifies verb 'Update' and resource 'user status message', and distinguishes from siblings like add-emoji-reaction or edit-message, which are different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for setting status with emoji but does not explicitly state when to use this tool versus alternatives like send-message or add-emoji-reaction. No exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload-fileB

Upload a file or image to Zulip.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesName of the file including extension (e.g., 'document.pdf', 'image.png')
contentYesBase64 encoded file content
content_typeNoMIME type (e.g., 'image/png', 'application/pdf'). Auto-detected if not provided

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not mention file size limits, overwrite behavior, authentication requirements, or response format. This is insufficient for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundancy. However, it could be slightly expanded to include key usage context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and lacks details on return values, error conditions, or side effects. For a file upload tool, this is insufficient for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. The description adds no extra meaning beyond the schema, earning the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (upload), resource (file or image), and platform (Zulip). It distinguishes this tool from siblings like send-message or add-emoji-reaction by focusing on file upload.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for uploading files, but it provides no explicit guidance on when to use it versus alternatives, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv1.0.0
    • Changedget-drafts1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget-started1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget-user-groups1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 25 tool updates
    • First observedadd-emoji-reaction
    • First observedcreate-draft
    • First observedcreate-scheduled-message
    • First observeddelete-message
    • First observededit-draft
    • First observededit-message
    • First observededit-scheduled-message
    • First observedget-drafts
    • First observedget-message
    • First observedget-message-read-receipts
    • First observedget-messages
    • First observedget-started
    • First observedget-stream-by-id
    • First observedget-stream-id
    • First observedget-subscribed-streams
    • First observedget-topics-in-stream
    • First observedget-user
    • First observedget-user-by-email
    • First observedget-user-groups
    • First observedget-users
    • First observedremove-emoji-reaction
    • First observedsearch-users
    • First observedsend-message
    • First observedupdate-status
    • First observedupload-file

TDQS

A3.6/5.0
Disambiguation5/5

All 25 tools have clearly distinct purposes. Message tools are differentiated by operation type (single vs bulk, send vs edit vs delete). Stream and user tools each target a specific resource and action, leaving no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb-noun pattern with hyphens (e.g., add-emoji-reaction, get-message, send-message). Even 'get-started' fits the pattern. No mixing of styles.

Tool Count4/5

25 tools is on the higher end but appropriate for a comprehensive chat server like Zulip. The number covers message operations, streams, users, emoji, drafts, scheduled messages, and file uploads, though a few could be merged (e.g., get-user and get-user-by-email could be one tool).

Completeness3/5

The tool set covers core messaging and user operations well, but notable gaps exist: no tools to create or update streams, nor to manage user groups beyond listing them. Also, there is no tool to get all streams (only subscribed ones). These omissions could limit agent workflows.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that enables AI assistants like Claude to interact with Zulip workspaces, supporting capabilities such as posting messages, listing channels, sending direct messages, and accessing conversation history.
    8
    12
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    A server implementing Model Context Protocol that enables AI assistants to interact with Slack API through a standardized interface, providing tools for messaging, channel management, user information retrieval, and more.
    11
    110
    Apache 2.0

Appeared in Searches

Latest Blog Posts

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/avisekrath/zulip-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server