binary
A single static Go binary — go install, or grab a prebuilt archive from GitHub releases. Linux and macOS, amd64 and arm64.
fold is the one. fold.run is the execution.
One governed endpoint between every MCP client and every MCP server. Federation, auth, policy, caching, and audit — built on the official MCP Go SDK on both sides of the proxy.
# every team's servers, one governed endpoint
{
"upstreams": [
{ "id": "github-tools", "url": "…", "namespace": "gh" },
{ "id": "ml-search", "url": "…", "namespace": "search",
"rateLimit": { "requestsPerMinute": 600 },
"circuitBreaker": { "failureThreshold": 5 } }
],
"auth": { "mode": "required", "…": "…" },
"policy": { "defaultDecision": "deny", "…": "…" }
}fold is a single static binary with no local state. One config file in front of your first server, governance when you're ready.
# one upstream, one governed endpoint — 60 seconds
$ go run github.com/fold-run/fold/cmd/fold@latest --config fold.config.json
# or the container:
$ docker run -p 8080:8080 -e FOLD_CONFIG="$(cat fold.config.json)" ghcr.io/fold-run/fold
# MCP endpoint: http://localhost:8080/mcp · health: /healthz · metrics: /metricsbinaryA single static Go binary — go install, or grab a prebuilt archive from GitHub releases. Linux and macOS, amd64 and arm64.
containerghcr.io/fold-run/fold — multi-arch and distroless, ~22 MB. Config injected as a file or straight through FOLD_CONFIG.
kubernetesA Helm chart with probes, HPA, and ServiceMonitor — plus fold-discovery, so labeled Services join the federation on their own.
Most deployments start with one of these and grow into the others — they all ride the same config file.
Acquisitions, child orgs, and teams each ship their own MCP servers — any language, any SDK. fold presents them as one virtual server with namespaced tools. No team rewrites anything.
One choke point for authentication, deny-by-default tool allowlists, per-principal visibility, and an audit event for every request — including the denials.
A team ships an MCP server, the registry lists it, and it appears behind the gateway — no config change. On Kubernetes, label a Service fold.run/upstream: "true" and fold-discovery does the rest.
Long-running work flows through fold: task polls and updates route to the server that owns the task — remembered at mint, or found by probe — and tasks/list merges every org, scoped per principal.
Clients hold one token with fold as audience; fold exchanges it per upstream (RFC 8693) or injects service credentials. API keys never reach agents.
List caching, global and per-upstream rate limits, and circuit breakers stand between agent traffic storms and your internal systems.
Put third-party and SaaS MCP endpoints behind your own auth, policy, and audit — instead of scattering per-user API keys across every client.
Offer partners a curated, policy-scoped subset of internal tools on one hardened endpoint — a single static binary, self-hosted in your VPC.
The official MCP conformance suite runs through fold on every merge — 40/40 checks, including sampling, elicitation, and subscriptions bridged through the gateway.
A single passthrough upstream in front of your most-used server is one config file away. Governance grows from there.