Skip to main content
Glama
mcp-server-telegram-bot

mcp-server-telegram-bot

by mirmakhamat

mcp-server-telegram-bot

MCP server that lets AI agents send Telegram messages and files through your own bot. The token is read from the environment and never reaches the agent.

Setup

  1. Create a bot with @BotFather and copy its token.

  2. Send /start to your bot from the chat that should receive messages.

  3. Install and register (replace the placeholders):

claude mcp add telegram \
  -e TELEGRAM_BOT_TOKEN=<token> \
  -e ALLOWED_CHAT_IDS=<chat_id> \
  -e ALLOWED_DIRS=<dir1>,<dir2> \
  -- uvx mcp-server-telegram-bot

Don't know your chat id? Register with a temporary ALLOWED_CHAT_IDS=0, ask the agent to run get_updates, then re-register with the real id.

Related MCP server: Telegram MCP Server

Environment

Variable

Meaning

TELEGRAM_BOT_TOKEN

Bot token (required)

ALLOWED_CHAT_IDS

Comma-separated chats, each id or name=id (e.g. me=111,ali=222); first is default (required)

ALLOWED_DIRS

Comma-separated directories files may be sent from. Empty = file sending disabled

Typical use

  • "Send report.pdf to me when you finish" -> send_document(path) to the default chat.

  • "Send the result to Ali" -> send_message(text, chat_id="ali").

  • A person can only receive messages after they open the bot and press Start. Telegram blocks the bot otherwise.

Tools

send_message(text, chat_id?), send_document(path, caption?, chat_id?), send_photo(path, caption?, chat_id?), get_updates(limit?) Access management: list_access(), add_chat(chat_id, name?), add_dir(path), remove_chat(chat), remove_dir(path)

Safety

  • Other chat ids are rejected.

  • Paths are resolved with realpath (blocks .. and symlinks) and must be inside ALLOWED_DIRS.

  • .env*, .ssh, .gnupg, .aws are never sent. Max file size 50 MB.

  • Use one bot per user: two programs polling getUpdates on one bot interfere.

Changing access from the agent

  • add_chat / add_dir ask the user to confirm (MCP elicitation). If the client cannot ask, the call is refused.

  • / and the home directory cannot be added. Protected dirs stay blocked.

  • Additions are saved in ~/.config/mcp-server-telegram-bot/state.json (override with TELEGRAM_MCP_STATE).

  • remove_* only removes runtime additions. Env entries are changed in the environment.

Development

uv sync && uv run pytest

Available Tools

9 tools
add_chatC

Allow another chat id, optionally with a name (e.g. "ali") usable as chat_id later. Asks the user to confirm.

NameRequiredDescriptionDefault
nameNo
chat_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose one genuinely non-obvious trait — an interactive user confirmation step — but says nothing about whether the addition is persistent, what happens if the chat_id already exists, or what permissions are needed for a mutation-style tool.

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

Conciseness4/5

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

Two short sentences with no waste, and the core capability is front-loaded before the confirmation note. Slightly awkward phrasing ('Allow another chat id, optionally with a name') costs it the top mark.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and two parameters is low complexity. Still, for a confirmation-gated mutation the description omits duplicate handling, persistence, and the chat_id format, leaving meaningful gaps.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does add real meaning for 'name' (optional, example 'ali', and crucially that it becomes alias-equivalent to chat_id), but leaves 'chat_id' completely undescribed — no format, no hint where to obtain one.

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

Purpose3/5

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

It conveys the resource (a chat id) and that it becomes usable later, but the verb 'Allow' is vague — it never says this registers the chat on an allowlist, which is only inferable from siblings like list_access and remove_chat. No sibling is named, and the agent must guess whether the effect is persistent.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus remove_chat or add_dir, nor when to supply a name versus leaving it out. The only usage-adjacent sentence is that the user is asked to confirm, which is a behavior, not selection guidance.

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

add_dirC

Allow files from another directory (asks the user to confirm).

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden, and it does surface one valuable trait: a user confirmation prompt is triggered. However, it omits permission requirements, what happens if the path is already allowed, whether the grant persists, and what failure modes exist for an operation that expands file access.

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

Conciseness4/5

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

One short sentence with the action front-loaded and the confirmation caveat appended where it is most visible. It is efficient, though the terseness is partly under-specification rather than disciplined brevity.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but for an access-granting tool with zero annotation coverage and an undocumented path parameter, the description leaves too much unspecified. An agent cannot tell what the path is relative to or what the confirmation flow implies for calling behavior.

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

Parameters2/5

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

Schema description coverage is 0% for the single required parameter 'path', and the description adds nothing about it. It does not indicate whether the path must be absolute, relative, a host directory, or a sandboxed location, which matters for a security-sensitive access grant.

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

Purpose4/5

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

The description states a specific action and resource: granting file access from another directory. That is clear enough for an agent to distinguish it from remove_dir and list_access without opening the schema. It does not explicitly name the sibling it inverts, but the verb+resource pairing is unambiguous.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of the obvious alternative (remove_dir) or of when adding a directory is inappropriate. The agent must infer the access-management context entirely from the name and sibling list.

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

get_updatesB

List recent messages sent to the bot (shows chat ids; helps first-time setup).

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose that the response surfaces chat ids, which is the key behavioral payoff, but it says nothing about whether fetching updates consumes or acknowledges them (a real concern for bot update endpoints), about ordering, or about any rate limits. For a tool with zero annotation coverage, that leaves meaningful gaps.

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

Conciseness4/5

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

It is a single compact sentence with the core purpose front-loaded and the useful context tucked into a parenthetical. Nothing is wasted, though the extreme brevity contributes to the parameter gap.

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

Completeness3/5

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

Because an output schema exists, return values need not be described, and the description correctly focuses on purpose. Still, for a tool that is the entry point of a setup workflow, it should say how it relates to add_chat and explain the one parameter it exposes.

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

Parameters2/5

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

There is one parameter, 'limit', with 0% schema description coverage, so the description is the only place its meaning could be explained. The description never mentions it, leaving the agent to guess what the default of 10 means and what the upper bound is.

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

Purpose4/5

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

The description states a specific verb and resource: 'List recent messages sent to the bot.' That is clearly distinct from the send_* siblings, which push content out rather than read it in. It doesn't explicitly name a sibling for contrast, but the read/write split is obvious enough from the verbs.

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

Usage Guidelines3/5

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

The parenthetical 'helps first-time setup' implies the intended moment to call it, namely discovering chat ids before add_chat or list_access. However, it never states that linkage outright or says when not to call it, so the agent has to infer the workflow from context.

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

list_accessA

Show allowed chats (id and name) and directories. Use names as chat_id when sending.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations and no output schema, the description carries real weight, and it does disclose the return payload (chat id, name, directories) plus how to reuse names as chat_id. It omits whether the call is read-only (implied by 'Show' but unstated), whether the list is paginated, and whether it reflects permissions of the caller.

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

Conciseness5/5

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

Two short sentences, no filler, and the core purpose is front-loaded before the actionable tip about chat_id. Nothing is repeated or wasteful.

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

Completeness4/5

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

For a zero-parameter listing tool with no output schema, describing both the returned entities (chats and directories, including id and name) and how to consume them covers what an agent needs. Only minor gaps remain, such as pagination or ordering behavior.

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

Parameters4/5

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

The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to elaborate. The schema is an empty object, consistent with a no-argument listing call.

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

Purpose4/5

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

The description gives a specific verb and resource: it lists allowed chats with their 'id and name' plus directories, which is clearly a read/enumerate operation distinct from siblings like add_chat, remove_chat, or send_message. It never names a sibling explicitly, so the differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

'Use names as chat_id when sending' ties the output to a follow-up action (send_message/send_photo/send_document), which implies when to use it. There is no explicit 'when not to use' or mention of alternatives, so the guidance is suggestive rather than directive.

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

remove_chatA

Remove a chat (id or name) that was added at runtime.

NameRequiredDescriptionDefault
chatYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It communicates removal and the runtime-added scope, but says nothing about permanence, effects on access or stored configuration, authorization needs, or behavior when the chat is unknown or was not added at runtime.

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

Conciseness5/5

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

The single sentence is front-loaded with the operation and efficiently includes both accepted identifier forms and the runtime scope. There is no unnecessary wording.

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

Completeness3/5

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

For a one-parameter tool with an output schema, this is enough for basic selection and invocation. However, the lack of annotations makes the missing destructive-behavior and error-handling context more consequential.

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

Parameters4/5

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

Schema description coverage is 0%, but the description meaningfully compensates by stating that the chat argument accepts either an ID or a name. It does not clarify ID formatting or how ambiguous names are resolved.

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

Purpose4/5

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

The description gives a specific verb and resource—removing a chat—and narrows the scope to chats added at runtime. It is readily distinguishable from remove_dir, though it does not explicitly identify add_chat as its counterpart.

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

Usage Guidelines4/5

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

The phrase "that was added at runtime" supplies clear context for when the tool applies. It does not explain what to do for preconfigured chats or name an alternative, but the simple sibling set makes that omission relatively minor.

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

remove_dirC

Remove a directory that was added at runtime.

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden of behavioral disclosure. It signals a destructive mutation but says nothing about whether removal is recursive, what happens to directory contents, reversibility, or required permissions, which for a delete operation is a significant gap.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler or redundancy. Its brevity is efficient rather than padded, though the terseness leaves the definition under-specified overall.

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

Completeness2/5

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

For a destructive, unannotated mutation tool, the description omits preconditions, side effects, and parameter format; the existing output schema covers return values, but everything else is missing. An agent would have to guess at safety and path semantics before invoking it.

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

Parameters2/5

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

The single required `path` parameter has 0% schema description coverage, and the description adds no meaning about its format, whether it is absolute or a runtime identifier, or how it relates to the path used when adding. With one undocumented parameter, the description does not compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb and resource ("Remove a directory") and scopes it to directories "added at runtime", which implicitly pairs it with the add_dir sibling. It stops short of naming add_dir or any alternative explicitly, so differentiation is inferable rather than stated.

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

Usage Guidelines3/5

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

The qualifier "that was added at runtime" implies a precondition (only runtime-registered directories can be removed) but never frames it as a rule or says what happens if the directory was not added at runtime. There is no mention of when to prefer this over remove_chat or other cleanup tools.

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

send_documentC

Send a file from an allowed directory as a document.

NameRequiredDescriptionDefault
pathYes
captionNo
chat_idNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior, but it only mentions the source-directory restriction. It does not clarify how the target chat is chosen, what happens when chat_id is omitted, whether captions accompany the document, or what permissions are required. The output schema covers return values, but the operational behavior is still thinly described.

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

Conciseness5/5

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

The definition is a single front-loaded sentence with no wasted words. The key constraint follows immediately after the action. It is appropriately sized for the amount of information it chooses to convey, even though it omits necessary detail elsewhere.

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

Completeness2/5

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

For a send operation with no annotations and three parameters, the description is too sparse. It omits chat targeting, caption behavior, file-type or size expectations, and any error conditions around disallowed directories. The output schema reduces the need to explain returns, but the call semantics remain incomplete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needs to compensate for three undocumented parameters. It only indirectly clarifies that path must point inside an allowed directory. It says nothing about chat_id or caption, leaving most parameter meaning unexplained.

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

Purpose4/5

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

The description names a specific verb and resource: sending a file as a document. It adds the useful constraint that the file must come from an allowed directory. It does not explicitly distinguish itself from send_photo or explain chat targeting, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool instead of send_photo or send_message. It also does not explain when not to use it, such as for images that should be sent as photos. The allowed-directory phrase implies a precondition but is not framed as usage guidance.

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

send_messageA

Send a text message. chat_id is an allowed id or name (see list_access); omitted = default chat.

NameRequiredDescriptionDefault
textYes
chat_idNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, yet it says nothing about delivery semantics, idempotency, what happens with an invalid or disallowed chat_id, rate limits, or permissions. The only behavioral hint is the default-chat fallback for an omitted chat_id.

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

Conciseness5/5

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

Two short sentences with zero filler; the action is front-loaded and the parameter constraint follows immediately.

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

Completeness5/5

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

The tool is simple (one required string, one optional target) and an output schema exists, so return values need no explanation. Combined with the chat_id resolution pointer, the description covers what an agent needs to invoke it, leaving only error-path behavior unstated.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It handles chat_id well (allowed id or name, resolution via list_access, null default = default chat) but says nothing about text beyond the verb "send" — no formatting, escaping, or length constraints.

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

Purpose4/5

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

"Send a text message" names a specific verb and resource, and the word "text" implicitly separates it from send_photo and send_document. It does not explicitly name those siblings, so an agent must infer the boundary rather than read it.

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

Usage Guidelines3/5

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

Usage is only implied: the description tells you how to address a chat (allowed id or name, see list_access, omitted = default chat) but never states when to pick this tool over send_photo/send_document or what preconditions must hold. There are no exclusions or alternative routing.

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

send_photoC

Send an image from an allowed directory as a photo.

NameRequiredDescriptionDefault
pathYes
captionNo
chat_idNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden. It usefully discloses the allowed-directory restriction, but omits that this is a mutating send, what happens when chat_id is null, whether the file must already exist on disk, and any error or rate-limit behavior.

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

Conciseness4/5

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

A single sentence with no filler, and the access constraint is placed where it will be read. It is efficient but also under-specified, so brevity is not entirely a virtue here.

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

Completeness2/5

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

An output schema exists, so return values need not be explained. However, for a three-parameter mutating tool with zero annotation and zero schema description coverage, omitting chat_id resolution, caption behavior, and the photo-vs-document distinction leaves the agent guessing.

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

Parameters2/5

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

Schema description coverage is 0%, so all three parameters rely on the description. The description only hints at the path constraint ("allowed directory") and says nothing about caption usage or the default-chat behavior implied by chat_id defaulting to null, leaving most parameter meaning unstated.

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

Purpose4/5

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

The description gives a specific verb and resource ("Send an image ... as a photo") plus a scoping constraint ("from an allowed directory"). It does not explicitly distinguish itself from siblings like send_document, though the "as a photo" phrasing implies the difference.

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

Usage Guidelines2/5

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

There is no guidance on when to choose send_photo over send_document or send_message, which are the obvious alternatives in the sibling set. The only implied guidance is the allowed-directory constraint, which points at list_access but is never stated as a prerequisite.

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.

  1. 9 tool updatesv0.1.0
    • First observedadd_chat
    • First observedadd_dir
    • First observedget_updates
    • First observedlist_access
    • First observedremove_chat
    • First observedremove_dir
    • First observedsend_document
    • First observedsend_message
    • First observedsend_photo

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

Each send_* tool is distinguished by payload type (text, document, photo), and the add/remove pairs are clearly scoped to chats vs directories. The only mild overlap is between list_access and get_updates, both of which surface chat ids, but the descriptions clarify their distinct purposes (config listing vs. reading incoming messages).

Naming Consistency5/5

All nine tools follow a clean verb_noun pattern (send_message, get_updates, list_access, add_chat, remove_dir, etc.) with consistent snake_case throughout. No mixed conventions or vague one-word verbs.

Tool Count5/5

Nine tools is well within the ideal range and each one earns its place: three send variants, one read tool, and a complete add/remove/list triad for both chats and directories. Nothing feels redundant or padding.

Completeness4/5

Core lifecycle is covered: send text/files, read incoming messages, and manage allowed chats/directories at runtime. Minor gaps exist (no message edit/delete, no reply/threading, no audio/video send), but agents can accomplish the primary workflows without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers