Xanthe Incident Agent
Enables Claude to drive a gated incident-response runbook that enforces step order and logs all actions via an XState machine.
README
Xanthe Incident Agent
An incident-response agent that drives a runbook on rails. The procedure is a plain XState machine mounted as an MCP server by Xanthe, and the agent can only take the moves the machine allows. The division of labor:
- the machine owns the procedure (you cannot mitigate before diagnosing, resolve before recovery is verified, or close before a postmortem is written),
- the agent supplies judgment (the hypothesis, the root cause, the mitigation),
- the ledger is the audit trail (every step and every refused step, hash-chained).

A premature resolve is refused by the server, not trusted to the model's judgment, and the
refusal is recorded. By the time the incident is closed, the machine's context is a complete
postmortem, assembled as a side effect of being forced through the right order.
Run it
npm install
Offline (deterministic policy, no API key)
npm start
A scripted policy walks the same gated runbook to resolution and verifies the ledger.
With Claude
npm run agent # or: MODEL=claude-opus-4-8 npm run agent
Uses the Claude Agent SDK, which
authenticates with your existing Claude Code login (no API key). The Xanthe server is
registered as an MCP server, so Claude only ever acts through the gated step / state
tools: it reads state, narrates each move, recovers from refusals, and writes the postmortem.
It is held to the runbook the whole way.
What you see
gate check: resolve before mitigating -> refused (legal here: triage)
driving the runbook:
detected triage -> triaged
triaged page_oncall -> engaged
engaged form_hypothesis -> investigating
...
resolved write_postmortem -> closed
final state: "closed" (terminal: true)
postmortem assembled by being forced through the runbook: { ...severity, rootCause, ... }
ledger: intact (10 entries, including the refused gate check)
The runbook
machine/incident-runbook.ts is plain XState. Edit it, or point the agent at your own
runbook. Xanthe validates it at mount and rejects machines that auto-advance, so it stays a
step-gated procedure the agent drives one decision at a time.
License
Apache-2.0.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.