article-review-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@article-review-mcp Review patchset revision-001 and show topic view"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
article-review-mcp
A visual MCP App for reviewing explicit article patches with categorized comments.
The editing agent does not hand the server a silently rewritten manuscript. It submits:
unchanged base document
+ explicit patches against that base
+ one or more categorized rationale comments per patchThe server validates and applies those patches deterministically, opens an interactive review UI, records human decisions, and safely assembles the final article.
Why patch-first
A full-document diff can show what changed, but it loses the agent's original intent. In this project, a patch is the atomic review object:
Patch
├── exact target in the original document
├── replace / delete / insert_before / insert_after
├── proposed text
├── categorized comments explaining why
└── human decision: pending / accepted / rejected / editedEvery comment has exactly one primary topicId. A patch may contain multiple comments across different topics.
Related MCP server: Lens
Current capabilities
Explicit
PatchSetsubmission against an immutable base documentreplace,delete,insert_before, andinsert_afterBase SHA-256 verification
Exact-anchor resolution with optional
contextBeforeandcontextAfterRejection of ambiguous anchors and overlapping patches
Required categorized rationale comments for every patch
Custom topic taxonomies per review session
Topic tabs with per-topic patch/comment counts
Two topic review modes:
keep all patches visible and dim unrelated patches
show only patches containing the selected topic
Split, unified, and complete Final views
Word-level insertion/deletion highlighting for English and Chinese
Accept, reject, reset, manually edit, and bulk-decide visible patches
Add, reply to, resolve, and filter reviewer comments
Compact topic-filtered feedback for the editing agent
Immutable revision rounds with exact-patch decision carry-over
JSON persistence, optimistic concurrency, and idempotency
MCP App plus token-protected localhost browser viewer
Safe preview, write-new-file, guarded overwrite, and static HTML export
Legacy
base + full proposaltools retained as deprecated compatibility aliases
Requirements
Node.js 20 or newer
No runtime dependency installation is required
Validate
npm run checkThe suite runs syntax checks and 13 tests, including a real stdio MCP exchange and localhost viewer calls.
Run as an MCP server
node src/cli.mjs \
--stdio \
--workspace /absolute/path/to/your/writing-workspaceExample client configuration:
{
"mcpServers": {
"article-review": {
"command": "node",
"args": [
"/absolute/path/to/article-review-mcp/src/cli.mjs",
"--stdio",
"--workspace",
"/absolute/path/to/your/writing-workspace"
]
}
}
}Primary agent call
Call article_review_submit_patchset:
{
"title": "Introduction revision",
"format": "markdown",
"base": {
"type": "workspace_file",
"path": "manuscript.md"
},
"baseHash": "optional-sha256-of-the-base",
"topics": [
{
"id": "architecture",
"label": "架构与叙事",
"description": "章节组织、研究主线和段落衔接"
},
{
"id": "logic",
"label": "逻辑与论证"
},
{
"id": "clarity",
"label": "表达与清晰度"
}
],
"patchSet": {
"id": "revision-001",
"summary": "补齐 Section 1 到 Section 2 的理论过渡",
"patches": [
{
"id": "selection-pressure-bridge",
"operation": "replace",
"target": {
"oldText": "The later experiments therefore held the candidate text fixed...",
"contextBefore": "These results support Prediction 1...",
"contextAfter": "LLM judge reliability varies..."
},
"newText": "Collectively, Section 1 establishes that...",
"comments": [
{
"topicId": "architecture",
"kind": "proposal_rationale",
"title": "补齐 Section 1 → Section 2 的逻辑桥梁",
"body": "原文从多智能体失败直接跳到 Judge reliability,缺少为什么需要 Judge 的理论过渡。",
"severity": "major"
},
{
"topicId": "logic",
"kind": "proposal_rationale",
"title": "明确研究问题递进关系",
"body": "先证明系统存在选择失败,再验证 Judge 是否能够提供可靠信号。"
}
]
}
]
}
}Patch rules
All patches target the same unchanged base document.
Every patch must include at least one categorized comment.
Every comment has one and only one primary
topicId.target.oldTextmust resolve to exactly one location.Use
contextBeforeandcontextAfterwhen the same text appears repeatedly.Overlapping patches and multiple insertions at an unsafe shared boundary are rejected.
The server derives the proposal; the agent does not submit a second complete manuscript in the primary workflow.
Typical validation errors:
BASE_HASH_MISMATCH
ANCHOR_NOT_FOUND
ANCHOR_AMBIGUOUS
PATCH_OVERLAP
MISSING_PATCH_COMMENT
UNKNOWN_COMMENT_TOPICTopic-focused review
The UI shows topic tabs such as:
全部主题 12
架构与叙事 4
逻辑与论证 3
证据与引用 2
方法与统计 1
表达与清晰度 2Selecting one topic filters the right-side comments to that topic. The manuscript pane can either:
retain all patches and dim unrelated ones, or
hide unrelated patches completely.
J and K navigate only the patches relevant to the active topic.
Local viewer fallback
For clients that do not render MCP Apps:
node src/cli.mjs \
--viewer 4173 \
--workspace /absolute/path/to/your/writing-workspaceThe viewer binds to 127.0.0.1 and prints a random token-protected URL.
Synthetic demo:
npm run demoMain tools
Model-facing workflow:
article_review_submit_patchset
article_review_open
article_review_get_feedback
article_review_add_comments
article_review_update_patchset
article_review_finalizeApp-only review operations:
article_review_get_page
article_review_get_document
article_review_set_patch_decision
article_review_bulk_decide
article_review_edit_patch
article_review_add_comment
article_review_reply_comment
article_review_resolve_commentDeprecated compatibility aliases:
article_review_create
article_review_get_summary
article_review_update_proposal
article_review_set_decision
article_review_edit_hunkSafety invariants
The base document is reconstructed byte-for-byte from raw segments.
Applying every patch reconstructs the derived proposal byte-for-byte.
CRLF, whitespace, Markdown, Chinese, English, and basic LaTeX are not normalized.
Manuscript text is rendered as inert text nodes, never through
innerHTML.Absolute paths,
..traversal, and directory symlink escape are rejected.Mutations require
expectedVersionandidempotencyKey.Source overwrite requires explicit confirmation, source SHA-256 validation, and a backup.
Documentation
Deferred scope
DOCX Track Changes
PDF editing
Word-level partial acceptance
Real-time multi-user collaboration
Google Docs synchronization
Available Tools
19 toolsarticle_review_add_commentAdd categorized review commentC
Attach one reviewer comment to a patch under exactly one primary topic.
Inputs: body (required), patchId (required), topicId (required), sessionId (required), +16 more.
article_review_add_commentsAdd categorized reviewer commentsC
Attach a batch of reviewer comments to existing patches. Each comment must use exactly one primary topicId.
Inputs: comments (required), sessionId (required), idempotencyKey (required), expectedVersion (required), +6 more.
article_review_bulk_decideBulk decide patchesC
Accept, reject, or reset all or selected patches.
Inputs: status (required), sessionId (required), idempotencyKey (required), expectedVersion (required), +6 more.
article_review_createCreate article review from full proposal (deprecated)A
Compatibility tool for base + complete proposal. Prefer article_review_submit_patchset so every change retains agent intent and categorized comments.
Inputs: base (required), title (required), proposal (required), format, +3 more.
article_review_edit_hunkEdit hunk (deprecated alias)C
Compatibility alias for article_review_edit_patch.
Inputs: hunkId (required), sessionId (required), editedText (required), idempotencyKey (required), +7 more.
article_review_edit_patchEdit patch outputC
Save a human-authored replacement for one patch.
Inputs: patchId (required), sessionId (required), editedText (required), idempotencyKey (required), +7 more.
article_review_finalizeFinalize reviewed articleA
Preview or safely write the article assembled from accepted, rejected, edited, and pending patches. Overwrite requires confirmation, hash checking, and backup.
Inputs: sessionId (required), mode, backup, destination, +3 more.
article_review_get_documentGet assembled documentC
Load the complete assembled document for the Final view.
Inputs: sessionId (required), pendingPolicy.
article_review_get_feedbackGet categorized review feedbackA
Return compact pending or rejected patch feedback for an editing agent. Filter by one comment topic without returning the complete manuscript.
Inputs: sessionId (required), topicId, statuses, includeComments.
article_review_get_pageGet filtered patch pageC
Load paginated patches, optionally showing only one comment topic.
Inputs: sessionId (required), limit, query, offset, +3 more.
article_review_get_summaryGet review summary (deprecated)A
Compatibility alias for article_review_get_feedback.
Inputs: sessionId (required).
article_review_openOpen article reviewC
Open an existing visual patch review and optionally filter it by comment topic.
Inputs: sessionId (required), limit, query, offset, +3 more.
article_review_reply_commentReply to review commentC
Record how an editing agent implemented a reviewer comment.
Inputs: commentId (required), sessionId (required), idempotencyKey (required), expectedVersion (required), +7 more.
article_review_resolve_commentResolve review commentC
Mark a review comment resolved or unresolved.
Inputs: commentId (required), sessionId (required), idempotencyKey (required), expectedVersion (required), +7 more.
article_review_set_decisionSet hunk decision (deprecated alias)D
Compatibility alias for article_review_set_patch_decision.
Inputs: hunkId (required), status (required), sessionId (required), idempotencyKey (required), +6 more.
article_review_set_patch_decisionSet patch decisionC
Accept, reject, or reset one patch.
Inputs: status (required), patchId (required), sessionId (required), idempotencyKey (required), +6 more.
article_review_submit_patchsetSubmit categorized article patchesA
Primary article-edit workflow. Submit the unchanged base document plus explicit non-overlapping patches. Every patch must include at least one comment assigned to exactly one primary topic. Use this instead of returning a giant rewritten document or textual diff in chat.
Inputs: base (required), title (required), patchSet (required), format, +4 more.
article_review_update_patchsetSubmit a revised patch setB
Create an immutable next review round from the same base document. Exact unchanged patches may carry decisions and reviewer comments; changed patches reset to pending.
Inputs: patchSet (required), sessionId (required), idempotencyKey (required), expectedVersion (required), +10 more.
article_review_update_proposalUpdate full proposal (deprecated)B
Compatibility tool for complete revised documents. Prefer article_review_update_patchset.
Inputs: proposal (required), sessionId (required), expectedVersion (required), limit, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Multiple tools have overlapping purposes, including explicit compatibility aliases (create/submit_patchset, get_summary/get_feedback, set_decision/set_patch_decision, edit_hunk/edit_patch) and single/batch variants (add_comment/add_comments). This makes it difficult to tell tools apart despite clear descriptions.
All tools share the article_review_ prefix, but verb/object patterns vary: some omit objects (open, finalize, create), one uses an adverb (bulk_decide), and compatibility aliases introduce inconsistent verbs for the same action (e.g., set_decision vs set_patch_decision).
At 19 tools, the count is slightly above the ideal 3-15 range, but the patch-based review workflow is inherently complex. The presence of 5 redundant compatibility tools inflates the count unnecessarily, keeping it from a perfect score.
The surface covers the full review lifecycle: patch submission, update rounds, decisions, commenting, feedback, pagination, and finalization. Minor gaps exist, such as no explicit patch deletion or comment topic management, but these are workable.
Maintenance
Related MCP Connectors
MarkupBase turns AI-generated Markdown and HTML into durable, versioned artifacts that people can review and discuss. Its MCP server lets agents publish new versions, preserve contextual comments, include hosted images, and respond to feedback through secure account-linked identities, creating a clear human review boundary without requiring real-time editing.
Vet any MCP server before you depend on it. Stamp: PASS, REVIEW, or BLOCK.
Read-only MCP over an agentic SLR workspace with per-claim citation verification
Read-only MCP over an agentic SLR workspace with per-claim citation verification
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA stateful, AST-aware MCP server for structured code review workflows. It enables iterative review sessions with AST-based context localization and provides structured feedback with verdicts and patch suggestions for JavaScript/TypeScript code.1GPL 3.0
- AlicenseNot gradedqualityDmaintenanceMCP server for visual feedback, video direction, and QA assertions on web pages, enabling AI agents to read, reply, and resolve annotations in real time.6MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for searching and retrieving submissions, reviews, meta-reviews, rebuttals, and decisions from OpenReview venues like NeurIPS and ICLR, enabling peer review analysis.21 PyPI2MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for creating, validating, and reviewing implementation plans in GitHub Copilot Chat, with visual review interface and MongoDB persistence.MIT