mcp-server-decisions
Decision tracking with prediction validation and outcome gates for AI agents
Documentation
π§ MCP Server: Decisions
Architectural decision tracking with prediction validation and outcome gates.
Record choices, state testable predictions, measure outcomes, and close the feedback loop for AI agents & teams.
β‘ 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
# Agent or user records a choice:
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"}
]
)
# β Returns: DEC-2026-0001, PRD-2026-0001, PRD-2026-0002
2οΈβ£ Record an Outcome
record-outcome(
prediction_id="PRD-2026-0001",
actual_value="p99 = 180ms",
measurement_source="MONITORING",
accuracy_score=95
)
# β Returns: SUCCESS β
(95% accuracy)
3οΈβ£ Query Prior Decisions & Technology Stats
# Search past decisions before choosing a technology:
query-decisions(technology="duckdb", max_results=5)
# View aggregated technology performance:
python3 scripts/technology_performance_report.py
# β Output:
# technology: duckdb | successful: 12 | failed: 1 | avg_accuracy: 91.2% | confidence: HIGH
π Quick Start & Setup
π¦ Installation
# From PyPI (once published) or local editable install:
pip install -e .
π οΈ 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
JSONLfile (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 (
β₯90SUCCESS,50β89PARTIAL_SUCCESS,<50FAILED). - 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
| Document | Purpose |
|---|---|
| β‘ Quick Start | 5-minute setup guide & first decision |
| π Client Integrations | Setup configs for Claude, OpenCode, Codex, Antigravity |
| π Architecture & Design | Core design rationale & data models |
| π‘ Detailed Examples | Real JSON-RPC request/response payloads |
| πͺ Outcome Gate Pattern | In-band feedback loop design philosophy |
| π Wiki | FAQ and advanced topics |
π§ͺ Development & Testing
Run unit & selftests locally:
python3 server.py --selftest
# β β
All self-tests passed
See π CONTRIBUTING.md to contribute features or fixes.
πΊοΈ Roadmap
- Core decision / prediction / outcome tracking
- Outcome Gate in-band nudges
- Technology Performance Registry
- Web UI for browsing & searching decisions
- Webhooks / notifications on low prediction accuracy
- Pre-built decision templates & domain patterns
π 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.