MCP Server
Query and manage Kitaru executions, deployments, artifacts, stacks, and secret creation through Model Context Protocol tools
Kitaru ships an MCP server so assistants can query and manage executions, deployments, artifacts, stacks, and project context with structured tool calls instead of parsing CLI text output.
Install MCP support
uv add kitaru --extra mcppip install "kitaru[mcp]"If you also want agents to start and stop the local Kitaru server, install the local extra too:
uv add kitaru --extra mcp --extra localpip install "kitaru[mcp,local]"Start the server
kitaru-mcpThe server uses stdio transport by default.
Configure in Claude Code
kitaru-mcp has to resolve to the Python environment where you installed kitaru[mcp]. Claude Code inherits the PATH of the shell that launched it, not whatever virtualenv you activate later — so either activate your venv before starting Claude, or point command at the absolute path to kitaru-mcp inside that venv (e.g. /path/to/project/.venv/bin/kitaru-mcp). The absolute-path form is the most reliable.
Option 1: project .mcp.json
.mcp.jsonAdd this to .mcp.json in your project root (committed to the repo, so the whole team picks it up):
{
"mcpServers": {
"kitaru": {
"command": "kitaru-mcp",
"args": []
}
}
}Or, using an absolute venv path:
Option 2: claude mcp add CLI
claude mcp add CLIClaude Code can register the server for you. Scope controls where the registration lives:
Verify with claude mcp list. If kitaru-mcp isn't on PATH, pass the absolute venv path instead:
You can also just ask Claude: "add the Kitaru MCP server to this project" — it will run claude mcp add for you.
Tool set
Execution tools:
kitaru_executions_listkitaru_executions_getkitaru_executions_latestkitaru_executions_statisticsget_execution_logskitaru_executions_runkitaru_executions_cancelkitaru_executions_inputkitaru_executions_retrykitaru_executions_replay
Deployment tools:
kitaru_deployments_deploykitaru_deployments_invokekitaru_deployments_listkitaru_deployments_getkitaru_deployments_deletekitaru_deployments_tagkitaru_deployments_untag
Artifact tools:
kitaru_artifacts_listkitaru_artifacts_get
Secret tools:
kitaru_secrets_create
kitaru_secrets_create returns metadata only: secret ID, name, visibility, key names, and missing-value status. The MCP server intentionally does not expose a secret delete tool; use the CLI or Python SDK for deletion.
Connection tools:
kitaru_start_local_serverkitaru_stop_local_serverkitaru_statuskitaru_stacks_listmanage_stack
Copy-paste prompts
Use prompts like these in an MCP-capable assistant after you configure the Kitaru MCP server.
Read-only status check:
Execution health summary:
Tag cohort analysis:
Start and watch a flow:
Resolve a waiting execution safely:
Plan and run a replay:
Inspect results from a completed execution:
Manage a local stack:
Deploy and invoke a shared flow route:
Querying execution statistics
Use kitaru_executions_statistics when an assistant needs counts or numeric aggregates instead of full execution records. A good agent pattern is: ask the cheap aggregate question first, then fetch individual executions only for the group that looks interesting.
Example payloads:
The result shape is:
Supported groupings are status, flow, stack, tag, time:hour, time:day, time:week, time:month, and metadata:<key>. flow and stack groupings return IDs as flow_id and stack_id; filters can still use names. Optional metrics use the same string format as the CLI: <name>:<source>:<avg|sum|min|max> for built-in numeric sources such as duration, or <name>:metadata:<metadata_key>:<avg|sum|min|max> for numeric execution metadata. The tool does not yet filter by time range or metadata value. When max_groups truncates a time-grouped result, Kitaru keeps the newest time rows and still returns them from oldest to newest.
Grouping by metadata:<key> includes the matching metadata values in the MCP response. Only use it for metadata keys whose values are safe for the MCP client and transcript to see.
Starting executions with kitaru_executions_run
kitaru_executions_runThe kitaru_executions_run tool requires a target string in the format:
The left side can be an importable module path or a .py filesystem path. The right side is the flow attribute name in that module.
Examples:
Pass flow inputs as args (a JSON object) and optionally specify a stack:
When stack is provided, the tool passes it to .run(stack=...) so the execution targets that stack.
Deployment tools
The deployment tools let assistants publish and invoke versioned flow routes without shelling out to kitaru deploy or kitaru invoke.
kitaru_deployments_deploy
Create a new deployment version from <module_or_file>:<flow_name>
kitaru_deployments_invoke
Start a new execution from a deployed flow by default, tag, or version
kitaru_deployments_list
List all deployment versions, optionally filtered to one flow
kitaru_deployments_get
Inspect one deployment by version or tag
kitaru_deployments_delete
Delete one version when no exclusive tag protects it
kitaru_deployments_tag
Attach or move a public tag to a version
kitaru_deployments_untag
Remove a non-reserved public tag from a version
kitaru_deployments_deploy accepts deployment-time flow inputs plus optional deployment controls:
image accepts either a base image string or an object matching kitaru.ImageSettings.
That deploy-time image config is saved into the deployment snapshot. Later kitaru_deployments_invoke calls can override flow inputs, but they do not rewrite the deployment image.
The first deployment of a flow gets the reserved default tag automatically. default is always exclusive and cannot be removed. Non-default tags are shared by default; pass exclusive=true when the tag should move to exactly one version, such as canary, stable, or prod.
kitaru_deployments_invoke is the MCP equivalent of the primary CLI command kitaru invoke. If neither version nor tag is provided, it invokes the reserved default route:
Pin a version or named route when needed:
Use the list/get/tag tools for the producer side of a shared flow:
Then consumers can invoke by flow name and tag; they do not need the producer's source file path.
For the full deployment model, including auto-versioning, tag exclusivity, serverless routing, and auth context, see Deployments.
Example query flow
Call
kitaru_executions_statistics(group_by=["status"])to get the execution health overviewCall
kitaru_executions_list(status="waiting")if the overview shows waiting executionsAsk the user to confirm an action for a pending wait
Call
kitaru_executions_input(exec_id=..., wait=..., value=...)(MCP requires explicitwait; CLI auto-detects)Re-check state via
kitaru_executions_get(exec_id)
To provision or clean up a local stack, use manage_stack(action="create", name="local-dev") or manage_stack(action="delete", name="local-dev", force=True).
Authentication and context
The MCP server reuses the same config/auth context as kitaru CLI and SDK. If you want MCP tools to target a local server, start one first with bare kitaru login or via kitaru_start_local_server(...). If you want MCP tools to target a deployed Kitaru server or managed workspace, connect first with kitaru login <server-or-workspace> --api-key <workspace-api-key> before starting kitaru-mcp, or set KITARU_SERVER_URL, KITARU_AUTH_TOKEN, and KITARU_PROJECT in the MCP server environment. If you can run kitaru status, MCP tools use that same connection.
Deployment MCP calls do not use per-deployment tokens. kitaru_deployments_deploy, kitaru_deployments_invoke, and the deployment management tools authorize through the active workspace/project context, just like kitaru deploy, kitaru invoke, and KitaruClient().deployments.invoke(...).
Replay behavior
kitaru_executions_replay starts a new execution and returns:
available: trueoperation: "replay"the serialized replayed execution payload
Use from_ for checkpoint selection, optional flow_inputs for flow parameter overrides, and optional overrides for checkpoint.* overrides.
Replay does not support wait.* overrides. If the replayed execution reaches a wait, resolve it through the normal input flow afterward.
MCP currently exposes kitaru_executions_input but not a separate resume tool. If your backend requires an explicit resume step after input resolution, use the CLI or SDK resume(...) surface.
Last updated
Was this helpful?