# Other clients

> Connect any MCP client, or write your own against the rivomi endpoint.

Source: https://rivomi.com/docs/connect/clients/other



rivomi is a standard Streamable HTTP MCP server. Every client needs two things:

|          |                                                                                  |
| -------- | -------------------------------------------------------------------------------- |
| **URL**  | `https://rivomi.com/api/mcp`                                                     |
| **Auth** | OAuth 2.1 with dynamic client registration, or `Authorization: Bearer <API key>` |

A client that only speaks stdio can bridge through `mcp-remote`:

```bash
npx mcp-remote https://rivomi.com/api/mcp --transport http-only
```

The connection is complete when `tools/list` includes `rivomi_get_workspace` and calling it returns
your workspace.

## Writing your own client [#writing-your-own-client]

* The server is stateless: `POST` JSON-RPC to `/api/mcp`. There is no session id and no SSE stream.
* `initialize` returns server instructions: a short brief on the product, what costs money, and
  what needs a human. Show them to the model.
* Read tools take `response_format`: `markdown` (default) or `json`. Results over 25,000 characters
  are cut and say so; narrow the query rather than paging blindly.
* Errors arrive as tool results with `isError: true`, written for a model to act on. They are not
  JSON-RPC protocol errors. See [Errors and limits](/reference/errors).
* A retried call with the same JSON-RPC id and arguments is deduplicated, so retrying a timed-out
  `$` tool does not spend twice.

For plain HTTP without MCP, the [REST API](/tools/rest) calls the same functions.
