[#961] Clarify Operator MCP VPS loopback and SSH forwarding troubleshooting#996
Conversation
…ooting Docs-only. The VPS path in operator-mcp.md was technically correct but easy to misread while troubleshooting. Adds a focused "Remote / VPS troubleshooting" subsection under the existing Registration section (references it, no duplication): - restates the loopback rule (client always hits 127.0.0.1 of the machine running the MCP command) - "Expected failures": nc/browser to <vps-ip>:8400 refused is NORMAL when the backend is loopback-only; do NOT open 8400 publicly to fix it - the exact tunnel command `ssh -N -L 8400:127.0.0.1:8400 <alias-or-user@vps>` - a bottom-up verify checklist (ssh -G, lsof, quadwork-mcp-operator) - warns that `ssh <ip>` vs `ssh <alias>` can resolve to different users/identity files — verify with `ssh -G` - a symptom → cause → fix table Also notes why the stdio examples carry a trailing `sleep` (keep stdin open so the MCP server can flush responses before the pipe closes). No code or behavior change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
@re2 APPROVE at Docs-only, exactly one file ( Checked (evidence)
One flag for the operator gate: No blocking issues. Standing no-merge rule — operator merges. |
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Epic Alignment: PASS
Docs-only #961 closes the folded #967 Operator MCP clarification item without touching code, behavior, config, or runtime contracts.
Checked (evidence)
- Structural gate: PR body contains filled
## EPIC Alignment,## Self-Verification, and## Deviations. - Issue/epic context:
gh issue view 961+gh api repos/realproject7/quadwork/issues/967; #961 asks only for clearer VPS loopback/SSH-forwarding troubleshooting. - Live diff scope:
gh api repos/realproject7/quadwork/pulls/996/files→ exactlydocs/operator-mcp.md(+43). - Existing registration context preserved:
docs/operator-mcp.md:69-85still states the client-machine loopback rule and registration options. - New troubleshooting coverage:
docs/operator-mcp.md:87-124covers expected public-IP refusal, do-not-open-8400 guidance,-N -Ltunnel, bottom-up checks, SSH alias-vs-IP identity, and symptom/cause/fix table. - Stdio timing clarification:
docs/operator-mcp.md:150-152explains the trailingsleepbehavior requested by #961. - Riskiest part of this diff: docs could imply exposing 8400 is acceptable; acceptable because
docs/operator-mcp.md:93-94explicitly says refusal is expected and public exposure is the wrong fix. - Kill-list: scanned all items — clean for docs-only scope.
- CI:
gh pr checks 996→test pass 58s.
Findings
- None.
Decision
Approve at 39d0723c581fe30660f45ba70b90187126ab16f4. The patch is confined to the requested doc and directly covers every #961 acceptance point without duplicating the registration section or changing behavior.
Closes #961
Summary
Docs-only. The Operator MCP VPS path in
docs/operator-mcp.mdwas technically correct but easy to misread during troubleshooting (surfaced while recovering a PlotLink OWS operator session). Adds a focused Remote / VPS troubleshooting subsection directly under the existing Remote / VPS registration section — it references that section rather than duplicating its commands.New content:
quadwork-mcp-operator --port 8400always connects to127.0.0.1:8400of the machine running the command.nc -vz <vps-ip> 8400refused (and a browser tohttp://<vps-ip>:8400failing) is normal when the backend binds VPS loopback only; do not open 8400 publicly to "fix" it (security regression) — forward over SSH instead.ssh -N -L 8400:127.0.0.1:8400 <ssh-alias-or-user@vps>.ssh -G,lsof -iTCP:8400 -sTCP:LISTEN,quadwork-mcp-operator).ssh <ip>andssh <alias>can resolve to different users/identity files — verify withssh -Gbefore assuming you're hitting the intended VPS login.sleep(keep stdin open so the server flushes responses before the pipe closes).EPIC Alignment
EPIC #967 — folded / isolated (per the batch brief). Docs-only, low risk; no epic-tracked surface touched.
Self-Verification
Adversarial diff re-read — the diff is confined to
docs/operator-mcp.md: one new### Remote / VPS troubleshootingsubsection + a one-paragraph note in the stdio intro. No other file changed.Kill-list / safety invariants:
.mdfile changed (git statusshows justdocs/operator-mcp.md).#remote--vps-registration) and the stdio examples (#direct-stdio-json-rpc-invocation); the-N -Ltunnel is a refinement of the existing-Lexample, not a conflicting instruction.Build + test evidence:
node server/pack-smoke.test.js→ PASS (24 shipped Node files, 11 runtime assets).#remote--vps-registration,#direct-stdio-json-rpc-invocation).Acceptance criteria (1:1):
<vps-ip>:8400failing normally / local forwarded127.0.0.1:8400working ✅-N -LSSH tunnel command ✅sleepnote) ✅Deviations
None.