TOOLBRIDGE documentation
TOOLBRIDGE puts one authenticated, rate-limited, metered gateway URL in front of each of your MCP servers, and gives your agents a persistent memory store behind the same API key.
Quickstart
- Create a free account at /signup.
- In Dashboard → MCP Servers, add your upstream server: a name, a slug (e.g.
github), its Streamable HTTP URL, and the credentials it needs. - In Dashboard → API Keys, create a key. It starts with
tb_live_and is shown only once. - Point your MCP client at
https://toolbridge.cloud/v1/gateway/<slug>with the headerAuthorization: Bearer <your key>(see "Connect your agent").
Want to try an MCP server before signing up? The playground lets you chat with Claude using any public MCP server's tools — free, no account.
Connect your agent
Every registered server gets its own gateway URL: https://toolbridge.cloud/v1/gateway/<slug>. The gateway speaks MCP's Streamable HTTP transport, so any client that supports remote HTTP MCP servers can connect. Replace github with your slug and tb_live_YOUR_KEY with your API key.
Claude Code
claude mcp add --transport http github https://toolbridge.cloud/v1/gateway/github \
--header "Authorization: Bearer tb_live_YOUR_KEY"Cursor (.cursor/mcp.json)
{
"mcpServers": {
"github": {
"url": "https://toolbridge.cloud/v1/gateway/github",
"headers": { "Authorization": "Bearer tb_live_YOUR_KEY" }
}
}
}Claude Desktop (claude_desktop_config.json, via mcp-remote)
Claude Desktop's config file launches local processes, so use the mcp-remote bridge to reach the gateway:
{
"mcpServers": {
"github": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://toolbridge.cloud/v1/gateway/github",
"--header", "Authorization:${TOOLBRIDGE_AUTH}"
],
"env": { "TOOLBRIDGE_AUTH": "Bearer tb_live_YOUR_KEY" }
}
}
}Any HTTP client (curl)
curl -s https://toolbridge.cloud/v1/gateway/github \
-H "Authorization: Bearer $TOOLBRIDGE_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'How the gateway handles MCP traffic
- Requests are JSON-RPC over HTTP POST; responses come back as JSON or as a Server-Sent Events stream, exactly as your upstream sends them.
- The
Mcp-Session-Id,MCP-Protocol-Version, andLast-Event-IDheaders are forwarded to your upstream, and the upstream'sMcp-Session-Idis returned to your client, so stateful servers work. DELETEon the gateway URL is forwarded so clients can end their session.GET(a standalone server-to-client event stream) is not supported and returns 405, which MCP clients handle automatically.- Your upstream credentials are injected on every request; your agent never sees them.
- Each response carries
X-Toolbridge-Upstream-Latency-Ms.
Upstream authentication
| Auth type | What the gateway sends upstream | auth_config fields |
|---|---|---|
none | nothing | — |
bearer | Authorization: Bearer <token> | token |
header | a custom header, e.g. X-API-Key: <value> | header_name, header_value |
query | a query parameter appended to the upstream URL, e.g. ?api_key=<value> | query_name, query_value |
Credentials are encrypted at rest (AES-256-GCM) and are never returned by the API. Upstream URLs must be publicly reachable over http(s); private, loopback, and link-local addresses are rejected.
Built-in memory server
Every account includes a built-in MCP server at https://toolbridge.cloud/v1/gateway/_memory — no registration needed. It exposes your persistent memory store as tools, so an agent can remember facts across sessions.
claude mcp add --transport http memory https://toolbridge.cloud/v1/gateway/_memory \
--header "Authorization: Bearer tb_live_YOUR_KEY"| Tool | Arguments | Does |
|---|---|---|
memory_put | key, content, optional namespace, metadata (object) | Stores or replaces an item. |
memory_get | key, optional namespace | Returns one item. |
memory_search | query, optional namespace, limit (max 50) | Full-text search, best matches first. |
memory_list | optional namespace, limit (max 200), offset | Lists items, most recently updated first. |
memory_delete | key, optional namespace | Deletes an item. |
Namespaces default to default. Limits: keys up to 256 characters, namespaces up to 64 characters, content up to 100 KB, metadata up to 8 KB. The same items are available over the REST API below and in Dashboard → Memory.
REST API
Base URL https://toolbridge.cloud. Request and response bodies are JSON; errors look like {"error":{"code":"…","message":"…"}}.
Agent API keys (Authorization: Bearer tb_live_…) are data-plane credentials: they can call the gateway, the memory endpoints, GET /v1/servers, GET /v1/billing/usage, and GET /v1/auth/me. Creating or revoking keys and creating, editing, or deleting servers requires a dashboard session — use the dashboard, or send the token returned by POST /v1/auth/login as the bearer token. This way a leaked agent key can never mint new keys or redirect a server's stored credentials.
API keys (dashboard session)
| Method | Path | Body / query | Returns |
|---|---|---|---|
POST | /v1/keys | {"name"} | the new key including its plaintext key (shown once) |
GET | /v1/keys | — | {"data":[…]} |
DELETE | /v1/keys/{id} | — | 204 |
MCP servers (writes need a dashboard session)
| Method | Path | Body / query | Returns |
|---|---|---|---|
POST | /v1/servers | {"name","slug","upstream_url","auth_type","auth_config","rate_limit_per_min"} | the server |
GET | /v1/servers | — | {"data":[…]} |
GET | /v1/servers/{id} | — | the server |
PATCH | /v1/servers/{id} | any of name, upstream_url, auth_type, auth_config, enabled, rate_limit_per_min | the server |
DELETE | /v1/servers/{id} | — | 204 |
Slugs are 3–50 characters: lowercase letters, digits, and dashes, starting and ending with a letter or digit. rate_limit_per_min is optional and is capped at your plan's per-minute limit.
Memory
| Method | Path | Body / query | Returns |
|---|---|---|---|
POST | /v1/memory | {"namespace","key","content","metadata"} | the item |
GET | /v1/memory | ?namespace=&limit=&offset= (limit ≤ 200) | {"data":[…],"has_more":…} |
GET | /v1/memory/search | ?q=&namespace=&limit= (limit ≤ 50) | {"data":[…]} |
GET | /v1/memory/{key} | ?namespace= | the item |
DELETE | /v1/memory/{key} | ?namespace= | 204 |
URL-encode keys in paths (for example with encodeURIComponent).
Usage
| Method | Path | Body / query | Returns |
|---|---|---|---|
GET | /v1/billing/usage | — | {"period","total","by_kind","quota","remaining","overage","hard_cap"} |
curl -s https://toolbridge.cloud/v1/memory \
-H "Authorization: Bearer $TOOLBRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{"namespace":"acme","key":"user:42:prefs","content":"Prefers dark mode and concise answers"}'
curl -s "https://toolbridge.cloud/v1/memory/search?namespace=acme&q=dark%20mode" \
-H "Authorization: Bearer $TOOLBRIDGE_KEY"Limits and metering
| Plan | Price | Metered calls / month | Requests / minute | MCP servers | Memory items |
|---|---|---|---|---|---|
| Free | $0 | 1,000 | 60 | 2 | 1,000 |
| Starter | $29/mo | 50,000 | 300 | 10 | 100,000 |
| Pro | $199/mo | 500,000 | 1,200 | Unlimited | Unlimited |
- Metered calls: every
tools/callthrough the gateway (including the built-in memory server) and every memory read or write over the REST API counts as one call. Protocol traffic —initialize,tools/list, notifications,ping— is logged but not counted. - When the Free plan's monthly allowance is used up,
tools/callreturns a JSON-RPC error and metered REST calls return HTTP 402 until the next calendar month (UTC). Paid plans are not cut off at their included volume. - The per-minute limit applies to all authenticated requests; responses include
X-RateLimit-LimitandX-RateLimit-Remaining, and a 429 includesRetry-After. Each server can also have its own lowerrate_limit_per_min. - Request bodies are limited to 5 MB.
See pricing on the home page or upgrade in Dashboard → Usage & Billing.
Errors
| HTTP status | error.code | Meaning |
|---|---|---|
| 400 | invalid_request, validation_error | Malformed JSON or invalid fields. |
| 401 | unauthorized | Missing, invalid, or revoked API key. |
| 402 | quota_exceeded, plan_limit | Monthly allowance used up, or plan limit on servers / memory items reached. |
| 403 | server_disabled, session_required | The server is disabled in your dashboard, or an API key called an endpoint that needs a dashboard session. |
| 404 | not_found | Unknown slug, server, key, or memory item. |
| 409 | slug_taken | You already have a server with that slug. |
| 413 | payload_too_large | Request body over 5 MB. |
| 429 | rate_limited | Per-minute limit exceeded; retry after Retry-After seconds. |
| 502 | upstream_error | Your upstream server could not be reached or returned an invalid response. |
| 504 | upstream_timeout | Your upstream server did not respond in time. |
Playground
The playground lets anyone chat with Claude (on Amazon Bedrock) using the built-in demo tools or the tools of any public Streamable HTTP MCP server URL — no account needed. Each visitor gets 20 messages per day. Every session has a share link at /playground/<id>; anyone with the link can read the transcript, so don't paste secrets. Sign up from the same browser and your sessions are saved to your account.
Support
Questions or problems? Email info@nubri.co.