A side-by-side look at the Graft and Wiff MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Graft for coding agents work as a local process; choose Wiff for coding agents as a local process. You can also run both side by side in one mcpServers block.
GRAFT_ROOT_PATH.safe_read, graft_edit, file_outline.WIFF_BACKEND.workflow_start, workflow_status, workflow_wait.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Coding Agents | Coding Agents |
| Quality signal | 65/100 · Great | 60/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | GRAFT_ROOT_PATH | WIFF_BACKEND |
| Verified owner | Community listing | Community listing |
| GitHub stars | 17 | 5 |
| Directory activity | 1 views 0 installs 0 upvotes | 4 views 0 installs 0 upvotes |
| Tools | 34 | 5 |
| Full listing | View Graft | View Wiff |
safe_readPolicy-enforced file read. Returns full content for small files, structural outline with jump table for large files, or refusal with reason code for banned files. Detects re-reads and returns cached outlines or structural diffs.graft_editPerform one governed exact string replacement in a repo file. Requires path, old_string, and new_string. Refuses missing or ambiguous old_string matches and policy-denied paths.file_outlineStructural skeleton of a file — function signatures, class shapes, exports. Includes a jump table mapping each symbol to its line range for targeted read_range follow-ups.read_rangeRead a bounded range of lines from a file. Maximum 250 lines. Use jump table entries from file_outline or safe_read to target specific symbols.changed_sinceCheck if a file changed since it was last read. Returns structural diff (added/removed/changed symbols) or 'unchanged'. Peek mode by default; pass consume: true to update the observation cache.graft_diffStructural diff between two git refs. Shows added, removed, and changed symbols per file — not line hunks. Defaults to working tree vs HEAD.run_captureExecute a shell command and return the last N lines of output (default 60). Responses include an explicit policy boundary. Persisted logs can be disabled and obvious secrets are redacted before writing to .graft/logs/capture.log.state_saveSave session working state (max 8 KB). Use for session bookmarks: current task, files modified, next planned actions.state_loadLoad previously saved session state. Returns null if no state has been saved.doctorRuntime health check. Shows project root, parser status, active thresholds, session depth, message count, and burden summary.activity_viewInspect recent bounded local artifact history for the active workspace, anchored to the current commit when possible.causal_statusInspect the active causal workspace and persisted local-history posture.workflow_startLaunch a deterministic JavaScript workflow in the background, or resume a previous run without repeating successful unchanged agent calls. User and project preferences are loaded from Wiff config. Always pass the caller's absolute working directory as cwd.workflow_statusRead the latest persisted status, phase, counters, result, and artifact paths for a workflow run.workflow_waitWait until a workflow changes state or the timeout elapses. Call repeatedly until the run is completed, failed, cancelled, or interrupted.workflow_cancelInterrupt all live agents and mark a workflow run cancelled.workflow_modelsList the models each agent backend (codex, claude, cursor, kimi) can run, with supported reasoning efforts. Backends that are unavailable on this machine report an error instead of models.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"flyingrobots-graft": {
"command": "npx",
"args": [
"-y",
"@flyingrobots/graft"
],
"env": {
"GRAFT_ROOT_PATH": "YOUR_GRAFT_ROOT_PATH_HERE"
}
}
}
}
{
"mcpServers": {
"wiff": {
"command": "npx",
"args": [
"-y",
"@xxxoooxoxo/wiff"
],
"env": {
"WIFF_BACKEND": "YOUR_WIFF_BACKEND_HERE"
}
}
}
}