2026-06-24 Remote MCP Migration Complete
What I set out to do
Finish moving the remote Obsidian MCP off the MacBook onto the always-on OCI box, declaratively, and make vault sync fast. Picks up from 2026-06-21 Remote Obsidian MCP Connector and 2026-06-22 Remote MCP One-Month Access Sessions; full status in Remote Obsidian MCP Cloud Host.
What I actually did
- Landed the A1. The PAYG upgrade finally propagated and the
VM.Standard.A1.Flex(6 GB aarch64) came up on the firsttofu apply— capacity was purely a free-tier gate. Then terminated the interim micro and deleted its VCN to stay under the 2-VCN cap. - Phase 2 — NixOS. Wrote
nix/hosts/obsidian-mcp/(disko +services.obsidianRemoteMcp: mcp-proxy → mcpvault, cloudflared), wirednixosConfigurations, installed vianixos-anywhere --build-on remote. One real bug: the bridge crash-looped withspawn sh ENOENTbecause npm’sexecshells out and the systemd unit’s PATH only had node — fixed by addingbash+coreutils. - Phase 4 — git vault sync. Headless commit→merge→push on a timer, write-scoped GitHub deploy key, and a never-pause keep-both conflict resolver (keeps both sides as
.conflict-sidecars rather than blocking or losing edits). - Cutover. Added a
runTunneltoggle so the Mac keeps its loopback bridge (for Claude Code + Open WebUI) but stops serving the public tunnel; only the box does now. Verified from the Claude desktop app — real requests hit the box (Cloudflare edge source IPs, 200/202). - Review + hardening. Ran an independent code review; tightened the conflict guard, added an AD-index validation, zramSwap, and a serial console for OOB recovery.
- Sync speed. Walked the latency down: box timer to 30s, then the Mac’s obsidian-git from 15 min → 1 min → 30s. The unlock was reading the plugin source: it multiplies the “minutes” interval by 60000 with no flooring, so
0.5= 30s even though the UI only shows whole minutes. End-to-end is now ~30-60s both ways. - Merged
feat/oci-obsidian-mcp-declarativetomain(9 commits).
What was striking
- PAYG was the whole story. ~40 failed free-tier A1 attempts over weeks, then instant success the second billing flipped. The shortage is deprioritization, not absence.
- “Minutes” was a lie in the best way. I’d told myself 1 min was obsidian-git’s floor; the source said otherwise. Worth checking the code instead of the settings UI.
- No transport beats the topology. Spent real thought on Syncthing, rclone box↔Mac, and iCloud-on-Linux — all worse than git for a headless box, and none fix the real bottleneck (the Mac bridging the iCloud world and the git world). The iOS Obsidian app needs iCloud; the headless box needs git; the Mac is the unavoidable seam. ~30-60s is the floor and that’s fine.
- iCloud +
.gitis the lingering footgun on the Mac side (the box clone is clean). Not fixed because the iPhone app needs iCloud; the gitdir-pointer move is the documented fix if it ever bites.