M mctl-telegram
Privacy

Privacy and data handling

What this service stores, for how long, who can access it, and how to remove it. See /security for the threat model.

ChatGPT Apps and MCP users

When you connect mctl-telegram to ChatGPT, Claude, or another MCP client, the following data flows apply:

Data inventory

WhereContentsWhyRetention
users table Telegram user id, display name, and username Resolves your identity for per-user storage isolation Until account deletion; related user-scoped rows are removed by database cascade where configured
telegram_accounts table AES-256-GCM ciphertext of your MTProto session blob using a per-user derived key, plus account metadata and feature/send flags Required to make Telegram API calls on your behalf Until disconnect/revocation or deletion; session TTLs and sweepers may revoke it earlier
incoming_events and conversation_messages Communication Agent event metadata and third-party Telegram message bodies. Message bodies are AES-256-GCM encrypted before storage. Durable ingestion, deduplication, queue recovery, conversation context, and owner takeover handling Encrypted bodies/context: AGENT_RETENTION_DAYS, default 30 days. Event metadata remains as a deduplication tombstone until account deletion. Setting retention to 0 keeps content indefinitely.
agent_actions Proposed reply/action payloads, policy decision and reasons, approval state, and execution metadata. Sensitive payload text is encrypted at rest. Server-side policy enforcement, human approval, and exactly-once-oriented execution bookkeeping Encrypted draft/send content and approval capabilities: AGENT_RETENTION_DAYS, default 30 days. Old inactive pre-send actions are denied before content is cleared; executing actions retain recovery data until terminal. Lifecycle metadata remains until account deletion.
audit_logs table Tool/action name, redacted peer reference, status, and a redacted error string. No message body, phone number, bearer token, or session bytes. Operational visibility, abuse detection, and user-visible audit history Default 90 days via AUDIT_RETENTION_DAYS; 0 keeps rows indefinitely
Process memory Plaintext Telegram messages, decrypted agent content, tool arguments, and tool results while a request, listener update, policy evaluation, or queue job is being processed Required to fulfil the request or agent workflow Released after processing; the running process/operator can access it while present
Process stdout (Loki) Structured JSON log lines from slog, with message/body/payload and credential keys redacted Operator debugging Per the platform's Loki retention (typically 14–30 days)

What is NOT stored in logs or audit history

Important: when Communication Agent is enabled, message content is stored in encrypted agent tables as described above. The previous “message text is never written to disk” guarantee applies only to ordinary read-tool responses and audit/logging paths, not to the durable agent workflow.

Communication Agent controls

Self-service controls

You can remove account access and inspect what was recorded without operator involvement:

POST   /api/account/disconnect   # mark session revoked and stop Telegram access
DELETE /api/account              # delete the account/session row and related user-scoped data
GET    /api/account              # connection status + feature/send flags
GET    /api/account/audit        # newest-first audit rows (limit, before)
GET    /api/account/audit/verify # recompute the audit hash chain

Equivalent MCP tools include disconnect_telegram_account, delete_telegram_account, and get_my_audit_log. Disconnect/delete also tear down the in-memory MTProto client so a concurrent request cannot continue using a revoked session.

Who can access your data

Third parties

Contact

General support: [email protected]. Privacy inquiries: [email protected]. For security or vulnerability reports, see /security. Code is open source at github.com/mctlhq/mctl-telegram.