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

# Use with any MCP client

> UniversalBench works with any AI client that speaks MCP. Continue, Zed, Cline, plus your own custom agents in Python or Node.

If your AI client supports MCP, it works with UniversalBench. The protocol is open and the connection details are always the same: one URL.

## Connection details

| Field            | Value                                                                                          |
| :--------------- | :--------------------------------------------------------------------------------------------- |
| Personal MCP URL | `https://universalbench-mcp.penantiaglobal.workers.dev/u/ubk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |
| Protocol         | MCP over HTTP (Streamable HTTP transport)                                                      |
| Auth             | Baked into the URL path                                                                        |
| Content type     | `application/json`                                                                             |
| Accept header    | `application/json, text/event-stream`                                                          |
| MCP tools        | `ub_read` (reads), `ub_write` (code and writes), `ub_ai` (AI and web)                          |

## Confirmed working clients

<Columns cols={3}>
  <Card title="Continue" icon="code-branch">
    Open source AI coding assistant. Add UB to `~/.continue/config.json` under `mcpServers` with a `url` field.
  </Card>

  <Card title="Zed Editor" icon="bolt">
    Set up via Zed's MCP extension. Paste your URL. UB appears in the assistant panel.
  </Card>

  <Card title="Cline (VS Code)" icon="brackets-curly">
    Add UB under "MCP Servers" in Cline's settings panel with the URL field only.
  </Card>

  <Card title="Anything MCP" icon="wand-magic-sparkles">
    Any agentic builder that supports MCP. Paste your URL in their integrations panel.
  </Card>

  <Card title="Your own agent" icon="code">
    Build with `@modelcontextprotocol/sdk` (Node) or `mcp` (Python). See below.
  </Card>
</Columns>

## Build your own agent in Python

```python theme={null}
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async with streamablehttp_client("https://universalbench-mcp.penantiaglobal.workers.dev/u/ubk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") as (read, write, _):
    async with ClientSession(read, write) as session:
        await session.initialize()

        tools = await session.list_tools()
        # tools are: ub_read, ub_write, ub_ai

        result = await session.call_tool(
            "ub_write",
            {"code": "print(sum(range(1000)))"}
        )
        print(result.content)
```

## Build your own agent in Node and TypeScript

```typescript theme={null}
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const transport = new StreamableHTTPClientTransport(
  new URL("https://universalbench-mcp.penantiaglobal.workers.dev/u/ubk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
);

const client = new Client(
  { name: "my-agent", version: "1.0.0" },
  { capabilities: {} }
);
await client.connect(transport);

const tools = await client.listTools();

const result = await client.callTool({
  name: "ub_write",
  arguments: { code: "print('hello from my agent')" }
});
```

## Direct JSON RPC without an MCP SDK

If you cannot or do not want to use the MCP protocol library, post JSON RPC envelopes to the URL directly:

```bash theme={null}
curl -X POST https://universalbench-mcp.penantiaglobal.workers.dev/u/ubk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "ub_write",
      "arguments": {
        "code": "import requests; print(requests.get(\"https://api.github.com\").status_code)"
      }
    }
  }'
```

The response is a server sent event with the JSON RPC result, or the result inline as JSON depending on your `Accept` header.

## Alternative authentication

If you cannot embed the token in the URL path for some reason (rare), the API also accepts:

* `Authorization: Bearer ubk_your_key_here`
* `X-Api-Key: ubk_your_key_here`
* `?key=ubk_your_key_here` query parameter

The path embedded URL is preferred because it works in every MCP client without configuration.
