Features / MCP gateway

One MCP endpoint for every server your team uses.

Register MCP servers once with sealed headers; agents call one endpoint, /mcp/org, with per-server tool allowlists, the key’s tool policy and a call log.

What it does

Register once
POST /v1/mcp-servers with a name, a URL, headers and an optional tool allowlist. Up to 20 servers.
One endpoint
/mcp/org lists every allowed tool as server__tool and routes each call to the right server with its stored headers.
Sealed headers
Server tokens are stored sealed and never returned; editors connect with an UplinkSwitch key only.
Two filters
Per-server allowlists and the key’s guardrail tool policy, both applied on list and on call.
Call log
Every call with status and latency, filterable by server, at GET /v1/mcp-servers/calls.
Any MCP client
Claude Code, Cursor, Cline and any client that speaks Streamable HTTP with a header.

Pricing · live catalog, 2026-11-04

WhatHowPrice
Tool call through /mcp/orgtools/list and tools/call from any MCP clientNo fee
MCP tool inside a chat requestThe gateway calls the server for the model$0.00 per call
Each model roundClaude Sonnet 5.5$1.20 in · $3.00 out per 1M tokens

Request example

curl · register a server
curl https://api.uplinkswitch.com/v1/mcp-servers \
  -H "Authorization: Bearer $UPLINK_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "tracker",
    "url": "https://mcp.example.com/mcp",
    "headers": {"Authorization": "Bearer YOUR_SERVER_TOKEN"},
    "tool_allowlist": ["list_issues", "get_issue", "create_comment"]
  }'
curl · list the tools
curl https://api.uplinkswitch.com/mcp/org \
  -H "Authorization: Bearer $UPLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
# tools come back as tracker__list_issues, tracker__get_issue, ...
Claude Code
claude mcp add --transport http uplink-org https://api.uplinkswitch.com/mcp/org \
  --header "Authorization: Bearer sk-uplink-live-..."
.cursor/mcp.json
{
  "mcpServers": {
    "uplink-org": {
      "url": "https://api.uplinkswitch.com/mcp/org",
      "headers": { "Authorization": "Bearer sk-uplink-live-..." }
    }
  }
}
  • /v1/mcp-servers takes an admin key; /mcp/org takes an API key.
  • Our public catalog MCP server stays at https://api.uplinkswitch.com/mcp.

Questions

One MCP endpoint in front of every MCP server your organization uses. You register each server once, with its URL, its headers and a tool allowlist; every agent and editor then connects to /mcp/org with an API key and sees the allowed tools of every server, named server__tool.

The headers you register (an Authorization header, say) are sealed at rest and sent on every call to that server. The API only ever returns their names, so a teammate’s editor never holds the server’s token.

Streamable HTTP MCP servers at a public https URL, up to 20 per organization. Private, loopback, link-local and reserved addresses are refused and checked again before every call, and redirects are not followed.

Two layers: each server’s tool_allowlist, and the calling key’s tool policy from guardrails, which can deny names such as tracker__create_* by prefix. A call either one refuses is logged as denied or blocked.

Yes: time, server, tool, status (ok, tool_error, failed, denied, blocked) and latency, at GET /v1/mcp-servers/calls and in the console. Arguments are kept only for keys that keep request bodies.

Yes. Declare a remote MCP server in the request itself (OpenAI’s mcp tool type or Anthropic’s mcp_servers) and the gateway runs its tools inside that request; see agent tools.