Skip to main content

Kurd

A high-performance Model Context Protocol (MCP) gateway for Python, powered by Rust.

Kurd combines a Python-first developer API with a Rust data plane for MCP routing, upstream aggregation, concurrency control, security, caching, and observability.

Status

Kurd is in beta and is being hardened for production use.

Current release line: 0.3.x

The gateway targets the MCP 2026-07-28 protocol revision while preserving compatibility paths used by existing Kurd applications.

Highlights

  • Python-first Router API
  • Rust core using Tokio, Axum, Serde, and Reqwest
  • MCP server/discover, tools/list, and tools/call
  • Local Python tools and mounted upstream MCP servers
  • Sync and async Python callbacks
  • Concurrent upstream discovery
  • Shared HTTP connection pool
  • Retry with exponential backoff and jitter
  • Circuit breaker
  • Tool-list caching with TTL and cache scope
  • Graceful HTTP lifecycle: start, stop, status, restart
  • Optional bearer authentication
  • Request-size and content-type validation
  • Upstream URL validation and private-network policy
  • Configurable upstream timeout
  • Global, per-upstream, and Python callback backpressure
  • Request IDs and structured request logging
  • Runtime, cache, and upstream metrics
  • Cross-platform CI and automated PyPI release workflow

Installation

pip install kurd

Python 3.10 or newer is required.

Quick Start

from kurd import Router

router = Router()

@router.tool()
async def add(a: int, b: int) -> int:
    return a + b

Start the HTTP gateway:

from kurd._kurd import start_http_gateway

start_http_gateway("127.0.0.1:9200")

The MCP endpoint is:

http://127.0.0.1:9200/mcp

Health and operational status are exposed at:

GET /health
GET /status

Mount an Upstream MCP Server

from kurd import Router

router = Router()
router.mount("github", "http://127.0.0.1:9300")

An upstream tool named create_issue is exposed through Kurd as:

github.create_issue

Unmount or refresh the aggregated tool cache:

router.unmount("github")
router.refresh_tools()

Runtime Hardening

Kurd provides explicit concurrency controls:

router.configure_runtime(
    global_concurrency=512,
    upstream_concurrency=64,
    python_concurrency=64,
    request_logging=False,
)

Inspect runtime state:

print(router.runtime_status())

The HTTP /status endpoint also reports runtime, cache, security, upstream latency, retry, and circuit-breaker metrics.

Security

Kurd currently provides a production security baseline:

  • maximum MCP request body size
  • JSON content-type validation
  • optional bearer-token authentication
  • upstream URL validation
  • configurable private/loopback upstream policy
  • configurable upstream request timeout
  • sanitized upstream transport errors
  • overload rejection through explicit backpressure

For deployments exposed beyond localhost, use TLS at the reverse proxy or ingress layer and apply your normal network-level authentication and authorization controls.

MCP 2026-07-28

Kurd implements the stateless 2026 MCP model used for routable gateway traffic:

  • per-request protocol metadata
  • MCP-Protocol-Version
  • Mcp-Method
  • Mcp-Name for tool calls
  • server/discover
  • deterministic tools/list
  • resultType
  • ttlMs
  • cacheScope
  • server identity metadata

Kurd rejects mismatched modern MCP headers and unsupported protocol versions.

Performance

The repository includes end-to-end HTTP load tests in tests/test_load.py.

Example measurements from a Windows development machine:

Scenario Concurrency Throughput p50 p95 p99 Errors
Local Python tool 10 594.5 req/s 14.94 ms 23.88 ms 28.66 ms 0%
Local Python tool 50 587.9 req/s 33.29 ms 87.83 ms 119.09 ms 0%
Local Python tool 100 556.0 req/s 18.27 ms 29.52 ms 32.43 ms 0%
Upstream tool 10 412.2 req/s 21.77 ms 36.35 ms 42.74 ms 0%
Upstream tool 50 229.8 req/s 20.61 ms 534.61 ms 549.25 ms 0%
Upstream tool 100 293.6 req/s 30.12 ms 531.40 ms 535.34 ms 0%
Local sustained burst 100 573.3 req/s 73.51 ms 179.13 ms 218.49 ms 0%

These are local measurements, not universal performance guarantees. Hardware, operating system, Python version, payload shape, upstream implementation, and network conditions affect results.

Run the benchmark suite with:

python -m pytest tests/test_load.py -q -s

Development

Create and activate a virtual environment, then install the development tools:

python -m pip install --upgrade pip
python -m pip install maturin pytest

Build the native extension:

maturin develop --release

Run the full test suite:

python -m pytest -q

Build release artifacts:

maturin build --release

Architecture

Python application
       |
       v
   Kurd Router
       |
       v
   PyO3 boundary
       |
       v
 Rust MCP gateway
   |          |
   |          +--> Local Python tools
   |
   +-------------> Upstream MCP servers

Rust owns the HTTP server, MCP validation, routing, caching, retries, circuit breaking, backpressure, and operational metrics. Python provides the developer-facing registration and configuration API.

Testing

The current suite covers:

  • JSON-RPC parsing and dispatch
  • local sync and async tools
  • upstream discovery and calls
  • concurrent upstream discovery
  • cache behavior and invalidation
  • mount and unmount
  • MCP 2026 request headers and protocol-version checks
  • HTTP lifecycle and graceful shutdown
  • request-size and content-type security
  • bearer authentication
  • upstream URL policy
  • timeout configuration
  • error sanitization
  • global and Python callback backpressure
  • request ID propagation
  • runtime observability
  • load and burst behavior

Compatibility

CI targets Windows, Linux, and macOS. Release wheels are built through Maturin.

The project is primarily developed with Python 3.12 and stable Rust; package metadata supports Python 3.10+.

Release Policy

Kurd uses semantic versioning while the public API stabilizes.

  • patch releases: bug fixes and packaging corrections
  • minor releases: new gateway or MCP capabilities
  • 1.0.0: stable public API commitment

Project Structure

kurd/
├── kurd/
│   ├── __init__.py
│   └── router.py
├── src/
│   └── lib.rs
├── tests/
│   ├── test_upstream.py
│   ├── test_load.py
│   └── upstream_server.py
├── Cargo.toml
├── pyproject.toml
├── README.md
└── LICENSE

Contributing

Issues and technical discussions are welcome through the GitHub issue tracker.

Before submitting a change:

cargo check
maturin develop --release
python -m pytest -q

License

MIT.

Name

The name Kurd honors Kurdish identity and heritage.

Bezhi Kurd u Kurdistan.

Download files

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

Source Distribution

kurd-0.3.0.tar.gz (53.4 kB view details)

Uploaded Source

Built Distributions

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

kurd-0.3.0-cp312-cp312-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.12Windows x86-64

kurd-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

kurd-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file kurd-0.3.0.tar.gz.

File metadata

  • Download URL: kurd-0.3.0.tar.gz
  • Upload date:
  • Size: 53.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for kurd-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e6b944f43cb874ac9ec732dcd50e093d066edc7ce2ec37b75a3b4841d4288b69
MD5 a3cc1116a18ed2df2bd4e4eaf6681e9f
BLAKE2b-256 da9378c3d2a61c9d223816ee43434c6f941613a5d4bddb6d9e72fe429b24a656

See more details on using hashes here.

Provenance

The following attestation bundles were made for kurd-0.3.0.tar.gz:

Publisher: release.yml on sn391/kurd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kurd-0.3.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: kurd-0.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for kurd-0.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fa4cfe78a1d438a80dd672b74c96492ba27d90f8fbe3408ecfd1b9f766e3cb98
MD5 4b20a25b83e74ac4308588a788aa6ece
BLAKE2b-256 43e48013e70e9e25c17d94ba54cde43eef3bbd1d2cd4ffa21dfef96c9dd62269

See more details on using hashes here.

Provenance

The following attestation bundles were made for kurd-0.3.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on sn391/kurd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kurd-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for kurd-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 50fff945ff5dd038be2ec0815ae903f160d6c8605cf55139790f3b9a94df8b97
MD5 b38670c32844f9a3d423848aba169300
BLAKE2b-256 8834bce684eb279eb12a61b775bd4d9df80f81d782e5d48627c3cb820d38571c

See more details on using hashes here.

Provenance

The following attestation bundles were made for kurd-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yml on sn391/kurd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kurd-0.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for kurd-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f1b480d511156054007933469d71758f992c970a05b4870330b391777cc2ad4
MD5 347c011f26077bfeca31c8e3fdd6ab90
BLAKE2b-256 5f75567fb33f41906d64d46c6ee4ec49c02cd5334e1f3da1e0ec1100159b7095

See more details on using hashes here.

Provenance

The following attestation bundles were made for kurd-0.3.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on sn391/kurd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.7.0

13 files

0.6.0

13 files

0.5.0

13 files

0.4.0

4 files

This release

0.3.0 This release

4 files

0.2.0

4 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