What this service stores, for how long, who can access it, and how to remove it. See /security for the threat model.
When you connect mctl-telegram to ChatGPT, Claude, or another MCP client, the following data flows apply:
disconnect_telegram_account or delete_telegram_account via MCP, use the HTTP endpoints below, or remove the app/connector from your client settings.| Where | Contents | Why | Retention |
|---|---|---|---|
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) |
audit_logs or process stdoutAuthorization: Bearer headersImportant: 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.
/mctl ... commands from Saved Messages are retained as control commands; ordinary personal notes are ignored.taken_over, preventing autonomous continuation under the server-side policy.observe mode requires approval for replies; guarded mode remains subject to server-side policy, limits, blocked senders, disclosure checks, and the global kill switch.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.
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.