Product updates
What changed in MCTL, reviewed and grouped by release. The same text is used for the client broadcast digest sent through Telegram.
0.85.0
Two-step replies for connections with the core-reply tool profile (docs only)
new_tool · draft_reply, send_reply
Connections bound to the core-reply tool profile get draft_reply and send_reply. draft_reply sends nothing: it checks that the chat already exists in your account, shows the exact recipient and text, and returns a one-shot confirmation that expires after 10 minutes. send_reply takes only that confirmation and sends exactly what was drafted, once. If real sends are off for your account it returns an error that says why, not a preview. Connections without a tool profile do not see either tool, and send_message is unchanged.
0.81.0
Disconnecting or deleting your account now needs account management permission
changed_behavior · disconnect_telegram_account, delete_telegram_account
disconnect_telegram_account and delete_telegram_account, and the matching account API calls, now require the account:manage permission. Read-only connections, worker tokens and Local Bridge device credentials can no longer disconnect or delete the account they were issued for: over MCP the two tools are no longer listed, and the API answers 403. Refused attempts are recorded in your audit log. On tg.mctl.ai, you can still disconnect from the manage page after signing in with Telegram. Changing send consent there, and reading or changing notification preferences through /api/account/notifications, need account:manage too. After signing in with Telegram you can always turn notifications off on the manage page; turning one on needs account:manage. On shared-hmac deployments every default group now carries account:manage, so read-only members can also set their own send consent and notification preferences and revoke their own Local Bridge devices; sending still needs the send permission.
Your tool list now follows the permissions of your connection
changed_behavior · send_message, edit_message, delete_messages, forward_messages, set_reaction, set_my_notification_preferences, set_send_consent, delete_telegram_account, prepare_pin_message
The tools a client is shown now follow the permissions its connection was granted, and a direct call to a tool that is not shown is refused. A connection without send permission used to get a preview from send_message, edit_message, delete_messages, forward_messages and set_reaction; it now gets a "tool not found" error. Tools outside a connection's granted permissions, including operator tools, are no longer listed. set_reaction and set_my_notification_preferences are now marked as changing existing state, set_send_consent has a clearer title, and two descriptions were corrected. When real sends are off for your account, a preview's hint now names a fix the connection can use instead of always naming set_send_consent.
0.74.0
Broadcast campaigns show their source digest
changed_behavior · get_broadcast, list_broadcasts
get_broadcast and list_broadcasts now include source_ref on a campaign prepared from a frozen product-update digest: the digest id, version and content hash the text was rendered from. A manually prepared campaign (prepare_broadcast) keeps source_ref null, unchanged from before.
0.70.0
Large media is returned once, in structured content
changed_behavior · get_media, get_messages, get_unread_messages
get_media, and get_messages / get_unread_messages with fetch_media=true, now return media larger than 1 MiB (base64) only in structured content; the text block keeps the same shape with a placeholder per item, and new data_omitted_from_text / media_data_omitted_from_text flags mark the mode. Smaller media is returned exactly as before. fetch_media now fetches at most 8 MiB of media per call, and when several media downloads run at once a call may be asked to retry shortly.
0.69.0
Bound search_messages to a date range
changed_behavior · search_messages
search_messages now accepts optional min_date/max_date inputs (RFC 3339 or a plain YYYY-MM-DD date, inclusive, interpreted in UTC) so a search can be scoped to a time window instead of always scanning full history for the newest matches.