> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sempera.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported clients

> How you can connect today (any HTTP client, browsers, coding-agent clients over MCP), what Sempera has verified, what it has not, and what is not available.

How you can connect to Sempera today, and how much of each road Sempera has actually proven. Read the status column before you plan around a client: "supported" and "guidance only" are different promises, and this page keeps them apart.

## What the statuses mean

| Status | What it means |
| - | - |
| Supported | The road is part of the documented contract and works with any compliant client. |
| Guidance only | Sempera serves a ready-made setup snippet for this client. Sempera has not recorded a connection made from the real client, so a snippet that fails is a bug to report, not a known-good path. |
| Unverified | The server side exists and is tested against the published standards, but no real account has completed it. A failure is a bug to report, not a known-good path. |
| Not available | It does not exist yet. Nothing on this page promises a date. |

## Ways to connect

| Road | What you use | How you sign in | Status |
| - | - | - | - |
| Any HTTP client | The REST API under `/v1`, described by `https://api.sempera.org/openapi.json`. Curl, server code in any language, or a coding agent's own HTTP tool. | API key, sent as a bearer token | Supported |
| A browser voice conversation | Your server calls `POST /v1/sessions`, then the page connects with the open-source realtime web client ([Web SDK](https://docs.sempera.org/web-sdk.md)). | A short-lived token for one room | Supported. No Sempera SDK package is published. |
| A webhook receiver | Any HTTPS server that verifies `X-Sempera-Signature` ([Webhooks](https://docs.sempera.org/webhooks.md)). | The signature, with your endpoint's secret | Supported |
| An AI assistant over MCP | `POST /v1/mcp`, approved on a consent page. See [AI assistants](#ai-assistants). | OAuth | Unverified |
| A coding-agent client over MCP | `POST /v1/mcp`, with a setup snippet from `GET /v1/mcp/clients/{client}` or the `mcp_client_setup` tool. See the MCP section of [getting started](https://docs.sempera.org/getting-started.md#connecting-a-coding-agent-mcp). | API key, sent as a bearer token | Guidance only, per client below |

## Coding-agent clients over MCP

Every client below receives the same endpoint and the same header; only the file or command that holds them differs. Pass the client's id to `GET /v1/mcp/clients/{client}` to get the exact snippet for it.

| Client | Id | Setup snippet served | Connection verified from the real client | Status |
| - | - | - | - | - |
| Claude Code | `claude-code` | Yes, a shell command | Not recorded | Guidance only |
| Claude Desktop | `claude-desktop` | Yes, a JSON config using a remote-server bridge | Not recorded | Guidance only |
| Cursor | `cursor` | Yes, a JSON config | Not recorded | Guidance only |
| VS Code | `vs-code` | Yes, a JSON config that prompts for the key | Not recorded | Guidance only |
| Windsurf | `windsurf` | Yes, a JSON config | Not recorded | Guidance only |
| Gemini CLI | `gemini-cli` | Yes, a JSON config | Not recorded | Guidance only |
| Codex | `codex` | Yes, a TOML config | Not recorded | Guidance only |
| Any other client | `other` | Yes, a plain HTTP request | Not recorded | Guidance only |

The key you connect with needs the `agents:read` scope, and a CI key is refused ([Authentication and credentials](https://docs.sempera.org/authentication.md)). Treat the key like any other: put it in the client's secret store or an environment variable, never in a file you commit.

## AI assistants

Each assistant gets its own grant, so ending one leaves the others working. None of these has been proven from a real account. A client moves out of Unverified only when a real account has signed in, listed tools, run an action, read a result and been revoked, with the date and app version recorded here.

| Client | How it connects | Sign-in | Status |
| - | - | - | - |
| ChatGPT | Custom MCP server | OAuth | Unverified |
| Claude | Custom connector | OAuth | Unverified |
| Codex | MCP server in `config.toml` | OAuth, or a bearer key | Unverified |
| Grok Bot | MCP server by URL | OAuth, if the app offers it: its docs do not say | Unverified |
| Muse | Custom connector over REST | Scoped REST credential | Unverified |

The phone tools themselves are listed in [MCP](https://docs.sempera.org/mcp.md). Connecting a client does not give the phone agent that client's memory, chats or subscription.

### ChatGPT

1. At chatgpt.com/plugins, choose the plus button, then **Add custom MCP server**.
2. Enter `https://api.sempera.org/v1/mcp` and choose **OAuth**. Leave the client ID empty so it registers itself.
3. Create the plugin, install it, and approve the workspace and scopes on Sempera's consent page.

The expected redirect is `https://chatgpt.com/connector_platform_oauth_redirect`, which the consent page shows as ChatGPT. To check on the first run: that ChatGPT uses registration and that this redirect is the one it sends.

### Claude

1. In Customize, Connectors, choose **Add custom connector** (on Team and Enterprise, an Owner adds it in Organization settings).
2. Enter `https://api.sempera.org/v1/mcp`. Under OAuth client choose **Register automatically**, because **Use Claude's published identity** needs Client Metadata Documents, which Sempera does not offer.
3. Connect, then approve on Sempera's consent page.

Claude connects from its own cloud, not your device. The expected redirect is `https://claude.ai/api/mcp/auth_callback`. Claude Code uses the same server with a loopback redirect, which the consent page marks as an app on your own computer.

### Codex

```toml theme={null}
[mcp_servers.sempera]
url = "https://api.sempera.org/v1/mcp"
```

Then run `codex mcp login sempera --oauth-client-registration dcr`. Codex opens a browser and listens on a loopback port. To use a key instead, add `bearer_token_env_var = "SEMPERA_API_KEY"`, which Codex tries first.

### Grok Bot

Add `https://api.sempera.org/v1/mcp` as a custom server by URL. Grok Bot's documentation does not say how a custom server signs in, so the first real connection decides it. If the app offers OAuth, it follows the same steps and appears on the consent page as an unverified app with its real redirect host. If it only takes a header, use a key from Connected AI clients on Settings, API keys.

### Muse

Muse has no form for adding a server. Ask it to build a custom connector from `https://api.sempera.org/openapi.json`.

1. In Sempera, open Settings, Connected clients, and create a Muse credential with the scopes you want.
2. When Muse asks for the key, enter it in Muse's secure credential entry, never in the chat.
3. Muse sends it as `Authorization: Bearer sempera_sk_...` on the phone routes.

Meta publishes no developer reference for this that Sempera could check, so these steps come from third-party guides and need proof in a real account.

## Not available today

* **Published SDK packages.** The official TypeScript and Python libraries exist in source and are checked against the API contract, but are not published to package registries. See [SDKs](https://docs.sempera.org/sdks.md) for source installation and supported behaviour. Sempera does not verify clients produced by third-party generators.
* **Directory listings and marketplace plugins.** Sempera does not offer a directory listing or a marketplace plugin for connecting. A setup snippet is the supported way to connect a coding agent.
* **A separate test host.** There is one API hostname ([API overview](https://docs.sempera.org/api-overview.md)). Use a workspace you can afford to experiment in, and read the idempotency rules before you automate writes ([Errors and limits](https://docs.sempera.org/errors-and-limits.md)).

## Keeping this page honest

When a client's connection has been checked from the real client, its row says so with the date and the client version. Until then the cell says "Not recorded", and a snippet is a starting point rather than a promise.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.