Skip to main content

Toolframe FastMCP provider

toolframe-fastmcp publishes the accepted Toolframe MCP tool catalog through FastMCP 4.0.0 over stateful Streamable HTTP at /mcp. The provider binds one private loopback listener during activation and reports its URL through plugin health; the core gateway owns any public forwarding.

Install

Install the provider into a running Toolframe application:

toolframe --home APP plugin add pypi:toolframe-fastmcp==0.2.1 --enable

Core resolves dependencies and manages the provider's isolated Python environment. The Entry Register template already includes this provider.

All private-listener requests require a live core-issued request credential. Core admits public requests or validates external MCP bearer keys according to its independent [mcp_access] policy. FastMCP never receives the external secret; it resolves the temporary credential through RuntimeContext.mcp_access, filters tool discovery by the allowed resources, and carries the credential back through resource_call. Core rechecks scopes, expiry and revocation at tool admission. Stateful MCP sessions bind to the credential record. Use this provider together with the matching SDK/core changes; an older core cannot supply request credentials. See the MCP authentication guide in the core repository for configuration details.

Core sends each complete catalog epoch through prepare, commit, and abort. Preparation builds a frozen candidate without changing the live list. Commit swaps the entire list atomically, and a later commit withdraws tools that are absent from that epoch. Core replaces this provider process when the public tool schema or catalog changes, so MCP clients reconnect and list tools again after replacement.

Every tool belongs to one SDK OwnedResource. Its call is routed through the SDK RuntimeContext.resource_call boundary with the owned resource key, declared method, and prepared epoch. The provider does not import business implementations, access business storage, or expose MCP resources and prompts.

CI and publishing

See CI and release setup for the shared local validation command, the GitHub Actions checks, and manual TestPyPI/PyPI Trusted Publishing setup. Validation builds the pinned SDK in a disposable workspace, runs the plugin tests, checks the distributions, and exercises a clean installed provider wheel with its real runtime dependencies.

Gateway acceptance

After building the sibling core launcher and workspace wheelhouse:

uv run python scripts/verify-gateway.py \
  --binary ../toolframe-core/target/release/toolframe \
  --wheelhouse ../toolframe-core/wheelhouse

This creates a disposable application and two ordinary fixture plugins. Two real FastMCP clients exercise admitted-call draining, a backend-only replacement that retains MCP sessions, a catalog/schema change that replaces the MCP worker, and explicit reconnection. Tool/document withdrawal, schema rejection and unrelated worker continuity are checked through the actual core gateway. Evidence is saved to dist/gateway-evidence.json; the script stops its server and prints the log directory on failure. It does not certify independent desktop MCP clients.

Codex MCP client acceptance

With a disposable Entry Register application running, use the installed Codex client to discover the actual tool schema and call it through the core gateway:

# A fresh demo has zero entries; adjust --expected-count for your test data.
uv run python scripts/verify-codex.py \
  --url http://127.0.0.1:9876/mcp --expected-count 0

The probe uses the public Codex app-server mcpServerStatus/list and mcpServer/tool/call APIs in an ephemeral thread. It checks a valid read and an out-of-range argument. --expected-max 10 verifies a changed catalog after reload; --expect-absent checks withdrawal after disabling the demo plugin. Each run makes a fresh client connection and writes schema, connection state and actual results to dist/codex-evidence.json (override with --output). Only local HTTP endpoints are accepted. It neither starts the Toolframe server nor modifies data.

Verified with codex-cli 0.154.0. The probe replaces the child process's MCP configuration and disables unrelated plugins for that process; it never writes global Codex configuration or copies credentials. It does not initiate a model turn or drive the desktop UI. Noninteractive codex exec can refuse a tool call when its approval policy requires user input; discovery alone is not proof that such a model call succeeded. Store the probe output with the tested revision and client version in the release evidence.

macOS Intel release artifact

The provider pins cryptography==50.0.2. Upstream stopped publishing macOS Intel wheels in cryptography 49; see the upstream changelog. Toolframe's Intel launcher automatically downloads a companion from its matching GitHub Release and verifies the SHA-256 pinned into the executable. An ordinary PyPI-only installation on Intel may attempt a source build and require native build dependencies.

# From this repository; requires Xcode command-line tools, make, Perl, Rust and uv.
# On Apple Silicon, also install Rosetta and the x86_64-apple-darwin Rust target.
uv run python scripts/build-macos-intel.py --out-dir ../toolframe-core/wheelhouse

The script verifies pinned source SHA-256 values, builds OpenSSL 4.0.3 in a temporary private prefix, and statically links it into the Python 3.14 Intel cryptography wheel with a macOS 12 deployment target. It makes no system OpenSSL installation. Publish this wheel as a separate Core GitHub Release asset; retain its upstream license metadata. No Python wheel is embedded in the launcher. Updating either native dependency requires updating the pins, checksums and release acceptance together.

Qualify the exact Intel release on its native runner. Rosetta, physical Intel hardware and the macOS 12 minimum are separate verification environments.

For release validation and Trusted Publisher setup, see releasing.

License

Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.

Metadata

Release files for toolframe-fastmcp 0.2.1

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

Source distribution (sdist)

Source distribution for toolframe-fastmcp 0.2.1
File Size Uploaded
toolframe_fastmcp-0.2.1.tar.gz 80.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for toolframe-fastmcp 0.2.1
File Interpreter ABI Platform
toolframe_fastmcp-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 92.8 kB

Release files / toolframe_fastmcp-0.2.1.tar.gz

Download URL toolframe_fastmcp-0.2.1.tar.gz
Size 80.8 kB
Tags Source
SHA-256 checksum
How to use checksums
27411b83282b4ee10a918a05ee438aa9c119365c11c8986d6456f05c9a6441eb
BLAKE2b-256 checksum
How to use checksums
5423852e0e4ff9bd4beb52da7d8fb5d04a8933f043b53a905bab74cde3cd6fd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / toolframe_fastmcp-0.2.1-py3-none-any.whl

Download URL toolframe_fastmcp-0.2.1-py3-none-any.whl
Size 12.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7b38fe24ee5ca348c0b0a188d6e9b23436d1d9d7ddea8e824afd3272ab953145
BLAKE2b-256 checksum
How to use checksums
0209ab1a4cad4b51dabd2ed1a8e64bef8c8a35036a6341dd1aa54d618be15565
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release 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