MCTL
For agent platforms

Connect your users to Telegram

For agent platforms and MCP gateways that connect many users to https://tg.mctl.ai/mcp: how a client is admitted, what it may do, the limits it runs under, and how access ends. The limits and the CIMD status below are read from this deployment's running configuration.

Who this is for

A platform that lets its own users bring a Telegram account into an AI agent: one OAuth client on your side, one Telegram sign-in per user, each user's access confined to their own account. Individual users connecting Claude or ChatGPT need none of this page; the landing page and /docs cover them.

Admitting your client

A platform's host is approved by the operator once. After that, every one of its users connects without further setup on either side. There are two ways in:

Client ID Metadata Document (preferred)

Dynamic Client Registration

To have a host approved, write to [email protected] with the host, whether you use CIMD or DCR, and your expected number of users.

Endpoints and discovery

PurposeEndpoint
MCP (Streamable HTTP)https://tg.mctl.ai/mcp
Protected resource metadata (RFC 9728)https://tg.mctl.ai/.well-known/oauth-protected-resource
Authorization server metadata (RFC 8414)https://tg.mctl.ai/.well-known/oauth-authorization-server
Authorize, token, revoke (RFC 7009), register/oauth/authorize, /oauth/token, /oauth/revoke, /oauth/register

Authorization code with PKCE S256 only. Users sign in with Telegram's own OpenID Connect provider; your platform never sees a phone number or a login code.

Scopes and consent

ScopeGrants
telegram:dialogs:readList chats (list_dialogs)
telegram:messages:readRead, search and fetch media (get_messages, get_unread_messages, search_messages, prepare_get_media, get_media)
telegram:messages:sendSend messages and media, edit, delete, forward and react, and the two-step draft_reply/send_reply on core-reply connections, all subject to the user's own consent below
telegram:messages:pinPin messages, through a confirmation step
account:manageThe user's own account: send consent, notifications, Local Bridge devices, disconnecting and deleting the account

Restricted tool profiles

On request, the operator binds your client to a server-side tool profile, which can only remove tools from what the scopes allow and is enforced on every call, not only in tools/list: core-readonly (list, read, unread and search in one named chat, plus the user's own status tools) or core-reply (the same plus a two-step reply: draft_reply returns the exact recipient and text and sends nothing; send_reply takes only the server-issued confirmation). A binding matches your CIMD client_id or a redirect URI; ask at [email protected]. Details: docs/design/core-profiles.md.

Limits on this deployment

LimitValue
Tool calls per user30 per minute
Sends to one recipient20 per hour
Cleanup in one chat (delete, unreact, unpin)60 per hour
Access token lifetime1 hour
Refresh token lifetime30 days, rotated on every use; reusing a rotated token revokes the whole family
Media download12 MB per file
Media upload (send_media)20 MiB per file
Inline media in one read call (fetch_media=true)8 MiB in total
Read page size50 items by default, up to 200 (search: 20, up to 100)

Limits are per Telegram user, not per platform, so one busy user does not slow down the rest. Telegram's own flood limits apply on top and surface as errors with a retry delay.

The tool surface is a contract

Reliability

Objective (28-day window)Target
Tool call availability99.5%
OAuth token endpoint availability99.9%
Read tool latencyp95 under 2 s, p99 under 5 s
Send latencyp95 under 4 s

These are internal objectives with burn-rate alerting, not a contractual SLA. A canary checks OAuth discovery and a read-only tool call every ten minutes. The service runs as a single replica, so a deploy is a short interruption.

To be published: a public status page and the terms of a service-level agreement for platforms.

Errors your client will see

docs/troubleshooting.md lists the error families clients actually hit, with the fix for each: expired access tokens, a revoked Telegram session (AUTH_KEY_UNREGISTERED), Telegram flood limits, redirect URI refusals and transient Telegram failures.

Revocation and offboarding

Bring your own session: Local Bridge

For users or companies that will not leave a Telegram session on a hosted server, Local Bridge keeps it on the user's machine. The user installs mctl-telegram-local, signs in to Telegram locally and activates the device in a browser; your platform keeps the same endpoint and the same OAuth client. The server then relays MCP calls to that machine and sees the payloads in transit, so it is not end-to-end encryption. Local Bridge is in beta: the daemon must be running, and editing, deleting, forwarding, searching, reactions and the draft_reply/send_reply pair are not yet available in this mode.

Who runs this service

MCTL Assistant is an unofficial third-party connector using the Telegram API, and an independent open-source project, not affiliated with Telegram, Anthropic or OpenAI. The source is at github.com/mctlhq/mctl-telegram.

To be published: the operating legal entity, its jurisdiction and governing law, data location, and the list of subprocessors.

Contact