Skip to main content

MCPlex

License: MIT Python 3.11+ Version CI MCP

Early proof-of-concept: a YAML-configured MCP proxy that maps simple JSON REST endpoints (GET + query params, POST + JSON body) into MCP tools. Not production-hardened — see Roadmap.

MCPlex sits between AI coding agents (Claude Code, Cursor, Codex) and your backend REST APIs. Agents discover tools via the standard MCP tools/list handshake and call them via tools/call. MCPlex translates those calls into HTTP requests to your backend. Zero LLM logic, zero model dependencies, ~400 lines of Python.

What It's Meant to Do

Most engineering teams have a graveyard of internal tools built before AI coding agents existed — CLIs, dashboards, webhook receivers, internal REST APIs. These tools work. They have users, auth, governance, and business logic baked in. What they don't have is an interface that AI agents can call.

MCPlex gives those tools a 2nd life. You don't rewrite them. You add a thin REST adapter if they don't already expose JSON (about 40 lines), point MCPlex at it with a YAML connector, and now any MCP-compatible agent can call them. The tool keeps its auth, its logic, its governance. MCPlex is just the new front door.

The key idea: connectors are YAML, not Python (for the 80% case where the backend already speaks JSON REST). Adding a new HTTP tool means adding a few lines of config — method, URL path, parameter mapping. The generic HTTP proxy handler does the rest.

The repo includes a 4-connector demo config as an illustration of the pattern — 3 connectors proxy to real sibling repos; the 4th runs on mock data via a native Python connector for backends without an HTTP server.

Current Limitations (v0.3.0)

What works What's planned (v1.0.0)
GET with query params + POST with JSON body PUT / DELETE support
Flat param_mapping (MCP arg → HTTP param) Path-param templating (/api/{id})
JSON responses Non-JSON response handling
Static header injection with ${ENV_VAR} interpolation OAuth 2.0 / OIDC
JSON-RPC + one-shot SSE framing Keepalive, progress streaming, session continuity
50 unit tests Self-contained integration tests (no Docker)
Identity propagation (user/agent identity through proxy)
Write-tool approval flow
Rate limiting per-tool/per-agent
Structured audit logging
Config hot-reload

What It Is Not

  • Not an AI framework. MCPlex contains zero LLM calls, zero prompts, zero model dependencies. It is a pure HTTP proxy.
  • Not an MCP SDK. MCPlex implements the MCP wire protocol directly. Backend tools never import an MCP library or add an MCP dependency.
  • Not a replacement for backend APIs. MCPlex does not transform data or add business logic. It proxies calls to your existing REST endpoints.

Architecture

                    config.yaml
                         │
              ┌──────────▼──────────┐
              │  Tool Registry      │
              │  name → route       │
              └──────────┬──────────┘
                         │
              ┌──────────▼──────────┐
              │  HTTP Proxy Handler │
              │  (generic — reads   │
              │   method, path,     │
              │   param_mapping     │
              │   from config)      │
              └────┬────┬────┬──────┘
                   │    │    │
             ┌─────▼┐ ┌▼───┐┌▼────┐
             │ API A│ │API B││API C│
             └──────┘ └────┘└─────┘
  1. On startup, MCPlex reads config.yaml, interpolates ${ENV_VAR} patterns, and builds a tool registry.
  2. Each type: http connector generates an async proxy handler.
  3. An agent connects and calls tools/list — MCPlex returns the catalog.
  4. The agent calls tools/call — MCPlex validates arguments against the declared JSON Schema, maps MCP parameters to HTTP parameters, and makes the request.
  5. The backend response is returned as an MCP tool result, with isError set when the tool fails.

Two transport modes, auto-detected by the Accept header:

Accept header Response format
application/json JSON-RPC over HTTP POST
text/event-stream Server-Sent Events (one-shot framing)

What Is In This Repo

  • MCPlex proxy server (Starlette, JSON-RPC, SSE transport)
  • YAML config system (Pydantic models, env-var interpolation, config validation)
  • Generic HTTP proxy handler (GET/POST with param mapping)
  • Native Python connector fallback (incidentgpt.py) for backends without an HTTP server
  • Test bench (mock server simulating all 4 backends)
  • 50 unit tests, CI (lint, typecheck, test)

What Is NOT In This Repo (Sibling Repos)

The 4 demo connectors proxy to sibling repos. These must be cloned alongside mcplex for the full Docker Compose stack (see docker-compose.yml):

Connector Sibling Repo Status
guardian ai-code-guardian Real backend with MCP API adapter
ci-agent ci-doctor Real backend with MCP API adapter
sprintsense sprint-intelligence Real backend with MCP API adapter
incident-commander ai-incident-commander CLI-only; uses test-bench mock via incidentgpt.py native connector

Total: 9 MCP tools across 4 demo connectors (3 real repos + 1 test-bench mock).

To try it without cloning sibling repos, run the test bench: python tests/test_bench.py.

Quick Start

pip install mcplex

# Try with the test-bench mock (no sibling repos needed)
python tests/test_bench.py &
mcplex serve --config config.yaml

# Or use docker-compose for the full stack
cp .env.example .env
docker compose up

Connect Claude Code: claude --mcp http://localhost:8000/mcp

Included Connectors

The demo config.yaml includes 4 connectors — 3 proxy to real sibling repos, 1 runs on the test-bench mock:

Connector Repo Tools
guardian ai-code-guardian guardian_check_policy, guardian_get_coverage
ci-agent ci-doctor ci_diagnose_failure, ci_get_pipeline_history
sprintsense sprint-intelligence dora_get_metrics, dora_get_trend
incident-commander ai-incident-commander incident_query_active, incident_query_history, incident_get_timeline

Docs

Doc Description
Architecture System design, data flow, design decisions
Deployment Guide Production deployment, nginx config, security
Troubleshooting Common errors and resolution steps
Integration Guide How to connect repos via MCP API adapters
Specification Architecture, transport, connector design
PRD Product requirements and user stories
Sprint Plan (WBS) Work breakdown and epics
Config Reference YAML schema for connectors
E2E Test Plan & Results Test plan, 9/9 results, 15 screenshots
Code Review Internal code review

Roadmap

Shipped (v0.3.0)

  • Generic HTTP proxy connector (YAML-driven, GET/POST)
  • JSON-RPC + one-shot SSE framing (auto-detect by Accept header)
  • Config validation (required base_url, env-var interpolation)
  • isError flag on failed tool calls (MCP spec compliance)
  • JSON-RPC batch request handling
  • 4-connector demo config
  • OSS readiness: CI, issue templates, CODE_OF_CONDUCT, SECURITY.md, CONTRIBUTING.md
  • 50 unit tests, Docker Compose deployment

Future (v1.0.0)

  • Identity propagation — carry user/agent identity through proxy
  • Write‑tool approval flow
  • Structured audit logging — timestamp, session, tool, params, latency, status
  • Per‑tool / per‑agent rate limiting
  • Config hot‑reload
  • Path‑param templating, non‑JSON response handling, PUT/DELETE support
  • SSE keepalive and progress streaming
  • PyPI publish

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcplex_backplane-0.4.0.tar.gz (31.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcplex_backplane-0.4.0-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file mcplex_backplane-0.4.0.tar.gz.

File metadata

  • Download URL: mcplex_backplane-0.4.0.tar.gz
  • Upload date:
  • Size: 31.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for mcplex_backplane-0.4.0.tar.gz
Algorithm Hash digest
SHA256 ff01723f3ad354f54fd83eab44da52fe3e15e8509d789c9a326eac155b72ba0d
MD5 193dc0ee835e9516ec9861011978f336
BLAKE2b-256 9856abfe217f66b054b55674b7f6b9068c3f3178db89412aa2c5882f1c836b9a

See more details on using hashes here.

File details

Details for the file mcplex_backplane-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcplex_backplane-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0b9bd23c596ad1a226a638ecfce6d86930172c08526891358a87d75432e1bc9
MD5 5a283f9edcef97963f07cb87716f3f16
BLAKE2b-256 48f08aba1628a4ca895211209a4099f4a58297778288ddb37368d6c3645a1e40

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 files

0.3.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page