finds.dev← search

// the find

IBM/mcp-context-forge

★ 3,881 · Python · Apache-2.0 · updated Jun 2026

An AI Gateway, registry, and proxy that sits in front of any MCP, A2A, or REST/gRPC APIs, exposing a unified endpoint with centralized discovery, guardrails and management. Optimizes Agent & Tool calling, and supports plugins.

ContextForge is an MCP/A2A/REST gateway from IBM that acts as a single entry point for AI tool and agent backends — federation, discovery, auth, rate limiting, and observability in one service. It targets teams running multiple MCP servers or REST APIs who want centralized control without wiring each AI client to each backend individually. The scale of the project (7,000+ tests, Helm charts, Kubernetes HA, SSO, OpenTelemetry) signals enterprise intent, not a weekend project.

The federation model is genuinely useful: one JWT-authenticated endpoint, multiple upstream MCP/gRPC/REST backends, virtual server composition — this solves a real operational headache as MCP adoption grows. The transport flexibility (SSE, WebSocket, stdio, streamable-HTTP) means it fits into existing MCP client configs without changes. The Rust crates (wrapper, a2a_runtime, mcp_runtime) alongside the Python core suggest they're aware of Python's throughput limits for high-frequency tool calls and are building an escape hatch. The 40+ plugin framework plus gRPC-to-MCP reflection-based translation covers the long tail of backends you'd otherwise need to wrap manually.

The config surface is absurd — 300+ environment variables, and the docs openly say 'missing or invalid env var = startup failure via Pydantic'. That's a steep ops tax before you've registered a single tool. Arm64 (Apple Silicon) is explicitly unsupported in production containers, which will annoy most individual developers and force PyPI installs or emulation hacks. The sample MCP servers in mcp-servers/ are explicitly called out as 'unsupported' and 'should not be run in production' — they ship in the main repo anyway, which creates confusion about what's actually maintained. The Python/Rust split is currently awkward: the Rust crates exist but aren't the primary path, so you're getting Python asyncio performance for now and hoping the Rust rewrite happens before you need it.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →