β‘ Zero External Dependencies β’ Stdlib-only Python β’ Append-only JSONL storage β’ Fully portable
π Key Features
- π― Decision Recording β Capture architectural choices with problem statement, solution, rejected alternatives, and target technologies.
- π Prediction Linking β Attach testable claims (latency, cost, scalability, reliability) tied to decisions.
- β
Outcome Validation β Record measured results and automatically compute accuracy scores (0β100 scale).
- π Technology Performance Registry β Aggregate success rates and confidence metrics per technology over time.
- πͺ Outcome Gate Pattern β In-band nudges inside tool responses prevent decision feedback loops from leaking (3.8% β 14.5% closure rate).
- β‘ Zero Dependencies β Portable append-only JSONL log. No database servers, no migrations, no background daemons.
β‘ Quick Example
1οΈβ£ Record a Decision
record-decision(
problem="Query latency exceeds SLA (p99 > 500ms)",
chosen_solution="DuckDB + Parquet caching",
rejected_alternatives=["Redis", "Elasticsearch"],
technologies=["duckdb", "parquet"],
predictions=[
{"prediction_type": "LATENCY", "predicted_value": "p99 < 200ms"},
{"prediction_type": "COST", "predicted_value": "< $50/month"}
]
)
2οΈβ£ Record an Outcome
record-outcome(
prediction_id="PRD-2026-0001",
actual_value="p99 = 180ms",
measurement_source="MONITORING",
accuracy_score=95
)
3οΈβ£ Query Prior Decisions & Technology Stats
query-decisions(technology="duckdb", max_results=5)
python3 scripts/technology_performance_report.py
π Quick Start & Setup
π¦ Installation
π οΈ Client Configuration
Add to your MCP client configuration (e.g. Claude Desktop, Claude Code, Cursor, OpenCode):
{
"mcpServers": {
"mcp-server-decisions": {
"type": "stdio",
"command": "mcp-server-decisions"
}
}
}
For client-specific setup guides (Claude, OpenCode, Codex, Antigravity), see π docs/INTEGRATIONS.md.
How It Works
The Loop
Decide β Predict β Implement β Measure β Validate β Learn β Next Decision
- Record a decision β Store the problem, chosen solution, alternatives, and technologies
- Make predictions β Attach testable claims (latency, cost, reliability, etc.)
- Implement β Build the system
- Measure results β Capture actual values from monitoring, logs, benchmarks
- Validate β The server calculates accuracy (0-100) and validation status (SUCCESS / PARTIAL_SUCCESS / FAILED)
- Learn β Review what worked via the Technology Performance Registry
- Next decision β Query past decisions before making new recommendations
The Outcome Gate Pattern
Decision loops leak because predictions aren't validated. This server embeds a reminder directly in tool responses:
Without Outcome Gate:
- Decision is made β implementation starts β results come in β nobody checks if prediction was right
With Outcome Gate:
{
"decision_id": "DEC-2026-0001",
"status": "OK",
"OUTCOME_GATE": "β οΈ 2 prediction(s) from this session still lack outcomes: [PRD-2026-0001, PRD-2026-0002]. Record results via record-outcome before ending."
}
The nudge is in-band (inside the tool response), where agents are already looking. Result: 3.8% β 14.5% closure rate improvement (validated on internal tool).
Real Example: After recording a decision with 3 predictions, the response includes:
{
"decision_id": "DEC-2026-0042",
"prediction_ids": ["PRD-2026-0051", "PRD-2026-0052", "PRD-2026-0053"],
"status": "OK",
"OUTCOME_GATE": "β οΈ 3 prediction(s) from this session still lack outcomes: [PRD-2026-0051, PRD-2026-0052, PRD-2026-0053]. Record results via record-outcome before ending."
}
Next query still shows the gate until all 3 outcomes are recorded. Once they are, the gate disappears automatically.
For the full pattern explanation, see docs/OUTCOME-GATE-PATTERN.md.
ποΈ Architecture & Tech Stack
- Storage: Single append-only
JSONL file (no database setup, no migrations, portable & git-friendly).
- IDs: Sequential per calendar year (
DEC-2026-0001, PRD-2026-0002, OUT-2026-0003).
- Accuracy Scoring: Automatic classification (
β₯90 SUCCESS, 50β89 PARTIAL_SUCCESS, <50 FAILED).
- Runtime: Stdlib-only Python 3.10+ (zero external pip runtime dependencies).
- Protocol: Model Context Protocol (JSON-RPC 2.0 over stdio).
βοΈ Environment Variables
| Variable | Description | Default Path |
|---|
MCP_DECISIONS_LOG_PATH | Path to the append-only JSONL log file | ~/.local/share/mcp-decisions/decisions_log.json |
π Documentation & Resources
π§ͺ Development & Testing
Run unit & selftests locally:
python3 server.py --selftest
See π CONTRIBUTING.md to contribute features or fixes.
πΊοΈ Roadmap
π License & Disclaimer
MIT Β© 2026 Roberton003 β See LICENSE.
This project is community-built and independent. It is not affiliated with any organization or standard-setting body.
Made for AI agents. Built for teams. Learn from every decision.