fastmcp-kit
0.1.0 live on PyPI.
pip install fastmcp-kitthenfrom mcp_toolkit import MCPToolkit. The distribution name (fastmcp-kit) and the Python module name (mcp_toolkit) differ — same pattern aspip install pyyaml→import yaml. PyPI's similarity rules rejected the shorter name.
A Python framework for building authenticated, scoped, observable MCP (Model Context Protocol) servers on top of FastMCP.
You bring the tools. fastmcp-kit brings:
- Tool registry — register tools with
@toolkit.tool(...), group them, version them. - Scoped auth — bearer tokens carry scopes;
list_toolsis filtered per caller. Tokens never see tools they can't call. - One-click observability — Prometheus metrics auto-registered per tool, Grafana dashboards generated from the registry,
docker compose upbrings the whole stack live. - Multi-tenancy — pluggable tenant resolvers (header / subdomain / token-claim). Per-tenant metric labels enforced at registration.
- Battle-tested harness — Clara architecture, mypy-strict, 80% coverage gate, bandit + pip-audit + gitleaks + CodeQL, branch protection, PR-from-fork model.
Quick taste
from mcp_toolkit import MCPToolkit
toolkit = MCPToolkit(name="my-server")
@toolkit.tool(group="weather", scopes=["read:weather"])
async def get_weather(city: str) -> dict:
return {"city": city, "temp_c": 21.0}
@toolkit.tool(group="admin", scopes=["admin"])
async def reset_cache() -> None:
...
app = toolkit.build_app() # FastAPI / FastMCP app; uvicorn-ready
Tokens minted with scopes=["read:weather"] discover and call get_weather. They cannot see reset_cache exists.
Why not just FastMCP?
FastMCP gives you the MCP wire protocol and transports. fastmcp-kit gives you the production layer above it: auth-scoped discovery, metric-per-tool, dashboards-from-code, multitenancy. You can use both — fastmcp-kit wraps FastMCP under the hood.
Install
# Just the framework
uv add fastmcp-kit
# With observability batteries (Prometheus exposition + Grafana JSON gen)
uv add 'fastmcp-kit[observability]'
# Everything
uv add 'fastmcp-kit[observability,redis,otel]'
Import name stays mcp_toolkit:
from mcp_toolkit import MCPToolkit
One-click stack
make stack-up # Prometheus + Grafana + your server, dashboards provisioned
open http://localhost:3000 # Grafana, dashboards already populated
See deploy/observability-stack/README.md.
Deploy
Three deployment surfaces ship in this repo:
| Target | Manifest | When |
|---|---|---|
| Knative | deploy/knative-serving.yaml |
You already run Knative Serving. |
| Vanilla k8s (Helm) | deploy/helm/mcp-toolkit/ |
You run k8s without Knative. |
| Local dev | deploy/observability-stack/ |
docker compose, Prometheus + Grafana included. |
Documentation
| Topic | Where |
|---|---|
| AI navigation primer | CLAUDE.md |
| 10,000 ft architecture | ARCHITECTURE.md |
| Tool registration | src/mcp_toolkit/domains/registry/DOMAIN.md |
| Auth + scopes | src/mcp_toolkit/domains/auth/DOMAIN.md |
| Metrics + dashboards | src/mcp_toolkit/domains/observability/DOMAIN.md |
| Multi-tenancy | src/mcp_toolkit/domains/tenancy/DOMAIN.md |
| Roadmap | docs/ROADMAP.md |
| Contributing | CONTRIBUTING.md |
| Security policy | SECURITY.md |
License
MIT — see LICENSE.
Metadata
Release files for fastmcp-kit 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| fastmcp_kit-0.1.1.tar.gz | 189.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fastmcp_kit-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 240.3 kB
Release files / fastmcp_kit-0.1.1.tar.gz
| Download URL | fastmcp_kit-0.1.1.tar.gz |
|---|---|
| Size | 189.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d426a39ece8541a37d72f75e6dbde0b0a061e8fb1102d3674600d6579d4087b8
|
|
BLAKE2b-256 checksum How to use checksums |
a6c0514d0f8706aa82e43d95938be3dbc2ce9623a6c8e311c7e6d93b0068beb4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.18
|
Release files / fastmcp_kit-0.1.1-py3-none-any.whl
| Download URL | fastmcp_kit-0.1.1-py3-none-any.whl |
|---|---|
| Size | 50.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
540bc6e7d25609c6fdc75d2c1c6e459e2147ef900d712c4b54e1904b2bca2e7d
|
|
BLAKE2b-256 checksum How to use checksums |
42789577c1f193f6d4601af80f10ab4ef41ebf043d3cd85f3ca230173f75d424
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.18
|
Security for fastmcp-kit 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.