Action surface compiler: turn observed web traffic into safe, versioned, agent-ready tools
Project description
CaskMCP
CaskMCP is a governed MCP capability supply chain with replayable proof.
Core contract:
caskmcp wowproves governance enforcement, replayability, and parity in one run.caskmcp govern ...is the governance surface (approvals, lockfiles, drift gates, runtime policy).caskmcp prove ...is the proof surface (prove-twice and smoke matrix).
Install
pip install caskmcp
For local development:
git clone https://github.com/caskmcp/CaskMCP.git
cd CaskMCP/cask
pip install -e .
Zero-Friction Wow
Default wow path is offline and browser-free:
caskmcp wow
Artifacts emitted on every run:
prove_twice_report.mdprove_twice_diff.jsonprove_summary.json
caskmcp wow exits 0 only when all are true:
- Governance was enforced in fail-closed mode.
- Run A and Run B replay deterministically from the same governed inputs.
- Parity passed.
Optional Live Browser Path
pip install "caskmcp[playwright]"
python -m playwright install chromium
caskmcp wow --live
Traffic Capture, Without Friction
CaskMCP supports three practical capture paths so teams can start where they already are.
| You already have | Command | Best for |
|---|---|---|
| Nothing yet (just want to see it work) | caskmcp wow |
Fastest first run, no credentials, no browser deps |
| A first-party web flow | caskmcp govern mint https://app.example.com -a api.example.com |
Capturing real authorized behavior |
| Existing artifacts (HAR, OTEL, OpenAPI) | caskmcp capture import ... / caskmcp openapi ... |
Adopting CaskMCP without recapturing traffic |
All three paths converge to the same governed runtime and proof loop (diff, gate, run, drift, verify, prove, wow).
- Offline fixture (no credentials, no browser install):
caskmcp wow
- Live browser capture (first-party authorized flows):
caskmcp govern mint https://app.example.com -a api.example.com
- Existing telemetry/spec imports:
caskmcp capture import traffic.har -a api.example.com
caskmcp capture import traces.json --input-format otel -a api.example.com
caskmcp openapi openapi.json -a api.example.com
Primary CLI Shape
caskmcp wow
caskmcp govern --help
caskmcp prove --help
Examples:
# Governed capture -> compile
caskmcp govern mint https://app.example.com -a api.example.com
# Review and approve pending lockfile
caskmcp govern diff --toolpack .caskmcp/toolpacks/<id>/toolpack.yaml --format github-md
caskmcp govern gate allow --all --lockfile .caskmcp/toolpacks/<id>/lockfile/caskmcp.lock.pending.yaml
# Enforced runtime + drift checks
caskmcp govern run --toolpack .caskmcp/toolpacks/<id>/toolpack.yaml
caskmcp govern drift --baseline .caskmcp/toolpacks/<id>/artifact/baseline.json --capture-id <capture-id>
# Prove matrix
caskmcp prove smoke
cask remains an alias for compatibility, but docs/defaults use caskmcp.
Why This Exists
MCP adoption is accelerating, while official guidance highlights tool-injection and trust risks in third-party MCP servers.
- OpenAI MCP risk framing and safety guidance: OpenAI MCP docs
- Remote MCP allowlist pressure: xAI remote MCP tools
- Registry moderation is intentionally permissive: MCP moderation policy
- Real incident context: Asana MCP data exposure write-up
CaskMCP focuses on local governance and evidence, not bypass tooling.
Packaging
- Distribution:
caskmcp - Base install: supports offline
wow - Extra:
playwright(live/browser capture) - Extra:
mcp(MCP SDK integration) - Extra:
all(convenience install formcp+playwright)
Development
pip install -e ".[dev,packaging-test]"
pytest tests/ -v
ruff check caskmcp tests
mypy caskmcp --ignore-missing-imports
Docs
Project details
Release history Release notifications | RSS feed
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 caskmcp-0.2.0b6.tar.gz.
File metadata
- Download URL: caskmcp-0.2.0b6.tar.gz
- Upload date:
- Size: 445.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbccb7d8a93f69473be9fc05c457007e73770c3d536e956e52a931d809ff7ee9
|
|
| MD5 |
d21fee5b259e718cc311984c469f42c9
|
|
| BLAKE2b-256 |
b2e2fc29736135801d889e6d544b9044ff293a3d13da8bbfe1e1ffa5b65f5747
|
Provenance
The following attestation bundles were made for caskmcp-0.2.0b6.tar.gz:
Publisher:
publish-pypi.yaml on caskmcp/CaskMCP
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
caskmcp-0.2.0b6.tar.gz -
Subject digest:
dbccb7d8a93f69473be9fc05c457007e73770c3d536e956e52a931d809ff7ee9 - Sigstore transparency entry: 956306799
- Sigstore integration time:
-
Permalink:
caskmcp/CaskMCP@31bfb265b0a60dc38aba623570e8552ecc021fb4 -
Branch / Tag:
refs/tags/v0.2.0b6 - Owner: https://github.com/caskmcp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yaml@31bfb265b0a60dc38aba623570e8552ecc021fb4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file caskmcp-0.2.0b6-py3-none-any.whl.
File metadata
- Download URL: caskmcp-0.2.0b6-py3-none-any.whl
- Upload date:
- Size: 270.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1f907927713c7ce9fe133eff2024553d4310e4d9215f3222919cfaaaf017ee2
|
|
| MD5 |
9795bd2e7da7a9ba9f5acc2d1fd16a33
|
|
| BLAKE2b-256 |
13d94d6d61da385047233a01f0421fb665d08956aa140ff6700080bf6eb573de
|
Provenance
The following attestation bundles were made for caskmcp-0.2.0b6-py3-none-any.whl:
Publisher:
publish-pypi.yaml on caskmcp/CaskMCP
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
caskmcp-0.2.0b6-py3-none-any.whl -
Subject digest:
e1f907927713c7ce9fe133eff2024553d4310e4d9215f3222919cfaaaf017ee2 - Sigstore transparency entry: 956306800
- Sigstore integration time:
-
Permalink:
caskmcp/CaskMCP@31bfb265b0a60dc38aba623570e8552ecc021fb4 -
Branch / Tag:
refs/tags/v0.2.0b6 - Owner: https://github.com/caskmcp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yaml@31bfb265b0a60dc38aba623570e8552ecc021fb4 -
Trigger Event:
push
-
Statement type: