[#1009] docs(operator-mcp): Make the Operator MCP guide backend-neutral and remote-safe#1017
Conversation
…al and remote-safe - Backend-neutral: retitle "from a Claude agent" → "from an MCP client"; the operator server is a generic stdio MCP server usable by any MCP-capable client. Add a generic registration framing (every client launches the same `quadwork-mcp-operator --port <port>` bin) and a verified Codex CLI registration using the `-c mcp_servers.<name>` mechanism — the same one QuadWork uses to attach its chat shim to Codex agents (src/lib/injectMode.js: codex → proxy_flag; server/index.js:576-580). - Remote-safe: keep the loopback-only security model and SSH local-forward remote access intact; genericize the "reaches your laptop's 127.0.0.1" notes from Claude-Desktop-specific to any local client. - No environment-specific identifiers: replace the sample project id `plotlink-ows` with a neutral `myproject`. - Align the start_batch example to the verified default interval (30 min, server/mcp-operator/tools/triggers.js:29). Preserved per ticket: tool-first operating model, @Head queue ownership, the read-only (Tier 1) vs state-changing (Tier 2) split, and the local-loopback / no-public-port security warnings. All 14 documented tools match the current mcp-operator surface. Docs-only; no backend/runtime code, packages, tests, legacy migration implementation, other docs, or other repos touched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Epic Alignment: FAIL
The ticket requires a secure local-forward remote-access model, but the guide’s opening contradicts that model.
Checked (evidence)
- Structural gate: filled
## EPIC Alignmentand## Self-Verification; docs-only, non-UI PR. - Scope and tool surface:
docs/operator-mcp.md:220-242lists all 14 tools, matchingserver/mcp-operator/tools/{projects,read,chat-send,triggers,agents,batch}.js. - Codex registration:
docs/operator-mcp.md:52-61matchessrc/lib/injectMode.js:27-29andserver/index.js:575-580. - Riskiest part of this diff: remote guidance; its local-forward instructions are correct, but the opening claim makes that supported topology appear forbidden.
- Kill-list: scanned changed docs and supporting source — one accuracy hit listed below.
- CI:
gh pr checks 1017 --repo realproject7/quadwork→ test pass (55s).
Findings
- [blocking] The guide contradicts its own supported SSH local-forward deployment.
- File:
docs/operator-mcp.md:7 - Why it fails: “must run on the same machine” is false when a local client reaches the VPS loopback through the documented
ssh -Ltunnel (docs/operator-mcp.md:82-115). This directly undermines #1009’s remote-safe access requirement. - Do instead: say the client must share the backend’s loopback namespace, either by running on the QuadWork host or by using the documented SSH local forward; then retain the link to the Remote/VPS section.
- File:
Decision
Correct the opening constraint so it agrees with the secure remote workflow before approval.
@re2 Independent Review — APPROVE ✅ (head
|
…ard support Address @re1: the "MCP client must run on the same machine" note (line 7) contradicted the SSH local-forward path documented under Remote / VPS. Restate it as a shared-loopback requirement that explicitly allows either same-host operation or the documented SSH tunnel. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Epic Alignment: PASS
The corrected opening now accurately preserves #1009’s secure local-forward model without expanding scope.
Checked (evidence)
- Re-review delta:
24fcb8ba12d63e63d8f1a2e438478a98f73085ac..64ce6b8f2ea297d36ee254a9e8fe6724b270cf82changes onlydocs/operator-mcp.md:7. - Prior finding resolved: the new shared-loopback wording explicitly permits same-host operation or the documented SSH local forward.
- Riskiest part of this delta: remote topology guidance; it now agrees with the tunnel flow at
docs/operator-mcp.md:82-115. - Kill-list: scanned the new range — clean.
- CI:
gh pr checks 1017 --repo realproject7/quadwork→ test pass (51s).
Findings
None.
Decision
The targeted correction resolves the contradictory deployment claim and the reviewed delta is accurate.
@re2 Re-review — APPROVE ✅ (new head
|
Closes #1009
Summary
Docs-only. Makes
docs/operator-mcp.mddescribe a generic tool-first MCP operator surface rather than a Claude-only feature, adds a verified Codex registration, keeps the loopback/SSH-forward security model, and removes an environment-specific project id. Scope:docs/operator-mcp.mdonly.Changes
quadwork-mcp-operator --port <port>bin; only the syntax differs). Genericized the Remote/VPS "reaches your laptop's127.0.0.1" notes from Claude-Desktop-specific to any local client.-c mcp_servers.<name>config flags — the exact mechanism QuadWork already uses to inject its chat shim into Codex agents (src/lib/injectMode.jscodex→proxy_flag;server/index.js:576-580). No unverified/config.toml setup invented.plotlink-owswith a neutralmyproject. (IPs/hosts elsewhere are placeholders:<vps-ip>,<alias>,178.x.x.x.)start_batchexample to the verified default interval (30 min).Preserved per ticket
EPIC Alignment
docs/operator-mcp.md. This diff touches exactly that file.Self-Verification
list_projectsread_chatbatch_statusread_queuelist_agents(server/mcp-operator/tools/{projects,read}.js);send_messagestart_batchtrigger_nowstop_batchagent_controlinterrupt_allset_batchappend_batchensure_batch(.../tools/{chat-send,triggers,agents,batch}.js).src/lib/injectMode.js:27-29(codex →proxy_flag);server/index.js:576-580(-c mcp_servers.chat.command/args). The operator equivalent usescommand="quadwork-mcp-operator",args=["--port","8400"].server/mcp-operator/tools/triggers.js:29,35.server/index.js:2324(server.listen(PORT, "127.0.0.1")).rg -i plotlink docs/operator-mcp.md→ none; no real hostnames/IPs (placeholders only).git diff --stat→docs/operator-mcp.mdonly.Acceptance criteria
docs/operator-mcp.md