Conduit
Conduit is a deterministic, local-first MCP gateway that federates tools from multiple Streamable HTTP servers behind one policy-enforced and auditable endpoint.
It presents one MCP 2026-07-28 endpoint, publishes stable names such as
github.search_code, and routes an authorised call only through its stored
downstream route. It is deliberately not a general-purpose MCP proxy.
Install
The Python distribution name is conduit-gateway (the import and command
remain conduit):
pipx install conduit-gateway
# or: python -m pip install conduit-gateway
For local development from a checkout:
python -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[test]'
The Go v0.1.x releases remain available through their existing release tags and
the go-v0.1-maintenance branch; this branch is the Python implementation.
Quick start
conduit --init --config conduit.yaml
# Edit the downstream URL, its owned credentials, and policy rules.
conduit --config conduit.yaml
--init writes the bundled template privately and never overwrites an existing
configuration. Checkout users may also copy the root conduit.example.yaml.
Conduit binds loopback addresses only. Once its downstream catalog is ready:
curl http://127.0.0.1:8080/healthz
listener:
address: 127.0.0.1:8080
allowed_origins: []
audit:
path: ./conduit-audit.jsonl
policy:
allow: ["github.*"]
deny: []
limits:
max_pages_per_downstream: 32
max_tools_per_downstream: 256
max_downstream_catalog_bytes: 1048576
max_aggregate_tools: 512
max_aggregate_response_bytes: 4194304
max_tool_response_bytes: 4194304
catalog_refresh_interval: 60s
request_timeout: 10s
tool_call_timeout: 30s
downstreams:
- id: github
url: http://127.0.0.1:9000/mcp
headers: {}
Scope and safety model
Conduit supports server/discover, deterministic policy-filtered tools/list,
and terminal JSON tools/call over MCP 2026-07-28. Downstreams are
Streamable HTTP only. It has no automatic tool-call retries, legacy fallback,
stdio, OAuth broker, identity system, database, dashboard, or SSE/progress
bridge.
Every public tool has an explicit immutable route. Policy is deny-wins, then
allow, then default-deny. A durable tool_call_authorized audit entry is
fsynced before downstream side effects. Caller headers, cookies, and
credentials are never forwarded; configured downstream headers are isolated per
server. Redirects are disabled, response bodies are bounded while streaming,
and downstream sessions receive a single invocation-owned cleanup DELETE.
flowchart LR
C[MCP client] --> I[Conduit ingress]
I --> R[Immutable registry + policy]
R --> A[Durable audit]
A --> D[One-shot dispatcher]
D --> S[Exact downstream MCP route]
Read the documentation for configuration, operations, protocol compatibility, security, and development.
Development
python -m pytest --cov
ruff check .
mypy src
python -m build
See CONTRIBUTING.md, SECURITY.md, and the Apache-2.0 license.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file conduit_gateway-0.2.1.tar.gz.
File metadata
- Download URL: conduit_gateway-0.2.1.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2e5cb5b29b317e39466959a4bb7ed4b12682ba7bd9af295895af0486a15d22b
|
|
| MD5 |
25a018b2a4022fde2e1832ab44bdc118
|
|
| BLAKE2b-256 |
8725af7903ce329e06b45116bbf31dcecd21bbd4b56785ee19da41d96464630a
|
Provenance
The following attestation bundles were made for conduit_gateway-0.2.1.tar.gz:
Publisher:
release.yml on Rakshita-0023/conduit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
conduit_gateway-0.2.1.tar.gz -
Subject digest:
f2e5cb5b29b317e39466959a4bb7ed4b12682ba7bd9af295895af0486a15d22b - Sigstore transparency entry: 2673507789
- Sigstore integration time:
-
Permalink:
Rakshita-0023/conduit@1b125c69bd6f9e31ed889e0ab6d72fbaa2140b1d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/Rakshita-0023
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1b125c69bd6f9e31ed889e0ab6d72fbaa2140b1d -
Trigger Event:
push
-
Statement type:
File details
Details for the file conduit_gateway-0.2.1-py3-none-any.whl.
File metadata
- Download URL: conduit_gateway-0.2.1-py3-none-any.whl
- Upload date:
- Size: 31.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
323d9a51b78623e3da12a14d0875a865b2f847a130b1d1ad84aa36d63744a08a
|
|
| MD5 |
1f52ce1fcfabc74559a782c8194125ed
|
|
| BLAKE2b-256 |
e828105f51c34cf1e3d1fc9e7c020f970fac857c3f10edb016525422d1b91f09
|
Provenance
The following attestation bundles were made for conduit_gateway-0.2.1-py3-none-any.whl:
Publisher:
release.yml on Rakshita-0023/conduit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
conduit_gateway-0.2.1-py3-none-any.whl -
Subject digest:
323d9a51b78623e3da12a14d0875a865b2f847a130b1d1ad84aa36d63744a08a - Sigstore transparency entry: 2673507804
- Sigstore integration time:
-
Permalink:
Rakshita-0023/conduit@1b125c69bd6f9e31ed889e0ab6d72fbaa2140b1d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/Rakshita-0023
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1b125c69bd6f9e31ed889e0ab6d72fbaa2140b1d -
Trigger Event:
push
-
Statement type: