HTTP + MCP front-end for the Telethon Telegram client. Connect an OpenClaw/MCP agent to a self-hosted docker-telethon-plus Telegram userbot API over MCP.
Server exposes 29 Telegram tools with consistent naming (verb_noun pattern: get_*, send_*, create_*, delete_*, etc.). All tools have descriptions (avg ~80 chars, baseline 194). Input schemas are present with type definitions and parameter descriptions. However, output schemas are NOT documented in the visible code, only input schemas appear in tool definitions. Error handling is minimal; no recovery guidance or actionable error messages visible. Parameter descriptions are brief (often 1-2 sentences) and lack constraint details (ranges, enums, format specs). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Missing: pagination guidance for list tools, field-level chaining IDs in responses, and dependency hints.
Ban a user from a chat.
Create a new channel.
Create a poll in a chat.
Delete a channel.
Delete messages from a chat.
Demote an admin in a chat.
Download media from a message.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Return the authorized account profile') but the actual response structure is not visible in the tool definitions. LLMs cannot plan downstream calls or extract required fields without knowing the response schema.
Tool annotations missing. All 29 tools declare Risk levels (READ_ONLY, WRITE, DESTRUCTIVE) but these are not exposed as MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe from destructive operations without reading descriptions.
Pagination not documented for list tools. get_messages, get_dialogs, get_participants accept limit/offset but descriptions do not explain pagination behavior, total count, or next_cursor. Large result sets risk context window exhaustion.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Edit an existing message.
Forward messages to another chat.
List recent chats/dialogs.
Resolve a chat reference (username, phone, link, or ID) to a profile.
Get the linked chat for a channel (discussion group).
Return the authorized account profile.
Get reactions on a message.
Read recent messages from a chat (newest first).
List members of a chat.
Get poll results.
Join a chat via invite link.
Join a channel.
Kick a user from a chat.
Leave a channel.
Mark messages as read in a chat.
Pin a message in a chat.
Promote a user to admin in a chat.
Send a text message to a chat.
Send a reaction to a message.
Unban a user from a chat.
Unpin a message in a chat.
Vote in a poll.
Parameter descriptions lack constraint details. Descriptions like 'Message text (1-4096 characters)' and 'Maximum number of messages to retrieve (1-200)' are present but not formalized as JSON Schema minLength/maxLength/minimum/maximum. LLMs may not respect informal constraints.
No error recovery guidance. Tool descriptions do not explain what errors are possible, how to recover, or what to try next. E.g., send_message does not document rate limits, FLOOD_WAIT backoff, or invalid chat references.