Skip to main content
Glama

tggroupMCP

TypeScript MCP stdio server for a Telegram group through MTProto/GramJS.

The default chat is Парилка228 (-1003179772905), but all chat IDs live in env config so the server can be reused for other groups.

Setup

cd /root/telegram-parilka-mcp
npm install
cp .env.example .env
npm run generate-session
npm run build
npm run smoke:mcp:wrapper

Put the generated TELEGRAM_SESSION into .env.

Related MCP server: telegram-mcp

Run

npm run print-config
npm run start

MCP clients and systemd should use the ./bin/* wrappers. They execute the built dist/*.js files and fail with a clear npm run build remediation when the build is missing or stale. Run npm run build and npm run smoke:mcp:wrapper before restarting deployed clients or services.

Cache warmer

Run this as a long-lived process to keep SQLite warm. It fetches recent messages first, then an older backfill chunk, using cursors stored in SQLite:

npm run sync-daemon

One-shot mode, useful for cron/systemd timers:

npm run sync-once

Check cache, daemon, sync, and embedding coverage health without touching Telegram:

npm run status

Status is ok, degraded, critical, or unknown. Alert on critical immediately, and investigate degraded when recent sync or daemon success lag is above the warning threshold shown in the JSON. Use get_status / npm run status as the first read for cache and health tasks; it does not connect to Telegram.

SQLite uses WAL plus a busy timeout and bounded retry for write coordination, so the MCP server, sync daemon, and embedding indexer can share the same DB. Keep any custom/manual write transactions small so reads and other writers do not sit behind long locks.

Vector RAG

Embeddings are disabled unless explicitly opted in. Set TELEGRAM_EMBEDDINGS_ENABLED=true plus OPENAI_API_KEY or TELEGRAM_EMBEDDINGS_API_KEY, then review the first-run estimate before indexing cached messages into local SQLite vector chunks. Indexing sends cached Telegram message text to the configured external embeddings provider.

npm run embed-once -- --limit-chunks 1000 --estimate-only
npm run embed-once -- --limit-chunks 1000 --confirm-estimate

The CLI prints status:"estimate_only", status:"requires_confirmation", or status:"indexed" so operators can tell whether it only estimated or actually called the embeddings API. Confirmation is required for first runs and for chunk/character budget truncation. The regular sync daemon indexes new chunks only when embeddings are explicitly enabled and configured. On the first indexing run it logs the estimate and skips API calls until you run a confirmed manual index. search_messages returns keyword, vector, and hybrid candidates; semantic_search_messages returns only cosine-ranked chunks.

Vector search uses an exact in-process cosine scan capped by TELEGRAM_EMBEDDINGS_VECTOR_CANDIDATE_LIMIT (default 20,000 chunks). If a query would exceed the cap, narrow it with before_id/after_id or raise the cap only after a local benchmark. Current target: p95 <= 250ms and bounded RSS at the configured candidate limit.

npm run benchmark:vector -- --candidates 20000 --dimensions 256 --target-p95-ms 250

If the expected full index cannot meet that target, keep the cap in place and switch the vector store to sqlite-vec, sqlite-vss, pgvector, or FAISS before increasing the scanned candidate set.

MCP config example:

[mcp_servers.telegram-parilka]
command = "/root/telegram-parilka-mcp/bin/telegram-parilka-mcp"

Sending is preview-only by default. Live posts require explicit operator opt-in with TELEGRAM_SEND_ENABLED=true and TELEGRAM_DRY_RUN_DEFAULT=false, plus a server-issued approval for each message. Call preview_message first, then pass the returned approval_id to send_message or reply_to_message with the exact same chat, text, reply id, parse mode, link preview, and silent options. TELEGRAM_DRY_RUN_DEFAULT=true or TELEGRAM_SEND_ENABLED=false forces every send tool call into hard dry-run mode; callers cannot override that with dry_run:false, even when the approval bypass flag is set. Reply targets are validated before approvals are consumed or send outbox rows are reserved; previews and dry-runs include a short reply target excerpt when the target is available.

Use dedupe_key as a permanent idempotency/audit key for actionable live sends. Once a send is recorded as sent, reusing the same key and payload returns the original Telegram message id instead of posting again; different payloads with the same key are rejected. Failed or expired sends can be retried with the same key and payload.

Available Tools

12 tools
get_chat_infoC

Resolve chat info plus local cache statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as side effects, permissions, or rate limits. It implies a read operation but is not explicit.

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

Conciseness4/5

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

The description is very concise, with a single sentence that front-loads the core purpose. No unnecessary words, but it could benefit from slight elaboration.

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

Completeness2/5

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

Given the lack of output schema and annotations, the description should provide more context about what 'chat info' and 'local cache statistics' entail. It feels incomplete for a tool that likely returns complex data.

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

Parameters3/5

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

The schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema's parameter description.

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 the tool resolves chat info and local cache statistics, clearly indicating the action and resource. However, it does not differentiate from the sibling tool 'resolve_chat', which may perform a similar function.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or exclusions. The description simply states what it does without context.

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

get_configB

Return redacted Telegram Parilka MCP configuration and safety state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden but only mentions 'redacted' and the return of config/state. It does not disclose if the call is safe, idempotent, or has side effects, which is insufficient for a tool with no annotation safety hints.

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

Conciseness5/5

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

The description is a single sentence, front-loading the purpose with no wasted words.

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

Completeness2/5

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

Given the absence of output schema and annotations, the description is too sparse. It does not explain what 'safety state' means, what format the config is in, or how to interpret the redaction. The agent lacks information to use the result effectively.

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

Parameters4/5

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

The tool has no parameters and the schema coverage is 100%. The description adds meaning by specifying the return content (configuration and safety state, redacted), which goes beyond the empty schema.

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

Purpose4/5

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

The description clearly states it returns the MCP configuration and safety state, which distinguishes it from sibling tools that focus on chat, messages, or other actions. However, it could be more specific about what configuration fields are included.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. An agent has no context on whether to call this before other operations or in debugging scenarios.

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

get_thread_contextC

Return cached messages around a message ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
afterNoApproximate number of message IDs after center.
beforeNoApproximate number of message IDs before center.
message_idYesCenter message ID.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It mentions 'cached' but does not explain caching behavior, whether reading or modifying state, or what happens on miss. Minimal behavioral disclosure.

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?

Single sentence, efficient and front-loaded. However, it may be too terse, sacrificing clarity for brevity. Slightly more detail would improve without becoming wordy.

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

Completeness2/5

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

Given 4 parameters and no output schema, the description fails to explain return value structure, caching behavior, or parameter interactions. Incomplete for a tool with moderate complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no extra meaning or usage guidance for parameters like before/after ranges or optional chat.

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

Purpose4/5

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

Description clearly states verb (return), resource (cached messages), and scope (around a message ID). It distinguishes from siblings like read_history by specifying 'cached' and 'around a message ID', but could be more explicit about differentiation.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings such as read_history or search_messages. The description does not mention appropriate contexts or prerequisites.

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

index_embeddingsB

Index cached Telegram messages into vector chunks for semantic search.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
rebuildNoDelete existing chunks for the configured model/dimensions before indexing.
limit_chunksNoChunks to embed in this run.
after_message_idNoStart indexing messages after this ID.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It does not disclose side effects (e.g., modifying storage), potential destruction (rebuild parameter hints at deletion but not stated), or performance implications. The term 'cached' is ambiguous.

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?

Single front-loaded sentence with no wasted words. However, it could benefit from brief additional context about the indexing process or expected output.

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?

Without annotations or output schema, the description should more fully explain the tool's behavior and results. It omits what the agent can expect after calling (e.g., confirmation, chunk count) and does not clarify the vector dimension or model used.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all 4 parameters. Description adds no extra meaning beyond what the schema provides, so baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Index' and resource 'cached Telegram messages' with a specific outcome 'into vector chunks for semantic search'. It distinguishes from sibling tools like semantic_search_messages which searches already indexed messages.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or that it should be run before semantic search. The agent cannot determine appropriate context from the description alone.

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

preview_messageA

Validate a Telegram send without sending anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
textYesMessage text.
parse_modeNoClient-side parse mode.
reply_to_message_idNoMessage ID to reply to.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It correctly indicates the tool is non-destructive ('without sending anything'), but does not elaborate on what validation entails (e.g., permissions, formatting checks) or the nature of the response.

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

Conciseness5/5

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

The description is a single, concise sentence that immediately conveys the core functionality. It is front-loaded and contains no extraneous information.

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

Completeness2/5

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

Given the lack of output schema and absence of behavioral details, the description is incomplete. It fails to explain what happens upon validation success or failure, what the output format is, or what aspects are validated. This leaves significant gaps for an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The tool description adds no extra meaning beyond what the input schema already provides for each parameter. No parameter-specific context is added.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Validate a Telegram send without sending anything.' It uses a specific verb ('validate') and resource ('Telegram send'), and effectively distinguishes it from siblings like send_message and reply_to_message by emphasizing the non-sending nature.

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

Usage Guidelines3/5

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

The description implies usage context (validation before actual sending) but does not explicitly state when to use or not use this tool, nor does it mention alternatives. The sibling tools provide some context, but the description itself lacks direct guidance.

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

read_historyC

Read messages from the local SQLite cache.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
limitNoMessages to return.
orderNoMessage order.
after_idNoOnly messages newer than this message ID.
before_idNoOnly messages older than this message ID.

TDQS

C2.8/5.0
Behavior2/5

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

No annotations provided; description merely says it reads from local cache. Does not disclose whether it requires network, whether cache is real-time, or any side effects. For a read tool, more transparency is needed.

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

Conciseness3/5

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

Single sentence is concise, but it lacks important details. Conciseness alone does not make it well-structured for agent use.

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?

No output schema exists, 5 optional parameters, and description does not explain return format or how to effectively use parameters like after_id and before_id. Incomplete for a tool with moderate complexity.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all 5 parameters. 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.

Purpose4/5

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

Description states 'Read messages from local SQLite cache' – clear verb and resource. However, it does not differentiate from sibling tools like search_messages or get_thread_context, which also involve reading messages.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like search_messages or sync_history. Agent gets no context about appropriate scenarios.

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

reply_to_messageC

Convenience wrapper around send_message with required reply_to_message_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
textYesReply text.
dry_runNoForce dry run.
user_keyNoLogical user key for cooldown. Default mcp-agent.
dedupe_keyNoOptional caller-provided idempotency key.
message_idYesMessage ID to reply to.
parse_modeNoClient-side parse mode. Default none.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of disclosing behavioral traits. It only describes the tool as a 'convenience wrapper', but does not detail side effects, idempotency (though dedupe_key hints), error handling, or how it differs from send_message in behavior. This is insufficient for an AI agent to fully understand the tool's consequences.

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

Conciseness5/5

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

The description is extremely concise at one sentence, front-loading the core idea. It contains no unnecessary words. However, while concise, it sacrifices completeness; but for the dimension of conciseness alone, it earns top marks.

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

Completeness2/5

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

The tool has 7 parameters (many optional) and no output schema. The description fails to explain return values, error scenarios, or how the wrapper behaves differently from the underlying send_message call. For a tool of this complexity, the description is too sparse to provide complete context.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter already well-documented in the schema. The description adds minimal meaning beyond stating the requirement of the message_id parameter. It does not explain the relationship between parameters or provide context like the effect of dry_run or dedupe_key. Baseline 3 is appropriate.

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 it is a 'convenience wrapper around send_message with required reply_to_message_id', which clearly identifies the tool's function as replying to a message. It distinguishes from the sibling 'send_message' by implying the requirement of a reply target, though not explicitly naming the alternative.

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

Usage Guidelines2/5

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

No explicit guidance is given on when to use this tool versus alternatives like 'send_message'. The description implies it should be used when replying, but does not state exclusions or provide context for when not to use it. It lacks mention of prerequisites or error conditions.

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

resolve_chatC

Resolve the configured or provided Telegram chat and cache its input peer.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
refreshNoForce GramJS entity refresh.

TDQS

C2.9/5.0
Behavior2/5

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

The description mentions caching as a behavioral trait but does not disclose whether the operation is read-only, requires authentication, or failure modes. With no annotations, this is insufficient.

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

Conciseness5/5

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

A single, 12-word sentence that is highly concise and front-loaded with the verb 'Resolve'. No wasted words.

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 tool with no output schema and no annotations, the description provides minimal context. It lacks details on return values, error conditions, and typical usage flow, making it incomplete for an agent.

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

Parameters3/5

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

The input schema already describes both parameters with complete descriptions. The tool-level description adds overall context but no additional parameter-specific meaning. Baseline 3 is appropriate given 100% schema coverage.

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

Purpose4/5

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

The description clearly states the action ('resolve' and 'cache') and the resource ('Telegram chat' and 'input peer'). It distinguishes from siblings like get_chat_info by specifying caching behavior, though the term 'input peer' may be jargon.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as get_chat_info. No prerequisites or when-not-to-use information. The agent must infer usage from context.

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

search_messagesB

Search cached Telegram messages with keyword FTS, vector cosine search, and hybrid candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
limitNoCandidates per search channel.
queryYesSearch query.
after_idNoOnly messages newer than this message ID.
before_idNoOnly messages older than this message ID.
hybrid_limitNoHybrid candidates to return.
vector_limitNoVector chunks to return.
keyword_limitNoKeyword FTS candidates to return.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations exist, so description carries full burden. It implies read-only search but doesn't disclose caching behavior, rate limits, or whether results are ordered. Minimal behavioral disclosure.

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

Conciseness5/5

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

Single sentence with 16 words, no redundant information. Front-loaded with key action and resource.

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?

No output schema, yet description omits return format, ordering, or pagination. For an 8-parameter search tool, more detail on results structure is needed.

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

Parameters3/5

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

Schema provides 100% parameter descriptions, so baseline is 3. Description adds context about three search channels (keyword, vector, hybrid) but doesn't deeply explain semantics beyond schema.

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

Purpose5/5

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

Description specifies verb 'Search' with resource 'cached Telegram messages' and distinct methods (keyword FTS, vector cosine, hybrid). This clearly distinguishes from sibling tools like semantic_search_messages.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., semantic_search_messages). No 'when not to use' or context for choosing search modes.

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

semantic_search_messagesB

Vector/cosine search over indexed cached Telegram message chunks.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
limitNoVector chunks to return.
queryYesSemantic search query.
after_idNoOnly chunks newer than this message ID.
before_idNoOnly chunks older than this message ID.
include_messagesNoInclude source messages for each returned chunk.

TDQS

B3.3/5.0
Behavior3/5

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

No annotations provided, so the description bears the burden. It mentions 'indexed cached' suggesting it only searches over indexed content and is read-only, but it does not disclose what happens if indices are missing, authentication needs, or potential side effects. Partial transparency.

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

Conciseness4/5

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

Single sentence, no wasted words, and front-loaded with the key functional verb. However, it lacks structured formatting (e.g., bullet points) that could improve readability.

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

Completeness2/5

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

The description is minimal for a tool with 6 parameters, no output schema, and no annotations. It does not explain what the search returns (e.g., message chunks, relevance scores), how filters interact, or the role of caching. Incomplete for effective usage.

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

Parameters3/5

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

Schema description coverage is 100%: all 6 parameters have descriptions in the schema. The tool description adds no additional meaning beyond the schema, meeting the baseline of 3.

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

Purpose5/5

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

The description clearly states it performs vector/cosine search over indexed cached Telegram message chunks, specifying the search technique and resource. This distinguishes it from siblings like search_messages (likely keyword search) and index_embeddings (indexing).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like search_messages or get_thread_context. The description implies usage via its purpose but lacks explicit context, exclusions, or prerequisites.

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

send_messageB

Send or dry-run a Telegram message with allowlist, dedupe, and throttling.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
textYesMessage text.
silentNoSend silently.
dry_runNoForce dry run.
user_keyNoLogical user key for cooldown. Default mcp-agent.
dedupe_keyNoOptional caller-provided idempotency key.
parse_modeNoClient-side parse mode. Default none.
link_previewNoEnable link preview.
reply_to_message_idNoMessage ID to reply to.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Mentions allowlist, dedupe, and throttling but fails to explain their behavior, such as what happens if user is not on allowlist or dedupe key collision. Insufficient for a tool with no annotations.

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?

Single sentence, front-loaded with key action and features. Could be more structured (e.g., bullet points) but is appropriately sized and clear.

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?

Tool has 9 parameters and no output schema or annotations. Description is too brief for an agent to understand allowlist, dedupe, throttling behavior, error handling, or return values. Significant gaps in completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds only high-level features (allowlist, dedupe, throttling) without adding specific parameter context beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Send or dry-run a Telegram message' and lists key features like allowlist, dedupe, and throttling. It distinguishes from siblings like reply_to_message and preview_message.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like reply_to_message or preview_message. Does not explain when to use dry-run or the implications of allowlist/dedupe/throttling.

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

sync_historyB

Sync Telegram history into local SQLite cache. Use this manually; normally run sync-daemon in the background.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNoChat ID, @username, or omitted for TELEGRAM_DEFAULT_CHAT_ID.
modeNoSync direction. recent fetches messages above newest cached ID; backfill fetches older messages.
limitNoMessages to fetch. Max TELEGRAM_MAX_SYNC_LIMIT.
offset_idNoStart older-than this message ID. 0 means latest.
batch_sizeNoTelegram page size.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description only says 'sync history' without disclosing side effects, idempotency, rate limits, or what happens on conflict with the local cache.

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

Conciseness5/5

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

Two sentences with no redundant information; every word adds value.

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

Completeness2/5

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

Given 5 parameters, the description is too brief—lacks explanation of how modes differ, what the cache state is after sync, and what the tool does not do (e.g., no output schema).

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

Parameters3/5

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

Schema coverage is 100%, so baseline applies. The description adds no extra meaning beyond the schema's parameter descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Sync' and the resource 'Telegram history into local SQLite cache', distinguishing it from sibling tools like read_history.

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?

It advises manual use versus the sync-daemon, but does not specify when to choose this over read_history or how to decide among sync modes (recent, backfill, both).

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

TDQS

B3.4/5.0
Disambiguation4/5

Tools are largely distinct, but 'search_messages' and 'semantic_search_messages' could cause confusion if descriptions are not read carefully. Otherwise, each tool targets a different operation like resolving, reading, syncing, sending, or searching.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., get_chat_info, sync_history, send_message). No mixed conventions or vague verbs.

Tool Count5/5

12 tools cover the main needs of a Telegram chat assistant: chat resolution, history management, search, indexing, messaging, and configuration. The number feels well-scoped for the domain.

Completeness4/5

Core operations like reading, searching, sending, and previewing messages are present. Missing are message editing/deletion or real-time updates, but these are reasonable omissions for a read-heavy chat assistant.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to read, send, and organize Telegram messages and chats. Supports tools for listing chats, fetching messages, sending/reply, archiving, muting, and folder management.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables reading and searching Telegram channel/group/DM messages from Claude Code using MTProto for full message history access.
    5
    53
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with a user's Telegram account: list chats, read history, search, and send messages through Telegram's MTProto API.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/billyhargroveofficial/tggroupMCP'

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