safe-runbook-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@safe-runbook-mcp plan docker-service-status for service api"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
safe-runbook-mcp
A policy-gated MCP server for operational runbooks. It lets an AI inspect and run known commands without giving it an unrestricted shell.
Why it exists
AI agents are useful for operations, but handing one a terminal is a large trust decision. This project keeps the useful part—repeatable diagnostics and maintenance—inside a small, reviewable boundary:
AI client → inspect plan → policy checks → optional human approval → exact command
Related MCP server: govmcp
Safety model
Runbooks are version-controlled JSON; the AI cannot invent a command.
Execution is off by default.
Executables must be explicitly allowlisted.
Variables are regex-validated and become complete process arguments.
Commands run with
shell: falseinside a realpath-confined workspace.Mutating and destructive plans require a short-lived HMAC approval token created outside MCP.
The token is bound to the runbook and exact plan hash, so changed inputs invalidate it.
Processes have time and output limits; declared secrets are redacted.
MCP tool annotations are also provided for clients, while server-side checks remain the authority.
Stack
TypeScript 7, Node.js 22, MCP TypeScript SDK v2, Zod 4, Vitest 4, Biome 2, Docker, and GitHub Actions. The project is open source and has no paid API dependency.
Quick start
npm install
npm run cli -- list
npm run cli -- plan docker-service-status --var service=api
npm testExecution must be enabled explicitly:
RUNBOOK_EXECUTION_ENABLED=true npm run cli -- run disk-usageFor a mutating runbook, generate approval outside the MCP connection and use the same variables for approval and execution:
export RUNBOOK_EXECUTION_ENABLED=true
export RUNBOOK_APPROVAL_SECRET='replace-with-a-long-random-secret'
TOKEN=$(npm run --silent cli -- approve restart-compose-service --var service=api)
npm run cli -- run restart-compose-service --var service=api --approval "$TOKEN"Connect an MCP client
Build once, then add this stdio server to an MCP-compatible client. Replace the paths with absolute paths on your machine.
{
"mcpServers": {
"safe-runbooks": {
"command": "node",
"args": ["/absolute/path/safe-runbook-mcp/dist/server.js"],
"env": {
"RUNBOOK_DIRECTORY": "/absolute/path/safe-runbook-mcp/runbooks",
"RUNBOOK_WORKSPACE": "/workspace/to/manage",
"RUNBOOK_EXECUTION_ENABLED": "false"
}
}
}
}The server exposes:
list_runbooks— discover available runbooks and risk levels.inspect_runbook— resolve variables and return the exact plan plus its hash.execute_runbook— execute the already-defined plan after policy checks.runbook://catalog— read-only catalog resource.
Logs go to stderr because stdout is reserved for MCP JSON-RPC traffic.
Add a runbook
Create a JSON file in runbooks/:
{
"id": "service-status",
"title": "Inspect a service",
"description": "Read one Compose service state.",
"risk": "diagnostic",
"variables": {
"service": {
"description": "Compose service name",
"pattern": "[a-zA-Z0-9][a-zA-Z0-9_-]{0,62}",
"required": true
}
},
"steps": [
{
"id": "status",
"title": "Read status",
"executable": "docker",
"args": ["compose", "ps", "{{service}}"]
}
]
}Choose diagnostic, mutating, or destructive. Variables must occupy a complete argument such as "{{service}}"; string interpolation is intentionally rejected.
Docker
docker build -t safe-runbook-mcp .
docker run --rm -i \
-v "$PWD:/workspace:ro" \
-e RUNBOOK_WORKSPACE=/workspace \
-e RUNBOOK_DIRECTORY=/app/runbooks \
safe-runbook-mcpKeep execution disabled for a read-only mount. If a runbook needs Docker, mount only the required socket or remote context after reviewing that trust boundary.
Development
npm run check
npm run typecheck
npm test
npm run buildSee CONTRIBUTING.md for the branch workflow and AGENTS.md for repository rules used by coding agents.
References
License
MIT
Available Tools
3 toolsexecute_runbookExecute an approved runbookADestructive
Execute only commands declared in a version-controlled runbook. Requires the global execution gate; mutating plans also require an out-of-band approval token.
Inputs: id (required), variables, approvalToken.
inspect_runbookInspect a resolved runbook planARead-onlyIdempotent
Validate variables and return the exact commands, plan hash, risk, and approval requirement without executing.
Inputs: id (required), variables.
list_runbooksList safe runbooksARead-onlyIdempotent
List version-controlled runbooks and their risk levels. Does not execute anything.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: inspect validates and previews, execute runs commands, and list enumerates available runbooks. There is no overlap or ambiguity between them.
All three tool names follow a consistent verb_noun pattern: inspect, execute, and list all pair with 'runbook'. The naming is uniform and predictable.
With only three tools, the server is lean but covers the essential operations for runbook management: discover, preview, and execute. It is slightly minimal but appropriate for a focused purpose.
The server provides the core lifecycle for runbooks: list, inspect, and execute. Missing are update/delete operations, but since runbooks are version-controlled externally, those may be intentionally out of scope. No critical gaps for safe execution.
Maintenance
Related MCP Connectors
Autonomous and governed SRE & MLOps control plane for AI agent platforms.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Runtime permission, approval, and audit layer for AI agent tool execution.
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables controlled AI-agent access to enterprise-shaped tools with a deny-by-default gated write path, human approval, dry-run execution, and append-only audit logging.1-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to operate a simulated IT operations environment through policy-enforced, risk-tiered tool calls with human approval for risky writes, dry-run previews, rate limits, emergency lockdown, and tamper-evident auditing.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to safely interact with operations systems such as cloud inventory, runbooks, and ticketing while enforcing role-based access, JWT authentication, write confirmation, secret and PII redaction, rate limits, and audit logging.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform safe, auditable Kubernetes write actions such as scaling, restarting and rolling back Deployments through a plan → policy-check → approve → apply → audit flow, with server-side guards, single-use plans and scoped RBAC. Read-only planning and Prometheus SLO/alert tools support the same guarded workflow.Apache 2.0