Skip to main content
Glama

🧠 MCP Server: Decisions

An open-source MCP server that helps teams record architectural decisions, connect them to testable predictions, and validate outcomes over time. It gives AI agents and developers a lightweight, auditable memory for technical choices.

Python 3.10+ MCP License: MIT PyPI Glama

Architectural Decision Feedback Loop with Outcome Gates

✨ Project Highlights

  • Outcome-linked decisions — connect each technical choice to measurable predictions and observed results.

  • In-band outcome gates — tool responses identify predictions that still need validation before the work is considered complete.

  • Portable storage — append-only JSONL keeps the log inspectable, easy to back up, and free from database setup.

  • Zero runtime dependencies — Python's standard library is enough to run the server.

  • MCP-native interface — expose decision tracking through JSON-RPC over stdio to MCP-compatible clients.

  • Technology feedback — aggregate validated outcomes to inform future technology choices.

Related MCP server: Axiom-hub

🧰 Technical Stack

Layer

Technology

Protocol

Model Context Protocol over JSON-RPC 2.0

Runtime

Python 3.10+

Storage

Append-only JSONL file

Packaging

PyPI / Hatchling

Testing

Built-in self-test command

License

MIT

šŸ”„ Architecture

flowchart TD
    A[MCP client or AI agent] --> B[JSON-RPC over stdio]
    B --> C[mcp-server-decisions]
    C --> D[Record decision]
    C --> E[Attach prediction]
    C --> F[Record outcome]
    C --> G[Query decisions and technology history]
    D --> H[(Append-only JSONL log)]
    E --> H
    F --> H
    G --> H
    F --> I[Validation status and accuracy]
    I --> J[Future technical decisions]

šŸ“Œ What It Provides

The server exposes four tools:

Tool

Purpose

record-decision

Store the problem, chosen solution, alternatives, technologies, and predictions.

record-prediction

Add a measurable prediction to an existing decision.

record-outcome

Record the observed result and classify the prediction as success, partial success, or failure.

query-decisions

Search decisions by keyword, technology, domain, or result limit.

Example flow

Decide → Predict → Implement → Measure → Validate → Learn

A decision can produce an outcome-gate reminder such as:

{
  "decision_id": "DEC-2026-0001",
  "status": "OK",
  "OUTCOME_GATE": "2 prediction(s) still lack outcomes."
}

The reminder is a workflow signal, not a claim about adoption or measured impact. See the Outcome Gate Pattern for the design and trade-offs.

šŸ“Š Current Project Status

Area

Status

Decision, prediction, and outcome tracking

Available

Outcome-gate reminders

Available

Technology performance report

Available

PyPI package

Published as 1.0.2

External adoption metrics

Not collected yet

Web UI and notifications

Roadmap

The project is early-stage. Contributions, examples from real projects, and feedback are welcome.

šŸš€ Setup

Prerequisites

  • Python 3.10 or newer

  • An MCP-compatible client

Install from PyPI

python3 -m pip install mcp-server-decisions

Run the self-test

python3 -m pip install -e .
python3 server.py --selftest

Configure an MCP client

{
  "mcpServers": {
    "mcp-server-decisions": {
      "command": "mcp-server-decisions"
    }
  }
}

For client-specific configuration and troubleshooting, see Client Integrations. For a guided first run, see Quick Start.

Configure the log path

By default, the server writes to ~/.local/share/mcp-decisions/decisions_log.json. Set MCP_DECISIONS_LOG_PATH to use another file:

MCP_DECISIONS_LOG_PATH=/path/to/decisions.json mcp-server-decisions

šŸ—‚ļø Project Structure

.
ā”œā”€ā”€ server.py                         # MCP server and tool implementations
ā”œā”€ā”€ scripts/                          # Reports derived from the decision log
ā”œā”€ā”€ docs/                             # Architecture, examples, and integrations
ā”œā”€ā”€ .github/ISSUE_TEMPLATE/           # Reusable bug and feature templates
ā”œā”€ā”€ CONTRIBUTING.md                   # Development and contribution workflow
ā”œā”€ā”€ QUICKSTART.md                     # Guided setup and first decision
ā”œā”€ā”€ server.json                       # MCP Registry metadata
ā”œā”€ā”€ pyproject.toml                    # PyPI package metadata
└── LICENSE                           # MIT license

šŸ“š Documentation

šŸ›£ļø Roadmap

  • Core decision, prediction, and outcome tracking

  • Outcome-gate reminders

  • Technology performance reporting

  • Web UI for browsing and searching decisions

  • Notifications for low prediction accuracy

  • Reusable decision templates and domain patterns

šŸ¤ Contributing

Issues and pull requests are welcome. Start with CONTRIBUTING.md, run the self-test, and explain the problem or use case in the pull request.

šŸ“„ License

MIT Ā© 2026 Roberto Nascimento

Available Tools

4 tools
query-decisionsA

Search prior decisions by keyword, technology, or domain

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoPartial domain filter
keywordNoSearch in problem + solution + alternatives (case-insensitive)
technologyNoExact technology filter (e.g., 'duckdb')
max_resultsNoMaximum results to return

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It only states 'search' without disclosing behavioral traits like read-only, pagination, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with zero waste, efficiently conveying the tool's purpose and core dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 4 parameters and no output schema, the description lacks details about return format, filter interaction, or sorting. More context is needed for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already fully describes each parameter. The description adds no additional semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'search' and the resource 'prior decisions', listing the search dimensions (keyword, technology, domain). This distinguishes it from sibling tools that record decisions, predictions, and outcomes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for searching past decisions, contrasting with recording siblings. However, it does not explicitly state when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record-decisionB

Register a technical decision with problem, solution, alternatives, and technologies

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoTechnical domain (e.g., 'data-engineering', 'backend', 'ai')
statusNoDecision statusACTIVE
adr_refNoReference to an associated ADR, if any (e.g., 'docs/adr/adr-012-duckdb.md')
problemYesThe problem or technical opportunity identified
predictionsNoInitial predictions known at decision time (optional)
technologiesYesTechnologies involved in this decision (e.g., ['duckdb', 'parquet'])
chosen_solutionYesThe solution that was chosen
rejected_alternativesYesAlternatives considered and rejected

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must carry the full burden. It states 'Register' (implying creation) but does not disclose side effects (e.g., whether it overwrites, requires special permissions, or has constraints). A mutation tool with no annotation coverage should offer more behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, front-loaded with the verb 'Register', and covers the essential aspects efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no output schema, and no annotations, the description is too brief. It doesn't explain return values, behavior on conflicts, prerequisites, or post-conditions. The tool's complexity merits a more comprehensive description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description lists only four of eight parameters (problem, solution, alternatives, technologies) but adds no new meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Register' and noun 'technical decision', and lists key components (problem, solution, alternatives, technologies), clearly distinguishing it from query-decisions (retrieval) and record-prediction/outcome (related but different actions).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (when registering a decision) but provides no explicit guidance on when not to use, nor mentions sibling tools like query-decisions as alternatives for retrieval. Usage context is implied but not clarified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record-outcomeA

Close the prediction loop: record actual results and calculate accuracy

ParametersJSON Schema
NameRequiredDescriptionDefault
actual_valueYesObserved result (e.g., 'latency p99 = 180ms')
prediction_idYesPrediction ID (e.g., 'PRD-2026-0001')
accuracy_scoreYesAccuracy of prediction (0-100). >=90 excellent, 50-89 acceptable, <50 failed
measurement_sourceYesWhere the measurement came from

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry full burden. It only mentions recording and calculating accuracy, but does not disclose side effects (e.g., whether a new record is created or existing data updated), required permissions, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the tool's purpose without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 required parameters and no output schema or annotations, the description is minimal. It does not explain how accuracy is calculated, what the output structure is, or how the outcome record integrates with other tools, leaving gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond the schema, earning a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (record actual results and calculate accuracy) and resource (prediction loop). It distinguishes from sibling tools (record-decision, record-prediction) by focusing on closing the loop with outcomes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it is used after making a prediction, but does not explicitly state when to use it versus alternatives, nor provides exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record-predictionA

Register a measurable prediction linked to a decision

ParametersJSON Schema
NameRequiredDescriptionDefault
decision_idYesDecision ID (e.g., 'DEC-2026-0001')
predicted_valueYesExpected result (e.g., 'latency p99 < 200ms', 'cost < $100/month')
prediction_typeYesType of prediction

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It does not disclose behavioral traits such as idempotency, authorization needs, side effects, or what happens on duplicate entries. The minimal description adds little beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It is front-loaded and communicates the essential purpose immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter tool with no output schema or annotations, the description is adequate but not rich. It does not explain what happens on success, whether updates are allowed, or any constraints related to the decision ID.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds context ('measurable', 'linked') but does not provide additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Register a measurable prediction linked to a decision', using a specific verb and resource. It distinguishes from sibling tools like 'record-decision' and 'record-outcome' by focusing on predictions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives, but the sibling names imply it's for predictions. Usage context is implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv1.0.2
    • First observedquery-decisions
    • First observedrecord-decision
    • First observedrecord-outcome
    • First observedrecord-prediction

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: querying decisions, recording a decision, recording a prediction for that decision, and recording the outcome. There is no overlap or ambiguity.

Naming Consistency5/5

All tool names follow the same pattern: a verb followed by a noun, using lowercase and hyphens (e.g., record-decision). The naming is perfectly consistent.

Tool Count5/5

Four tools cover the core workflow of managing decisions with predictions and outcomes. The count is appropriate for this focused domain, not too few or too many.

Completeness4/5

The tool set covers the main lifecycle: querying, recording decisions, adding predictions, and logging outcomes. Missing update or delete functionality, but the core workflow is complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An LLM-native decision tracking system that captures unexpected engineering outcomes as 'pressure events' to build a persistent learning foundation. It enables AI assistants to manage cases, log surprises, and promote recurring insights into global or project-specific knowledge bases.
    11
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Auto-captures decision context from multi-agent workflows to preserve the 'why' behind every choice. Enables task traceability, reasoning retrieval, and continuous improvement across planning and implementation sessions.
    17
    23
    6
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    The decision system for agentic engineering: keeps your project's decisions, rationale, and rejected paths in plain files and surfaces them to AI coding agents before they plan or change code.
    10
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Roberton003/mcp-server-decisions'

If you have feedback or need assistance with the MCP directory API, please join our Discord server