FixDoc | Your agents stop repeating incidents
MCP-Native // Incident Knowledge
Your agents stop
repeating incidents.
FixDoc is a knowledge store your AI agents query over MCP before debugging<br>production. Validated fixes, playbooks, and environment insights go in.<br>Ranked, token-budgeted context comes out.
Get started
View on GitHub
Resolve. Record. Promote.
pipx install fixdoc && fixdoc init
Works with Claude Code, Cursor, and any MCP client. Your knowledge is a git repo of markdown you own. Local mode makes zero network calls.
fixdoc · mcp server
// INSTALL<br>Get started in 60 seconds
Install, connect your agent, index your knowledge.
quick start
Copy
View on GitHub
// HOW IT WORKS<br>Every incident makes the next one shorter
Four MCP tools: search_fixes, record_fix, confirm_fix, get_fix. That is the entire agent surface. Everything else, including validation and deletion, is a human act in your git repo.
01 · A symptom hits
Your agent is mid-debug on a production issue. Before guessing, it calls search_fixes with the symptom.
02 · Validated knowledge returns
Ranked entries with provenance: who validated it, how many incidents it resolved, the file it lives in. get_fix pulls any full entry by ID.
03 · The incident resolves
Minutes instead of an afternoon of rediscovery. The agent calls record_fix with what actually worked.
04 · Quarantine, then review
New entries land in quarantine. Nothing an agent writes is retrievable until a human promotes it with a PR merge. CODEOWNERS scopes who validates what.
05 · The next agent starts smarter
Once promoted, the entry ranks by proof. confirm_fix bumps its occurrence count every time it resolves a real incident. At quarter end you can say: “Fixes in FixDoc resolved 37 repeat incidents.”
// RETRIEVAL<br>Whole answers, ranked by proof
search_fixes returns complete fix bodies inside a token budget. Never a truncated paragraph, never a link the agent cannot follow. Ranking weighs validation status and real resolution counts, not just embedding distance.
search_fixes · response
# search_fixes("pods stuck Pending after nodepool scale-up")
fx-8a41c2 validated occurrences: 3 similarity: 0.91
AKS pods stuck Pending after nodepool scale-up
validated_by: @platform-team · fixes/aks/pods-pending-nodepool-scaleup.md
Root cause: Azure CNI reserves max_pods IPs per node at creation, and the nodepool subnet is exhausted.
1. Confirm remaining IPs: az network vnet subnet show ... --query availableIpAddressCount
2. If near zero, add a subnet or lower max_pods on the new nodepool.
3. Do NOT delete Pending pods first. They reschedule and mask the count.
budget: 1 returned · 7 candidates · 412 / 2000 tokens
Wrong-universe filtering
An identical-sounding Databricks fix never surfaces for an AKS query. Environment metadata filters before similarity ranks.
Trust-weighted ranking
Validated entries with proven occurrence counts outrank fresh quarantine candidates. Similarity alone does not win.
Token budget
Results fit the budget you set. Whole fix bodies or nothing. A half-truncated runbook is worse than no runbook.
// TRUST MODEL<br>It’s your repo. We index it.
Your knowledge base is a git repository of markdown files that you own. FixDoc adds the index, the ranking, and the MCP surface. It never becomes the system of record.
Markdown in git
Every entry is a markdown file in a repo you control. Diff it, grep it, blame it, review it like code. No proprietary format, no export API.
Validation is a PR
Promotion from quarantine is a merge. CODEOWNERS decides who validates what: the database team signs off on Postgres fixes, the platform team on Kubernetes.
Leave with everything
Delete FixDoc and your knowledge is intact and readable. Full git history, plain markdown, zero migration.
Local mode
Index and embeddings are built and queried on your machine. Nothing leaves it. No account required.
// INGESTION<br>Tribal knowledge dies in Slack. Catch it.
The fix for last month’s outage exists. It is in a Slack thread, a closed ticket, or one engineer’s head. FixDoc drains those sources into reviewable entries. Everything imported lands in quarantine, same as agent writes.
Watch any command
fixdoc watch -- terraform apply wraps the command, tees output to your terminal, and captures failures with the error, resource address, and context. When the fix lands, it becomes an entry.
Slack import
fixdoc import slack captures fix threads using emoji reactions: issue emoji on the root message, resolution emoji on the reply that solved it.
Jira and ServiceNow
fixdoc import jira and fixdoc import servicenow turn closed tickets into entries. Close notes become resolutions. Source tags mean re-running never duplicates.
Notion import
fixdoc import notion pulls resolved incident pages. Section-aware extraction finds the Fix or Root Cause heading instead of ingesting...