Connect agents
Add your instance to Claude Code, Codex CLI, Cursor, OpenCode, or any MCP client.
Every instance serves one MCP server at https://<your-app-host>/mcp over Streamable HTTP. Any MCP client can connect in one of two ways:
- OAuth. Clients that support MCP OAuth need only the URL. They register themselves, and you sign in through your instance’s login page.
- Personal access token. For clients and scripts without OAuth, create a token in the dashboard under Settings → Agents and send it as
Authorization: Bearer oa_pat_…. Tokens can be revoked at any time.
Setup’s agent-config step prints each snippet below with your URL filled in, and the dashboard’s Settings → Agents page shows them too. The examples use artifacts.example.com and the default server name, open-artifacts; setup names the server after its --name flag.
The snippets never contain the token itself; a token typed into a command or committed in a config file can leak through shell history or git. Codex CLI, Cursor, and OpenCode read it from the OA_TOKEN environment variable when they start, so export it, without echoing, in the shell that launches the client: read -rs OA_TOKEN; export OA_TOKEN. The setup run that mints the owner token shows it once, in the owner-token step.
Steps
- Pick the auth method. Use OAuth if this agent’s client supports MCP OAuth. Otherwise ask the user to create a personal access token in the dashboard under Settings → Agents. Don’t run setup with
--new-owner-tokenfor this: it revokes the token the first agent uses. - Add the server to this agent’s MCP config, using the snippet for its client from the Connect agents doc. Name the server after setup’s
--name, which defaults toopen-artifacts. - Check the connection by calling
list_artifacts.
Claude Code
read -rs OA_TOKEN
claude mcp add --transport http open-artifacts https://artifacts.example.com/mcp \
--header "Authorization: Bearer $OA_TOKEN"
unset OA_TOKEN
read -rs takes the pasted token without showing it, so it stays out of the screen and shell history; the double quotes let the shell fill in $OA_TOKEN, and unset clears it afterwards.
Codex CLI
In ~/.codex/config.toml:
[mcp_servers.open-artifacts]
url = "https://artifacts.example.com/mcp"
bearer_token_env_var = "OA_TOKEN"
Cursor
In .cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project:
{
"mcpServers": {
"open-artifacts": {
"url": "https://artifacts.example.com/mcp",
"headers": { "Authorization": "Bearer ${env:OA_TOKEN}" }
}
}
}
OpenCode
In opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"open-artifacts": {
"type": "remote",
"url": "https://artifacts.example.com/mcp",
"enabled": true,
"oauth": false,
"headers": { "Authorization": "Bearer {env:OA_TOKEN}" }
}
}
}
Other clients
Give the client the URL https://artifacts.example.com/mcp. If it supports OAuth, that’s all it needs. Otherwise add the header Authorization: Bearer <YOUR_TOKEN>. Many clients accept this JSON, which setup prints as json. Replace <YOUR_TOKEN> with the token, and keep the file out of git:
{
"mcpServers": {
"open-artifacts": {
"type": "http",
"url": "https://artifacts.example.com/mcp",
"headers": { "Authorization": "Bearer <YOUR_TOKEN>" }
}
}
}
Each version an agent publishes records the client’s name and version, or the token’s label, so you can see which agent made what.