Governed MCP server: YAML-declared tools, typed effects, policy-gated and audited calls.
Runs on your machine from its package; the steps are below.

At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx agentkit-mcp
MCP client config
{
"mcpServers": {
"agentkit": {
"command": "uvx",
"args": [
"agentkit-mcp"
]
}
}
}An MCP server where tools are declarative, effects are typed, and every action is policy-gated and audited. It works with any MCP client (Claude Desktop, Cursor, LangGraph, Claude Agent SDK, CrewAI).
Live Application: agentkit.ysiddo-ai-projects.app.
RESEARCH.md / Online Research DocumentationBENCHMARK.md / Online Benchmark DashboardSELF_HOSTING.mdThree things distinguish it from a typical MCP server:
read, write or destructive), and
tools that mutate data do mutate it.The bundled business-intelligence tools below are the reference pack. They show the mechanics end to end; they are not the limit of what the server can serve.
Reference BI pack (built in):
query_kpis, get_company_health, detect_kpi_anomalies, forecast_metric, list_available_metrics, get_executive_summary — plus any tools loaded from declarative YAML packs (packs/), so the real tool count at runtime is 6 or more, not a fixed number. The bundled annotations pack adds 3 more (list_annotations, annotate_metric, retract_annotation) demonstrating a guarded write/destructive path — see below.kpi://{domain}/latest for each of this project's real seeded domains — Finance, People, Operations, Customer, Engineering, Growth, Logistics, ESG, IT, Security (src/agentkit_mcp/data/seed.py).monthly_executive_briefingThe domain list, tool-pack set, and resource/prompt registration are all derived from the same data this server serves (
src/agentkit_mcp/data/seed.py,packs/*.yaml), not hardcoded, so adding a domain or tool pack extends this list automatically. You can also add your own@mcp.resource/@mcp.promptdecorators. See docs/REUSE.md.
Write and destructive actions. The annotations pack lets an agent record a durable
note on a metric (annotate_metric, effect write) and soft-delete one it got wrong
(retract_annotation, effect destructive, which requires a human-held
AGENTKIT_APPROVAL_TOKEN the model never sees). Both are off by default
(AGENTKIT_ALLOW_WRITES=false). See SECURITY.md
and RESEARCH.md section 2 for the policy-engine model.
Platform capabilities:
packs/)GET /api/policy publishes the capability envelopeGET /api/audit, allowed and denied, with deny reasonsGET /api/llm-routingworkflow.py (Planner → Analyst → Reporter)demos/claude_agent_sdk_demo.pydemos/crewai_demo.pyresearch/dspy_experiment.pypip install agentkit-mcp
agentkit-mcp # starts the server (stdio for MCP clients; set PORT for SSE)
For an MCP client, uvx can run the published package without a checkout:
{ "mcpServers": { "agentkit": { "command": "uvx", "args": ["agentkit-mcp"] } } }
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # fill in keys + POSTGRES_URL
python mcp_server.py
Add to ~/.config/Claude/claude_desktop_config.json:
{
"mcpServers": {
"agentkit": {
"command": "python",
"args": ["/abs/path/to/agentkit/mcp_server.py"],
"env": {
"MCP_TRANSPORT": "stdio",
"POSTGRES_URL": "postgresql://...",
"LOG_LEVEL": "DEBUG",
"TELEMETRY_OPT_OUT": "true"
}
}
}
}
MCP_TRANSPORT=stdio is required here — without it mcp_server.py defaults to serving
over SSE (a network port) instead of talking JSON-RPC over the pipes Claude Desktop
spawns it with, and no tools will appear. Local stdio mode doesn't need
MCP_AUTH_TOKEN (the OS process boundary is the auth boundary); that variable only
matters for the SSE/network path.
The 3-agent LangGraph workflow (workflow.py) and the demos/research scripts route
each role to its own model via LiteLLM, configured with
plain provider/model strings — no code changes to switch providers:
LLM_REASONING — planner + reporter agents (defaults to anthropic/claude-sonnet-4-6)LLM_DEFAULT — the tool-calling analyst agent (defaults to groq/openai/gpt-oss-120b)LLM_JUDGE — used by the eval suite (defaults to anthropic/claude-haiku-4-5)LLM_LOCAL + INFERENCE_MODE=local — route to a local/self-hosted model (e.g. Ollama)
instead of a hosted providerSet the matching provider API key(s) (GROQ_API_KEY, ANTHROPIC_API_KEY,
OPENAI_API_KEY) for whichever models you reference above. See .env.example.
LOG_LEVEL to DEBUG for verbose logs.TELEMETRY_URL redirects it to your own collector; TELEMETRY_OPT_OUT=true or
DO_NOT_TRACK=1 disables it. The Claude Desktop snippet above sets TELEMETRY_OPT_OUT.Restart Claude Desktop, then ask:
from agentkit_mcp.workflow import analyze
result = analyze("What drove gross margin in Q1?")
print(result["report"])
Claude Desktop / Cursor / LangGraph
│
▼ MCP
┌────────────────────────┐
│ mcp_server.py │
│ 6 core tools (read) │
│ + N pack tools │
│ (read/write/ │
│ destructive) │
│ 10 resources, 1 prompt │
└────────────┬───────────┘
│
┌───────────────────┼──────────────────┐
▼ ▼ ▼
pg_store insights forecasting
(KPIs, real (health, (scikit-learn
domains + write- anomalies) LinearRegression
back annotations) + Monte Carlo CI)
For the full formalization, literature context, and citation details, see RESEARCH.md.
Run the reproducible benchmark evaluation suites:
# Test MCP framework overhead
python3 eval/run_benchmarks.py --seed 42
# Full 43-scenario LangGraph suite across all 10 KPI domains
python3 eval/run_dspy_eval.py
# Comprehensive MCP tool execution metrics
python3 eval/run_mcp_tools_benchmark.py
Automated client verification:
python3 tests/test_mcp_client.py
If AgentKit is useful to you, a star on the repository helps other engineers find it, and following @Yacine-ai-tech is the simplest way to hear about new releases. Passing the link to a colleague who has the same problem is just as welcome.
Questions and field notes go to Discussions; reproducible bugs go to Issues.
This project is open-source under the AGPL-3.0 License. It is completely free for researchers, students, and open-source hobbyists. Commercial license: see COMMERCIAL.md.
![]()