Skip to main content
Glama
egor-fedorov

Telegram Context MCP

by egor-fedorov

get_album

Read-only

Reads messages from a Telegram album around a URL or message reference by scanning neighboring messages and returning same-chat album members in oldest-first order.

Instructions

Read messages from one album around a member's Telegram URL or message reference.

    ref accepts a URL, 'chat_id:message_id', or {chat_id, message_id}. Scans up to
    scan_limit neighboring messages on each side, including intervening nonmembers,
    then returns matching messages from the same chat in oldest_first order.
    completeness is always unknown: Telegram provides no album manifest. Exhaustion
    fields describe history boundaries, not album completeness. There is no cursor.
    Missing anchors return MESSAGE_UNAVAILABLE; ungrouped anchors return NOT_AN_ALBUM.
    Neighbor failures return partial messages and issues. On temporary issues, retry the
    whole call after any retry_after_seconds. Initial access/anchor failures are errors.
    Text budgets apply; use get_messages with next_text_offset for truncated text.
    Explicit public channels require the existing read permission. This tool does not
    traverse linked discussions, download attachments, or mark messages read.
    

Input Schema

NameRequiredDescriptionDefault
refYes
scan_limitNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.6.0

TDQS

A4.7/5.0
Behavior5/5

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

Although the annotations already declare readOnlyHint and openWorldHint, the description adds substantial behavioral detail that the annotations do not cover: completeness is always 'unknown' because Telegram provides no album manifest, exhaustion fields describe history boundaries rather than album completeness, there is no cursor, text budgets apply, and explicit public channels require read permission. It also documents error semantics (MESSAGE_UNAVAILABLE, NOT_AN_ALBUM), partial results with issues, and retry via retry_after_seconds. This is far more than the annotations provide.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence, and the remaining sentences are dense with operational facts rather than filler. The text is long and reads as a series of terse fragments (for example, 'There is no cursor.' and 'Initial access/anchor failures are errors.'), which is efficient but slightly clipped for an agent parsing the meaning of return values.

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

Completeness5/5

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

For a two-parameter read tool with no output schema, this description is essentially complete: it covers anchor resolution, scan semantics, ordering (oldest_first), completeness caveats, error codes, partial-failure behavior, retry guidance, permission requirements, text budget handling, and explicit non-goals. Nothing an agent needs in order to call this tool correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description has to carry the full burden, and it does. It spells out the three accepted forms of ref (URL, 'chat_id:message_id', or {chat_id, message_id}), which the anyOf schema alone does not disambiguate. It also explains that scan_limit scans that many messages on each side, which resolves the key ambiguity left by the bare integer with default 30 and maximum 100.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read messages from one album around a member's Telegram URL or message reference.' That is distinct from the sibling tools get_messages, get_context, and get_thread, because 'album' is a clearly bounded resource, and the description reinforces the difference by naming get_messages as the fallback for truncated text.

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

Usage Guidelines4/5

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

The description says when to use this tool (you have an anchor message that belongs to an album) and names an alternative for one specific situation ('use get_messages with next_text_offset for truncated text'). It also lists exclusions: no linked discussions, no attachment downloads, no marking read. It never explicitly contrasts this tool with get_context or get_thread for neighboring-message retrieval, so the guidance is clear but not exhaustive.

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