M mctl-telegram

Local Bridge owner controls

These are things you do yourself after Quick start. None of them need an operator.

Turn sending on

activate gets you a read-only daemon. That is deliberate: the first credential a device is issued carries only read scopes, regardless of any send_enabled value on the account. Activation and consent-to-send are two different decisions.

To let the daemon send or pin, grant consent on your own account:

set_account_send is the admin recovery tool. It is not how you turn sending on for yourself.

What actually gates a real send, in the order that matters:

If a send comes back as a dry-run after you granted consent, check the dry_reason and hint. A typical reason is per-account send_enabled=false — enable sending with set_send_consent, then refresh the client credential. get_my_send_status reports the same gate send_message uses.

Revoke a device

revoke_local_bridge_device is the kill switch for one of your devices. It is gated on account:manage, same as set_send_consent.

It revokes the device row, denylists its entire credential lineage (current_jti, carried forward unchanged from first issuance), and evicts any live /bridge websocket that device holds.

Use this — not set_send_consent — when a device's key material or credential might be compromised. Revoking send consent stops that device from sending, but it stays connected and able to read. Revoking the device disconnects it and locks it out.

Pass the device_id that activate printed. A device id belonging to someone else is refused without revealing whether it exists. Safe to call again on an already-revoked device: it repairs a partial revocation.

Confirm the call path

get_my_audit_log and GET /api/account/audit return a call_path field per entry: "local" when the call was routed to your daemon, absent when it was served by the hosted session pool. That is the authoritative record.

23:45:41  list_dialogs  status=ok     call_path=(absent — hosted)
23:48:29  list_dialogs  status=error  call_path=local
23:50:00  list_dialogs  status=ok     call_path=local

The error in the middle is the expected one: the account was already in local mode while the daemon was not yet running.

Next

This page is rendered from docs/local-bridge/owner.md in the repository, so what you read here is the same text the code is developed against.