An SSH tunnel brings the home computer's tools to the tablet or phone browser.
The interface loads from GitHub Pages in the Android browser and talks to 127.0.0.1:6883 on the tablet itself. The SSH client (ConnectBot or Termux) forwards that port to 127.0.0.1:6883 on the home computer, where the local server runs. Files, commands and MCP services are therefore the home computer's. Without a tunnel, the home computer can also be published through a reverse proxy.
127.0.0.1; only SSH is reachable from outside.1234 for LM Studio) and point the profile to http://127.0.0.1:1234/v1.In /etc/ssh/sshd_config (or a file in /etc/ssh/sshd_config.d/), keys only and your user only; then restart the service (sudo systemctl restart sshd):
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
AllowUsers user
AllowTcpForwarding localRun the server in the SSH session itself, from the project directory and without opening the home browser. There is no URL to copy: the tablet signs in on the page with the user name and password of the home account (section 3).
cd ~/projects/my-project && zerochat --no-browser --keep-server --port 6883cd picks the project directory, shown in the server header. You can change it later from the interface, in project mode.--keep-server: the Android browser stops sending heartbeats when the tab goes to the background; without this option the server would shut down a minute after switching apps. With it the page sends no heartbeats: it rereads the server state, or reconnects, when you return to the tab.zerochat: an SSH session with a forced or automated command does not load your full PATH. If zerochat is not in /usr/bin, use the full path shown by command -v zerochat.To keep the tablet without a console at home, create a key pair just for it and add the public key to ~/.ssh/authorized_keys with these restrictions, on a single line. It can only open the tunnel to those two ports and launch ZeroChat:
restrict,pty,port-forwarding,permitopen="127.0.0.1:6883",permitopen="127.0.0.1:1234",command="cd ~/projects/my-project && /home/user/venv/bin/zerochat --no-browser --keep-server --port 6883" ssh-ed25519 AAAA… tabletpty is required: with a terminal, closing the session sends ZeroChat the hang-up signal and it stops; without one it would keep running and holding the port.
authorized_keys (section 2).user@home with that key.6883 → 127.0.0.1:6883 and 1234 → 127.0.0.1:1234.Without the restricted key, type the launch command in the console or put it in the host's post-login automation to run it on connect.
With the restricted key, just open the session, without -N, so ZeroChat starts:
ssh -i ~/.ssh/tablet -L 6883:127.0.0.1:6883 -L 1234:127.0.0.1:1234 user@homeWithout it, pass the launch command with -t, so the session has a terminal and ZeroChat stops when it closes:
ssh -t -L 6883:127.0.0.1:6883 -L 1234:127.0.0.1:1234 user@home 'cd ~/projects/my-project && zerochat --no-browser --keep-server --port 6883'http://127.0.0.1:6883 as the local server URL, leave Use proxy off and press Connect.127.0.0.1.| Situation | What happens |
|---|---|
| The SSH connection drops | ZeroChat stops at home when sshd closes the session. Reconnect and return to the tab: the page reconnects with the daily token. |
| The page asks you to sign in | The browser had no saved session or the daily token has expired (at midnight or after clearing the data). Sign in again; commands running at home carry on. |
| On reconnect, ZeroChat does not start: Address already in use | The one from the previous session is still running, because sshd has not noticed the drop yet or the session had no terminal. Wait for sshd to close it or stop it: pkill -f -- '--port 6883'. |
| Tools fail with 403 Expired or invalid tool authorization | The tablet and home clocks differ by more than 30 s. Turn on automatic date and time on both. |