mcp-max-messenger
Click on "Deploy 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., "@mcp-max-messengerSend a message to chat 123456789: 'The 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.
mcp-max-messenger
The first MCP server for MAX Messenger β Russia's national messenger by VK (75M+ users).
Connect AI clients (Claude Desktop, Cursor, n8n, and any MCP-compatible app) to MAX: send and read messages, manage chats and members, send media, handle button presses, format with HTML/Markdown β all through the open Model Context Protocol standard.
21 tools with full coverage of MAX Bot API.
Why MAX?
π·πΊ National messenger mandated for pre-installation on all smartphones in Russia (September 2025)
π± 75M+ registered users
π’ Recommended by the Ministry of Digital Development for government agencies and large enterprises
π€ Full Bot API with official SDKs: TypeScript, Python, Go, Java, PHP
Related MCP server: time-messenger-mcp-server
Quick Start
Prerequisites
Node.js 18+
A MAX bot token (create a bot at max.ru)
Claude Desktop / Cursor (stdio mode)
Add to your Claude Desktop config:
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"max-messenger": {
"command": "npx",
"args": ["-y", "@woyax/mcp-max-messenger"],
"env": {
"MAX_TOKEN": "YOUR_BOT_TOKEN"
}
}
}
}Restart Claude Desktop. The MAX tools will appear automatically.
Remote / Hosted mode (HTTP)
MAX_TOKEN=YOUR_BOT_TOKEN MCP_TRANSPORT=http MCP_PORT=3000 npx @woyax/mcp-max-messengerConnect any MCP client to http://your-server:3000/mcp.
Available Tools (21)
Messages
Tool | Description |
| Read messages from a chat (by chat_id or message_ids) |
| Send a message with text, HTML/Markdown, inline keyboard, media attachments |
| Edit message text and attachments |
| Delete a message |
| Pin a message in a chat |
| Unpin the currently pinned message |
Media
Tool | Description |
| Upload and send photo, video, audio, or file by URL |
| Show typing indicator, "sending photo/video/audio/file", mark as read |
Chats
Tool | Description |
| Bot info: name, ID, username, description |
| List all group chats the bot participates in |
| Full chat details: participants, pinned message, owner |
| Rename chat, change description or icon |
Members
Tool | Description |
| List chat members with roles |
| List chat administrators with permissions |
| Grant admin rights to a member |
| Revoke admin rights |
| Add users to a group chat |
| Remove a user from a group chat |
Events
Tool | Description |
| Incoming events: messages, button presses, new dialogs (long polling) |
| Respond to inline button press: show notification or update message |
Buttons (via send_message attachments)
5 button types supported: callback, link, message, request_contact, request_geo_location.
Usage Examples
Once connected to Claude Desktop, use natural language:
"Send a message to chat 123456789: 'The meeting starts in 10 minutes'"
"Send an approval request with Approve/Reject buttons to the team chat"
"Show me the last 10 messages from the announcements chat"
"Send this photo to the chat: https://example.com/image.jpg"
"Who are the members of the sales group? Make Alex an admin."
"Check for new incoming messages and button presses"
Configuration
Environment Variables
Variable | Required | Default | Description |
| β | β | Your MAX bot token |
| β |
| Transport: |
| β |
| Port for HTTP mode |
Command-line Flags
# Local stdio mode (default)
npx @woyax/mcp-max-messenger
# Remote HTTP mode
npx @woyax/mcp-max-messenger --transport http --port 3000Architecture
Two independent layers β tools work identically in both modes:
src/
βββ core/ # Business logic β shared between modes
β βββ max-client.ts # MAX API HTTP client
β βββ types.ts # TypeScript types for MAX API
β βββ tools/
β βββ bot.ts # get_bot_info
β βββ chats.ts # get_chats, get_chat, edit_chat, send_action
β βββ messages.ts # send/get/edit/delete/pin/unpin, send_media
β βββ members.ts # get_chat_members, get_admins, set/remove_admin, add/remove_members
β βββ updates.ts # get_updates, answer_callback
βββ transports/ # Transport layer β selected at runtime
β βββ stdio.ts # Local mode (Claude Desktop, Cursor)
β βββ http.ts # Remote mode (Streamable HTTP)
βββ index.ts # Entry point: transport selectionMAX API Notes
Authorization: Token passed as
Authorization: <token>β noBearerprefixBase URL:
https://platform-api.max.ruRate limit: 30 requests/second
Group chats:
GET /chatsreturns group chats onlyPersonal dialogs: Accessible via
get_updatesβ use the returnedchat_idwith all standard toolsMedia upload: Two-step process (upload β send). Audio/video tokens come from the upload step, not the file transfer
HTTP transport: Uses Streamable HTTP (SSE deprecated since MCP SDK 1.10.0)
Known MAX API Issues
remove_adminmay returnsuccess: truewithout actually revoking rights β confirmed bug on MAX sideopen_appbutton type returns "Field 'webApp' cannot be null" β MAX API bugadd_membersmay fail withadd.participant.privacyif the user has privacy mode enabled
Roadmap
HTTP mode testing on VPS with n8n integration
Hosted MCP service (connect by URL, no local install)
Webhook support for real-time event handling
answer_callbacktesting via n8n webhook workflow
Links
Author & Support
Built by Oleg Alekseev β ERP/AI integration architect.
π§ woyaxnini@gmail.com Β· woyax@yandex.com
π¬ MAX: max.ru/id503610654564_biz
Need help integrating AI agents with your ERP, CRM, or MAX? Custom MCP servers, n8n workflows, AI automation β contact me.
License
MIT + Commons Clause Β© Oleg Alekseev
Free to use for personal and corporate purposes. Selling as a hosted service requires author's permission. See LICENSE for details.
Available Tools
21 toolsadd_membersAdd MembersC
Add one or more users to a group chat. The bot must be an admin of the chat. Provide user_ids to add.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id of the group chat | |
| user_ids | Yes | List of user_ids to add to the chat |
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 only discloses the admin requirement but omits important behavioral traits such as possible side effects, rate limits, or what happens if users are already 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 concise, consisting of two short sentences with no superfluous information. 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 simplicity of the tool and lack of annotations/output schema, the description is incomplete. It fails to mention return values, error handling, or behavior in edge cases (e.g., adding duplicate users).
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 describes both parameters (chat_id and user_ids) with 100% coverage. The description adds no new semantic meaning beyond restating the schema, so a baseline score 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 action (add one or more users) and the resource (group chat), using a specific verb and resource. It distinguishes itself from sibling tools like 'remove_member' by the action. However, it lacks explicit differentiation from other tools.
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 key prerequisite (bot must be admin of the chat) but does not offer guidance on when to use this tool versus alternatives, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
answer_callbackAnswer CallbackA
Respond to an inline button click (callback event from get_updates). You can update the original message text and/or show a notification popup to the user. Must be called within 30 seconds of the button press.
| Name | Required | Description | Default |
|---|---|---|---|
| callback_id | Yes | The callback_id from the message_callback event (get_updates) | |
| user_id | Yes | The user_id of the user who clicked the button | |
| notification | No | Short notification text shown as a popup to the user (optional) | |
| message_text | No | New text for the original message (optional, updates the message in-place) | |
| message_format | No | Formatting for message_text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors (update text, show notification, time limit) without annotations. Could mention callback acknowledgment but still good.
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 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?
Covers main actions and constraint. No output schema, but description is sufficient for a callback response tool. Could mention error handling but not required.
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 3. Description adds minimal extra context beyond parameter descriptions (e.g., 'and/or' linking 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?
Clearly states verb 'respond' and resource 'inline button click (callback event)'. Distinguishes from sibling editing tools by specifying it is for callbacks only.
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 clear timing constraint (30 seconds) and context for when to use. Lacks explicit when-not-to-use or alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_messageDelete MessageB
Delete a message sent by the bot. Requires the message_id.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The ID of the message to delete |
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 does not mention whether deletion is permanent, if any permissions are needed, or what happens to the message after deletion. The term 'delete' implies destructiveness but lacks specifics.
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 short sentence, efficient and front-loaded. However, it could have included more concise details 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?
Given no output schema and no annotations, the description should explain scope (only bot's messages) and provide context. It lacks completeness for a tool with only one parameter and simple action.
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 the description adds no extra meaning beyond what's in the schema. The description 'Requires the message_id' is redundant, not additive.
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 sent by the bot), which is specific and distinct from sibling tools like edit_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?
No explicit guidance on when or when not to use this tool. It only reiterates the required parameter, missing context like that it only works for bot's own messages or that the message_id must come from a prior action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_chatEdit ChatA
Rename a chat, change its description, or update its icon. The bot must be an admin of the chat.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id to edit | |
| title | No | New chat title | |
| description | No | New chat description (pass null to clear) | |
| icon | No | New icon as { url } (pass null to remove) | |
| notify_members | No | Notify members about changes (default: false) |
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 states the admin requirement but does not disclose potential side effects, whether changes are reversible, or error handling (e.g., what happens if not admin). Minimal behavioral context beyond the basic 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 two sentences, front-loading the key actions and then stating the admin requirement. Every word is necessary, no redundancy.
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 exists. The description covers the purpose and a critical requirement, but fails to mention idempotency, notification behavior (though schema has notify_members), or error conditions. For a mutation tool with 5 parameters, it is somewhat incomplete.
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 the description does not need to add parameter details. The description lists the actions (rename, change description, update icon) which maps to params title, description, icon, but adds no additional meaning or nuance 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 tool's actions: rename a chat, change description, or update icon. It uses a specific verb ('edit') and resource ('chat'), and distinguishes from siblings like edit_message by focusing on chat-level properties.
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 mentions a prerequisite (bot must be admin), which helps in usage. However, it does not provide guidance on when to use this tool vs alternatives like get_chat or delete_message, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_messageEdit MessageB
Edit the text of an existing message sent by the bot. Optionally update attachments (inline keyboard buttons). Requires the message_id.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The ID of the message to edit (from send_message or get_messages) | |
| text | Yes | New message text | |
| format | No | Text formatting for new text | |
| attachments | No | Optional new attachments (replaces existing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description must disclose behavior. It only states editing text and attachments, but omits details like whether edits are tracked, trigger notifications, or require specific permissions. Lacks depth 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?
Two concise sentences, front-loaded with the core action and resource. No fluff, 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?
No output schema, and description does not explain return value, error handling, or success/failure indications. For a tool with 4 parameters and no annotations, 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?
Schema covers all 4 parameters fully, so description adds minimal value. It clarifies attachments are 'inline keyboard buttons' and 'optional', but schema already conveys this. Baseline score 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?
Clearly states the tool edits the text of an existing message sent by the bot, and optionally updates attachments. The verb 'edit' and resource 'message' are specific. It implicitly distinguishes from send_message and delete_message, but doesn't explicitly contrast.
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?
Mentions requirement of message_id and that it edits bot's own messages, providing some usage context. However, it does not give explicit guidance on when not to use or suggest alternative tools like send_message for new messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adminsGet AdminsA
Get the list of administrators in a group chat. Returns user_id, name, username, and permissions for each admin.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id of the group chat |
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 discloses the return fields (user_id, name, username, permissions) but does not mention whether the bot must be an admin or what happens for non-group chats.
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 front-load the purpose and output. 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?
For a simple read tool with one parameter and no output schema, the description is fairly complete, specifying the returned fields. However, it lacks details on error cases or permission requirements.
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 the parameter description in the schema is adequate. The description adds no extra meaning beyond identifying the chat type as a group chat.
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 'Get' and the resource 'list of administrators in a group chat'. It distinguishes from sibling tools like set_admin and remove_admin which modify rather than read.
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 explicit when to use or when not to use this tool. While reading the admin list is implied, there is no mention of alternatives or prerequisites like requiring bot admin rights.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bot_infoGet Bot InfoA
Get information about the MAX bot: name, username, user_id, description. Use this to verify the bot is connected and working.
| 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 carries full burden. It does not disclose behavioral traits such as read-only nature or lack of side effects. For a simple info retrieval tool, this is adequate but could be improved by explicitly stating that no modifications occur.
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 short sentences with no wasted words. The first sentence states the action, the second provides the use case. Front-loaded and 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?
Given no parameters, no output schema, and no annotations, the description covers purpose and usage. It does not detail the output structure but lists some fields. This is reasonably complete for a simple 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?
The input schema has zero parameters, so baseline is 4. The description adds value by listing the information returned (name, username, user_id, description), which is 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 verb 'Get', the resource 'MAX bot info', and specifies the fields returned: name, username, user_id, description. It distinguishes itself from sibling tools that deal with chats, messages, and members.
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 explicit guidance: 'Use this to verify the bot is connected and working.' It does not list alternatives but the purpose is clear enough for an agent to choose this over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chatGet ChatB
Get full details of a specific chat by its ID: title, description, participant count, icon, pinned message, link.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id to get details for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must bear full burden. It states what is retrieved but does not disclose potential limitations, error handling, authentication needs, or that it is a read-only operation. 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 concise sentence that front-loads the purpose and lists outputs. No unnecessary words.
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 one required param and no output schema, the description is largely complete. Missing return type but acceptable given simplicity.
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% (one parameter chat_id with description). The description adds value by listing the returned fields but does not enhance the parameter's meaning beyond the schema. Baseline 3.
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 resource 'full details of a specific chat by its ID' and lists the fields returned, distinguishing it from sibling tools like get_chats (listing) and edit/delete tools.
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, no exclusions or when-not-to-use instructions. Sibling tools include many similar operations but no distinction is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_membersGet Chat MembersA
Get the list of participants in a group chat. Returns user_id, name, username for each member.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id of the group chat | |
| count | No | Number of members to return (1-100, default: 50) | |
| marker | No | Pagination marker from previous response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It returns participant fields but does not disclose read-only nature, pagination behavior, or any prerequisites. Schema covers some aspects, but description lacks 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, front-loaded with action, no filler. Efficient and clear.
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 list tool with no output schema, the description provides return fields. It mentions group chat scope. Could explain pagination more, but schema covers marker and count. Overall adequate.
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 params. The description adds no extra detail about parameters beyond the schema, but summarizes return fields. 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 'Get the list of participants in a group chat' with a specific verb and resource. It distinguishes from sibling tools like get_admins or get_chat by focusing on members.
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 explicit guidance on when to use or avoid this tool. The description implies it's for listing members, but does not mention alternatives or conditions like required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chatsGet ChatsA
Get the list of all group chats where the bot is a participant. Returns chat_id, title, type, participant count, and last activity time. Use chat_id from results to read or send messages. NOTE: Only group chats are returned. Personal dialogs (type: dialog) are NOT included here β use get_updates to discover their chat_id.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of chats to return (1-100, default: 50) | |
| marker | No | Pagination marker from previous response |
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 notes that only group chats are returned and that chat_id can be used for subsequent actions. However, it does not mention pagination behavior beyond the marker parameter description in the schema, which is a minor gap.
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 three sentences, each serving a distinct purpose: stating the core function, listing returned fields, and providing usage guidance with alternatives. No word is wasted.
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 (two optional parameters, no output schema), the description is complete. It covers purpose, return values, usage context, and limitations. Additional details like pagination are implied by the marker parameter description.
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 covers 100% of parameters with descriptions. The tool description adds value by explaining how to use the results (e.g., chat_id for reading/sending messages), which goes beyond the schema's parameter descriptions.
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 that the tool retrieves all group chats where the bot participates, listing specific returned fields (chat_id, title, type, etc.). It effectively distinguishes itself from sibling tools like get_updates by clarifying that personal dialogs are excluded.
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 states when to use this tool (to get group chats) and when not to (for personal dialogs), providing the alternative get_updates. This gives clear guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageGet MessageA
Get a single message by its ID. Returns full message details including text, sender, attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Message ID (mid) to retrieve |
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 the tool returns full message details, which is adequate for a simple read operation. However, it does not disclose potential authorization needs or failure modes.
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 wasted words. The description is front-loaded with the essential purpose and returns, earning 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 (one parameter, no output schema), the description covers purpose and return details adequately. Could optionally mention error conditions, but overall complete enough.
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% as the single parameter 'message_id' is described. The description adds no extra meaning beyond the schema's 'Message ID (mid) to retrieve', 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?
The description clearly states the verb 'Get', the resource 'a single message', and the method 'by its ID'. It distinguishes from sibling 'get_messages' by specifying 'single', and mentions return details including text, sender, attachments.
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 use for retrieving a single message by ID, contrasting with 'get_messages' for multiple. However, no explicit when-not or alternative guidance is provided beyond the implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messagesGet MessagesA
Read messages from a MAX chat. Use either chat_id OR message_ids β they are mutually exclusive. With chat_id: returns recent messages from that chat (use count/from/to to filter). With message_ids: returns those specific messages only (do NOT provide chat_id).
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | No | The chat_id to read messages from. Omit when using message_ids. | |
| count | No | Number of messages to return (1-100, default: 20). Only used with chat_id. | |
| from | No | Start timestamp in milliseconds (Unix ms) for time range filter. Only used with chat_id. | |
| to | No | End timestamp in milliseconds (Unix ms) for time range filter. Only used with chat_id. | |
| message_ids | No | List of specific message IDs to retrieve. Do NOT provide chat_id when using this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: read operation, mutual exclusivity, and conditional parameter usage. It does not mention error handling or default behavior when no parameters are provided.
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 fluff. Purpose is front-loaded, followed by concise usage instructions for both modes.
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?
Description provides enough to use the tool correctly given the schema and context, but lacks mention of return format (e.g., array of message objects), which would improve completeness.
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 descriptions cover all parameters (100% coverage). The description adds value by explaining the mutual exclusivity and that count/from/to are only used with chat_id, which is not fully clear from the schema alone.
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 reads messages from a MAX chat and distinguishes two modes (by chat_id or message_ids), differentiating it from siblings like get_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?
Explicitly states mutual exclusivity of chat_id and message_ids, and explains filtering with count/from/to when using chat_id. Lacks explicit comparison to sibling tools for when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_updatesGet UpdatesA
Get incoming events: new messages, button clicks, user joins/leaves, etc. This is the ONLY way to get chat_id for personal dialogs (type: dialog). Use the returned marker in the next call to get only new events. Set timeout=0 for instant response, timeout>0 for long polling (waits up to N seconds for new events). Event types: message_created, message_edited, message_removed, message_callback, bot_started, bot_added, bot_removed, user_added, user_removed, message_chat_created. NOTE: Designed for development and manual polling only. For production bots use webhooks (POST /subscriptions) β in production the update queue accumulates quickly without continuous processing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of events to return (1-1000, default: 100) | |
| timeout | No | Long polling timeout in seconds (0 = instant, default: 0) | |
| marker | No | Pagination marker from previous get_updates call to get only new events | |
| types | No | Filter by event types (omit to get all types) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: polling mechanism (marker for incremental updates, timeout for instant/long polling), event types list, and a crucial warning that this is for development only and not for production. No contradictions.
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?
Description is reasonably concise and front-loaded with the core purpose. It includes necessary detail without unnecessary verbosity, though the event types list could be more compact by referencing the schema.
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 4 parameters (all optional with enums/constraints), the description fully covers what the tool returns (events with types) and how to use it effectively (marker, timeout, production warning). No gaps.
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. Description adds some context (e.g., timeout=0 vs >0 behavior, marker pagination) but largely repeats schema descriptions. The event types list in description is slightly incomplete (missing 'chat_title_changed'), so not fully additive.
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 tool gets incoming events (new messages, button clicks, etc.) and explicitly distinguishes itself as the only way to get chat_id for personal dialogs. The verb 'get' and resource 'updates' are clear, and it differentiates from sibling tools (e.g., send_message, get_message) by specifying polling behavior.
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 states when to use the tool (for polling) and when not to (production should use webhooks). It provides detailed guidance on marker usage for pagination and timeout behavior (instant vs long polling), giving clear context for alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_messagePin MessageA
Pin a message in a group chat. The bot must have admin rights in the chat.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id where the message is | |
| message_id | Yes | The ID of the message to pin | |
| notify | No | Whether to notify participants about pinned message (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the admin requirement but does not mention potential side effects (e.g., unpinning previous pinned message) or error conditions. The behavior is minimally described.
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 efficient sentences with no redundancy. The critical requirement (admin rights) is front-loaded, making the description immediately actionable.
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 should mention what the tool returns or any implicit behavior. It only states the action and prerequisite, omitting return type or success/failure indicators. This is insufficient for a complete understanding.
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 documentation covers all three parameters with descriptions (100% coverage). The description adds no extra meaning beyond the schema, so baseline score 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?
Description clearly states the verb 'pin' and resource 'message in a group chat'. It distinguishes from sibling tool 'unpin_message' and other editing tools.
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 states the prerequisite (bot must have admin rights) and provides context for when to use. Does not mention when not to use or alternatives like unpin, but the prerequisite adds significant guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_adminRemove AdminA
Revoke admin rights from a chat member. They remain a regular member. The bot must be an admin or owner of the chat. KNOWN MAX API BUG: The API returns success:true but rights may not actually be revoked. This is a confirmed issue on the MAX side β only the chat owner can reliably remove admin rights manually in the app.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id of the group chat | |
| user_id | Yes | The user_id to revoke admin rights from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the effect (member remains regular) and a critical known bug where success:true may be misleading. This adds significant behavioral context beyond the basic action.
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, front-loaded with purpose, then result, then important caveat. No filler words. 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?
Covers core behavior, required bot perms, and critical bug. Lacks output format or verification steps, but given simple 2-param tool with no output schema, it is fairly complete.
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 does not add new information beyond what the schema already provides for each parameter. It mentions bot requirement, but that is not parameter-specific.
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 'Revoke admin rights from a chat member' with specific verb and resource. It distinguishes from siblings like set_admin and remove_member, which are listed in sibling tools.
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 explicit requirement: 'The bot must be an admin or owner of the chat.' It also warns about a known API bug, guiding usage expectations. However, it does not explicitly state when not to use or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_memberRemove MemberA
Remove a user from a group chat. The bot must be an admin of the chat. Optionally block the user from rejoining. WARNING: If the user has privacy mode enabled in MAX settings, the bot will not be able to re-add them after removal β confirm with the user before proceeding.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id of the group chat | |
| user_id | Yes | The user_id of the member to remove | |
| block | No | Block user from rejoining the chat (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses admin requirement, optional block, and a privacy mode warning that affects re-add capability. It omits success/error responses but covers key behavioral traits.
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, each serving a distinct purpose: core action, prerequisite, warning. Front-loaded and concise with no wasted words.
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 core action, prerequisite, and a critical warning. Lacks return value information and error conditions, but is adequate for a removal tool given no output schema.
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 the schema already documents parameters. The description adds minimal extra meaning (e.g., 'optionally block' for the block parameter) but does not deepen understanding 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 specific action: 'Remove a user from a group chat.' It identifies the resource (user) and context (group chat), and distinguishes from siblings like add_members and remove_admin.
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 includes a prerequisite (bot must be admin) and a warning, but does not explicitly compare to alternatives like remove_admin. It indirectly suggests when to use but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_actionSend ActionA
Show a typing indicator or other status to chat members. Use before sending a message to improve UX. Actions: typing_on, sending_photo, sending_video, sending_audio, sending_file, mark_seen.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id to show action in | |
| action | Yes | Action type to display |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should disclose behavioral traits. It states the tool shows status indicators, implying a non-destructive read-like operation. However, it does not mention any side effects, duration of the indicator, or permissions required. This is adequate but 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 concise and well-structured, with two sentences that front-load the purpose and usage. The list of actions is included but doesn't add fluff. 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 simple tool with 2 parameters and no output schema, the description is complete enough. It covers what the tool does, when to use it, and the available actions. It lacks details on the duration of the status indicator, but that is not critical.
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 covers 100% of parameters with descriptions. The description lists the actions (e.g., 'typing_on'), repeating the enum values, but does not add new semantic information beyond the schema. Baseline score of 3 for high 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 tool's purpose: showing a typing indicator or other status to chat members. It specifies the verb 'show' and the resource 'typing indicator or other status', and lists the available actions, distinguishing it from sibling tools like 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 provides explicit usage context: 'Use before sending a message to improve UX.' This guides the agent on when to invoke the tool. It could be improved by explicitly stating when not to use it (e.g., for sending actual messages), but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_mediaSend MediaA
Upload a file (image/video/audio/file) from a URL and send it as a message. The tool handles the full two-step upload process automatically: 1) get MAX upload URL, 2) upload file, 3) send message with attachment. Provide either chat_id or user_id.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | No | Group chat or channel ID | |
| user_id | No | User ID for direct message | |
| file_url | Yes | Public URL of the file to upload and send | |
| type | Yes | Type of media: image, video, audio, or file | |
| text | No | Optional text caption for the media | |
| format | No | Text formatting for caption |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the automatic two-step upload process, a key behavioral trait. No annotations exist, so description effectively fills that gap.
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 highly informative sentences, no fluff, front-loaded with purpose, followed by process and ID requirement.
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?
Covers main purpose, process, and ID constraint. Lacks error handling or rate limits, but overall sufficient for a media upload tool with no output schema.
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%, baseline 3. Description adds value by explaining mutual exclusivity of IDs and the automated process, surpassing schema details.
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 uploads a file from a URL and sends it as a message, distinguishing it from siblings like send_message for plain text.
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 'Provide either chat_id or user_id,' which guides selection. Lacks explicit when-not-to-use but context from siblings makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend MessageA
Send a text message to a MAX chat or user. Provide either chat_id (group chats/channels) or user_id (direct messages), not both. Supports markdown and HTML formatting. Use attachments to add inline keyboard buttons or media (use tokens from send_media).
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | No | Group chat or channel ID (use get_chats to find) | |
| user_id | No | User ID for direct message | |
| text | Yes | Message text to send | |
| format | No | Text formatting: markdown (default) or html | |
| notify | No | Whether to notify participants (default: true) | |
| disable_link_preview | No | Disable link preview in message (default: false) | |
| attachments | No | Optional attachments: inline_keyboard buttons or media tokens |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions support for markdown and HTML formatting and hints at prerequisites (tokens from send_media for attachments). However, it does not disclose potential side effects, required permissions, rate limits, or the immediate behavior of message sending. Some behavioral traits like notification defaults are not addressed.
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 three sentences long and front-loaded with the primary purpose. Every sentence provides essential information without fluff. It is well-structured and easy to read.
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 complexity (7 parameters, nested attachment types) and no output schema, the description is fairly complete. It covers the main use cases, provides necessary context for target selection, and flags requirements. However, it could benefit from mentioning return values or error handling, but overall it is adequate.
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 value by clarifying mutual exclusivity of chat_id/user_id and recommending use of send_media tokens. However, it does not provide additional syntax or examples for the complex attachments parameter beyond what the schema already details.
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: 'Send a text message to a MAX chat or user.' It distinguishes between group chats and direct messages by specifying the use of chat_id or user_id. This is specific and differentiates from siblings like send_media.
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 clear guidance on how to use the tool: 'Provide either chat_id (group chats/channels) or user_id (direct messages), not both.' It also mentions using attachments from send_media. However, it does not explicitly state when not to use this tool or compare with alternatives like send_media or send_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_adminSet AdminA
Grant admin rights to a chat member. The bot must be an admin or owner of the chat.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id of the group chat | |
| user_id | Yes | The user_id to grant admin rights to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It mentions a key constraint (bot must be admin/owner) but omits other important behaviors: what happens if the user is already an admin, if the chat is not a group, or if the bot lacks permissions. The description is incomplete 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?
Two sentences with no fluff. The description is front-loaded with the primary action, then adds the prerequisite. Every sentence 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 tool (2 required params, no output schema, no annotations), the description covers the core function and a key prerequisite. However, it lacks details on error conditions, idempotency, and what constitutes a valid chat, making it adequate but not fully complete.
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% (both parameters have descriptions). The description adds no additional meaning beyond the schema, such as value formats or validation rules. Baseline 3 is appropriate given high 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 tool's action ('Grant admin rights') and the target resource ('a chat member'). This distinguishes it from siblings like 'remove_admin' or 'get_admins', making the purpose unambiguous.
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 includes a crucial prerequisite ('The bot must be an admin or owner'), but does not provide explicit guidance on when to use this tool versus alternatives (e.g., when to use 'remove_admin' instead) or when not to use it. The context is implied but not fully fleshed out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpin_messageUnpin MessageA
Unpin the currently pinned message in a group chat. The bot must have admin rights.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | The chat_id where the pinned message is |
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 explains the basic action and a prerequisite but does not disclose behaviors like what happens if no message is pinned 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?
Extremely concise: two sentences, front-loaded with the main action and a critical condition. No unnecessary 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?
The description is adequate for a simple tool with one parameter and no output schema. It covers the essential purpose and a key prerequisite. Minor gaps like missing error cases do not significantly hinder 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?
Schema coverage is 100% with a clear description for 'chat_id'. The tool description does not add additional meaning 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 ('Unpin') and the resource ('currently pinned message in a group chat'). It is specific and distinguishable from the sibling tool 'pin_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 includes a key prerequisite ('bot must have admin rights'), which guides when the tool can be used. It does not explicitly state when not to use it, but the sibling context makes alternatives clear.
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.
21 tool updates
v1.2.2- First observed
add_members - First observed
answer_callback - First observed
delete_message - First observed
edit_chat - First observed
edit_message - First observed
get_admins - First observed
get_bot_info - First observed
get_chat - First observed
get_chat_members - First observed
get_chats - First observed
get_message - First observed
get_messages - First observed
get_updates - First observed
pin_message - First observed
remove_admin - First observed
remove_member - First observed
send_action - First observed
send_media - First observed
send_message - First observed
set_admin - First observed
unpin_message
TDQS
Scored across 21 tools
Each tool targets a distinct operationβmessaging, chat management, admin actions, updates, etc. There is no overlap; even similar tools like get_message vs get_messages are clearly separated by singular vs plural access patterns.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., send_message, get_chats, remove_admin). The convention is uniform across all 21 tools, making it easy to predict tool functions.
21 tools is well-scoped for a messaging bot server. It covers essential messaging, chat management, admin functions, updates polling, and media sending without being bloated or insufficient.
The tool surface covers core CRUD for messages, chat management, and admin roles. Missing are create_chat/delete_chat and webhook setup, but these are not critical for basic bot operations and can be handled externally.
Maintenance
Related MCP Connectors
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
Nifty's MCP server β exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server for communication service connectors that currently provides multi-account Telegram integration with granular tool access and security controls. It allows AI models to manage messages, chats, and media across various accounts through a flexible, extensible routing architecture.1-
- AlicenseAqualityAmaintenanceMCP server for T-Bank's Time Messenger (Mattermost-based) that enables AI assistants to read and send messages, manage threads, search channels and users, and track unread messages.22176MIT
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server for Max messenger that lets AI assistants send and read messages, manage chats, and interact with the Max platform API.MIT
- FlicenseAqualityAmaintenanceMCP server for Yandex Messenger that enables reading chats, searching, downloading attachments, and sending messages via agent, using a web session with Playwright and a reverse-engineered protocol.193163-