mcp-server-decisions

Decision tracking with prediction validation and outcome gates for AI agents

Documentation

🧠 MCP Server: Decisions

Python 3.10+ License: MIT Registry GitHub

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
  1. Record a decision β€” Store the problem, chosen solution, alternatives, and technologies
  2. Make predictions β€” Attach testable claims (latency, cost, reliability, etc.)
  3. Implement β€” Build the system
  4. Measure results β€” Capture actual values from monitoring, logs, benchmarks
  5. Validate β€” The server calculates accuracy (0-100) and validation status (SUCCESS / PARTIAL_SUCCESS / FAILED)
  6. Learn β€” Review what worked via the Technology Performance Registry
  7. 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

VariableDescriptionDefault Path
MCP_DECISIONS_LOG_PATHPath to the append-only JSONL log file~/.local/share/mcp-decisions/decisions_log.json

πŸ“š Documentation & Resources

DocumentPurpose
⚑ Quick Start5-minute setup guide & first decision
πŸ”Œ Client IntegrationsSetup configs for Claude, OpenCode, Codex, Antigravity
πŸ“ Architecture & DesignCore design rationale & data models
πŸ’‘ Detailed ExamplesReal JSON-RPC request/response payloads
πŸšͺ Outcome Gate PatternIn-band feedback loop design philosophy
πŸ“– WikiFAQ 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.


Made for AI agents. Built for teams. Learn from every decision.