Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
7c3b708
docs(agent-plugin): add install guides for the Arcade agent plugin
teallarson Sep 3, 2026
b7ecaab
🤖 Regenerate LLMs.txt
arcade-docs-bot[bot] Sep 3, 2026
4bdf47f
docs(agent-plugin): say plainly that Arcade needs an account
teallarson Sep 3, 2026
6fe150e
docs(agent-plugin): fix the auth model, drop the verify step, reframe…
teallarson Sep 3, 2026
b3d51d5
docs(agent-plugin): install Claude Desktop from the bundle, reframe t…
teallarson Sep 3, 2026
4f7d2ce
🤖 Regenerate LLMs.txt
arcade-docs-bot[bot] Sep 3, 2026
9a3a18c
docs(agent-plugin): nest Claude Desktop and any-MCP-client under tool…
teallarson Sep 3, 2026
ea2cbc3
🤖 Regenerate LLMs.txt
arcade-docs-bot[bot] Sep 3, 2026
d6d785d
continue to iterate
teallarson Sep 3, 2026
94b8415
Update app/en/get-started/agent-plugin/page.mdx
teallarson Sep 3, 2026
9fa0f85
Update app/en/get-started/agent-plugin/tools-only/page.mdx
teallarson Sep 3, 2026
b4286c1
docs(agent-plugin): apply review feedback
teallarson Sep 8, 2026
fe207e2
Merge remote-tracking branch 'origin/main' into teal/gro-303-add-arca…
teallarson Sep 9, 2026
f681507
docs(agent-plugin): align Claude Desktop install with plugin repo and…
teallarson Sep 11, 2026
d8eb0f0
Merge remote-tracking branch 'origin/main' into teal/gro-303-add-arca…
teallarson Oct 2, 2026
9c7c8fa
docs(agent-plugin): sync released install paths
teallarson Oct 2, 2026
b63c631
ci(llmstxt): fetch generation base commit
teallarson Oct 2, 2026
4a5595d
docs(agent-plugin): clear style suggestions
teallarson Oct 2, 2026
33080e5
fix(llmstxt): recover from missing generation base
teallarson Oct 2, 2026
1903d2d
🤖 Regenerate LLMs.txt
github-actions[bot] Oct 2, 2026
c812b04
fix(llmstxt): preserve useful summaries on API failure
teallarson Oct 2, 2026
f1352c7
Revert "🤖 Regenerate LLMs.txt"
teallarson Oct 2, 2026
2372524
🤖 Regenerate LLMs.txt
github-actions[bot] Oct 2, 2026
3890ffb
chore: verify generated documentation
teallarson Oct 2, 2026
fd73c19
chore: keep llms generator fixes out of docs PR
teallarson Oct 2, 2026
41ffaec
Merge origin/main into the agent plugin install guides.
cursoragent Oct 12, 2026
4fee399
docs(agent-plugin): match released install and auth behavior
cursoragent Oct 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/en/get-started/_meta.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { MetaRecord } from "nextra";

export const meta: MetaRecord = {
"about-arcade": "About Arcade",
"agent-plugin": "Agent Plugin",
setup: "Setup",
quickstarts: "Quickstarts",
"agent-frameworks": "Agent Frameworks",
Expand Down
15 changes: 15 additions & 0 deletions app/en/get-started/agent-plugin/_meta.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type { MetaRecord } from "nextra";

export const meta: MetaRecord = {
index: {
title: "Overview",
},
"tools-only": {
title: "Tools-only MCP server",
},
"team-rollout": {
title: "From personal use to team rollout",
},
};

export default meta;
217 changes: 217 additions & 0 deletions app/en/get-started/agent-plugin/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
---
title: "Install the Arcade agent plugin"
description: "Install Arcade in Cursor, Claude Code, VS Code, GitHub Copilot CLI, Codex, or Claude Desktop. Your agent gets tools for every app you connect, with browser sign-in and no API keys."
---

import { Callout, Tabs } from "nextra/components";
import { SignupLink } from "@/app/_components/analytics";

# Install the Arcade agent plugin

The Arcade agent plugin bundles a connection to Arcade's hosted MCP gateway with two skills, three commands, and the `arcade-operator` subagent. The gateway gives your agent thousands of tools for email, calendar, chat, issues, docs, and dozens of other apps. The rest of the plugin helps your agent choose and use those tools. You authorize each app in the browser the first time it comes up, with no API keys to create and no gateway to configure.

<GuideOverview>
<GuideOverview.Outcomes>

Install the Arcade agent plugin in your agent and run your first task against a connected app.

</GuideOverview.Outcomes>

<GuideOverview.Prerequisites>

1. A supported client: Cursor, Claude Code, VS Code, GitHub Copilot CLI, Codex, or Claude Desktop
2. An <SignupLink linkLocation="docs:agent-plugin-install">Arcade account</SignupLink>

</GuideOverview.Prerequisites>

</GuideOverview>

<Callout type="info">
The plugin is built for personal use. For team use, consider a dedicated [MCP
Gateway](/operate/governance/mcp-gateways) with a curated tool list. Add a
[User Source](/operate/identity/user-sources) when end users should sign in
through your organization's identity provider. See [from personal use to team
rollout](/get-started/agent-plugin/team-rollout).
</Callout>

## Install

Each client installs plugins differently. Use the path for yours.

<Callout type="info">
The cross-client `npx plugins add` command does not finish every client
install. Use the client-native steps below so the gateway and every supported
plugin component load together.
</Callout>

<Tabs items={["Claude Code", "Codex", "Cursor", "VS Code", "Copilot CLI", "Claude Desktop"]}>
<Tabs.Tab>

Add the Arcade marketplace, then install the plugin:

```bash
claude plugin marketplace add {{ARCADE_PLUGIN_REPO}}
claude plugin install arcade@arcade
```

Run `/reload-plugins` if Claude Code is already open. Verify the install with `claude plugin list` or `/plugin`.

</Tabs.Tab>
<Tabs.Tab>

Add the Arcade marketplace, then install the plugin:

```bash
codex plugin marketplace add {{ARCADE_PLUGIN_REPO}}
codex plugin add arcade@arcade
```

Start a new Codex session or ChatGPT desktop chat. Open `/plugins`, confirm **arcade** is installed and enabled, then confirm the **arcade** MCP server is connected.

To invoke Arcade explicitly, choose `@Arcade` or use `$arcade:try-arcade`. For team-rollout guidance, use `$arcade:scale-arcade`. Codex does not expose these skills as slash commands.

</Tabs.Tab>
<Tabs.Tab>

For an individual Cursor plan, clone the plugin into Cursor's local plugin directory:

```bash
git clone https://github.com/{{ARCADE_PLUGIN_REPO}} ~/.cursor/plugins/local/arcade-plugin
```

Run **Developer: Reload Window**, then open **Customize** and confirm the Arcade skills, `arcade-operator`, rule, and MCP server are present.

On Teams and Enterprise plans, an admin must import `https://github.com/{{ARCADE_PLUGIN_REPO}}` under **Dashboard → Plugins & MCPs → Team Marketplaces**. Each person can then install Arcade from **Customize**.

</Tabs.Tab>
<Tabs.Tab>

Open the Command Palette, select **Chat: Install Plugin From Source**, and paste:

```text
https://github.com/{{ARCADE_PLUGIN_REPO}}
```

Turn on `chat.plugins.enabled` if needed, then reload VS Code. Run **MCP: List Servers**, select **arcade**, choose **Start Server**, and sign in when prompted.

</Tabs.Tab>
<Tabs.Tab>

Install with Copilot CLI's plugin command:

```bash
copilot plugin install {{ARCADE_PLUGIN_REPO}}
```

Restart the session or run `/restart`.

</Tabs.Tab>
<Tabs.Tab>

Open **Customize → Plugins → Add marketplace → Add from a repository**, paste `{{ARCADE_PLUGIN_REPO}}`, then install **Arcade** (`arcade@arcade`).

See the [Claude Desktop guide](/get-started/agent-plugin/tools-only/claude-desktop) for the terminal commands and tools-only connector option.

</Tabs.Tab>
</Tabs>

After installation, reload your agent or start a new session. Using another client that does not load plugins? Connect to the same gateway with the [tools-only Arcade bundle](/get-started/agent-plugin/tools-only).

## Sign in

Authentication happens in two layers:

1. **Into the gateway.** Your client will ask you to authenticate when it first connects. You sign in to Arcade in the browser, and the client can reach the gateway from then on.
2. **Into each app.** When a task needs an app, your agent gives you a browser sign-in link for the required permissions. After approval, Arcade stores the authorization. You may need to reconnect if the connection expires or a later task needs additional permissions.

You never give your agent an API key or a password for either layer. To check or manage connections, ask your agent to "Check my Arcade connection," "Show my connected apps," or "Connect Google." You can connect an app before you need it. Clients that support Arcade commands also provide the shortcuts listed below.

Arcade uses the app connections authorized for your signed-in identity. Authorize only the accounts you intend the agent to use.

### Privacy

The current plugin build sends no client-side usage telemetry. The build turns telemetry off, and no environment setting turns it on. Requests you make through Arcade still go to its hosted gateway and the apps you authorize. See [Arcade's privacy policy](https://www.arcade.dev/privacy-policy).

Gateway sign-in and app authorization stay separate on every Arcade gateway, including the one in the plugin. [Server-level and tool-level authorization](/learn/server-level-vs-tool-level-auth) goes deeper on the split.

## What you get in each agent

Every install connects to the same Arcade gateway and gets the same tools. What differs is how much of the rest of the plugin each agent can load.

| Agent | Tools | Skills | Subagent | Commands | Rule | Hooks |
| ----------------------------------- | :---: | :----: | :------: | :------: | :--: | :------: |
| Cursor IDE and Cloud Agents | ✅ | 2 | ✅ | 3¹ | ✅ | —² |
| Cursor CLI | ✅ | 2 | ✅ | 3 | — | ✅³ |
| Claude Code | ✅ | 2 | ✅ | 3 | — | ✅ |
| Claude Cowork | ✅ | 2 | ✅ | 3 | — | partial⁴ |
| GitHub Copilot CLI | ✅ | 2 | ✅ | — | — | ✅⁵ |
| VS Code | ✅ | 2 | ✅ | — | — | —⁶ |
| Codex and ChatGPT local runtime | ✅ | 2 | — | — | — | —⁷ |
| Claude Desktop Chat | ✅ | 2 | — | — | — | — |
| OpenCode | ✅ | — | — | — | — | — |
| Any other Streamable HTTP MCP client | ✅ | — | — | — | — | — |

- ¹ Cursor IDE lists the commands on the plugin page but does not show them in the `/` menu.
- ² Cursor IDE and Cloud Agents do not run plugin hooks. The always-apply rule carries the routing guidance instead.
- ³ Cursor CLI runs the session hook but does not load the always-apply rule.
- ⁴ Cowork runs the prompt and subagent hooks but does not add the session-start text to the main conversation.
- ⁵ Copilot CLI runs session and subagent hooks, but drops prompt-hook output from configuration files.
- ⁶ VS Code reads the Copilot hook file but cannot run its Agent Plugins hook commands yet.
- ⁷ Codex does not run Agent Plugins lifecycle hooks yet.

Here is what each of those is for.

### Commands

Cursor, Claude Code, and Cowork load all three commands. Claude Code and Cowork namespace them as `/arcade:arcade-status`, `/arcade:arcade-connect`, and `/arcade:arcade-apps`.

#### `/arcade-status`

Reports whether the gateway is reachable, whether you have signed in, and which apps you have authorized.

#### `/arcade-connect <app>`

Authorizes an app on demand, so you are not interrupted mid-task.

#### `/arcade-apps`

Lists the apps you have connected and lets you disconnect one.

### Skills

Skills are instructions your agent reads on its own, so you do not have to invoke them in most clients. `try-arcade` teaches it to turn a request like "reply to that thread" into the right sequence of tool calls across your apps. `scale-arcade` handles the other kind of question, the one about moving a workflow onto a team gateway, and it walks you through the decisions on [this page](/get-started/agent-plugin/team-rollout) against your own project. Codex does not expose these skills as slash commands. Choose `@Arcade` or `$arcade:try-arcade`, and use `$arcade:scale-arcade` for team-rollout guidance.

### Subagent

The `arcade-operator` subagent runs an app task in its own context and reports back just the result. Arcade exposes a lot of tools, and searching them fills a conversation with noise that pushes out your actual work. The operator absorbs that. Cursor, Claude Code, Cowork, Copilot CLI, and VS Code load it. Codex and Claude Desktop Chat do not.

### Rule and hooks

The rule and hooks tell your agent that Arcade exists and when reaching for it is the right move, which is the difference between a tool that sits unused and one your agent actually picks up. Cursor IDE and Cloud Agents use an always-apply rule. Cursor CLI, Claude Code, Cowork, and Copilot CLI run the hooks their hosts support.

The columns thin out because the [Agent Plugins](https://agent-plugins.org) 1.0 specification only makes skills and MCP servers portable. Commands, subagents, hooks, and editor rules are specific to each agent, so the plugin ships them where the agents that support them will find them.

### How Arcade chooses a connection

Arcade prefers the plugin's gateway. If it cannot complete a task for a reason other than sign-in or permission denial, your agent may use another already-authorized connection within the task you approved. It checks the intended app account before using another Arcade gateway. Sign-in and permission failures require your attention. The agent does not switch connections to get around them. The plugin instructs your agent to confirm the action and destination before changing something in an app.

`arcade-operator` falls back only to another authorized Arcade gateway. Fallback to any other tool belongs to the parent agent.

## Try it

This gateway includes every [optimized toolkit](/resources/integrations) in the catalog. Try asking your agent:

- "Send a summary of tomorrow's calendar events to me on Slack."
- "Read my Granola notes from last week, check them against Linear, and file anything I promised that is not a ticket yet. Wait for me before creating anything."
- "Find unread mail that needs a reply. Look the sender up in HubSpot if you can, draft a response, and Slack me the draft before sending."
- "Pull my open GitHub pull requests, my Linear issues, and tomorrow's calendar. Write a standup update and send it to me on Slack."
- "Search my Drive and Notion for the product spec my team uses, then drop a one-paragraph summary in Slack."

Or ask "What can Arcade do?" and pick a workflow from the answer.

## Next steps

- [From personal use to team rollout](/get-started/agent-plugin/team-rollout): move a workflow onto your own gateway
- [Connect to MCP clients](/get-started/mcp-clients): configure a client against a gateway you control
- [Integrations catalog](/resources/integrations): every app and toolkit Arcade supports
- [Agentic development](/get-started/setup/connect-arcade-docs): point your agent at these docs with `llms.txt`
54 changes: 54 additions & 0 deletions app/en/get-started/agent-plugin/team-rollout/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: "From personal use to team rollout"
description: "What changes when an Arcade workflow you proved with the agent plugin becomes something a team depends on: a dedicated MCP Gateway, a curated tool list, and how end users sign in."
---

import { Callout } from "nextra/components";

# From personal use to team rollout

The [agent plugin](/get-started/agent-plugin) serves one person working on their own. Every install points at the same global gateway URL. Arcade uses the app connections authorized for your signed-in identity. Authorize only the accounts you intend the agent to use.

What the plugin gives you is a broad tool selection and an identity that is yours alone, which is what you want for your own work.

Once a team depends on that workflow, three questions you never had to answer start to matter:

1. Where does your team connect?
2. Which tools can they call?
3. Who is each end user?

Each one has a section below, in that order.

<Callout type="info">
If your client loads the plugin's skills, ask Arcade to help move your
workflow onto a team gateway. In Codex, use `$arcade:scale-arcade`.
</Callout>

## Where does your team connect?

An [MCP Gateway](/operate/governance/mcp-gateways) is the endpoint your team's clients connect to, and it is where you decide what those clients can do. Create a gateway in the relevant Arcade project for the workflow and tool boundary you need from the [Arcade dashboard](https://app.arcade.dev).

Clients connect to it exactly the way they connected to the plugin's gateway. See the [MCP client guides](/get-started/mcp-clients) for Cursor, Claude Code, Claude Desktop, VS Code, and Copilot.

## Which tools can they call?

The gateway is the filter that decides which tools reach your agent. Open the **Allowed Tools** picker on your gateway and select across everything in scope: Arcade-hosted toolkits from the [integrations catalog](/resources/integrations), [remote MCP servers](/operate/governance/remote-mcp-servers) you register, and your own [custom MCP servers](/build/create-tools/tool-basics/build-mcp-server) deployed with [Arcade Deploy](/build/arcade-deploy).

A smaller, deliberate tool list makes agents more accurate, not less capable. Save the gateway and connected clients see the new list on their next request, with no restart.

Beyond the allowlist, [contextual access](/operate/governance/contextual-access) lets you allow or deny each individual tool call as it arrives, and [audit logs](/operate/governance/audit-logs) and [tool executions](/operate/governance/tool-executions) show you what actually ran.

## Who is each end user?

When you are the only user, signing in to each app yourself is enough. In production, each of your end users needs their own authorization, so an agent acting for one person can never reach another person's data.

Choose how your end users sign in. Internal teams whose users are Arcade project members can use [Arcade Auth](/operate/identity/user-sources#when-to-use-a-user-source). If users already have identities in your organization's OIDC provider, configure a [User Source](/operate/identity/user-sources) on the gateway.

## Building your own product?

Connecting a client to a gateway takes the least work, and for many teams it is the whole rollout. When you are building your own product rather than configuring an agent, call Arcade directly instead:

- [Arcade API reference](/references/api): the REST surface for tool calling and authorization
- [Agent frameworks](/get-started/agent-frameworks) for LangChain, CrewAI, OpenAI Agents, Google ADK, Mastra, Vercel AI SDK, and more
- [Get an API key](/get-started/setup/api-keys): required once you are calling Arcade from your own code
- [Build user-facing agents](/build/user-facing-agents): patterns for handling authorization on behalf of your users
15 changes: 15 additions & 0 deletions app/en/get-started/agent-plugin/tools-only/_meta.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type { MetaRecord } from "nextra";

export const meta: MetaRecord = {
index: {
title: "Overview",
},
"claude-desktop": {
title: "Claude Desktop",
},
"any-mcp-client": {
title: "Any MCP client",
},
};

export default meta;
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"use client";

import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
} from "@arcadeai/design-system";
import {
getMcpClientMeta,
MCPInstallButton,
type McpClientId,
} from "@arcadeai/ui-kit/mcp-gateway-connect";
import { useState } from "react";
import {
AGENT_PLUGIN_ENGINE_PUBLIC_URL,
AGENT_PLUGIN_GATEWAY_SLUG,
} from "@/lib/agent-plugin";

const INSTALL_CLIENTS = [
"cursor",
"vscode",
] as const satisfies readonly McpClientId[];

type InstallClient = (typeof INSTALL_CLIENTS)[number];

function isInstallClient(value: string | null): value is InstallClient {
return value === "cursor" || value === "vscode";
}

function ClientOption({ clientId }: { clientId: InstallClient }) {
const client = getMcpClientMeta(clientId);

return (
<span className="flex items-center gap-2">
<span className="flex size-4 shrink-0 items-center justify-center [&>svg]:size-4">
{client.logo}
</span>
{client.name}
</span>
);
}

export function MCPClientInstaller() {
const [selectedClient, setSelectedClient] = useState<InstallClient>("cursor");

return (
<div className="space-y-4">
<Select
onValueChange={(value) => {
if (isInstallClient(value)) {
setSelectedClient(value);
}
}}
value={selectedClient}
>
<SelectTrigger className="w-[200px]">
<ClientOption clientId={selectedClient} />
</SelectTrigger>
<SelectContent>
{INSTALL_CLIENTS.map((clientId) => (
<SelectItem key={clientId} value={clientId}>
<ClientOption clientId={clientId} />
</SelectItem>
))}
</SelectContent>
</Select>

<MCPInstallButton
clientId={selectedClient}
enginePublicUrl={AGENT_PLUGIN_ENGINE_PUBLIC_URL}
gatewayName="Arcade"
gatewaySlug={AGENT_PLUGIN_GATEWAY_SLUG}
/>
</div>
);
}
Loading
Loading