Client configuration
The exact configuration for every client that speaks Streamable HTTP MCP.
Omniio is a remote MCP server over HTTP. Any client that supports one can connect, and every client wants the same two things: the URL, and permission to sign in.
Pick your client#
The shapes genuinely differ. VS Code keys the object servers and wants an
explicit type; Cursor keys it mcpServers and needs neither; Windsurf calls
the field serverUrl; the Claude desktop app has no config file at all. Copy the
panel for your client rather than adapting a neighbour's.
A terminal, in any directory
claude mcp add --transport http omniio https://mcp.omniio.dev --scope user--scope user puts Omniio on every project on the machine. Drop it to keep the server local to the current one, or use --scope project to write a .mcp.json your team shares.
Run /mcp in Claude Code and pick Omniio; the browser opens once and the grant is stored for you.
What every client needs#
- URL
- Always
https://mcp.omniio.dev. The same for every account. - Transport
- Streamable HTTP. Written `http` by most clients and `streamable-http` by ones that follow the specification's own naming; both are accepted.
- Authentication
- None to configure. Omniio speaks OAuth 2.1 with dynamic client registration, so your client registers itself and gets its own credentials.
Authorizing#
The first time your client reaches the endpoint, it opens a browser window and asks you to sign in to Omniio. Finish that redirect once; the client stores the resulting grant and will not ask again until you revoke it.
Each client that authorizes appears separately under Settings → Connections, named by what it called itself when it registered. Revoking one deletes that client's tokens and leaves the rest connected — see Authorization.
Verifying from a terminal#
If a client will not connect and you want to know whether the problem is the client or the endpoint, ask the endpoint directly:
curl -i -X POST https://mcp.omniio.dev \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'An unauthenticated probe should come back 401 with a WWW-Authenticate header
naming the authorization server. That is the correct answer, and it proves the
endpoint is reachable and speaking MCP — a client that cannot connect against a
401 here has a configuration problem, not a network one.
Common mistakes#
- Wrong top-level key
- `servers` in Cursor or `mcpServers` in VS Code. The file parses, the server never appears, and nothing is logged. This is the single most common cause.
- The app URL instead of the endpoint
omniio.devserves the website and the REST API;mcp.omniio.devserves only the MCP endpoint. They are not interchangeable.- A trailing path
- The endpoint is the origin. Appending `/mcp` or `/sse` gives a 404.
- Client not restarted
- Most clients read their MCP config once, at startup. Enabling a server inside Omniio needs no restart; editing your client's config file does.
Next: Connecting servers — what sits behind the endpoint once your client is talking to it.