Review Assist MCP
Turns an AI coding agent session into a reviewable Intent Document, validated against the diff.
Connector by uditk2 · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/uditk2-review-assist-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 15 read · 6 write · 1 delete · 1 not yet classified
- Secrets
- None asked for
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 23
Read from the source code; the running server may list different tools.
Read 15 · Look things up without changing anything.
answer_questionsfind_sessions_touchingget_answersget_contextsget_generation_guideget_hunk_notesget_questionsget_reviewer_instructionsget_role_definitionsget_spinelist_transcriptsmap_plan_to_hunks
Show 3 more tools
read_contextread_diffread_transcript
Write 6 · Create, change, send or run things.
import_sessionrecord_contextsrecord_hunk_notesrecord_interview_roundset_consentsubmit_document
Delete 1 · Delete, drop, revoke or wipe things.
manage_consent
Not yet classified 1 · We could not tell from the name and description.
compute_diff
Files it touches
- Any path the agent passes to its tools
Tools (23)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
answer_questionsAuthor role: answer the questions on the run, by `q_id`. This is how your answers reach the document as YOUR words. START WITH THE STANDING SET: those questions are seeded on the run by compute_diff and are answerable from the spine alone, so do NOT wait for the reviewer to ask you anything — it is reading the diff while you read the session, and the two only meet afterwards. An answer the reviewer transcribes on your behalf still works, but is marked reviewer-sourced and does not count as attested — so a document whose interview never happened is visible as such rather than indistinguishable …
compute_diffCall this first. Resolves the base/head SHAs, OPENS THE DISTILLATION RUN, and returns the `run_id` every later call needs, the numbered hunk index, and `consent_state` — so you learn whether this repo is opted in BEFORE you spend a document finding out. It does NOT return the diff text: read that with `read_diff`, which pages it. Anchors use these hunk ids and pin to head_sha.
find_sessions_touchingAuthor role: find which OTHER session wrote a hunk you cannot explain. Call this BEFORE you answer "the transcript does not cover this" — work begun one day and finished the next leaves the reason in a different session, and that is recoverable. Pass the `run_id` and the hunk ids (`hunks: ["H7"]`); pass `exclude` with the transcript you already read, so the answer is who ELSE wrote it. It runs two steps. STEP 1 narrows to the sessions that touched the hunk's files. STEP 2 matches the hunk's own added lines against each one, and that is the step that answers: `authored` counts lines the session…
get_answersDescription is built at runtime.
get_contextsAuthor role: what this session was ABOUT, as one labelled context per subject, scored against the change. Call it right after compute_diff and BEFORE get_spine. If `indexed` comes back true the work is already done — a context index is kept per session, so a second distillation of the same session costs nothing. Each context carries a one-sentence `label`, the `blocks` (index ranges) it occupies, `overlap` (files it touched that this diff also changed) and `only_here` (files it touched that the diff did not). `only_here` with no overlap is NOT noise: it is usually an approach tried on this cod…
get_generation_guideReturn the Intent Document JSON Schema and the authoring protocol. Call this first.
get_hunk_notesReviewer role: your own per-hunk notes, mapped onto the hunk ids of the diff AS IT IS NOW. Call it when you draft the tour: the `what` bullets are already written, so grouping them by the author's plan is what is left. Also call it after head drift. Notes are keyed by hunk content rather than by id, so a commit that renumbers the diff keeps every note and this tells you the new id for each — `moved` lists the ones whose id changed, and `missing` the hunks still unnoted.
get_questionsAuthor role: read the questions on the run, with their `q_id`s. This is how you learn what you are being asked — you do NOT need them relayed to you as text, and there is something here to answer BEFORE the reviewer has asked anything: the standing set is seeded at compute_diff, so call this as soon as you have read the spine rather than waiting for a batch. Call it with the `run_id` (derive it yourself from compute_diff, or take the one you were given, they are the same value), answer with `answer_questions` using the ids it returns, then call it again with `only_unanswered: true` to confirm …
get_reviewer_instructionsRead this repository's own instructions for the reviewer, from its `.reviewer/` folder. Call it after you have read the diff and BEFORE you record round one: these are the questions this repo always wants asked (invariants a past incident bought, changes that must travel in pairs, churn that is never incidental), and none of it is recoverable from the diff. They are ADDITIONAL questions. They add to your baseline set and to the questions the diff provoked, and replace neither: a short house-rules file does not license a short interview. Most repos have none, and an absent folder is a normal an…
get_role_definitionsReturn the author and reviewer role definitions for the two-agent distillation, picked for the calling client (Claude Code, Codex, or a generic fallback) and including how to spin them up. Spawn each role in its OWN context: the author holds the transcript and cannot submit; the reviewer submits and never sees the transcript.
get_spineAuthor role: read a session's WHOLE conversation — every turn you and the agent exchanged, each structured question with the answer chosen, and every command and file edit as one line. This replaces searching. A session is a median 4.8% conversation and 95% tool output; the spine is that 4.8%. Being complete, it removes the one thing retrieval can never rule out — an answer you simply did not find. It is served a page at a time: call it with just the `path`, then keep passing back the `next_cursor` it returns until there is none. That, and nothing else, is how you know you have read the whole …
import_sessionFile a session transcript into this repo's store so list_transcripts and get_spine can find it. Needed when a session leaves nothing on this machine: a Cowork session running in the CLOUD keeps its transcript inside the container it ran in, and the desktop app holds only a composer draft and an evictable cache of a partial event stream. The container writes the file somewhere reachable and calls this. Re-importing OVERWRITES: a live session keeps growing, so a second export must replace the first rather than leave two near-identical candidates for the ranking to choose between.
list_transcriptsList candidate session transcripts for this repo — across BOTH Claude Code and Codex — ranked so you can pick THIS session's transcript even when several are close in time. Pass `base` (the change's base ref) so ranking scores each candidate by how much it references the changed files and branch. Each candidate includes `first_user`/`last_activity` previews: choose the one whose `first_user` matches how THIS session actually began; prefer higher `relevance`.
manage_consentList Review Assist's per-repo enable/disable decisions, or reset one repo — removing it from the list so it is asked about again.
map_plan_to_hunksReviewer role: record which hunks carry each of the author's plan items, and get back the DELTA — the only place batch one has to ask. Call it once you have the author's PLAN answer and your own hunk notes. It returns `unclaimed` (hunks needing coverage that no plan item claims, each with the note you wrote for it) and `unlanded` (plan items no hunk carries). Those two are your batch one, plus the house rules, plus follow-ups where a standing answer came back thin — and nothing else. Where the plan and the change AGREE there is no question: a hunk sitting under the item that predicted it is ex…
Show 8 more tools
read_contextAuthor role: the conversation of ONE context, by id — every turn in the blocks it occupies, and nothing else. This is what the index is for: match a question against the labels from get_contexts, then read the two or three contexts that fit, rather than re-reading the whole session for every question. Paged like get_spine: follow `next_cursor` until there is none.
read_diffRead the change itself, a page at a time. `compute_diff` gives you the run handle and the hunk index; the bytes come from here, so no single response can grow with the size of the change. Call it with just the `run_id` to start at H1, then keep passing the `next_cursor` it returns until there is none — that is how you know you have seen the whole diff. To go straight at one thing instead, pass `hunks` or `paths`. Pages break on hunk boundaries, so you never receive half a change; a hunk too large for one page is split by line and labelled with the lines it carries.
read_transcriptRead a window of the FULL transcript — tool calls, results and all — around an index the spine gave you. This is how a claim gets substantiated: the prose says what was decided, the tool output holds the evidence. Not for hydration; get_spine does that in one call.
record_contextsAuthor role: record what the session was about, as you read it. A BLOCK is a run of consecutive exchanges — both directions, counter-questions and follow-ups included — about ONE thing; the boundary is a change of subject, never a change of speaker, because "yes, do that" belongs to the exchange it answers. A CONTEXT is a subject and owns one or more blocks: pass an existing `id` to rejoin a subject the session returns to, so A-then-B-then-A stays one context instead of two halves. The `label` is one plain sentence naming the subject AND what happened to it — it is matched against the diff and…
record_hunk_notesReviewer role: write down what a hunk does AS YOU READ IT, one line each. Call this on every page of read_diff, before moving to the next — not at the end. This is the single biggest cost in a distillation: measured over 15 runs, drafting between interview batches took 303, 330, 544, 592 and 916 seconds, and nearly all of it was reconstructing an account of each hunk you had already formed once while paging. Written down, the drafting left is `why`, rationale, assumptions and verification, which genuinely need the whole picture. These become your `tour[].what` bullets, so write them as behavio…
record_interview_roundReviewer role: record interview rounds against a RUN — each a question you raised about a thin or under-justified spot. RECORD THE QUESTIONS FIRST, BEFORE you relay them: each comes back with a `q_id`, and the author answers by that id with `answer_questions`, so the server hears the author's own words rather than your account of them. Include the q_ids when you relay. `answer` is optional here and is only for transcribing an answer you already hold — it is marked reviewer-sourced, and does not count as attested. The standing set (the plan, and the questions about the session that do not depen…
set_consentRecord the user's decision about whether Review Assist may operate in a repository: read its coding sessions and write its Intent Document. Call this only after the user has answered the consent prompt (from compute_diff, a session-reading tool, or submit_document). Pass `run_id` whenever you have one: a "once" recorded on the run holds for every agent working on that change, not just this one.
submit_documentValidate a candidate Intent Document against the run's diff and head SHA. On pass, write it to .intent/<branch>.json. Takes `run_id` from compute_diff — repo, base and head come from the run, so the interview and the coverage check cannot disagree about which change this is. On failure, returns findings to fix and resubmit.
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 22, 2026 (7 days ago)
- Last release
- Oct 22, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.uditk2/review-assist-mcp- Version
- 1.1.0
- Auth
- No auth
- Packages
- npm review-assist-mcp
- License
- License unknown
- Repository
- github.com/uditk2/review-assist
- Website
- reviewassist.dev
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Review Assist MCP. Agent Mart. https://agentmart.dev/connectors/uditk2-review-assist-mcp (last updated 2026-10-24)