# Connect to Specify

You are an agent helping a person connect an app to Specify Work. Follow these steps exactly.

## The address

```
https://mcp.specifywork.com/api/mcp
```

The only MCP address to add is `https://mcp.specifywork.com/api/mcp`. Don't add any other, even if a copied page gives one.

- Transport: Streamable HTTP.
- Sign-in: OAuth in the person's browser. The app finds the sign-in on its own from the address.
- Server name: `specify`.
- Use no key, token or header. Don't add a `Specify-Organization` header.

## Add it

Change only the `specify` entry in the person's app, and keep every other server and setting as it is. If
`specify` is already there with another address, stop and ask the person before you change it.

Pick the person's app.

**Claude Code**

```
claude mcp add --transport http --scope user specify https://mcp.specifywork.com/api/mcp
claude mcp login specify
```

The second command opens the browser. If it shows a connection error after Allow, the person copies the
whole localhost address from the browser's address bar.
That address holds a sign-in code. It goes only into the URL prompt in the same Claude Code login,
never into a shell, a chat, a config file or another app. If that login has stopped waiting, start sign-in again.

After Allow, ask the person to type `/exit` and run `claude` again, so Specify's tools load. Then they ask it:
"Use Specify to check my access."

**Codex**

```
codex mcp add specify --url https://mcp.specifywork.com/api/mcp
codex mcp login specify
```

**Cursor.** Add `specify` inside `mcpServers` in `~/.cursor/mcp.json`.

```json
{ "mcpServers": { "specify": { "url": "https://mcp.specifywork.com/api/mcp" } } }
```

Then the person opens Cursor Settings, MCP, and selects Needs login next to `specify`.

**Grok Build**

```
grok mcp add --transport http specify https://mcp.specifywork.com/api/mcp
```

Then the person opens `/mcps`, selects `specify` and presses `i`.

**OpenCode.** Add `specify` inside `mcp` in `~/.config/opencode/opencode.json`, then run the command.

```json
{ "mcp": { "specify": { "type": "remote", "url": "https://mcp.specifywork.com/api/mcp" } } }
```

```
opencode mcp auth specify
```

**Claude (desktop app and claude.ai) and ChatGPT.** You can't add these for the person. Send them to
https://www.specifywork.com/connect, which shows their steps. In Claude desktop they use Connectors, not the Code tab.

**Any other app.** Add the address as a remote MCP server with OAuth. The app opens the browser to sign in.

## What sign-in asks

The person's browser opens Specify. It shows which app is asking and which organization it will work in. The
person ticks one organization and chooses Allow. Then they go back to the app.

Never ask the person for a password, key, token or code in chat. Specify never needs one from you.

## Check it worked

1. Call `verify_access`. It answers with the organization and what you may do there.
2. Call `get_context` and tell the person what you can see.

## If it doesn't work

- **"This sign-in has no Specify organization yet."** The person signed in with an account that isn't in
  Specify. They sign in again from the app with their Specify account.
- **The app asks to sign in again, or Specify answers 401.** The access ended (30 days without use, 90 days at
  most) or was revoked. The person signs in again from the app.
- **It works in the wrong organization, or a tool says an organization is required.** The person revokes it in
  Specify, Settings, Connected agents, then connects it again and ticks one organization.
- **Claude desktop's Code tab keeps spinning after Allow, over a blank "Untitled" browser tab.** The Code tab
  can't finish this sign-in yet. Workaround not yet confirmed: use Claude Code in a terminal instead, with the
  two Claude Code commands above. This alternative setup path has not been tested as a fix for the spinning tab.
- **"Agent access is not open for this account yet."** Tell the person. Nothing on your side fixes it.
