Rework
Click on "Install 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., "@ReworkDefine a new project for the PDF converter with strict acceptance criteria"
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.
Why
When an AI agent works through a task list, "I finished X" is unverifiable by default. The agent could have written a tautological test (assert True), a test that never actually ran, or a test that passes regardless of whether the underlying logic is correct. A self-reported checkbox and a real fix look identical from the outside.
Rework closes that gap. It's an MCP server — plain enough that Claude Code, Claude Desktop, or any other MCP client can drive it — that forces every completion claim through one of two paths:
Automated proof: a real FAIL_TO_PASS/PASS_TO_PASS test cycle, plus mandatory mutation-checking that deliberately breaks the target code to confirm the test would actually catch a real bug.
An explicit, recorded judgment call — human or
claude_review— for the cases automated proof genuinely can't reach.
Different kinds of evidence are never blended into one deceptively simple percentage. An automated proof, a reviewed judgment call, and a fallback are always reported asseparate counts — percent_complete counts only automated proof.
Related MCP server: AI Workbench MCP
The 5 tools
Tool | Purpose |
| Turn a goal into interrogated, self-audited, traceable acceptance criteria |
| Run real verification for one criterion — FAIL_TO_PASS/PASS_TO_PASS + mandatory mutation-checking |
| Read-only progress report, with each kind of evidence counted separately |
| Discover every tracked project's id + a compact status summary — no args needed |
| Read back a project's full stored definition, including every criterion's given/when/then and grounding |
project_list and project_get exist because of a real gap found in production use: project_status/project_check both require an exact project_id with no way to discover what IDs exist, and project_status only ever reports which bucket a criterion falls into — never the actual requirement text behind it. Any fresh session, or a second client with no memory of the original project_define() call, needs both to recover context.
The core loop
1. project_list() discover what project_ids exist
2. project_define(project_id, goal, dod, ...) interrogate a goal into real criteria
3. project_check(project_id, criterion_id, ...) verify one criterion, repeated as work happens
4. project_get(project_id) recall a criterion's given/when/then
5. project_status(project_id) read the honest, unblended percentage1 · project_define — interrogation before invention
Turns a vague goal into Given-When-Then acceptance criteria, but only after real interrogation:
Every criterion must trace back to something the user actually said (
groundingfield) — nothing is invented from nothing.Every criterion is self-audited on two axes before submission: how underspecified it is, and how gameable it is. Score too high on either and it's rejected.
If more than half the submitted criteria fail this audit, the whole batch is rejected — that signals the interrogation itself was too shallow, not that individual criteria need patching.
Given-When-Then text is scanned for unquantified adjectives ("secure," "fast," "robust," ...) — rejected because they're not measurable, whole-word matched so it doesn't false-positive on things like "fastener."
Duplicate criterion IDs, empty submissions, and a missing/non-string
project_idare all rejected outright; malformed input produces a clean structured error, never a crash.reviewer_levelpicks which personaclaude_reviewmust embody for this project's whole lifetime.
2 · project_check — the load-bearing tool
Runs actual verification for one criterion, called once per criterion as real work happens:
FAIL_TO_PASS / PASS_TO_PASS verification (SWE-bench style): a test must be shown to have failed before the fix and pass after — either via a real pre-change command re-run, or an explicit, trusted-not-verified assertion.
Mutation checking is mandatory before a criterion's first real verification. Rework deliberately breaks the target code and confirms the test actually catches the break. A test that can't catch a broken implementation isn't real verification — it might be tautological. The engine tries, in order: comparators (
==,<, ...), unary negation (!x), and — only as a fallback — binary arithmetic (+ - * /), so a pure-arithmetic function likereturn a + bis still mutation-checkable instead of always routing to review.Non-functional-risk gating: criteria flagged security/crypto/concurrency never pass on a plain green test alone — they require an explicit property test or human review.
Editing the test file itself to make it pass triggers an automatic fail — the classic way agents cheat verification.
When mutation-checking can't cleanly resolve, the tool doesn't guess — it routes to
human_revieworclaude_review.
claude_review is a real evaluation, not a rubber stamp. It requires an actual verdict (trustworthy / not_trustworthy) plus specific written reasoning that meets the project's reviewer_level bar. A trustworthy verdict reaches its own status, verified_complete_reviewed — kept deliberately separate from automated verified_complete so a judgment call is never confused with a proof.
Language support
Extensions | Checker | Status |
| tokenize-based | Fully proven — the original path, most-tested |
| hand-tuned tree-sitter | Fully proven — real compile/run cycles, all function forms |
| tree-sitter-language-pack | Java proven end-to-end; the rest are structurally verified but not proof-of-execution verified |
anything else | — | A clear "no checker supports this extension" reason, never a silent skip |
Reviewer levels
reviewer_level doesn't change any code path — it changes the bar the reviewing agent must hold itself to, and enforces a rising minimum length on claude_review_reasoning so a rubber-stamp verdict can't sneak through:
Level | Bar | Enforced minimum |
| A normal careful reviewer | none |
| Defaults to | 40 characters |
| Truth over comfort — no rubber stamps, calls out vague claims and "started" vs. "done" conflation by name | 80 characters |
3 · project_status — the honest number
Read-only, safe to call anytime. percent_complete is calculated strictly from automated verified_complete criteria — never blending in verified_complete_reviewed (judgment calls) or fallback_complete (env errors, human-approved fallbacks). Criteria with corrupted/unrecognized status values are surfaced with a warning instead of silently vanishing from the count.
4 · project_list — discovery
Takes no arguments. Returns every tracked project's project_id, goal, reviewer_level, and a compact status summary. A corrupted project file is reported in its own errors[] list rather than crashing the whole call.
5 · project_get — recall
Returns a project's full stored definition — goal, dod, reviewer_level, and every criterion in full: feature, given_when_then, grounding, self_audit, non_functional_risk, status, and the complete verification record, including any claude_review reasoning.
Desktop dashboard
ui/ is an optional Tauri + React desktop app: a read-only status view over every tracked project, plus a Review button on each criterion that opens a real terminal running claude with a fully-briefed audit prompt — goal, given/when/then, grounding, current status, prior fallback/review history, and a pointer to AGENT.md — not a bare "check this" one-liner.
./setup.ps1 -InstallUIThis builds a real Windows installer and installs it silently (no admin prompt — currentUser mode). Rework shows up in Start Menu and Apps & Features like any normal installed program. The installed app finds your tracked projects via a small config file (%APPDATA%\Rework\repo_root.txt) that setup.ps1 writes, since an installed .exe no longer lives near the repo the way it does in dev mode.
Setup
Prerequisites
Needed for | Requirement |
MCP server (always) | Python 3.10+, Claude Code and/or Claude Desktop |
Desktop dashboard (optional) | + Node.js and the Rust toolchain — only needed if you pass |
Backend — Windows, one command
./setup.ps1This creates Rework's own venv, installs dependencies, registers the MCP server with Claude Code (claude mcp add, user-scoped) and Claude Desktop (auto-detects both legacy and packaged/MSIX-style install locations), installs AGENT.md as a Claude Code skill, and packages rework-skill.zip for Claude Desktop. It's idempotent — safe to re-run any time; existing rework registrations are replaced, not duplicated, and every other entry in either config is left untouched.
You'll be asked to pick a default claude_review evaluator persona (standard / skeptical / foreman, Enter for standard) — this is only a recommendation baked into the installed skill; each project still sets its own reviewer_level at project_define() time.
Claude Desktop has no filesystem skills folder —setup.ps1 prepares rework-skill.zip and prints the one manual step: Customize → Skills → Upload a skill inside Claude Desktop, then select that file. Everything else in this list is fully automatic.
After it finishes: fully quit and reopen Claude Code and Claude Desktop (not just close the window) so both pick up the new MCP server.
Backend — manual / other platforms
python -m venv venv
venv/Scripts/activate # or source venv/bin/activate on macOS/Linux
pip install -r requirements.txt
claude mcp add --scope user rework -- <path to venv python> <path to server.py>For Claude Desktop, add the same command/args pair by hand to mcpServers in its config — %APPDATA%\Claude\claude_desktop_config.json on a traditional install, or %LOCALAPPDATA%\Packages\Claude_<hash>\LocalCache\Roaming\Claude\claude_desktop_config.json on a packaged/Store install.
SeeAGENT.md for the full operating guide — how to interrogate a goal, drive project_check, resolve mutation-check failures, choose a reviewer_level, and the known limitations of each language checker.
Desktop dashboard install
The dashboard (ui/) is optional and off by default — building it is a multi-minute Rust release compile, so setup.ps1 skips it unless asked.
Install it as a real Windows app (recommended):
./setup.ps1 -InstallUIThis builds ui/ into a signed-locally NSIS installer and runs it silently (currentUser mode — no admin prompt). Rework then shows up in Start Menu and Apps & Features like any normal installed program, at %LOCALAPPDATA%\Rework. Safe to re-run — it reinstalls over the previous version.
Run it in dev mode instead (no installer, live-reloads on change):
cd ui
npm install
npm run tauri devBuild the installer yourself without running it:
cd ui
npm install
npm run tauri build -- --bundles nsis
# installer lands in ui/src-tauri/target/release/bundle/nsis/*-setup.exeWhichever path you use, the app needs to find your tracked projects.setup.ps1 always writes %APPDATA%\Rework\repo_root.txt pointing at the repo root — including on a backend-only run — so a dashboard you build or install later still finds data/projects/ correctly. An installed .exe lives nowhere near the repo the way tauri dev does, so without this file the app can't locate your data.
Running tests
venv/Scripts/python -m pytest tests/130 tests, all passing.
Seen in action
Because Rework is a plain MCP server, any MCP client can drive it — not just Claude Code. Here's Claude Desktop given one prompt ("pick a random tracked project, show its full status and every criterion's given/when/then, then write an action plan"), using project_list → project_get → project_status end to end with no prior context about the project:
It correctly explains why two criteria sit at verified_complete_reviewed instead of the automated verified_complete (their functions have no comparator for mutation-testing to flip — regex matching and file I/O), reports the real given_when_then for every criterion, and — without being asked to look for it — flags that none of the project's Definition-of-Done items are actually tracked by any individual criterion:
Proven on real work
Not just designed on paper — hardened against bugs found by actually running it:
Tracked its own build, a bug-fix patch set, and a from-scratch PDF-to-Markdown converter built specifically to exercise the full loop end-to-end, including a real case where
claude_reviewcorrectly flagged a test gap asnot_trustworthybefore it was fixed and re-verified honestly.Stress-tested with concurrent writes, 500-criterion payloads, 100KB strings, malformed/adversarial input, and repeated mutation cycles — a missing/non-string
project_idused to silently write a garbage file to disk instead of being rejected, and a non-boolnon_functional_riskused to be silently accepted despite gating on it as a plain truthy check. Both fixed.Found and fixed a real subprocess bug in production use: the MCP server's own long-lived stdin pipe was being inherited by every test subprocess it spawned, so a child that touched stdin for any reason could hang forever and get reported as a false
failed— identical in symptom to a command that ran instantly outside the server. Fixed withstdin=DEVNULLand full process-tree termination on timeout, shared by all three mutation checkers.
Project structure
server.py MCP entrypoint (FastMCP), registers the 5 tools
core/ criteria schema/validation, evaluator personas, mutation checkers, storage
tools/ project_define / project_check / project_status / project_list / project_get implementations
tests/ pytest suite (130 tests)
ui/ optional Tauri + React desktop dashboard
setup.ps1 one-shot Windows install/registration script
AGENT.md operating manual for an agent driving Rework
REF SHEET- WHEN UNSURE/ original design spec this implementsTool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Verifies AI agent work end to end: real artifacts and outcomes checked, not self-reported success.
Watchdog for unattended AI agents: alerts, evidence checks and a verifiable proof per run.
Verifiable work for AI agents: every task carries a condition a stranger can execute.
Verified 2-3 step AI-agent missions with whole-transaction success-only charging.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnforces disciplined programming practices by requiring AI assistants to audit their work and produce verified outputs at each phase of development, following structured workflows for refactoring, feature development, and testing.203512MIT
- AlicenseCqualityCmaintenanceEnables acceptance gates for AI coding-agent runs by recording evidence, running deterministic validation, applying a quality gate, and rendering auditable outcomes.7Apache 2.0
- AlicenseNot gradedqualityBmaintenanceGives AI coding agents a closed-loop verification cycle for visual, audio, and video output, with enforcement hooks that make verification mandatory.Apache 2.0
- AlicenseAqualityCmaintenanceProvides AI agents with a lightweight task-management and self-verification layer to define goals, track checkpoints, detect scope drift, and verify completion against explicit done criteria.12MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Santhosh-Stalin/Rework'
If you have feedback or need assistance with the MCP directory API, please join our Discord server