Skip to content

Clarify Operator MCP VPS loopback and SSH forwarding troubleshooting #961

@realproject7

Description

@realproject7

Context

While recovering a PlotLink OWS operator session, the Operator MCP documentation turned out to be technically correct, but the VPS path was still easy to misread during troubleshooting.

The confusion was around these points:

  • quadwork-mcp-operator --port 8400 always connects to 127.0.0.1:8400 from the machine where the MCP command runs.
  • If QuadWork runs on a VPS, 178.x.x.x:8400 refusing a direct connection is expected when the backend is bound to VPS loopback only.
  • A local MCP client needs an SSH tunnel, not direct TCP access to the VPS backend port.
  • ssh <alias> may use a configured VPS user, while ssh <ip> may silently use the local username, so direct-IP checks can test the wrong SSH identity.

Observed example:

ssh -G quadwork
# user quadwork
# hostname 178.105.192.232

ssh -G 178.105.192.232
# user <local macOS username>
# hostname 178.105.192.232

nc -vz 178.105.192.232 22
# succeeds

nc -vz 178.105.192.232 8400
# connection refused; expected if backend is loopback-only

ssh -N -L 8400:127.0.0.1:8400 quadwork
quadwork-mcp-operator --port 8400
# list_projects works through the forwarded local loopback

Request

Update docs/operator-mcp.md to make VPS troubleshooting more explicit.

Suggested additions:

  • Add a short "Expected failures" note under Remote / VPS registration:
    • Direct nc/browser access to <vps-ip>:8400 may fail and that is normal if the backend is not exposed publicly.
    • Do not open the backend port publicly to fix this.
  • Prefer this exact tunnel command in examples:
ssh -N -L 8400:127.0.0.1:8400 <ssh-alias-or-user@vps>
  • Add a verification checklist:
ssh -G <alias> | sed -n '1,20p'
lsof -iTCP:8400 -sTCP:LISTEN -n -P
quadwork-mcp-operator --port 8400
  • Warn that ssh <ip> and ssh <alias> can resolve to different users/identity files, so users should verify ssh -G before assuming the target is the intended VPS login.
  • Clarify that the stdio JSON-RPC examples may need a short sleep after sending requests so the MCP server has time to return tool responses.

Acceptance Criteria

  • A user can tell the difference between:
    • SSH access to the VPS working,
    • direct public access to <vps-ip>:8400 failing normally,
    • local forwarded 127.0.0.1:8400 working.
  • The doc includes a copy-pasteable SSH tunnel command using -N -L.
  • The doc explains why opening port 8400 publicly is not the right fix.
  • The doc calls out SSH alias vs direct IP username/identity differences.
  • The direct stdio examples remain accurate and mention response wait timing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions