Skip to main content
Glama
MnemeHQ

Mneme Decision MCP

Official

Mneme HQ

Mneme is an open decision and control layer for agentic software development.

It turns durable engineering decisions into agent context, deterministic enforcement, and inspectable enforcement results across AI coding agents, repositories, and CI workflows. Architecture is the first supported decision domain: Mneme prevents architectural drift by turning architectural decisions and ADRs into deterministic guardrails across coding agents, repository mutations, generated rules, and CI gates.

Tests PyPI Python License: MIT

Where is your architecture actually enforced? Run the Architecture Audit to see which decisions are protected, which can become deterministic guardrails, and which still depend on someone remembering the rules. Try it →

Mneme is the decision layer behind that drift-prevention mechanism. It keeps recorded engineering decisions active as AI coding systems propose and modify code, instead of leaving ADRs as passive documentation.

Where the decision layer sits: engineering intent (ADRs, standards, review policies) flows into the Mneme decision layer, which reaches AI coding agents, editors and the CLI, and GitHub CI, each returning a guide, warn, or block verdict traced to its source decision. Deployment platforms and policy engines are shown dashed as planned.

Solid surfaces ship today; dashed surfaces are planned. Support levels per integration: integrations matrix.

Current phase: Layer 1 validation. Retrieval, enforcement, and benchmark semantics are governed by the accepted architecture and freeze record. See Current Phase before changing core behavior.

What Mneme does

Mneme separates architectural guidance from deterministic enforcement:

  • Records architectural decisions in a structured, auditable decision corpus.

  • Retrieves relevant decisions when an agent or model needs architectural guidance.

  • Enforces governed rules deterministically under explicit applicability semantics.

  • Integrates at the earliest reliable boundary exposed by each coding workflow.

  • Audits bypassable mutation paths where pre-change blocking is not technically available.

  • Runs in CI as a final deterministic gate before incompatible changes are accepted.

The same input and governed decision state produce the same enforcement result. Mneme does not depend on an LLM judge for its core allow/warn/fail decisions.

Mneme is not a general-purpose vector store, conversational memory system, autonomous coding agent, or deployment observability platform.

Related MCP server: mcp-memoria

Install

Requires Python 3.11+.

pip install mneme-hq

Verify the CLI:

mneme --help

For repository development:

git clone https://github.com/MnemeHQ/mneme.git
cd mneme
pip install -e ".[dev]"

Decision MCP

Mneme exposes the Decision Index over a local MCP server so MCP-capable clients can propose candidate architectural decisions and query decision state without gaining authority to change that state.

Install the optional MCP dependency:

pip install "mneme-hq[mcp]"

Start the local stdio server. Canonical reads come from the persisted Decision Index in .mneme/project_memory.json by default; the proposal store remains separate.

mneme decision-mcp

Use --memory to select another project memory file. The file must contain a valid authoritative decision_index section; MCP fails closed rather than reconstructing authority from the compatibility decisions[] snapshot.

mneme decision-mcp --memory path/to/project_memory.json

--adr-dir is now optional validation input only. Mneme still validates and precedence-resolves that corpus before startup, but ADRs do not become a second MCP authority source.

mneme decision-mcp --memory path/to/project_memory.json --adr-dir path/to/adrs

The MCP surface is intentionally frozen to six tools:

  • decision.propose

  • decision.propose_batch

  • decision.get

  • decision.search

  • decision.applicable_to

  • decision.trace

Proposal tools create non-authoritative proposals only. Read tools query proposal and canonical decision state. MCP deliberately exposes no accept, reject, activate, supersede, exception, bypass, or trusted-evidence authority.

Human authority remains explicit through mneme decision proposals | show | accept | reject. Accepting a proposal materializes a canonical decision; it does not activate protection or run the Architecture Audit.

See ADR-027 and the v0.9.0 release notes for the authority boundary and release contract.

Architecture Audit

See where your architecture is actually protected — and where it still depends on people remembering the rules.

Mneme audits your repository and shows which architectural decisions are:

  • Protected — already enforced mechanically

  • Mneme-ready — can be turned into a deterministic guardrail

  • Requires modelling — important, but not yet safe to automate

  • Guidance — useful context, but not something that should be enforced

Run an audit:

mneme audit --memory .mneme/project_memory.json --repo-root .

For a Mneme-ready decision, validate the proposed protection before enabling it:

mneme protect validate <decision-id> --memory .mneme/project_memory.json

Then explicitly activate it:

mneme protect activate <decision-id> --memory .mneme/project_memory.json

Mneme only reports a decision as Protected after it can verify that real enforcement is in place. The full activation contract is documented in Protection Activation.

Try the Architecture Audit →

60-second enforcement example

Initialize a project-local decision corpus:

mneme init

Record one architectural decision:

mneme add_decision \
  --memory .mneme/project_memory.json \
  --id config-format \
  --decision "Use JSON for configuration files" \
  --scope config \
  --constraint "Use JSON only" \
  --anti-pattern "Do not use YAML"

Create a proposed input that violates it:

python -c "import pathlib; pathlib.Path('prompt.txt').write_text('Set up a new YAML config file', encoding='utf-8')"

Run the deterministic check:

mneme check \
  --memory .mneme/project_memory.json \
  --input prompt.txt \
  --query configuration

In strict mode, the prohibited YAML proposal returns a FAIL verdict and exit code 2. A compliant JSON proposal returns PASS and exit code 0.

The CLI is the common enforcement surface. Agent integrations translate their native events into the same Mneme decision and enforcement model.

Setup mode (no enforcement)

mneme setup initializes Mneme in a repository without changing how the team works: it creates or detects project memory, detects supported agent environments, and reports protection readiness — all without enabling any blocking enforcement. Setup never turns warn/observe behavior into blocking behavior; activation of preventive enforcement is always a separate, explicit decision.

mneme setup

Optionally record an opaque Architecture Audit reference so the setup can be attributed back to a saved Audit baseline:

mneme setup --audit-ref <reference>

Setup is idempotent: rerunning it against an existing Mneme project leaves valid configuration untouched.

How it works

Architectural decisions / ADRs
            |
            v
   structured decision corpus
            |
      +-----+--------------------+
      |                          |
      v                          v
relevant guidance       deterministic enforcement
   retrieval             + applicability checks
      |                          |
      +------------+-------------+
                   |
                   v
       workflow-specific boundary
                   |
      +------------+-------------+
      |            |             |
 pre-change     post-change      CI
   hooks          audit          gate

Mneme applies governance at the earliest reliable boundary a workflow exposes:

  1. Before generation when architectural context can be injected into the model call.

  2. Before supported file mutations when an agent exposes a blocking pre-tool hook.

  3. After bypassable mutations through bounded working-tree audits where shell/script writes cannot be inspected safely before execution.

  4. Before merge through CLI-based CI gates.

These boundaries are complementary. An integration only claims the surfaces that have been implemented and validated for that harness.

Retrieval is not enforcement

Decision retrieval answers: which architectural decisions are useful as guidance for this task?

Enforcement answers: does the proposed change violate a governed rule that applies here?

Those concerns are intentionally separated. See ADR-017, ADR-019, and ADR-020.

Supported surfaces

The authoritative support matrix lives in docs/integrations/README.md. The labels below are evidence levels, not interchangeable marketing terms.

Support level

Surface

Native integration

Claude Code

Native integration

Claude Agent SDK

Native integration

Google Antigravity

Native integration

Codex CLI

Native integration

Kiro CLI 3.0 / v3

Validated compatibility

Paperclip — CLI and ACP transports, no adapter required

Rules export

Cursor

CLI-based CI gate

GitHub Actions, GitLab CI

Experimental

OpenCode

Planned

Deep Agents middleware POC

Each integration documents its actual blocking boundary, bypass paths, degraded behavior, and validation evidence. Start with the integration matrix, not assumptions based on another harness.

ADRs and project memory

Mneme can compile architecture decisions into structured governance records rather than treating ADRs as passive prose.

The repository governance source of truth is .mneme/project_memory.json. The ADR import path preserves explicit source provenance where available so typed rules can be inspected and enforced consistently.

See:

Architecture guarantees

Three principles govern the current mechanism:

  • Deterministic > clever. Enforcement behavior must be reproducible.

  • Auditable > autonomous. A verdict should be traceable to the decision, rule, applicability state, and evidence that produced it.

  • Prevention before review. When a reliable pre-change boundary exists, use it; when it does not, surface the limitation and audit later rather than pretending the path is blocked.

The current Layer 1 scope, frozen surfaces, accepted amendments, experimental work, and deferred Layer 2 work are maintained in docs/architecture/current-phase.md.

Do not infer architecture from this README when a linked ADR or architecture document is more specific.

Benchmark and validation

Mneme's benchmark is a regression and integrity instrument for retrieval and enforcement behavior. It is not a general model-quality benchmark.

The benchmark keeps retrieval and enforcement scoring distinct so changes cannot silently improve one surface while regressing another.

See:

Demos

More examples: mnemehq.com/demo

Contributing

Before changing retrieval, enforcement, applicability, conflict handling, or benchmark semantics, read the architecture and ADRs that govern that surface.

Core behavioral changes may require the repository's charter-amendment procedure. Documentation, tooling, integrations, and examples do not automatically authorize changes to frozen behavior.

License

MIT. See LICENSE.

Available Tools

6 tools
decision.applicable_toGet retrieval/context applicabilityA
Read-onlyIdempotent

Return proposals and canonical decisions whose scope hints or context scope overlap the supplied context/paths. This is retrieval/context applicability only: proposal scope hints are NOT typed-rule applicability (ADR-020) and paths are never glob-evaluated. Read only: this tool never mutates any state and returns no rules or enforcement data. When both inputs are omitted or empty, both match lists are empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsNoOptional path strings treated as opaque retrieval context; no glob or typed-rule selector evaluation is performed.
contextNoOptional opaque context strings. A scope hint matches when it is a case-insensitive substring of any supplied context or path.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds meaningful behavioral detail beyond that: the tool 'never mutates any state and returns no rules or enforcement data,' and it specifies the empty-input behavior ('When both inputs are omitted or empty, both match lists are empty'). It also clarifies that paths are not glob-evaluatedable, which is valuable non-obvious behavior.

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?

Three sentences deliver the core purpose, key exclusions, safety behavior, and empty-input edge case with no redundancy. The main function is front-loaded and every sentence earns its place.

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

Completeness5/5

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

For a read-only, two-optional-parameter tool with a rich output schema and complete parameter descriptions, the description fully covers what an agent needs: purpose, safety, exclusions, and boundary behavior. The presence of an output schema means return-value details do not need to be repeated in the 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%, with each parameter already well-described in the schema (paths as opaque retrieval context, context as opaque strings with case-insensitive substring matching). The description adds the empty-input result behavior and reinforces the non-glob semantics, but it does not substantially add parameter-level meaning beyond the schema. 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 states a specific verb and resource: 'Return proposals and canonical decisions whose scope hints or context scope overlap the supplied context/paths.' It clearly differentiates this from typed-rule applicability by explicitly noting it is 'retrieval/context applicability only' and not ADR-020. This distinguishes it from the sibling tools without ambiguity.

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 gives clear context and exclusions: it is for retrieval/context applicability, not typed-rule applicability, and paths are never glob-evaluated. It also clarifies that no rules or enforcement data are returned. However, it does not explicitly name sibling alternatives for when to use them instead, so it lacks the full when-to-use vs alternative guidance.

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

decision.getGet a proposal or canonical decisionA
Read-onlyIdempotent

Read one record by stable id. Returns record_type 'proposal', 'canonical_decision', or 'not_found'. Read only: this tool never mutates any state. Use decision.search when you do not already have a stable id.

ParametersJSON Schema
NameRequiredDescriptionDefault
record_idYesStable proposal id or canonical decision id to retrieve exactly.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this with 'Read only: this tool never mutates any state,' and adds behavioral context by specifying possible return record_type values, including 'not_found'. This goes beyond the annotations without contradicting them.

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?

Three terse, front-loaded sentences cover the core action, return values, read-only behavior, and the key alternative. Every sentence earns its place and no filler exists.

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

Completeness5/5

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

For a simple single-parameter tool with an output schema and comprehensive annotations, the description covers everything an agent needs: what it does, what it returns, that it is safe, and when to use a sibling instead. There are no meaningful gaps.

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% and the single parameter record_id is fully described as 'Stable proposal id or canonical decision id to retrieve exactly.' The description adds little beyond saying 'stable id,' so it does not meaningfully improve on the schema. 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 states a specific verb and resource: 'Read one record by stable id.' It also explicitly lists possible record_type values, which clarifies exactly what the tool returns. This clearly distinguishes it from siblings like decision.search and decision.propose.

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

Usage Guidelines5/5

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

The description gives an explicit usage condition: use this tool when you already have a stable id, and use decision.search when you do not. This directly routes the agent to the correct sibling tool, leaving no ambiguity.

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

decision.proposePropose a decision (non-authoritative)A
Idempotent

Submit one candidate architectural decision. The proposal enters the Mneme decision index as a non-authoritative proposal with status 'proposed'. This grants NO authority: the proposal is never enforceable and can only become canonical through separate Mneme human authority (D2C), which this MCP does not expose. Repeated identical source/version/content submissions are idempotent. Use decision.propose_batch when submitting multiple candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
candidateYesOne candidate with a non-empty title and statement plus source provenance; authoritative fields are rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already include idempotentHint=true and destructiveHint=false, but the description adds substantial non-obvious behavior: the proposal is non-authoritative, has status 'proposed', is never enforceable, and exists only in the index until separate Mneme human authority (D2C) acts. It also reiterates idempotency in a concrete way tied to source/version/content, going beyond the bare annotation.

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

Conciseness4/5

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

The description is front-loaded with the core action and then delivers key caveats in order. It is slightly repetitive ('non-authoritative proposal' vs. 'grants NO authority... never enforceable'), but every sentence earns its place and flows logically.

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

Completeness5/5

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

For a single-parameter tool with complete schema coverage, an output schema, and annotations covering idempotency and non-destructiveness, the description fills the main gaps: authority semantics, status effect, and the batch alternative. Nothing an agent needs to select and invoke it correctly is missing.

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%, and the nested schema already documents provenance, idempotent identity via source_version, and field constraints. The tool description adds no parameter-specific detail beyond restating that a single candidate is submitted; the idempotency note is already reflected in the schema. Baseline 3 applies.

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 states a specific verb ('Submit') and resource ('one candidate architectural decision') and immediately distinguishes itself from the sibling by noting the proposal enters the index as a non-authoritative proposal. It names the batch alternative later, making it easy to tell apart from propose_batch even before reading schemas.

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

Usage Guidelines5/5

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

The description explicitly directs the agent to 'Use decision.propose_batch when submitting multiple candidates,' which is a clear when-to-use vs. alternative condition. It also explains what this tool does NOT do (never enforceable, cannot become canonical via this MCP), preventing off-label use for authoritative decisions.

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

decision.propose_batchPropose decisions in batch (non-authoritative)A
Idempotent

Submit multiple candidate architectural decisions from one producer output. Each candidate receives its own independent proposal identity and enters as a non-authoritative proposal with status 'proposed'. There are no batch acceptance semantics: batch submission grants NO authority, and every proposal remains independently reviewable. Use decision.propose for a single candidate.

ParametersJSON Schema
NameRequiredDescriptionDefault
candidatesYesCandidate decisions to submit independently; output results preserve this input order.
shared_provenanceNoOptional fallback provenance applied to every candidate. Candidate provenance takes precedence, and each candidate must have effective provenance from one or both inputs.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations provide idempotentHint, readOnlyHint, destructiveHint, and openWorldHint, but the description adds meaningful behavioral context beyond those: each candidate gets its own proposal identity, enters with status 'proposed', remains independently reviewable, and batch submission grants no authority. This directly addresses the most likely misconception about batch semantics. No contradiction with annotations exists.

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?

Three sentences with no filler; the core action is front-loaded and the critical caveat about non-authoritative batch semantics is stated clearly. Every sentence adds necessary decision-making information, and the alternative tool is mentioned compactly.

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

Completeness5/5

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

The description, combined with a complete input schema and an output schema, gives an agent everything needed to invoke the tool correctly. It explains the key behavioral contract, distinguishes from the sibling tool, and the schema covers parameters and output ordering. Nothing essential is missing.

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 fully documents candidates and shared_provenance, including provenance precedence. The tool description does not add parameter-level meaning beyond the schema, so the baseline score of 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?

States a specific verb and resource: 'Submit multiple candidate architectural decisions from one producer output.' It also clarifies the key semantic, that each candidate becomes an independent non-authoritative 'proposed' proposal, and distinguishes itself from decision.propose by explicitly directing single-candidate use there. This is a clear, unambiguous purpose that separates it from siblings.

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

Usage Guidelines5/5

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

Explicitly names the alternative decision.propose for a single candidate, giving a clear when/when-not boundary. It also explains the intended context ('from one producer output') and warns that batch submission has no acceptance authority, so an agent knows when this tool is appropriate and when to use the single-proposal sibling instead.

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

decision.searchSearch proposals and canonical decisionsA
Read-onlyIdempotent

Deterministic text/exact-metadata search. Proposals (lifecycle proposed/accepted/rejected) and canonical decisions (lifecycle active/superseded/deprecated/inactive) are returned in separate lists and never merged. Read only: this tool never mutates any state. Search rank has no enforcement meaning. Use decision.get when you already have a stable id. Within each record domain, all applicable filters combine with AND semantics; proposal-only filters do not exclude canonical results, and vice versa.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoCase-insensitive substring matched against supported proposal and canonical text fields. Empty matches all records.
producer_nameNoOptional exact producer-name filter on proposal provenance; does not filter canonical decisions.
proposal_statusNoOptional exact proposal lifecycle filter; applies only to the proposals result list.
source_referenceNoOptional exact source-reference filter on proposal provenance; does not filter canonical decisions.
origin_classificationNoOptional exact origin-classification filter on proposal provenance; does not filter canonical decisions.
canonical_lifecycle_statusNoOptional exact canonical lifecycle filter; applies only to the canonical_decisions result list.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, and the description adds non-redundant behavioral detail: deterministic results, no merging of result domains, no enforcement meaning for search rank, and AND semantics for combined filters. No statement contradicts the annotations.

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 compact, front-loaded with the core search behavior, and every sentence adds actionable information. There is no filler or repetition of the title/schema.

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

Completeness5/5

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

For a multi-domain search tool with six optional filters, the description covers identity, scope, result separation, read-only safety, filter semantics, rank behavior, and routing to the stable-id alternative. The presence of an output schema covers return-structure details that would otherwise be missing.

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

Parameters5/5

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

Schema coverage is 100%, but the description still adds important parameter behavior beyond the schema: 'all applicable filters combine with AND semantics' and 'proposal-only filters do not exclude canonical results, and vice versa.' This materially changes how an agent should interpret the optional filters.

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 names a specific operation (deterministic text/exact-metadata search) over two clearly defined record domains, proposals and canonical decisions, and explicitly notes they are returned in separate lists and never merged. This disambiguates the tool from siblings like decision.get and decision.propose.

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

Usage Guidelines5/5

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

It gives an explicit routing rule: 'Use decision.get when you already have a stable id.' The read-only statement and filter-scoping semantics also imply when this tool is appropriate and clarify what it does not do.

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

decision.traceTrace decision lineageA
Read-onlyIdempotent

Return the deterministic lineage actually known for a proposal id or canonical decision id. The result_type is explicit (proposal_trace / canonical_trace / trace_not_found); unresolved ids stay type-unknown. Read only: this tool never mutates any state. Canonical rule-lineage integrity failures fail closed as protocol errors and are never returned as partial traces. Use decision.get for the record alone; use decision.trace when you need provenance, acceptance, rule, or declared-evidence lineage.

ParametersJSON Schema
NameRequiredDescriptionDefault
record_idYesStable proposal id or canonical decision id whose known lineage should be returned; unknown ids produce trace_not_found.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, which lowers the burden. The description adds valuable non-obvious behavior: unresolved ids 'stay type-unknown' and canonical rule-lineage failures 'fail closed as protocol errors and are never returned as partial traces.' This is behavior an agent could not predict from annotations or schema.

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 compact and front-loaded: the first sentence states the core purpose, the second covers behavioral guarantees and result types, and the third gives usage routing. Every sentence earns its place with no filler or redundant fluff.

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

Completeness5/5

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

With a full output schema, rich annotations, and a single well-documented parameter, the description provides all necessary operational context: when to call, what ids are valid, what failure behavior looks like, and safety guarantees. Nothing needed for correct invocation is missing.

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 baseline is 3. The schema already documents that record_id is a stable proposal id or canonical decision id and that unknown ids produce trace_not_found. The description reinforces this but does not add meaningfully new parameter-level semantics beyond what the schema provides.

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 states a specific verb and resource: 'Return the deterministic lineage actually known for a proposal id or canonical decision id.' It explicitly distinguishes the tool from decision.get by naming it, and clarifies the scope of what is returned (lineage, not the record alone). The result_type detail further removes ambiguity.

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

Usage Guidelines5/5

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

The description gives direct, explicit routing guidance: 'Use decision.get for the record alone; use decision.trace when you need provenance, acceptance, rule, or declared-evidence lineage.' This tells an agent exactly when to choose this tool over a sibling, with no inference required.

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.

  1. 6 tool updatesv0.9.2
    • Changeddecision.applicable_to2 fields changed
      • addedInput schema / properties / context / description
        Added value: +"Optional opaque context strings. A scope hint matches when it is a case-insensitive substring of any supplied context or path."
      • addedInput schema / properties / paths / description
        Added value: +"Optional path strings treated as opaque retrieval context; no glob or typed-rule selector evaluation is performed."
    • Changeddecision.get1 field changed
      • addedInput schema / properties / record_id / description
        Added value: +"Stable proposal id or canonical decision id to retrieve exactly."
    • Changeddecision.propose15 fields changed
      • addedInput schema / $defs / CandidateInput / properties / architecture_context / description
        Added value: +"Optional string key/value context captured with the proposal."
      • addedInput schema / $defs / CandidateInput / properties / provenance / description
        Added value: +"Source provenance for this candidate. Required by decision.propose; in decision.propose_batch it may be omitted when shared_provenance is supplied."
      • addedInput schema / $defs / CandidateInput / properties / rationale / description
        Added value: +"Optional explanation of why the decision is being proposed."
      • addedInput schema / $defs / CandidateInput / properties / related_decision_ids / description
        Added value: +"Optional stable ids of related proposals or canonical decisions."
      • addedInput schema / $defs / CandidateInput / properties / scope_hints / description
        Added value: +"Optional opaque retrieval hints for contexts or paths; these are not typed-rule applicability selectors."
      • addedInput schema / $defs / CandidateInput / properties / statement / description
        Added value: +"Non-empty statement of the architectural decision being proposed."
      • addedInput schema / $defs / CandidateInput / properties / title / description
        Added value: +"Non-empty concise title for the candidate decision."
      • addedInput schema / $defs / SourceProvenanceInput / properties / external_source_id / description
        Added value: +"Optional stable identifier assigned by the source system."
      • addedInput schema / $defs / SourceProvenanceInput / properties / origin_classification / description
        Added value: +"Declared origin of the proposed content."
      • addedInput schema / $defs / SourceProvenanceInput / properties / producer_name / description
        Added value: +"Name of the agent, integration, or system proposing the decision."
      • addedInput schema / $defs / SourceProvenanceInput / properties / producer_type / description
        Added value: +"Type of producer, such as agent, integration, or import."
      • addedInput schema / $defs / SourceProvenanceInput / properties / repository_locator / description
        Added value: +"Optional repository path or locator associated with the source."
      • addedInput schema / $defs / SourceProvenanceInput / properties / source_reference / description
        Added value: +"Human-readable reference to the source output or artifact."
      • addedInput schema / $defs / SourceProvenanceInput / properties / source_version / description
        Added value: +"Optional source revision or version used for idempotent identity."
      • addedInput schema / properties / candidate / description
        Added value: +"One candidate with a non-empty title and statement plus source provenance; authoritative fields are rejected."
    • Changeddecision.propose_batch16 fields changed
      • addedInput schema / $defs / CandidateInput / properties / architecture_context / description
        Added value: +"Optional string key/value context captured with the proposal."
      • addedInput schema / $defs / CandidateInput / properties / provenance / description
        Added value: +"Source provenance for this candidate. Required by decision.propose; in decision.propose_batch it may be omitted when shared_provenance is supplied."
      • addedInput schema / $defs / CandidateInput / properties / rationale / description
        Added value: +"Optional explanation of why the decision is being proposed."
      • addedInput schema / $defs / CandidateInput / properties / related_decision_ids / description
        Added value: +"Optional stable ids of related proposals or canonical decisions."
      • addedInput schema / $defs / CandidateInput / properties / scope_hints / description
        Added value: +"Optional opaque retrieval hints for contexts or paths; these are not typed-rule applicability selectors."
      • addedInput schema / $defs / CandidateInput / properties / statement / description
        Added value: +"Non-empty statement of the architectural decision being proposed."
      • addedInput schema / $defs / CandidateInput / properties / title / description
        Added value: +"Non-empty concise title for the candidate decision."
      • addedInput schema / $defs / SourceProvenanceInput / properties / external_source_id / description
        Added value: +"Optional stable identifier assigned by the source system."
      • addedInput schema / $defs / SourceProvenanceInput / properties / origin_classification / description
        Added value: +"Declared origin of the proposed content."
      • addedInput schema / $defs / SourceProvenanceInput / properties / producer_name / description
        Added value: +"Name of the agent, integration, or system proposing the decision."
      • addedInput schema / $defs / SourceProvenanceInput / properties / producer_type / description
        Added value: +"Type of producer, such as agent, integration, or import."
      • addedInput schema / $defs / SourceProvenanceInput / properties / repository_locator / description
        Added value: +"Optional repository path or locator associated with the source."
      • addedInput schema / $defs / SourceProvenanceInput / properties / source_reference / description
        Added value: +"Human-readable reference to the source output or artifact."
      • addedInput schema / $defs / SourceProvenanceInput / properties / source_version / description
        Added value: +"Optional source revision or version used for idempotent identity."
      • addedInput schema / properties / candidates / description
        Added value: +"Candidate decisions to submit independently; output results preserve this input order."
      • addedInput schema / properties / shared_provenance / description
        Added value: +"Optional fallback provenance applied to every candidate. Candidate provenance takes precedence, and each candidate must have effective provenance from one or both inputs."
    • Changeddecision.search6 fields changed
      • addedInput schema / properties / canonical_lifecycle_status / description
        Added value: +"Optional exact canonical lifecycle filter; applies only to the canonical_decisions result list."
      • addedInput schema / properties / origin_classification / description
        Added value: +"Optional exact origin-classification filter on proposal provenance; does not filter canonical decisions."
      • addedInput schema / properties / producer_name / description
        Added value: +"Optional exact producer-name filter on proposal provenance; does not filter canonical decisions."
      • addedInput schema / properties / proposal_status / description
        Added value: +"Optional exact proposal lifecycle filter; applies only to the proposals result list."
      • addedInput schema / properties / query / description
        Added value: +"Case-insensitive substring matched against supported proposal and canonical text fields. Empty matches all records."
      • addedInput schema / properties / source_reference / description
        Added value: +"Optional exact source-reference filter on proposal provenance; does not filter canonical decisions."
    • Changeddecision.trace1 field changed
      • addedInput schema / properties / record_id / description
        Added value: +"Stable proposal id or canonical decision id whose known lineage should be returned; unknown ids produce trace_not_found."
  2. 6 tool updatesv0.9.1
    • First observeddecision.applicable_to
    • First observeddecision.get
    • First observeddecision.propose
    • First observeddecision.propose_batch
    • First observeddecision.search
    • First observeddecision.trace

TDQS

A4.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct action-resource pair: propose/propose_batch differ only in cardinality and cross-reference each other, while get/search/applicable_to/trace are clearly separated by input type (stable id vs text vs context/path vs provenance). No two tools would be confused for the same operation.

Naming Consistency5/5

All tools share the decision.* namespace and use short, imperative verbs (propose, get, search, trace). The two compound names (propose_batch, applicable_to) use the same underscore convention, so the naming feels systematic and predictable.

Tool Count5/5

Six tools is a tight, purposeful surface for a decision index: two write paths (single/batch), three read/retrieval paths (by id, text search, context overlap), and one provenance trace. Each tool has a distinct role and none feels redundant.

Completeness4/5

The core write-once proposal plus retrieval workflow is well covered, including batch submission and lineage tracing. However, there is no way to update, withdraw, or transition a proposal's status within the MCP; this is explicitly delegated to external human authority, but agents still cannot correct or retire a mistaken proposal.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables trustworthy AI memory operations including authoritative memory creation, hybrid recall with provenance, evidence tracking, and safe dry-run-first forget and rebuild operations through a stateless MCP endpoint.
    2
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to read and update a repository's decision ledger, check which files a decision governs, find stale files after a decision reversal, and record or reverse decisions over MCP.
    511 npm
    Apache 2.0