--- name: managing-arcade-apps description: List, disconnect, reconnect, and fix the apps Arcade is connected to for the user, including switching accounts, expired sign-ins, and missing permissions, plus the one-time sign-in when a task needs an app that isn't connected yet. Use when the user asks which apps are connected, wants to disconnect, reconnect, or switch the account for an app, or a tool returns a sign-in link. Not for performing tasks inside apps. --- # Managing connected apps `Arcade_Apps` lives on the `arcade` MCP server. It shows every app available to the user, connected or not. ## Quick start ```text Arcade_Apps(action: "list") # all apps + connected state + account Arcade_Apps(action: "disconnect", app_id: "...") # remove one app (confirm first) ``` Use **apps** language: app, connected, not connected, permissions, sign in, disconnect. Avoid authorization, OAuth, scopes, provider, token. ## List Call `Arcade_Apps(action: "list")` and show each app, whether it's connected, and the account it's connected as. Connected apps first. Don't show internal ids or raw permission strings. ### Example ```text Arcade_Apps(action: "list") → {apps: [{app_id: "app-a", name: "App A", connected: true, account: "you@example.com"}, {app_id: "app-b", name: "App B", connected: false}, ...]} Reply: Connected: App A (you@example.com) Not connected: App B, App C, … ``` ## Disconnect Call `Arcade_Apps(action: "disconnect", app_id: "")`. **Confirm with the user first** — disconnecting removes Arcade's access to that app. Report the outcome plainly. ## Signing in to an app The first time a task needs an app the user hasn't connected, a tool returns a one-time sign-in link. **The response may say `success: true` — an `authorization_url` in the output still means sign-in required, not a completed task.** 1. Present the link: "Sign in to connect your **** here, then tell me to continue." 2. Stop and wait for the user — never poll or retry in a loop. 3. After they confirm, retry the original request once. ## Fixing an app connection For wrong account, expired sign-in, missing permissions, or an explicit "reconnect" request, use `Arcade_Apps` (same tool as list/disconnect) with a `tool_name` from the affected app: ```text Arcade_Apps(action: "status", tool_name: "...") # check the connection Arcade_Apps(action: "switch_account", tool_name: "...", provider_id: "") # sign in as a different account Arcade_Apps(action: "reauthorize", tool_name: "...", provider_id: "") # expired / missing permissions ``` Each returns a fresh sign-in link — present it, stop, and wait, exactly like a first-time sign-in. Keep apps language: say "switch the account" or "sign in again", not reauthorize/OAuth/scopes. If the user was signed in with the wrong account, remind them the sign-in screen may reuse their browser session — they may need to switch accounts on the app's own page. ## When not to use - Performing tasks inside an app (sending, fetching, scheduling) — that's the `using-arcade-tools` skill. - Don't call `list` speculatively before every task; tools surface sign-in links on their own when an app is missing.