Ottorev — Review MCP Server

io.github.ottonicPublished by GitHub account ottonicv0.3.0Updated Nov 7, 2026

Durable review context for CAD: entity names, notes, tags, and revision-bound decisions.

The publisher's own server: Review Expert

VerifiedSTDIODesktop onlyKnowledge & MemoryDeveloper Tools

Overview

AI-generated overview

Local SQLite memory for CAD reviews: saves feature names, notes, tags and revision-bound decisions so an assistant can resume geometry review context.

What you can do
  • Save and correct named features, anonymous notes and tags against revision-scoped entity IDs
  • Retrieve saved reviews by artifact, entity, free text or tags, with each record marked stale or current
  • Save decisions with their basis of requirement-checks, and recall them newest-first
  • Delete a named feature, an entity's notes or a decision by subject
When to use it
Useful when an assistant reviews STEP geometry across sessions and needs to remember what a face means, which tolerance callouts matter, or why a review concluded hold — without any CAD software installed.
Requirements
Runs locally over stdio as an npm package; needs Node.js 26+ and npm. Set REVIEW_MCP_DB_PATH to the SQLite file path (defaults to ./review-mcp.db). No accounts or API keys. Callers must supply the artifact revision themselves.
Before you install
Writes, replaces and deletes local records; the client decides when to request those changes. The database holds authored review context and should be protected and backed up as application data. No schema migrations: a changed table shape means deleting the database. Staleness is judged only from the revision the caller supplies, and entity IDs do not carry across revisions.

Installation

In SourceWeft

  1. Open Ottorev — Review MCP Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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 26+ and npm. From this repository:

sh
npm installnpm run buildREVIEW_MCP_DB_PATH=/absolute/path/to/review.db npm start

For any MCP client:

json
{  "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.

Tools

ToolBehavior
rememberSave 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.
recallRetrieve by artifact, entity, free text, or tags; marks each record stale against a supplied current revision. Follow pagination for complete retrieval.
remember_decisionSave 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_decisionsReturn decisions newest-first, each marked stale when it belongs to another revision. An entity_id filter matches only the supplied revision.
forgetDelete 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:

json
{  "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:

json
{ "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:

fieldwhat it carries
requirementwhat has to hold, stated so it can be checked
sourcewhere the requirement came from: model-pmi, drawing, shop-spec, supplier-cert, standard, prior-decision, engineer-stated, or assistant-proposed
sourceDetailthe clause, note number, or document a reader can follow
evidencethe value as it was reported, quoted with its provenance
statesatisfied, violated, unresolved, conflicting, or not-applicable
questionrequired for unresolved and conflicting: what would settle it
facesthe geometry the item is about, in this revision; always present, empty when the item is about the part
verdictthe 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 26+ and just. A Nix flake and .envrc provide the toolchain; run direnv allow after changing either.

RecipePurpose
just setupInstall dependencies.
just devRun TypeScript over stdio.
just buildCompile into dist/.
just testRun unit tests.
just lintRun oxlint.
just fmtRewrite formatting with Prettier.
just fmt-checkVerify formatting.
just typecheckRun tsc --noEmit.
just checkfmt-check + lint + typecheck + test.
just cleanRemove 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.

Source: README.md at commit 50d52ae

Tools

5

remember

Remember a Review

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.

Parametersnamenotetagsartifactrequiredentitiesrequiredentity_id_schemerequired

recall

Recall Reviews

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.

Parameterstagslimitoffsetsearchartifactrequiredentity_id

forget

Forget a Review

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.

Parametersnamesubjectartifactrequiredentity_id

remember_decision

Remember a Decision

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.

Parametersbasisrequiredstatussubjectrequiredartifactrequiredconfidencerequiredsupersedesrecommendationrequired

recall_decisions

Recall Decisions

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.

Parameterslimitoffsetstatussubjectartifactrequiredentity_id

Version history

1
  1. v0.3.0LatestOct 31, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Review integrations