mrkeyoor.com_
Tue 08 Sept 16:08 UTC
Self-Hostedevaluationupdated 08 Sept 2026

toolhive review

ToolHive is a local and Kubernetes platform for running Model Context Protocol servers inside controlled containers and exposing them through managed endpoints. It gives developers and platform teams one place to approve, connect, authenticate, and observe the tools that AI clients such as Claude Desktop, Cursor, and VS Code can call.

Verdict

Our ToolHive run spent 295 seconds building and 590 seconds testing, then finished with 7 failed Go test targets out of 23, so production evaluation should include its operator E2E environment before adoption. The local container wrapper is useful, but the stronger reason to choose ToolHive is centralized MCP policy across developer machines and Kubernetes. A single trusted server does not justify this much platform, while a fleet may.

We ran it

Lab card: what happened when we ran toolhiveScreenshot of toolhive (stacklok.com/download)
Install✓ · 116s796 packages
Build✓ · 295s
Tests✗ · 590s16 passed · 7 failed of 23 (go test)
Repo2766 files~761,537 lines of source · 35.4 MB · 31 CI workflows · tests dir

Answers from our run

Does toolhive build from source?

Dependencies installed in 116 seconds (796 packages), and the build succeeded in 295 seconds. We cloned commit 2533388 into a clean Debian container with 3 CPUs and no project-specific setup.

Do toolhive's tests pass?

Not all of them: 16 of 23 passed and 7 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use toolhive?

Developers who only need one trusted MCP server for a short local task: ToolHive adds a container runtime, proxy, registry concepts, and its own configuration surface.

What are the alternatives to toolhive?

MCP Context Forge, Docker MCP Gateway, MCP Inspector. Our ToolHive run spent 295 seconds building and 590 seconds testing, then finished with 7 failed Go test targets out of 23, so production evaluation should include its operator E2E environment before adoption.

Setup2/5295-second build and 7 failed test targets; runtime needs containers
Docs4/5Extensive guides, but Go requirements and some repo paths have drifted
Community4/52,129 stars, daily activity, and 381 open issues and pull requests
Maturity3/5v0.47.0 and stable v1beta1 APIs, offset by failed operator tests

Who it’s for

Platform teams that need a governed catalog and gateway for many MCP servers.
Kubernetes operators who want MCP workloads expressed as custom resources with identity policy and telemetry.
Developers who prefer Docker or Podman isolation over running downloaded MCP packages directly on a workstation.
Organizations that need self-hosted MCP traffic, encrypted local secrets, and connections to existing identity providers.
Teams willing to test every AI-client integration and authentication path they plan to support.

Who it’s NOT for

Developers who only need one trusted MCP server for a short local task: ToolHive adds a container runtime, proxy, registry concepts, and its own configuration surface.
Windows users depending on Claude Desktop LLM-gateway setup: open issue 6507 says the helper is POSIX-only and the command fails on Windows.
Cursor users expecting thv llm setup to configure the gateway automatically: issue 6293 reports that ToolHive writes settings Cursor does not read while still reporting success.
Browser-based clients that require direct cross-origin access to the local proxy: issue 4297 reports failed CORS preflight requests on /mcp.
Teams that require a clean full-source test command before evaluation: our run ended with 7 failed Go test targets out of 23.

Setup reality

Our sandbox downloaded 796 Go packages in 116 seconds and built the project in 295 seconds. Tests ran for 590 seconds and failed with exit 1: the Go summary reported 16 passed and 7 failed out of 23. The tail named operator E2E failures under acceptance_tests and virtualmcp, but did not show their causes.

Local use needs Docker or Podman plus a ToolHive binary or desktop UI. Kubernetes use adds a cluster, operator resources, ingress, identity-provider configuration, secrets, and observability choices. The registry server and desktop UI are maintained in separate repositories, so building this checkout is only part of the platform.

The developer guide says Go 1.25, while the reviewed go.mod declares Go 1.26.0. The repository has no Dockerfile despite using containers at runtime. Authentication, client setup, and network policy are optional for a toy server but central to the enterprise case, and current open issues cover all three areas.

Version 0.47.0 spans local containers and Kubernetes

ToolHive v0.47.0 is several products under one name. The thv CLI and a separate desktop app run MCP servers locally through Docker or Podman. A Kubernetes operator manages server workloads and custom resources in clusters. A gateway can combine tools, apply access rules, filter what clients see, and connect to an identity provider. Registry support gives administrators a catalog of approved servers rather than asking each developer to install arbitrary packages from a command copied out of a chat.

The architecture is split across repositories. This checkout holds the CLI, API, and operator, while the desktop UI, registry server, built-in catalog, and user documentation have their own projects. That division is reasonable for maintainers, though it changes what a source build proves. Compiling stacklok/toolhive does not produce every component shown in the platform diagram. Buyers should list which pieces they need and track compatible releases across them.

Local v0.47.0 use still requires a container runtime

ToolHive runs a local MCP server from a container image or builds one from supported package-manager inputs. It can store secrets, restrict network access, proxy remote MCP services, connect compatible clients, and open an inspector. Container isolation is a material improvement over running an unfamiliar server directly as your user. It is not an absolute sandbox: mounted files, injected credentials, allowed networks, image provenance, and the container runtime still determine what the server can reach.

The Kubernetes path adds custom resource definitions for servers and registries, multi-namespace deployment, service discovery, ingress, OpenTelemetry, Prometheus, and OIDC or OAuth integration. Those capabilities fit an internal platform team. They also require cluster policy, certificate management, identity design, storage, upgrades, and incident ownership. The repository's contribution guide gives the operator's v1beta1 API a compatibility commitment, with breaking changes requiring an explicit exception, which is more reassuring than the overall pre-1.0 version alone.

What happened when we ran it

Our sandbox downloaded 796 Go packages in 116 seconds and built commit 2533388 in 295 seconds. The checkout contained 2,766 files, about 761,537 lines of source, and occupied 35.4 MB before dependencies. That is a large source tree with a long cold build. It has 31 CI workflow files and a tests directory, while no Dockerfile was present in the scanned repository.

The test command ran for 590 seconds and returned exit code 1. Its summary reported 16 passed and 7 failed out of 23 Go test targets. The final lines show TestE2E failing in the operator acceptance_tests and virtualmcp packages. Integration packages for authserver, vmcp, and its helpers passed in the visible tail. The log does not expose the assertion or prerequisite behind either E2E failure, so we cannot assign a cause.

Seven failed targets block a clean source verdict

A failure in 7 of 23 targets matters more here than it would in an optional example suite because ToolHive sells the operator path as a core deployment mode. Our unprivileged Debian container had 3 CPUs and 8 GB of RAM, which may differ from the project's intended E2E environment, but the supplied tail does not say that a cluster, binary, permission, or service was missing. The defensible finding is simply that the documented source test command was not green in our run.

Toolchain guidance also needs checking against the exact checkout. The developer guide names Go 1.25, while the reviewed go.mod declares Go 1.26.0. The guide recommends Task for builds and separates lint, unit, and E2E commands. Before contributing or pinning a build image, read the module declaration first. A production evaluation should then reproduce the operator suites on the project's expected cluster setup and record any exclusions instead of treating the 31 workflow files as proof by themselves.

Current client integrations still have platform-specific holes

Open issue 6293 reports that the Cursor LLM-gateway command writes keys that Cursor 3.15.19 never reads, yet tells the user setup succeeded. Issue 6507 covers a different path: ToolHive v0.46.0 refuses Claude Desktop gateway setup on Windows because its credential helper is a POSIX shell script. Both reports were open when checked. They do not invalidate normal MCP client registration, but they make LLM-gateway support something to verify per client and operating system.

Authentication deserves the same caution. Issue 6522 says two accepted thv run flags for insecure local OIDC and private certificate authorities were dropped before middleware configuration on v0.46.0 and the checked main commit. The result was a 401 even with a matching token. Version 0.47.0 includes several authentication fixes, yet the issue remained open after its report. Test the exact issuer, client method, certificate chain, and token exchange used by your deployment.

September 8 activity supports a guarded pilot

GitHub recorded the last push on September 8, 2026, the same day v0.47.0 was released. The repository had 2,129 stars and 381 open issues and pull requests when fetched. That combined count is not a defect total; it includes a busy pull-request queue and automated dependency work. The release notes name changes across private certificate authorities, OIDC discovery, VirtualMCPServer reconciliation, signed artifacts, connection pools, and operator resources, evidence of active maintenance across the platform's broad surface.

ToolHive is a reasonable shortlist choice when uncontrolled MCP servers have become a security and operations problem. Our 796-package download and 590-second failed test run show that the source tree demands more patience than the desktop quick start suggests. Trial one approved server locally, verify client configuration, then reproduce the operator E2E suites before placing the gateway in front of a team. If container wrapping is the only requirement, Docker MCP Gateway is the narrower comparison.

Alternatives

ProjectWhat it isPick it when
MCP Context ForgeA gateway and registry for MCP, A2A, REST, and gRPC tools behind one managed endpoint.pick this instead when protocol translation and a central gateway matter more than ToolHive's local container workflow.
Docker MCP GatewayDocker's CLI plugin and gateway for connecting clients to containerized MCP servers.pick this instead when your team is already standardized on Docker and wants a narrower MCP gateway.
MCP InspectorThe official visual tool for exercising and inspecting individual MCP servers.pick this instead when the job is testing one server rather than operating a registry, gateway, or Kubernetes fleet.

What people are saying

  1. [github-trending] stacklok/toolhive

Sources

  1. ToolHive README
  2. ToolHive v0.47.0 release
  3. ToolHive developer guide
  4. ToolHive contribution and API stability guide
  5. Issue 6293: Cursor gateway configuration no-op
  6. Issue 6507: Claude Desktop setup on Windows
  7. Issue 6522: OIDC flags dropped by thv run

More self-hosted reviews

FlClash · zulip · mediamtx · HAMi · filebrowser · remux · the whole board →