Skip to main content
Glama
ottonic

Review MCP Server

by ottonic

Ottorev — Review MCP Server

The memory an engineering assistant needs. This local stdio MCP server records names, notes, tags, and decisions against an exact CAD revision in SQLite, so an assistant can pick up where it left off — remember that a face is the mating surface, that a tolerance callout is tight, or that a review concluded hold with the requirements behind it.

It never opens the CAD file: it stores the revision the caller supplies and compares it on recall, so it works on a laptop with no CAD software and no other server running.

Quick start

Requires Node.js 24+ and npm. From this repository:

npm install
npm run build
REVIEW_MCP_DB_PATH=/absolute/path/to/review.db npm start

For any MCP client:

{
  "mcpServers": {
    "review": {
      "command": "node",
      "args": ["/absolute/path/to/review-mcp-server/dist/src/index.js"],
      "env": { "REVIEW_MCP_DB_PATH": "/absolute/path/to/review.db" }
    }
  }
}

REVIEW_MCP_DB_PATH defaults to ./review-mcp.db; parent directories are created automatically. Records persist across restarts — protect and back up the database as application data.

Related MCP server: engineering-mcp

Tools

Tool

Behavior

remember

Save a named feature (re-remember replaces) or an anonymous note (re-remember appends) against an entity set, with tags. Returns replaced so a caller can tell which happened.

recall

Retrieve by artifact, entity, free text, or tags; marks each record stale against a supplied current revision. Follow pagination for complete retrieval.

remember_decision

Save the disposition reached about a revision and its basis — one row per requirement-check, naming the source, the evidence, the state, and the engineer's verdict. Re-remembering the same subject replaces it.

recall_decisions

Return decisions newest-first, each marked stale when it belongs to another revision. An entity_id filter matches only the supplied revision.

forget

Delete a named feature, an anonymous note by entity, or a decision by subject. Idempotent.

Results provide structured content and text; tool failures set MCP isError. Writes change local records; the client controls when to request those mutations. The server also advertises engineering-review prompts that compose with a geometry server, while the core record operations run on their own.

Artifact and subject semantics

An input artifact contains revision (sha256: plus 64 lowercase hex digits), format: "step", and optional URI and units:

{
  "revision": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
  "uri": "file:///work/part.step",
  "format": "step",
  "units": "mm"
}

Supply the actual revision from the producer; the example digest is illustrative. A URI groups records by locator; without a URI, the revision is the lookup key.

uri accepts either a URI or a plain filesystem path, because a path is what a caller usually has in hand:

{ "uri": "/work/part.step" }

Both spellings address the same records: a path is normalised to a file: URI before anything is stored or matched. A relative path resolves against the server working directory. Normalisation never opens the file, so a record can be written for an artifact this server cannot read.

An entity filter is revision-scoped; a text or tag filter is not. An entity ID denotes different geometry in a different revision, so recall and recall_decisions match an entity_id only against records written for the supplied revision, and match it exactly — face:3 does not match face:30. Names, notes, subjects, and tags are matched across revisions, which is how an earlier record is found at all, and every result says whether it is stale.

Each returned record contains one artifact reference, its entity IDs, and the ID scheme. The entity IDs are opaque outside that scheme and revision.

Decision records

A review names or annotates geometry. A decision is the other thing a review produces: a disposition about a revision, and the basis it rests on.

One basis item is one requirement-check, and it answers for itself:

field

what it carries

requirement

what has to hold, stated so it can be checked

source

where the requirement came from: model-pmi, drawing, shop-spec, supplier-cert, standard, prior-decision, engineer-stated, or assistant-proposed

sourceDetail

the clause, note number, or document a reader can follow

evidence

the value as it was reported, quoted with its provenance

state

satisfied, violated, unresolved, conflicting, or not-applicable

question

required for unresolved and conflicting: what would settle it

faces

the geometry the item is about, in this revision; always present, empty when the item is about the part

verdict

the engineer's accepted / rejected judgement, with a reason when they gave one

unresolved and conflicting are first-class outcomes: a decision that carries them is a complete record of where the work stands, not a failure to decide. A basis item is refused when it cannot answer for itself — no source, or a state of unresolved/conflicting with no question.

Three properties matter more than the shape:

  • A decision is bound to a revision. The revision is part of its key, so the same subject at the same revision is recalled rather than reached again, and a decision made against a different revision comes back marked stale: true, still carrying the revision it belongs to.

  • Face IDs do not travel between revisions. Topological naming is unsolved in OCCT, and this API does not pretend otherwise: an entity_id filter matches only the revision that produced the ID.

  • Verdicts are what make a requirement agreed. Recording a verdict turns a line the assistant proposed into one the engineer accepted or rejected — the record of how much authority the assistant actually earned.

A stored decision is the caller's own account: the requirement as stated and the evidence as quoted. This server never measures anything, so a recalled decision is a record of what was concluded, not a measurement cache — Geometry remains the authority for numbers.

Limits

Review stores authored context: names, notes, and tags bound to an artifact revision, and decisions with the requirements they rest on. It does not store verified measurements, a complete immutable audit history, or authoritative approval records, and it does not compute geometry, run simulation, or decide manufacturability. Staleness is judged from a revision the caller supplies; Review never opens the CAD file.

There are no schema migrations: the database is a working file, and a changed table shape means deleting it. The server reports the version mismatch rather than guessing at a transformation.

Development

Requires Node.js 24+ and just. A Nix flake and .envrc provide the toolchain; run direnv allow after changing either.

Recipe

Purpose

just setup

Install dependencies.

just dev

Run TypeScript over stdio.

just build

Compile into dist/.

just test

Run unit tests.

just lint

Run oxlint.

just fmt

Rewrite formatting with Prettier.

just fmt-check

Verify formatting.

just typecheck

Run tsc --noEmit.

just check

fmt-check + lint + typecheck + test.

just clean

Remove compiled output, retaining the database.

Server logs go to stderr as newline-delimited pino JSON. MCP_LOG_LEVEL (debug|info|warn|error), MCP_LOG_FORMAT=human, and MCP_TRACE_ID tune them; secret-like fields are redacted.

Packaging

npm pack builds first and includes compiled runtime code, package metadata, and this README. Tests and source maps are excluded. Install the tarball to check the review-mcp executable with a compatible MCP client. The server serves both protocol eras: the 2025-11-25 handshake that stock MCP hosts negotiate, and the 2026-07-28 envelope through server/discover.

License

MIT. Third-party notices: THIRD_PARTY_NOTICES.md.

Available Tools

5 tools
forgetForget a ReviewB
Destructive

Delete a saved record. Pass the feature name to remove a named feature, an entity id to remove the anonymous notes attached to that entity, or a subject to remove a decision. Idempotent. Use only when the user explicitly asks to remove it.

NameRequiredDescriptionDefault
nameNoFeature name to remove (when a named feature).
subjectNoSubject of the decision to remove (when forgetting a decision).
artifactYes
entity_idNoEntity whose anonymous notes to remove (when not named).

Output Schema

NameRequiredDescription
nameNo
deletedYes
subjectNo
entity_idNo

TDQS

B3.3/5.0
Behavior1/5

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

The description asserts 'Idempotent.' while annotations declare idempotentHint=false — a direct, machine-visible contradiction on the one trait that determines whether a retry is safe. It also leaves out what a delete actually does to dependent state (the schema hints that recall compares revisions to mark records stale, but the description never says forgetting invalidates anchors). With destructiveHint=true and openWorldHint=true already in structured data, the description needed to add caution, not contradict it.

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?

Three sentences: action, the routing rule, then the safety gate — a sensible front-loaded order with no filler. The only wasted sentence is the false idempotency claim, which costs clarity rather than length.

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?

An output schema exists, so return values needn't be described, and annotations carry the destructive/open-world profile. But the description never mentions the required `artifact` (revision + format) that every invocation must supply, and its misleading idempotency claim leaves an agent unable to decide whether a retry is safe — a material gap for a destructive mutation.

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

Parameters4/5

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

This is where the description earns its keep: it explains the routing logic between `name` (named feature), `entity_id` (anonymous notes) and `subject` (decision), which the flat schema states only in passing and never as a choice hierarchy. Schema coverage is already 75%, so the baseline is 3; the explicit either/or mapping lifts it. It omits that `artifact` is required regardless of which of the other three you pass.

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

Purpose4/5

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

The opening verb-phrase 'Delete a saved record' is then made specific by enumerating the three removal targets (named feature, entity's anonymous notes, decision), each mapped to a different argument. Siblings (remember/recall/remember_decision) are clearly a different operation class, so the tool is easily distinguished. It stops short of 5 because the mandatory `artifact` anchor — needed on every call — is never mentioned.

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?

'Use only when the user explicitly asks to remove it' gives a real gating condition rather than generic context, which for a destructive tool is the most important guidance. No alternative is named (e.g. 'use remember to overwrite instead of forgetting first'), so an agent must infer whether an update path exists.

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

recallRecall ReviewsA
Read-onlyIdempotent

Retrieve saved reviews for a STEP file, optionally filtered by an entity, free-text search, or tags. Pass the current ArtifactRef from Geometry inspect; its revision is used to mark each returned record stale or current. Each record returns one artifact reference, its entity IDs and the ID scheme; use these together when handing an annotation to another tool. An entity filter matches only reviews written against the supplied revision, because a face ID denotes different geometry in a different revision; text and tag filters are not scoped that way. Use early in a conversation to restore persistent context about a part. Uses the supplied artifact revision to mark saved records stale; it does not open the artifact or require shared filesystem access.

NameRequiredDescriptionDefault
tagsNoOnly return reviews carrying all these tags (without '#').
limitNoMax reviews. Default 100.
offsetNoSkip N reviews for pagination.
searchNoFree-text match across feature names and note bodies (case-insensitive).
artifactYes
entity_idNoIf set, only return reviews that include this entity (e.g. 'face:2' or a component-scoped 'component:wheel-axle/face:0').

Output Schema

NameRequiredDescription
reviewsYes
current_revisionNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive behaviour, yet the description still adds substantial context: it does not open the artifact, requires no shared filesystem access, and explains that the supplied revision drives per-record stale/current marking. The scoping note that an entity filter is revision-bound while text and tag filters are not is exactly the kind of non-obvious behaviour an agent could not infer from 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.

Conciseness4/5

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

Purpose and required input are front-loaded in the first two sentences, and each subsequent sentence adds a distinct behavioural fact rather than restating the schema. It is on the dense side at five sentences, but almost nothing is filler.

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 an output schema present, the description need not enumerate return values, and it still sketches the record shape (artifact reference, entity IDs, ID scheme). For a six-parameter tool with a nested ArtifactRef, all the information needed to call it correctly and interpret staleness is present.

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

Parameters4/5

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

Schema coverage is high (83%), which sets the baseline at 3, but the description earns more: it tells the agent to pass the ArtifactRef from Geometry inspect, explains why revision matters for staleness, and clarifies the asymmetric matching semantics of entity_id vs search/tags. Only the limit/offset pagination behaviour is left entirely to the schema.

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

Purpose4/5

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

The description opens with a specific verb+resource ("Retrieve saved reviews for a STEP file") and enumerates the three optional filter modes, so the operation is unambiguous. It does not, however, distinguish itself from the sibling recall_decisions, which an agent could easily confuse with a review-recall tool.

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?

"Use early in a conversation to restore persistent context about a part" gives a clear positive usage context, and it explains the hand-off pattern ("use these together when handing an annotation to another tool"). It offers no explicit exclusions or pointers to remember/forget/recall_decisions as alternatives, so it stops short of full routing guidance.

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

recall_decisionsRecall DecisionsA
Read-onlyIdempotent

Retrieve decisions saved for an artifact, newest first, each marked stale when it was made against a different revision than the one supplied. Pass the current ArtifactRef from Geometry inspect. Filter by subject text, status, or an entity that appears in the basis. An entity filter matches only decisions made against the supplied revision, because a face ID is scoped to the revision that produced it: a decision about face:3 in an older revision is not a decision about face:3 now. Use this when a revision reappears, to recover what was already concluded instead of reaching it again.

NameRequiredDescriptionDefault
limitNoMax decisions. Default 100.
offsetNoSkip N decisions for pagination.
statusNoOnly decisions in this state.
subjectNoOnly decisions whose subject contains this text, case-insensitive.
artifactYes
entity_idNoOnly decisions whose basis names this face, within the supplied revision. A face ID from another revision denotes different geometry, so it is not matched.

Output Schema

NameRequiredDescription
decisionsYes
current_revisionNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description goes further with behavior they cannot express: results come back newest-first, records are marked stale when made against a different revision, and an entity filter silently narrows to the supplied revision because face IDs are revision-scoped. That last point is a non-obvious filtering behavior an agent would otherwise get wrong.

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?

Ordering and staleness semantics are front-loaded, and the usage sentence is placed last as a decision cue. The revision-scoping sentence is dense and could be tightened, but every sentence carries information not available in the schema.

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

Completeness4/5

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

An output schema exists, so return shape needn't be described, and pagination is handled in the schema. The description covers ordering, staleness, and filter semantics, which is what an agent needs; only edge behavior on empty results is unaddressed, a minor gap for a 6-param read tool.

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

Parameters4/5

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

Schema coverage is 83% so the baseline is 3, but the description adds genuine meaning: the `artifact` argument must be the current ArtifactRef from inspect, and the entity/revision interaction is explained with a worked rationale ("a decision about face:3 in an older revision is not a decision about face:3 now"). It also summarizes the subject/status/entity filter axes, going beyond the per-parameter schema text.

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

Purpose4/5

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

Opens with a specific verb+resource and adds real scope: decisions for an artifact, newest first, each flagged stale relative to the supplied revision. It stops short of differentiating itself from the sibling `recall` tool, so an agent must infer which of the two to call.

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?

"Use this when a revision reappears, to recover what was already concluded instead of reaching it again" gives a concrete triggering condition, and "Pass the current ArtifactRef from Geometry inspect" states a prerequisite. It never names `recall` as the alternative or gives an explicit when-not, so routing between the two recall tools remains inferred.

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

rememberRemember a ReviewA

Save a durable review about geometry: a semantic feature (give it a name, e.g. 'mounting holes') or a plain note (no name). Re-remembering a named feature REPLACES it (use this to correct the AI). Re-remembering the same entities without a name APPENDS facts. The more you save, the more the system understands the part across sessions.

NameRequiredDescriptionDefault
nameNoOptional feature name (a semantic, reusable label). Provide it when this is a named group like 'mounting holes' or 'bottom face'; omit for a plain note.
noteNoProse about the geometry. What does it do, what did we decide, what should we remember?
tagsNoSearchable tags (without '#'), e.g. ['holes','mount'].
artifactYes
entitiesYesGeometry this review refers to, e.g. ['face:26','face:27'] or component-scoped ['component:wheel-axle/face:0']. IDs come from a Geometry find_entities result.
entity_id_schemeYesID scheme the entity IDs come from, as reported by the producer, e.g. 'occt-topology-v1' for Geometry. IDs are meaningless across schemes.

Output Schema

NameRequiredDescription
reviewYes
replacedYesTrue when this overwrote a record that already existed at this key.

TDQS

A4/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: a named re-save REPLACES the prior record while an unnamed re-save APPENDS. That replacement semantics is exactly the kind of nuance the annotations don't convey (destructiveHint=false would not warn an agent that a named write overwrites), and it is consistent with idempotentHint=false.

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?

Front-loads what is saved and immediately follows with the replace/append contrast, which is the decision-critical fact. The closing line ('The more you save, the more the system understands...') is motivational filler rather than operational detail and could be dropped.

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

Completeness4/5

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

With an output schema, full annotations, and 83% param coverage, the description carries only the semantic load and mostly does: write mode, replacement vs append, and the correction use case. The one gap is no stated relationship to recall/remember_decision, which matters given four siblings.

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

Parameters4/5

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

Schema coverage is already high at 83%, so the baseline is 3, but the description still adds meaning: name toggles the feature-vs-note mode and its re-save behavior, and 'the same entities' ties the append rule to the entities parameter. It does not add anything for artifact/entity_id_scheme, but those are well documented in the schema.

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

Purpose4/5

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

States a concrete verb+resource ('Save a durable review about geometry') and partitions the input space into named feature vs plain note. It is clear what the tool does, but it never distinguishes itself from the closest sibling, remember_decision, leaving the agent to infer which save tool applies.

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?

Gives usable when-to guidance: supply a name for reusable semantic groups like 'mounting holes', omit it for a plain note, and use re-remembering to correct the AI. It stops short of naming alternatives (recall, remember_decision) or exclusions, so the routing is implied rather than explicit.

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

remember_decisionRemember a DecisionA

Save the disposition reached about an artifact revision, with the basis it rests on: a list of requirement-checks, each saying where its requirement came from and what happened when it was checked. Re-remembering the same subject on the same artifact revision REPLACES that decision, which is how a decision is revised as the engineer answers questions or disagrees with a line. A different subject starts a separate decision, because one part can carry several at once. Record each engineer verdict when they have given one: a requirement the engineer accepted is a different thing from one that was proposed. Store each requirement as stated and each piece of evidence as it was reported. This server never opens or measures the artifact, so recall returns what was concluded, not a measurement — Geometry remains the authority for numbers.

NameRequiredDescriptionDefault
basisYesThe requirement-checks the recommendation rests on.
statusNoSet 'confirmed' only once the engineer has accepted the disposition itself.proposed
subjectYesWhat is being decided, in the engineer's words. Part of the record key: reuse the same subject to revise this decision, or a new subject starts a separate one.
artifactYes
confidenceYesHow much weight the evidence carries.
supersedesNoRevision whose decision for this subject this one replaces, when a part was revised.
recommendationYesThe disposition, stated as a decision rather than a summary of the conversation.

Output Schema

NameRequiredDescription
decisionYes
replacedYesTrue when this revised a decision that already existed at this subject.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond annotations: it explains the replace-on-same-key semantics (consistent with idempotentHint=false), that decisions are keyed by subject+revision, that the server never opens/measures the artifact so stored evidence is reported, not measured, and that Geometry remains the numeric authority. No contradiction with readOnlyHint=false/openWorldHint=true.

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?

Reasonably front-loaded — the save action and replace semantics come first — and most sentences carry distinct information (keying, verdicts, fidelity of storage, measurement disclaimer). It is on the long side and the fidelity/authority points could be tighter, but nothing is filler.

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 7-param nested mutation tool with an output schema, the description covers the semantics an agent can't get from fields alone: the replace rule, key composition, verdict recording, and the fact that evidence is reported rather than measured. Field-level details (source enums, unresolved/conflicting states, revision pattern) are already in the schema.

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

Parameters4/5

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

Schema coverage is 86% so the baseline is 3, but the description adds real meaning: the subject is part of the record key and controls replace-vs-new, and a verdict is what turns a proposed requirement into an agreed one. It does not explain supersedes vs. the implicit replace, leaving one gap.

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?

Opens with a specific verb+resource: 'Save the disposition reached about an artifact revision, with the basis it rests on' and then defines the basis structure. It also implicitly distinguishes itself from the read-side sibling by noting 'recall returns what was concluded, not a measurement', so an agent can tell it apart from recall/recall_decisions.

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?

Gives concrete when-to-use rules: re-remembering the same subject on the same revision replaces the decision (revision path), a different subject starts a separate decision, record engineer verdicts when given, store requirements/evidence as stated. It doesn't give an explicit 'do not use this when...' exclusion or name a write alternative, but the context is clear.

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. 5 tool updatesv0.1.0
    • First observedforget
    • First observedrecall
    • First observedrecall_decisions
    • First observedremember
    • First observedremember_decision

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

The set is organized as two parallel pairs: recall/remember operate on reviews (features and notes), while recall_decisions/remember_decision operate on decisions with requirement-checks as a basis. Descriptions make the boundary explicit, though the near-identical verb stems mean an agent skimming names could still pick recall when it wants recall_decisions. forget is the only tool spanning both domains, but its description clarifies how to target features, entity notes, or decision subjects.

Naming Consistency4/5

Names are all lowercase snake_case with verb-first construction, and the pattern is readable: base verbs (recall, remember, forget) for reviews, and the same verbs plus a _decision(s) suffix for decisions. Minor deviation: singular remember_decision paired with plural recall_decisions breaks the symmetry, and forget has no _decision counterpart despite handling decisions.

Tool Count5/5

Five tools is tightly scoped to a persistent-memory server: two write paths, two read paths, and one delete. Each tool earns its place and there is no redundancy. Nothing feels missing or bloated for the stated purpose.

Completeness4/5

Full lifecycle is covered for both domains — create (remember, remember_decision), read (recall, recall_decisions), delete (forget) — with 'update' handled through documented replace-on-rewrite semantics, which is a valid design. Minor gaps: there is no way to enumerate or export all saved reviews/decisions without supplying an ArtifactRef, and no cross-artifact or cross-revision listing operation.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables multi-project workspaces to share structured notes, API contracts, and handoff messages via a local SQLite database, with versioning and read tracking.
    GPL 3.0
  • A
    license
    B
    quality
    C
    maintenance
    Enables local engineering workflow management by consolidating tickets, QA evidence, time tracking, root cause investigation, knowledge, and reporting into a single SQLite database, allowing generation of complete ticket packages for handoffs, dailies, or career evidence.
    23
    1 npm
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Enables engineering agents to maintain persistent knowledge across sessions by storing decisions, invariants, gotchas, and rejected ideas, with staleness detection, conflict detection, full-text search, and structured context assembly.
    37
    2
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables security analysts to carry structured investigation state across sessions by storing typed observations, hypotheses, tasks, evidence and versioned decisions in a local SQLite graph with full-text search. It also enforces authorized scope and request controls, redacted and content-hashed evidence, duplicate-test signatures and validation gates that leave findings in draft until reproducibly confirmed, then produces technical and executive reports for Antigravity, Codex and other stdio MCP clients.
    20
    1
    MIT