Index Agentica

MCP gateways compared

Docker MCP Gateway, Stacklok ToolHive and Arcade MCP Gateways compared on where they run, how they isolate MCP servers, how clients authenticate, tool filtering and context control, policy, audit and rate limits, and licensing.

Type
Comparison
Author
Agentica Author
Published
Last verified

Comparison

MCP gateways compared
EntryWhat it isWhere it runsServer isolationClient authenticationTool filtering and contextPolicy, audit and limitsLicense and cost
Docker MCP GatewayThe docker mcp CLI plugin that runs MCP servers as containers behind one endpoint; the engine behind Docker Desktop's MCP Toolkit. Profiles group servers from the Docker MCP Catalog, the MCP Registry, docker:// images or local filesDocker Desktop 4.59+ (README prerequisite), or as a standalone CLI plugin or the docker/mcp-gateway Compose image with the Docker socket mounted. Transports: stdio (default), SSE or streamingStarts each server as a container on demand with restricted privileges, network and resources. Defaults: 1 CPU and 2Gb memory per server, signature verification on, secret blocking on; --block-network is off by defaultNo OAuth layer for clients. On HTTP transports, unauthenticated requests are refused unless --allow-unauthenticated is set, and MCP_GATEWAY_AUTH_TOKEN guards localhost against DNS rebinding. Upstream, the README says it handles OAuth flows for servers that need access tokensPer-profile tool allowlists (docker mcp profile tools ... --enable server.tool) and --servers / --tools flags at run time; the README also lists dynamic tool discovery and configuration--log-calls on by default, --verbose; interceptors run your own scripts before or after calls (when:type:path); no built-in rate limiting documentedMIT, open source. The enterprise MCP Gateway in Docker AI Governance is invite-only
ToolHiveStacklok's runtime for MCP servers (thv CLI, desktop UI, Kubernetes operator) plus vMCP, which aggregates a group of servers into one endpointLocal with Docker, Podman or Colima; vMCP locally via thv vmcp serve or on Kubernetes via the operator. Can also proxy remote MCP serversEach server in a container. Network isolation is on by default since v0.30.1: egress proxy (Squid, or Envoy), DNS and ingress containers enforce the permission profile's allowed hosts and ports. HTTP and HTTPS only; opt out with --isolate-network=falseOIDC token validation on thv run (--oidc-issuer, --oidc-audience). vMCP uses a two-boundary model (client auth separate from backend auth), an optional embedded authorization server and RFC 8693 token exchange to backends--tools filter and --tools-override; vMCP prefixes clashing tool names (github_create_issue), adds composite tools and Starlark code mode, and an optimizer that replaces the tool list with find_tool and call_toolCedar authorization policies (--authz-config), audit logging (--enable-audit), OpenTelemetry and Prometheus. No rate-limiting option in the thv run referenceApache-2.0, open source; latest release v0.55.2 (2026-10-19)
ArcadeA gateway inside Arcade's tool platform that federates Arcade-built tools and registered remote MCP servers into one Streamable HTTP URL, https://api.arcade.dev/mcp/{slug}Arcade Cloud, Azure Marketplace, AWS (private offer), GCP listed as coming soon, or self-hosted with Helm on Kubernetes 1.30+ with PostgreSQL, Redis and an OIDC identity providerNot a container sandbox: Arcade hosts its own tools, and remote MCP servers run wherever their owners host themOAuth sign-in through Arcade Auth or your own OIDC user source (Auth0, Clerk, Entra ID, Okta, Stytch), or API key plus Arcade-User-ID headers. CIMD client IDs can be allowlisted to skip consentPick allowed tools per gateway; Tool Recommendation (default for new gateways in orgs that have it) lists a few tools and returns matching allowed tools per task; gateway LLM instructionsNative rate limits (tool matcher, limit, window; counters per tool and per org or project, not per user), Contextual Access hooks, audit logs with a REST APIProprietary platform with a free tier (no credit card); the arcade-mcp server framework is MIT

Verdict: For a developer machine, Docker MCP Gateway is the shortest route if you already use Docker Desktop: catalog servers, containers, tool allowlists. Pick ToolHive when servers must not reach arbitrary hosts (egress allowlists are the default) or you need OIDC, Cedar policy and one aggregated vMCP endpoint on Kubernetes. Pick Arcade when end users sign in and you want per-user OAuth to SaaS tools, rate limits and audit logs without running it.

Once an agent uses more than a few MCP servers, you run into the same problems on every machine. Each client needs each server configured. Every server sees whatever the host can reach. The model is shown every tool's description. Nobody has a record of which tool was called, or by whom. An MCP gateway gives the client one endpoint, and enforces policy between the client and the servers.

The three gateways here solve different parts of that problem:

Every fact below comes from each project's own README or docs, as of 2026-10-21. None of the three was run for this piece. The box used for research has no container runtime, and Arcade is an account-based service. Defaults are quoted from flag references and docs.

How they differ

Where the servers run. Docker and ToolHive both run MCP servers for you, as containers. Docker starts each server on demand. By default it limits each one to 1 CPU and 2Gb of memory, verifies image signatures, and blocks secrets from being sent to or from tools. Network blocking (--block-network) is off by default. ToolHive takes the opposite default. Since v0.30.1, every thv run gets an egress proxy, a DNS container and an ingress proxy. Only the hosts and ports in the server's permission profile are reachable. The catch is that isolation covers HTTP and HTTPS only. A database server that needs raw TCP has to opt out with --isolate-network=false. Arcade doesn't sandbox servers at all. It hosts its own tools, and any remote MCP server you register keeps running wherever its owner runs it. If what you need is sandboxing rather than a gateway, see Self-hosted sandboxes for agents compared.

Who the client is. Docker's gateway has no OAuth layer for clients. Over HTTP it refuses unauthenticated requests unless --allow-unauthenticated is set, and it uses MCP_GATEWAY_AUTH_TOKEN to protect localhost against DNS rebinding. On the server side, its README says it runs the OAuth flows for servers that need access tokens. That is enough for one developer, but it gives you no per-user identity for clients. ToolHive validates OIDC tokens on each server (--oidc-issuer, --oidc-audience), and authorizes calls with Cedar policies. Its vMCP aggregator splits client auth from backend auth (the docs call this a "two-boundary" model). It can also run an embedded authorization server and exchange tokens for backends with RFC 8693. For remote servers that ToolHive proxies, --remote-auth-resource sets the RFC 8707 resource. Arcade is built around end users. They sign in with Arcade or with your own OIDC provider (Auth0, Clerk, Entra ID, Okta or Stytch). Clients that can't run a browser flow can send an API key plus an Arcade-User-ID header instead. You can allowlist CIMD client IDs, such as Claude's and VS Code's, so those users skip the consent screen. The client half of this is covered in Agent identity and MCP auth compared.

What the model sees. All three let you restrict which tools are exposed:

Two of them go further than listing tools. ToolHive's vMCP optimizer replaces the whole tool list with two primitives, find_tool and call_tool. Its README claims semantic tool search can cut token usage "by up to 85%". That is a vendor figure and was not measured here. vMCP also prefixes clashing names (github_create_issue, jira_create_issue), and adds composite tools and Starlark "code mode" scripts. Arcade's Tool Recommendation is on by default for new gateways in orgs that have it. It lists a few tools, and returns the allowed tools that fit each task the agent describes.

What gets recorded and limited. Docker logs calls by default (--log-calls), and its interceptors let you run your own script before or after a call. ToolHive has an audit log (--enable-audit) and Cedar policies, which deny by default once configured, and exports OpenTelemetry and Prometheus. Arcade is the only one of the three with native rate limits. Each rule is a tool matcher, a limit and a window. The counters are per tool, and are scoped to an organization or project. The docs note they are "not per user": everyone calling through the scope shares one counter. Arcade also keeps audit logs, which you can read through a REST API. If you need cost control per user or per agent, you have to build it on top of these.

Choosing

Caveats

Directory entries in this comparison

Related

Sources

Machine-readable