# Set up Claude Tag with workload identity

[Claude Tag](https://claude.com/docs/claude-tag/admins/setup-overview) brings Claude into Slack. In a channel, Claude Tag acts as a channel agent rather than as the person who mentioned it. With [federated access](https://claude.com/docs/claude-tag/admins/federated-access/authorization-server), Anthropic gives each channel agent a short-lived identity token, and Claude Tag exchanges it at an authorization server for an access token to call MCP servers.

Speakeasy can be that authorization server. Each Claude Tag channel then signs in with [workload identity](/docs/ai-control-plane/identity/agents/workload-identity), acts as a Speakeasy agent, and needs no stored secret.

> To have Claude Tag call tools as the person who mentioned it, with their own credentials, follow [Roll out Claude Tag with a gateway endpoint](/docs/ai-control-plane/guides/claude-tag-gateway-endpoint) instead. Use this guide when channels should act as a shared agent with its own policy.

This guide covers:

- [How the connection works](#how-the-connection-works)
- [Prerequisites](#prerequisites)
- [Start the setup](#start-the-setup)
- [Choose the servers Claude can reach](#choose-the-servers-claude-can-reach)
- [Enter the Anthropic organization](#enter-the-anthropic-organization)
- [Connect the authorization server in Claude](#connect-the-authorization-server-in-claude)
- [Choose where Claude can use it](#choose-where-claude-can-use-it)
- [Test from a channel](#test-from-a-channel)
- [Manage and revoke access](#manage-and-revoke-access)

## How the connection works

When someone mentions Claude in a channel thread and Claude needs an MCP tool:

- Anthropic issues a token for the channel's agent, signed by `https://identity.anthropic.com/agents`. Its subject has the form `wimse://identity.anthropic.com/org/ORG_ID/agent/AGENT_ID`, with one agent per channel.
- Claude Tag posts the token to the Speakeasy token endpoint.
- Speakeasy checks the signature and matches the subject against the access rule saved for the agent. The rule covers every Claude Tag agent in one Anthropic organization.
- Speakeasy returns an access token valid for 15 minutes. Claude Tag sends it on MCP requests and exchanges a new token when it expires.

Each channel signs in under its own subject, so its sessions are listed and revocable separately. Every channel acts as the same Speakeasy agent and can do only what that agent's policy allows.

## Prerequisites

- In the Claude organization: Claude Tag with federated access, and an Owner or an admin with full Claude Tag management permission.
- In Speakeasy: `workload:write`, which the Admin role holds by default.
- MCP servers on a Speakeasy host. A server on a custom domain signs clients in at its own origin, which Claude Tag can't use, because Claude Tag requires the token endpoint to be on a different host from the servers it calls.
- A Speakeasy authorization server in shared mode for the organization or project. If the setup reports that no token endpoint is available, contact Speakeasy to enable one.

## Start the setup

Open **Identity > Agents** in the project sidebar and select **Set up Claude Tag**.

![The Agents page with the Set up Claude Tag button beside New agent identity](/assets/docs/ai-control-plane/identity/claude-tag-agents.webp)

The agent wizard opens with the name, the credential type, and the platform already filled in, and lands on server selection. A summary panel beside the steps tracks every choice. To change the agent's name, owner, or scope, go back to the first step.

## Choose the servers Claude can reach

Select the MCP servers Claude Tag may call. The agent reaches nothing else, and never more than you can reach yourself.

![The server selection step of the wizard with three servers selected](/assets/docs/ai-control-plane/identity/claude-tag-servers.webp)

Servers that authorize each person separately can't be chosen here, because an agent has no person behind it. They're listed under **Unavailable servers** with a link to change that server's identity setting.

Select **Continue**. The credential step is already set to **Workload identity** with **Claude Tag** as the platform, so select **Continue** again.

## Enter the Anthropic organization

Enter the **Anthropic organization ID**. It's at the bottom of the Claude organization settings, labeled **Organization ID**. The Claude Tag console shows the same value as **Tenant ID** for tokens.

![The Anthropic organization step with an organization ID entered](/assets/docs/ai-control-plane/identity/claude-tag-organization.webp)

Select **Connect Claude Tag**. Speakeasy creates the agent, trusts Anthropic's issuer, and saves one access rule:

```text
wimse://identity.anthropic.com/org/ORG_ID/agent/*
```

The rule admits every Claude Tag channel in that Anthropic organization, including channels created later. That's safe because Anthropic mints the agent ID at the end of the subject, and no caller can choose it. Speakeasy already knows Anthropic's issuer and signing keys, so there's nothing else to enter.

## Connect the authorization server in Claude

The next step walks through Claude's own dialog and holds the values to paste into it.

![The Connect in Claude Tag step, with the numbered console steps and copyable token endpoint and issuer URL](/assets/docs/ai-control-plane/identity/claude-tag-connect.webp)

1. Open **Federated agent access** in Claude Tag's settings. The step links straight to it.
2. Find the **Authorization servers** section.
3. Select **Connect an authorization server**.
4. Copy the **Token endpoint** and **Issuer URL** from the wizard. Claude marks the issuer optional, but fill it in: Claude's token must be issued for that value, or Speakeasy refuses it.
5. Tick **This authorization server checks that each token's subject belongs to your organization**. **Register server** stays disabled until you do. The access rule just saved is that check.
6. Select **Register server**. The dialog moves to its second half. Closing it here leaves the address registered, counting against Claude's limit of five.
7. Fill in the second half: leave **Resource** and **Scope** empty, and set **Allowed API hosts** to the MCP host shown in the wizard. Choose the bundle assigned to the channels Claude Tag should work in, or create one.

## Choose where Claude can use it

A bundle applies nowhere until a place is turned on for it. Nothing in this step changes Speakeasy; these are Claude Tag's own settings.

![The Where Claude can use it step, listing the bundle settings to turn on](/assets/docs/ai-control-plane/identity/claude-tag-bundle.webp)

1. Open Claude Tag's settings.
2. Scroll to **Claude's access** and open the **Bundles** tab.
3. Under **Installed**, select your bundle.
4. Under **Where it applies**, turn on your Slack workspace. Its channels inherit it.
5. Optionally add a system prompt under **Instructions**, describing how Claude should behave when it uses this bundle.

## Test from a channel

In a Slack channel the bundle applies to, start a new thread, mention Claude, and ask it to list the MCP server's tools.

> **Use a channel thread, not a direct message**
> Federated connections work only in channel threads. A direct message with Claude fails with `request blocked: federated connections work only in agent sessions`.

Each channel that signs in appears on [MCP Sessions](/docs/ai-control-plane/mcp-gateway/access/clients-and-sessions#organization-wide-view) under Anthropic's issuer and the channel's own subject.

If the exchange fails, check:

- The Anthropic organization ID matches the **Tenant ID** in the Claude Tag console.
- The **Issuer URL** in Claude matches the Speakeasy issuer URL exactly.
- The MCP server is on a Speakeasy host and attached to the authorization server whose values were copied.
- The agent's policy allows the server, and the agent owner still has access to it.

Speakeasy returns the same `invalid_grant` error for every refusal, and Claude Tag reads only the error code, so these checks are the quickest way to find the cause.

## Manage and revoke access

The agent's **Credentials** section lists the platforms that sign in as it, beside the API keys it holds.

![The Credentials section of an agent, with Federated access listing Claude Tag with a Remove action, and the API keys panel below it](/assets/docs/ai-control-plane/identity/claude-tag-federated-access.webp)

- To change the servers Claude Tag can reach, select **Edit** on the agent and save a new selection.
- To have one channel act as a different agent, set up a second agent and add a rule for that channel's exact subject. An exact rule takes priority over the wildcard. Agent IDs appear in each channel's sessions on **MCP Sessions**.
- To disconnect Claude Tag, select **Remove** on the **Claude Tag** row, then remove the authorization server in the Claude Tag settings. Removing it there also frees a gateway slot, since a Claude organization can register at most five.

Removing access stops new exchanges but doesn't end sessions already issued. To cut off a channel immediately, also revoke its sessions on **MCP Sessions**, or [revoke the agent](/docs/ai-control-plane/identity/agents#suspend-revoke-or-delete-an-agent), which applies to both API keys and federated access.

## Next steps

- Read [Workload identity](/docs/ai-control-plane/identity/agents/workload-identity) for how trusted platforms, access rules, and token exchange work for other platforms.
- Read [Authorizing agents](/docs/ai-control-plane/identity/agents/authorizing-agents) to scope the agent Claude Tag acts as.

---

Index of every Speakeasy page for agents: [llms.txt](https://www.speakeasy.com/llms.txt). AI control plane and MCP gateway content in one file: [llms-full.txt](https://www.speakeasy.com/llms-full.txt). Any page is available as markdown by appending `.md` to its URL or by requesting it with `Accept: text/markdown`.
