Zulip MCP Server
The Zulip MCP Server enables programmatic interaction with a Zulip workspace, providing tools for AI assistants and applications to integrate with Zulip.
Key capabilities include:
Message Operations: Send, edit, delete, and retrieve messages, add emoji reactions, upload files/images, check read receipts, and manage scheduled messages and drafts
Stream Management: List subscribed streams, get stream information by ID/name, and browse topics within streams
User Management: Search and retrieve user information, update status and availability
Organization Features: Access user groups and organization information
Formatting Support: Utilize Zulip's Markdown syntax including mentions and code blocks
The server is designed to integrate with MCP-compliant clients like Claude Desktop, Cursor IDE, and Raycast.
Compatible with Raycast MCP extension, enabling quick commands and automation for Zulip interactions directly from the Raycast interface.
Exposes Zulip REST API capabilities, allowing AI assistants to interact with Zulip workspaces through message operations (sending, retrieving, editing), channel management, user operations, and handling scheduled messages and drafts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Zulip MCP Serversend a message to the #general stream saying the weekly team meeting starts in 10 minutes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Zulip MCP 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 DMsget-started- Test connection and get workspace overview
Message Operations
send-message- Send to streams or direct messagesget-messages- Retrieve with advanced filtering and searchget-message- Get detailed information about specific messageupload-file- Share files and imagesedit-message- Modify content or move topicsdelete-message- Remove messages (admin permissions required)get-message-read-receipts- Check who read messagesadd-emoji-reaction- React with Unicode or custom emojiremove-emoji-reaction- Remove emoji reactions from messages
Scheduled Messages & Drafts
create-scheduled-message- Schedule future messagesedit-scheduled-message- Modify scheduled messagescreate-draft- Create new message draftsget-drafts- Retrieve saved draftsedit-draft- Update draft content
Stream Management
get-subscribed-streams- List user's stream subscriptionsget-stream-id- Get stream ID by nameget-stream-by-id- Detailed stream informationget-topics-in-stream- Browse recent topics
User Operations
get-users- List organization membersget-user-by-email- Find users by emailget-user- Get detailed user information by IDupdate-status- Set status message and availabilityget-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
Node.js 18+ with npm
TypeScript 5+
Access to a Zulip instance (e.g., https://your-organization.zulipchat.com)
Zulip API credentials (bot token or API key)
Quick Start
Clone and install dependencies:
git clone <repository-url>
cd zulip-mcp-server
npm installConfigure environment variables:
cp .env.example .env
# Edit .env with your Zulip credentialsBuild and run:
npm run build
npm startEnvironment 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=productionGetting Zulip API Credentials
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
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:
Option 1: Using Environment Variables (Recommended)
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.jsonWindows:
%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.jsonin your project rootGlobal: 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:
Install the Raycast MCP extension
Open Raycast preferences → Extensions → MCP
Add new server configuration
Paste the JSON configuration above
Update paths and credentials accordingly
Raycast Usage:
Use
⌘ + Spaceto open RaycastSearch 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.jsDevelopment
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 checkingProject Structure
src/
├── server.ts # Main MCP server
├── zulip/
│ └── client.ts # Zulip API client
└── types.ts # TypeScript definitionsTesting
Test the server using MCP Inspector:
npx @modelcontextprotocol/inspector npm startUsage 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
Fork the repository
Create a feature branch
Add tests for new functionality
Ensure TypeScript compilation passes
Submit a pull request
Support
For issues and questions:
Check Zulip API documentation: https://zulip.com/api/
Review MCP specification: https://modelcontextprotocol.io/
Open GitHub issues for bugs or feature requests
Available Tools
25 toolsadd-emoji-reactionC
Add an emoji reaction to a message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | ID of the message to react to | |
| emoji_name | Yes | Emoji name (e.g., 'thumbs_up', 'heart', 'rocket') or custom emoji name | |
| emoji_code | No | Unicode code point for the emoji | |
| reaction_type | No | Type of emoji reaction |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Draft message type: 'stream' for channels, 'private' for direct messages | |
| to | Yes | Array of user IDs for private messages, or single channel ID for stream messages | |
| topic | Yes | Topic for stream messages (required even for private messages in API) | |
| content | Yes | Draft message content with Markdown formatting | |
| timestamp | No | Unix timestamp for draft creation (optional, defaults to current time) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Message type: 'stream' for channels, 'direct' for private messages | |
| to | Yes | For streams: channel name (e.g., 'general'). For direct: comma-separated user emails (e.g., 'user@example.com,user2@example.com') | |
| content | Yes | Message content with Markdown formatting | |
| topic | No | Topic for stream messages | |
| scheduled_delivery_timestamp | Yes | Unix timestamp when message should be sent (seconds since epoch) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Unique ID of the message to delete |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | Unique draft ID to edit | |
| type | Yes | Draft message type | |
| to | Yes | Array of user IDs or channel ID | |
| topic | Yes | Topic for the draft | |
| content | Yes | Draft content | |
| timestamp | No | Updated timestamp |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Unique ID of the message to edit | |
| content | No | New message content with Markdown formatting | |
| topic | No | New topic name (for stream messages only) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| scheduled_message_id | Yes | Unique scheduled message ID to edit | |
| type | No | Message type | |
| to | No | Recipients (channel name or comma-separated emails) | |
| content | No | New message content | |
| topic | No | New topic for stream messages | |
| scheduled_delivery_timestamp | No | New delivery timestamp |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Unique message ID to retrieve | |
| apply_markdown | No | Return HTML content (true) or raw Markdown (false). Default: true | |
| allow_empty_topic_name | No | Allow empty topic names in response (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Unique message ID to get read receipts for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| anchor | No | Starting point: message ID, 'newest', 'oldest', or 'first_unread' | |
| num_before | No | Number of messages before anchor (max 1000) | |
| num_after | No | Number of messages after anchor (max 1000) | |
| narrow | No | Filters: [['stream', 'channel-name'], ['topic', 'topic-name'], ['sender', 'email'], ['search', 'query']] | |
| message_id | No | Get specific message by ID instead of using anchor/num parameters |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stream_id | Yes | Unique stream ID to get details for | |
| include_subscribers | No | Include subscriber list |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stream_name | Yes | Name of the stream to get ID for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| include_subscribers | No | Include subscriber lists for streams |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stream_id | Yes | Unique stream ID to get topics for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Unique user ID to retrieve information for | |
| client_gravatar | No | Include Gravatar URL (default: true) | |
| include_custom_profile_fields | No | Include custom profile fields (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address of the user to look up | ||
| client_gravatar | No | Include Gravatar profile image URL | |
| include_custom_profile_fields | No | Include organization-specific custom profile fields |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| client_gravatar | No | Include Gravatar URLs for users (default: true) | |
| include_custom_profile_fields | No | Include custom profile fields (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | ID of the message to remove reaction from | |
| emoji_name | Yes | Emoji name to remove (e.g., 'thumbs_up', 'heart') | |
| emoji_code | No | Unicode code point for the emoji | |
| reaction_type | No | Type of emoji reaction |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Name, email, or partial match to search for users | |
| limit | No | Maximum number of results to return (default: 10) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | 'stream' for channel messages, 'direct' for private messages | |
| to | Yes | For streams: channel name (e.g., 'general'). For direct: comma-separated user emails (e.g., 'user@example.com' or 'user1@example.com,user2@example.com') | |
| content | Yes | Message content using Zulip Markdown syntax. Support mentions (@**Name**), code blocks, links, etc. | |
| topic | No | Topic name for stream messages (required for streams, max length varies by server) |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| status_text | No | Status message text (max 60 chars, empty string clears status) | |
| away | No | Set away status (deprecated in Zulip 6.0, will be removed) | |
| emoji_name | No | Emoji 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_code | No | Emoji 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_type | No | Emoji type: 'unicode_emoji' for standard emojis (default), 'realm_emoji' for organization custom emojis, 'zulip_extra_emoji' for special Zulip emojis |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Name of the file including extension (e.g., 'document.pdf', 'image.png') | |
| content | Yes | Base64 encoded file content | |
| content_type | No | MIME type (e.g., 'image/png', 'application/pdf'). Auto-detected if not provided |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v1.0.0- Changed
get-drafts1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get-started1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get-user-groups1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
25 tool updates
- First observed
add-emoji-reaction - First observed
create-draft - First observed
create-scheduled-message - First observed
delete-message - First observed
edit-draft - First observed
edit-message - First observed
edit-scheduled-message - First observed
get-drafts - First observed
get-message - First observed
get-message-read-receipts - First observed
get-messages - First observed
get-started - First observed
get-stream-by-id - First observed
get-stream-id - First observed
get-subscribed-streams - First observed
get-topics-in-stream - First observed
get-user - First observed
get-user-by-email - First observed
get-user-groups - First observed
get-users - First observed
remove-emoji-reaction - First observed
search-users - First observed
send-message - First observed
update-status - First observed
upload-file
TDQS
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.
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.
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).
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
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
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceThis server implements the Model Context Protocol to facilitate meaningful interaction and understanding development between humans and AI through structured tools and progressive interaction patterns.57-
- AlicenseAqualityCmaintenanceA 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.812Apache 2.0
- AlicenseAqualityBmaintenanceA 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.11110Apache 2.0
- FlicenseNot gradedqualityDmaintenanceA Python server implementing the Model Context Protocol that exposes tools for querying external APIs, compatible with Claude Desktop and ChatGPT Desktop.-
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/avisekrath/zulip-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server