reviewzy

reviewzy

MCP server for human-in-the-loop copy review. Enables coding agents to file draft strings for user-facing text, humans to approve or reject them on a dashboard, and later agent sessions to fetch approved copy and apply it in place.

Category
访问服务器

README

<div align="center">

reviewzy

human-in-the-loop mcp review for user-facing text: agents file, a human approves, later sessions apply

bulk-audit and rewrite user-facing copy across CLIs, TUIs, web UIs, and websites; prose authorship stays human

license mcp

</div>


reviewzy is a self-hosted dashboard and mcp server for human-in-the-loop copy review. a coding agent files the exact strings it wants to write or rewrite. a human authors or approves each one on the dashboard. a later agent session fetches the approved words and applies them in place. no i18n keys, no content layer: each entry points at the string where it already lives.

file an entry:

{
  "project": "my-app",
  "entries": [
    {
      "repo": "https://github.com/me/my-app",
      "file": "src/cli/main.ts",
      "anchor_text": "error: something went wrong",
      "agent_draft": "error: could not reach the reviewzy daemon",
      "file_content": "#!/usr/bin/env bun\nconsole.error(\"error: something went wrong\")\n",
      "constraints": { "max_len": 48, "tone": "plain, lowercase" }
    }
  ],
  "filed_by": "help-text-audit"
}

the call answers with the entry as draft and a dashboard link for the batch:

{
  "batch_id": "01M060XY9GNK6ANVENN4Y4MK7N",
  "results": [
    { "id": "01M060XY9GNK6ANVENN4Y4MK7P", "status": "draft", "deduped": false, "updated": false }
  ],
  "dashboard_url": "http://127.0.0.1:3123/?project=my-app"
}

Why

  • file + snippet anchors, no i18n keys: apply-back is a targeted replace in place
  • humans author, agents apply: the status machine is server-enforced; only the dashboard reaches approved or rejected
  • per-project style guide as an mcp resource: merged with the global guide, embedded in fetch_approved
  • append-only revision history: every save is undoable; history survives archiving
  • ntfy and webhook notifications, archive retention: one ping per filing batch; applied entries archive after ARCHIVE_AFTER_DAYS

How it works

stage who what happens
file agent file_entries through the stdio shim, which finds or spawns one shared daemon
notify daemon pings ntfy and/or the webhook with a dashboard link
author human edits, approves, or rejects on the dashboard; saving prose releases it as approved
fetch agent fetch_approved (or a blocking await_approved) returns text, anchor, constraints, and the merged style guide
apply agent replaces the anchor, reports through mark_applied
archive daemon applied entries past ARCHIVE_AFTER_DAYS move to the archive with their revisions

Install

bunx reviewzy@latest

requires bun >= 1.3 (the store is bun:sqlite, bun-only; no npx form). the shim spawns one shared daemon per machine on first use.

from a checkout:

bun install
bun run daemon

as a Claude Code plugin

the repo is a plugin: it registers the MCP server and adds a /reviewzy slash command plus the reviewzy skill.

/plugin marketplace add uwuclxdy/reviewzy
/plugin install reviewzy@reviewzy

same bun requirement as the npm form.

Usage

curl http://127.0.0.1:3123/health
{"name":"reviewzy","version":"0.1.0","pid":4172598,"nonce":"881f0e93-8dde-4c75-b559-d2e3d3b223f0","startedAt":"2026-08-16T19:31:28.640Z"}

open http://127.0.0.1:3123/ for the dashboard.

Configuration

copy .env.example to .env and edit. every key is optional; a bad value refuses startup.

key default what it does
REVIEWZY_PORT 3123 dashboard and mcp port; the bind is 127.0.0.1 always
REVIEWZY_DB ~/.local/share/reviewzy/reviewzy.db sqlite file ($XDG_DATA_HOME respected)
REVIEWZY_BASE_URL http://127.0.0.1:$REVIEWZY_PORT dashboard url used in notification links
REVIEWZY_TOKEN unset bearer token guarding mcp; set it and it is required
DASHBOARD_PASSWORD unset dashboard login; set it and it is required
ARCHIVE_AFTER_DAYS 90 days an applied entry waits before archiving
NTFY_URL + NTFY_TOPIC unset ntfy server and topic; ntfy fires only when both are set
NTFY_PRIORITY 3 ntfy priority, 1 to 5
WEBHOOK_URL unset generic webhook; posts project, batch id, count, and a dashboard link

a credential left unset keeps that surface loopback-only with a startup warning.

Integrations

point an mcp client at reviewzy to start filing:

{
  "mcpServers": {
    "reviewzy": {
      "command": "bunx",
      "args": ["reviewzy@latest"]
    }
  }
}

the endpoint speaks the stateless 2026-07-28 mcp revision.

Comparison

reviewzy Contentrain gotoHuman Ditto
authorship human authors, agent files and applies agent authors, human approves human edits form fields team edits a live library
code integration anchors on live strings, no externalization restructures the repo into a content layer generic forms, no write-back no code patch-back
hosting self-hosted self-hosted saas only saas only
queue async queue plus blocking long-poll queue, git/PR-first review async queue none

the blocking human-in-the-loop mcp family pops a dialog per call: no queue, no persistence, no dashboard.

FAQ

How do I approve AI-generated text before it lands in my code? the agent files strings as drafts, you author or approve them on the dashboard, the agent applies.

Can an AI agent rewrite my CLI help text without i18n keys? yes. entries anchor on the exact current strings; apply-back is a targeted replace.

How do I bulk-rewrite all user-facing copy in a codebase? file batches per project, group by project or batch on the dashboard, approve in bulk with a before/after diff, then let a later agent session fetch and apply.

How do I update the style guide my agents read? edit it on the dashboard at /style-guide. a saved edit reaches agents in up to 60 seconds.

Development

bun run check  # tsc --noEmit && bun test

License

AGPL-3.0. self-hosted stays self-hosted; a saas wrapping it publishes its changes.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选