Act on your connected providers
List, read and change things in the apps you have connected, such as Outlook, Asana, Xero and GitHub, from Claude, ChatGPT or the Twin CLI, under your Twin's rules.
Your Twin sessions can read and act on the apps you have connected. An external agent can make the same calls directly, without asking the Twin's own agent. Each call runs on your own connection, as a Twin run with no model, under the same rules as a session: what the Twin withholds, it withholds here too.
| Operation | REST | MCP | Twin CLI | TypeScript SDK |
|---|---|---|---|---|
twin.provider-actions.list | GET /api/twin/provider-actions | twin_provider_actions | twin providers actions | twinProviders.listActions |
twin.provider-actions.read | POST /api/twin/provider-actions/reads | twin_provider_read | twin providers read | twinProviders.read |
twin.provider-actions.write | POST /api/twin/provider-actions/writes | twin_provider_write | twin providers write | twinProviders.write |
twin.provider-actions.call.get | GET /api/twin/provider-actions/calls/{callId} | twin_provider_call_result | twin providers call | twinProviders.getCall |
Find an action
The list shows the providers you have connected and what each offers you, with each action's effect (read, write or destructive) and whether it sends anything outside MLX. Name up to 10 actions to get their arguments as input schemas.
An action that can't run says why:
read_withheld: a live read that every Twin run withholds, because nothing limits it to what you can see (for example a workspace-wide key). Where a synced copy exists, the message names it.session_only: a tool served by a provider's own MCP server. These stay with Twin sessions, except Slack's read-only tool.needs_approval: your organisation asks for approval on it, which these calls can't give.
"Your mail in MLX" holds actions on your own mail as the Twin keeps it: find attachments in your synced Gmail, add chosen ones to a channel, and run an Inbox item's action at its source, such as archiving the email.
Read and write
A read needs twin.read. A write needs twin.providers.write, which a
connection holds only when you tick it on the consent screen. In the CLI, run
twin login --provider-writes. Clients such as Claude and ChatGPT ask you before a write,
because the write tool is marked destructive.
Every write takes an idempotencyKey. Sending the same key again returns the
first outcome and never acts twice. The CLI makes a key for each command unless
you give one.
A call returns at once with its id. Read it with twin_provider_call_result, or
twin providers read --wait, until it completes or fails. A completed call
returns what the action gave back, as a Twin session's agent reads it. Mail
actions complete straight away.