A side-by-side look at the Pincushion Plugin and PatchWarden MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Pincushion Plugin for coding agents work as a local process; choose PatchWarden for coding agents as a local process. You can also run both side by side in one mcpServers block.
get_annotations, search_annotations, get_feedback_summary.CONTROL_PLANE_API_KEY, PATCHWARDEN_OWNER_TOKEN.save_plan, get_plan, health_check.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Coding Agents | Coding Agents |
| Quality signal | 64/100 · Good | 64/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | Not declared |
| Pricing | Freemium | Not declared |
| Required env vars | None listed | CONTROL_PLANE_API_KEYPATCHWARDEN_OWNER_TOKEN |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 6 |
| Directory activity | 1 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 65 | 30 |
| Full listing | View Pincushion Plugin | View PatchWarden |
get_annotationsRetrieve annotation pins from the .feedback/ directory. Filter by page URL, LWC component name, or status. Use this to understand what feedback exists before making changes.search_annotationsFull-text search across all annotation comments, selectors, component names, and tags.get_feedback_summaryGet a high-level rollup of all open feedback: counts by status, page, and component. Use this to plan what to address first.get_component_feedbackGet all feedback pins targeting a specific LWC component, with a plain-language summary ready for implementation. Returns element selectors, comments, and thread history.resolve_annotationMark an annotation as resolved after addressing the feedback. Optionally add a resolution comment explaining what was changed.add_agent_replyAdd a reply to an annotation thread (e.g. to ask a clarifying question or note a finding).get_reply_candidatesUsed by /pincushion-replies. Returns pins where Pincushion AI should respond, with each candidate tagged by trigger reason. Two triggers: (a) "mention" — the latest thread message contains @pincushion AND was authored by a human; (b) "reply-on-bot-pin" — the pin was originally authored by Pincushion AI and the latest message is from a human. Skips resolved/archived pins and any pin where the latest message is already bot-authored (idempotency). Newest-first ordering so the slash command can pace replies.add_bot_replyPost a Pincushion AI reply to a pin's thread. Hardcodes author="Pincushion AI" and authorEmail="pincushion-bot@pincushion.io" so the Chrome extension applies bot styling. ONLY call from the /pincushion-replies flow — never as a generic reply. Refuses to post if the latest thread message is already bot-authored (defense-in-depth idempotency).get_pending_critiquesUsed by /critique-latest-deploy. Lists pending critique requests queued by the deploy-hook for the current license. Newer receipts also include a deployment event, prior page outcomes, project-page inventory, and latest per-device capture receipts for truthful local reconciliation before Crit runs. Newest-first. Free on all plans (the gating happened at enqueue time on the deploy-hook side: Pro/Team — including trial-Pro — always enqueue; free licenses enqueue while their monthly AI-action pool has headroom).get_pending_deployment_frame_refreshesLists production deployment frame-refresh work independently of the Critique queue. Use this even when autoCritique is false. The result is redacted: it contains no deployment URL/hash, browser state, storage path, or capture proof. Start a selected run before capturing.start_deployment_capture_runStarts one short-lived local frame-refresh run for an exact deployment and returns its opaque proof once. Keep the proof only in process and pass it to authenticated upload_page_snapshot/record_deployment_page_result/complete_deployment_capture_run calls; never put it in capture-snapshot, shell argv, a report, pin, status message, or file.complete_deployment_capture_runRequests server-side frame-refresh completion after all exact page/device receipts have been recorded. The server rejects missing, stale, replayed, cross-deployment, or expired capture-run evidence and never treats a queue state as a current frame.save_planSave an execution plan — ChatGPT writes the plan, PatchWarden stores it for local agent execution. Supports plan_ref to load a plan file already placed inside .patchwarden/plans.get_planRead a saved plan by its plan_id.health_checkCheck MCP catalog consistency, watcher freshness/supervisor state, workspace readiness, and configured agents. Use detail=self_diagnostic for expanded read-only evidence.list_agentsList configured local agents and check whether each executable currently exists. This does not start an agent or contact its model provider.create_taskCreate a repo-scoped task from exactly one source. For ChatGPT, prefer the guarded inspect_only, feature_small, or fix_tests template when it fits. A stale watcher preserves the task but returns execution_blocked and directs the client to health_check; otherwise call wait_for_task until terminal. Use execution_mode=assess_only to pre-assess risk and get an assessment_id without creating a task; then invoke the returned next_tool_call using only execution_mode=execute and the full assessment_id.get_task_statusCheck task status, execution phase, watcher health, pending reason, current command, timeout, and change evidence.get_resultRead result.md, or return structured availability and watcher evidence while the task is not terminal.get_result_jsonRead the structured result.json for deterministic task acceptance.get_diffRead task diff evidence, or return structured availability and watcher evidence while it is not ready.get_test_logRead test.log, or return structured availability and watcher evidence while it is not ready.list_workspaceList files and directories within the workspace (sensitive files excluded).read_workspace_fileRead a file within the workspace. Sensitive files (secrets, keys, tokens) are blocked. In Direct mode (with session_id), reads are scoped to the session's repo_path and return sha256.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": {
"jcooley8-pincushion-plugin": {
"command": "npx",
"args": [
"-y",
"pincushion-mcp"
]
}
}
}
{
"mcpServers": {
"jiezeng2004-design-patchwarden": {
"command": "npx",
"args": [
"-y",
"patchwarden@0.6.1"
],
"env": {
"CONTROL_PLANE_API_KEY": "YOUR_CONTROL_PLANE_API_KEY_HERE",
"PATCHWARDEN_OWNER_TOKEN": "YOUR_PATCHWARDEN_OWNER_TOKEN_HERE"
}
}
}
}