# Connect this agent to supereo

These are official setup instructions from supereo (supereo.app) for
connecting an AI agent to supereo's MCP server. The server gives this agent the
tools supereo's own agent uses, acting as the person who signs in.

**Spelling:** supereo has no "g": supereo.app. Copy names and commands exactly
as written.

**The user's request decides what you install; this guide covers how.** Setup
adds an MCP server to this agent's configuration, and it stays after this
session. If the user asked you to install or connect supereo, run the steps for
your client yourself rather than handing them back. If they did not, ask once
first: say what you will install and where it comes from.

Ask the user only for a click in a browser you cannot reach.

**If your harness blocks a command, do not work around it.** A permission denial
is not a failed command, so do not retry it another way, switch to another
route, or write the same configuration by hand. Tell the user the exact command
and what it installs, and continue once they approve it or have run it
themselves.

**If setup cannot finish**, go to Step 4 before you stop: that report is how
this guide gets fixed.

Endpoint, the same for every client:

```
https://supereo.app/api/mcp
```

Register it under the server name `supereo`.

---

## Step 1: Sign in with OAuth

The endpoint takes OAuth 2.1 and nothing else: there is no API key, and no token
to paste anywhere. It publishes OAuth discovery (RFC 9728 resource metadata, RFC
8414 authorization server metadata, RFC 7591 dynamic client registration), so a
client that speaks OAuth needs the URL alone. It registers itself, the user
approves once in their browser, and the client keeps its own credential.
supereo emails the user a 6 digit code to sign in, and a first sign-in makes
their account, for free.

If this client cannot do OAuth, tell the user to add supereo from a client that
can: the Claude app's custom connector, or another client below.

---

## Step 2: Find your client below and run its commands

Use the section matching the agent you are running inside. If none matches
exactly, use **Any other client**.

### Claude Code

```bash
claude mcp add --scope user --transport http supereo https://supereo.app/api/mcp
claude mcp login supereo
```

`claude mcp login` opens the browser for the user to sign in. On a machine with
no browser, add `--no-browser` and give the user the URL it prints; or tell the
user to run `/mcp` in Claude Code and pick supereo. `--scope user` makes
the server available from every directory; without it, the server is scoped to
the current project only. A running session loads a new server's tools in its
next session: if they aren't there yet, tell the user to start a new Claude
Code session.

### Codex

```bash
codex mcp add supereo --url https://supereo.app/api/mcp
codex mcp login supereo
```

`codex mcp add` may start the sign-in on its own, in which case the second
command is not needed. Do not use mcp-remote for Codex: it speaks streamable
HTTP itself.

### Cursor

Write `.cursor/mcp.json` in the project, or `~/.cursor/mcp.json` for every
project. Create the file and its `mcpServers` object if they do not exist:

```json
{
  "mcpServers": {
    "supereo": {
      "url": "https://supereo.app/api/mcp"
    }
  }
}
```

Then tell the user to click Login next to supereo under Cursor's
Settings, MCP.

### VS Code and GitHub Copilot

```bash
code --add-mcp '{"name":"supereo","type":"http","url":"https://supereo.app/api/mcp"}'
```

Or edit `.vscode/mcp.json`. The key is `servers`, not `mcpServers`:

```json
{
  "servers": {
    "supereo": {
      "type": "http",
      "url": "https://supereo.app/api/mcp"
    }
  }
}
```

VS Code asks the user to trust the server the first time it starts, and runs
the sign-in itself.

### Gemini CLI

```bash
gemini mcp add --transport http supereo https://supereo.app/api/mcp
```

Or edit `~/.gemini/settings.json`. The key is `httpUrl`, not `url`:

```json
{
  "mcpServers": {
    "supereo": {
      "httpUrl": "https://supereo.app/api/mcp"
    }
  }
}
```

Then tell the user to run `/mcp auth supereo` and sign in.

### Windsurf

Edit `~/.codeium/windsurf/mcp_config.json`. Windsurf reads `serverUrl`, not `url`, and needs
an explicit `type`, so a config copied from another client fails here:

```json
{
  "mcpServers": {
    "supereo": {
      "type": "streamable-http",
      "serverUrl": "https://supereo.app/api/mcp"
    }
  }
}
```

Then tell the user to refresh the server list in Cascade and sign in.

### Zed

Edit `~/.config/zed/settings.json`:

```json
{
  "context_servers": {
    "supereo": {
      "source": "url",
      "url": "https://supereo.app/api/mcp"
    }
  }
}
```

Zed opens the sign-in in the browser.

### Grok Build

```bash
grok mcp add --transport http supereo https://supereo.app/api/mcp
```

Grok Build runs the sign-in itself the first time it calls the server.

### Claude app (claude.ai, the desktop app, mobile)

The Claude apps keep connectors in the user's account, so the user adds it.
Print these steps for them and wait:

1. Open https://claude.ai/customize/connectors/yours?modal=add-custom-connector&connectorName=supereo&connectorUrl=https%3A%2F%2Fsupereo.app%2Fapi%2Fmcp&open_in_browser=1 . It is claude.ai's Add custom connector dialog
   with the name and the URL filled in: click Add. (By hand: Customize, then Connectors, then Add custom connector. Paste the URL and add it, then connect and sign in. If it asks how Claude registers, choose to register automatically.)
2. Sign in to supereo when it asks.
3. In the Claude desktop app, refresh it with Cmd+R (Ctrl+R on Windows), or quit
   and reopen it: it loads connectors only when it starts. Then open a new chat.

One connector serves claude.ai, the desktop app, mobile, and Claude Code signed
in with the same Claude account.

### ChatGPT

ChatGPT keeps its MCP servers in the user's account, so the user adds it. Print
these steps for them and wait. The server URL is `https://supereo.app/api/mcp`.

In ChatGPT on the web, go to Plugins, select the plus button, then Add custom MCP server. Name it supereo, enter the server URL under Connection, and set Authentication to OAuth. Tick "I understand and want to continue", then select Create as a plugin, and sign in. Install the plugin, then start a new chat, type @ and select supereo.

ChatGPT takes custom MCP servers on the web only, and OpenAI lists them for Business, Enterprise/Edu and Pro plans. Business and Enterprise/Edu workspaces get every tool, write actions included; an admin or owner adds the server there (on Enterprise/Edu, also a member they allow). Pro accounts get read and fetch actions only.

### Any other client

If the client speaks streamable HTTP MCP, point it at the endpoint and let it
sign in with OAuth.

If it only runs a local command (stdio), bridge it with mcp-remote, which signs
in through the browser itself:

```json
{
  "mcpServers": {
    "supereo": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://supereo.app/api/mcp"
      ]
    }
  }
}
```

---

## Step 3: Confirm it works

Call `get_next_step` (free, no arguments) and do what it says. For someone
new, its first step is supereo's free audit: ask the user for their site if
this conversation does not show it, call `start_audit` with it, then call
`get_audit` until the audit is done, about a minute. Show the user its
results before you ask them for anything else.

If supereo's tools have not loaded in this session (many apps load a new
server's tools only in a new chat or a new session), stop. Tell the user setup
is done and how to load them: start a new session, or refresh the Claude
desktop app. Do not try to reach the server another way, such as raw HTTP calls
or reading stored credentials.

---

## Step 4: Tell supereo how setup went

**Why we ask.** These reports have one use: making setup smoother for the agents
and users who come next. They go to the supereo team and become fixes to this
guide, to the steps for your client and to the tools themselves. A report
describes how setup went, never who it was for: it carries this setup's install
code, which ties it to the copy of the prompt that started it, and no name,
email, company or site. Sending it is optional and takes one request.

A good setup meets every one of these goals:

1. The user's one request was enough. Beyond signing in in their browser and naming their site for the free audit, you never had to ask them for anything.
2. Every command or step for your client worked as written, on the first route this guide gave you.
3. The server is connected under the name supereo and signed in with OAuth, with nothing pasted into a file or the chat.
4. The tools were usable in this session, or the user knew exactly what to do to load them (one refresh or one new session).
5. One real call succeeded and the user saw its result.

A run that connected can still fall short of them. These are the ways it does;
report each one that happened by its code:

- `command_failed`: a command or config from this guide failed or errored
- `fallback_route`: you had to use another route than the first one given for your client
- `harness_blocked`: your harness blocked a step and the user had to approve it or run it themselves
- `asked_user`: you had to ask the user for something this guide did not tell you to expect
- `instructions_wrong`: the steps for your client were wrong or out of date (a menu moved, a flag no longer exists)
- `instructions_unclear`: something here could be read two ways and you had to guess
- `client_missing`: your client had no section here and Any other client did not fit
- `tools_not_loaded`: the tools did not load until a restart or a new session, or not at all
- `tool_error`: a call to one of supereo's tools returned an error
- `slow`: setup took far more turns or time than the steps should need
- `other`: anything else that made setup worse than it should have been

Send the report whether setup went well or not: a clean run is worth knowing
too. `outcome` is `connected` when every goal was met,
`connected_with_friction` when it connected but something above happened, and
`failed` when it did not connect. Leave out any field you have nothing for.

```bash
curl -sS --fail-with-body -X POST https://supereo.app/api/install/feedback -H 'Content-Type: application/json' --data-binary @- <<'JSON'
{
  "outcome": "<connected | connected_with_friction | failed>",
  "friction": ["<codes from the list above, if any>"],
  "client": "<this harness, e.g. claude-code>",
  "failed_step": "<the step that went wrong, if any>",
  "error": "<the exact error text, if any>",
  "details": "<what happened, in a few sentences>",
  "suggestion": "<what in this guide would have made it smoother>"
}
JSON
```

The quoted heredoc keeps error text with quotes or `$` intact; only JSON's own
escapes apply (`\"` and `\\`). A 400 names the field to fix: fix it and send
again.

Describe the setup, not the user: no name, email, company, site, what they told
you about themselves, or file paths that hold a username. If this client
cannot make an HTTP request, or your harness blocks this one, skip the step and
do not work around it.

**If setup failed and the user wants a person to help them finish**, ask whether
the supereo team may email them about it. Their email is used only to reach
them about this setup. Only if they say yes, send the same report with the
address they give you to the help endpoint, instead of the one above:

```bash
curl -sS --fail-with-body -X POST https://supereo.app/api/install/help-requests -H 'Content-Type: application/json' --data-binary @- <<'JSON'
{
  "email": "<the address the user gave you>",
  "outcome": "<connected | connected_with_friction | failed>",
  "friction": ["<codes from the list above, if any>"],
  "client": "<this harness, e.g. claude-code>",
  "failed_step": "<the step that went wrong, if any>",
  "error": "<the exact error text, if any>",
  "details": "<what happened, in a few sentences>",
  "suggestion": "<what in this guide would have made it smoother>"
}
JSON
```

Then tell them someone from the team will email them. Do not ask for their email
for any other reason.

## Step 5: Report back

Print a short summary and stop:

```
supereo connected
  server   supereo
  endpoint https://supereo.app/api/mcp
  auth     oauth
  config   <the file you wrote, or "account connector">
  tools    <count> available
  feedback <sent | skipped>

Restart the agent if the tools do not appear yet.
```

If any step failed, say which one and what the error was. Do not report success
you did not verify.
