Skip to main content

Keel MCP ingress

keel-mcp-ingress exposes operator-enrolled, schema-verified managed MCP tools over standard MCP stdio. It delegates every call to the Keel managed-MCP API. Listing a tool grants no authority.

Prerequisites

Use a Keel project with the required plan, active policies, and upstream MCP servers enrolled by the Keel operator. Server registration and discovery alone do not confer trust. Custom/unmapped servers are not exposed by this initial catalog. Initial catalog reads are bounded to 100 enabled servers and 1000 accepted tool contracts per project; larger catalogs return a clear refusal rather than silently dropping tools. Use managed MCP directly for larger catalogs. Starter cannot positively authorize arbitrary non-payment MCP calls. With no enrolled, verified servers, tools/list returns an empty catalog.

Obtain a live agent-bound Client key: an owner creates an Admin key; the Admin creates an AgentPrincipal (POST /v1/principals) and a Client key bound to its agent_principal_id (POST /v1/api-keys). Keep the Admin/owner and upstream credentials outside the agent. An ordinary project Runtime/service key has no agent binding and cannot use this execution path. Upstream secrets stay in Keel. Because the requester is the agent, the project owner can approve its REVIEW requests; a request sent with a key the owner holds cannot be self-approved.

Installation

Requires Python 3.11 or newer.

python3 -m venv .venv
.venv/bin/python -m pip install keel-mcp-ingress==0.1.1

Configure any MCP stdio client (including Claude-compatible clients):

{
  "mcpServers": {
    "keel": {
      "command": "/absolute/path/to/.venv/bin/keel-mcp",
      "env": {
        "KEEL_BASE_URL": "https://api.keelapi.com",
        "KEEL_API_KEY": "YOUR_AGENT_BOUND_CLIENT_KEY",
        "KEEL_PROJECT_ID": "YOUR_PROJECT_ID"
      }
    }
  }
}

HTTPS is required; HTTP is accepted only for an isolated loopback runtime. Project identity is checked against the key. The ingress supplies required per-request freshness headers without exemptions. If the key is missing, revoked, expired, or not bound to a live agent, the ingress exits non-zero with "Keel MCP ingress could not authenticate or reach the configured Keel API".

Calls and outcomes

Use tools/list. Tool names are stable opaque aliases; descriptions identify the upstream server/tool. Supply the original upstream arguments under the arguments field and a caller-generated idempotency_key. Keep that key and the exact arguments for the whole intended request. Nested argument content is forwarded unchanged. Expired, drifted or disabled contracts disappear from the catalog; existing API admission remains the final authority.

tools/call returns the existing API response under response, plus keel_http_status, idempotency_key, and, when Keel names it, the permit_id used to find the call's signed evidence. It marks refusals/failures as MCP isError. ALLOW dispatches only through existing admission. DENY, unapproved REVIEW and THROTTLE cause zero managed dispatch. For REVIEW, the owner approves the returned Permit through the dashboard; retry the exact arguments and key. Approval itself never dispatches. Changed arguments and authority cannot reuse approval. A new key requests new authority; it does not reuse an approval.

For an unknown outcome or lost Keel response, reconcile using the original key and downstream records. Do not generate a new key to retry a possibly completed effect. The gateway does not retry automatically. Invalid input is refused.

Permit, dispatch, receipt and closure evidence use existing Keel export and proof-pack APIs and the verifier. A successful MCP result is not itself signed proof of an external state change. Distinguish authorization, Keel dispatch, provider receipt, provider execution and independently observed external state. Checkpoint publication remains PAUSED; this ingress does not resume it.

This initial ingress supports initialization, tool listing/calling and stdio session cleanup. It does not add a policy engine, approval path, provider credential delegation, remote OAuth service or unrelated MCP features. A model Permit still does not authorize host-executed tools outside this managed boundary.

Metadata

Release files for keel-mcp-ingress 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for keel-mcp-ingress 0.1.1
File Interpreter ABI Platform
keel_mcp_ingress-0.1.1-py3-none-any.whl Python 3 none any Details

Release files / keel_mcp_ingress-0.1.1-py3-none-any.whl

Download URL keel_mcp_ingress-0.1.1-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
20a2b46cf4905be0be2d3d3dd8d8f13b8fa22b13796d29a725e26742e069d5f6
BLAKE2b-256 checksum
How to use checksums
b4e9a59f4eefd3aba842aba2b7adc5ba8b02c01b76653fda13aa1e64d7e72fc4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Security for keel-mcp-ingress 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

1 release file No provenance

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