mirror of
https://github.com/turnstonelabs/turnstone.git
synced 2026-08-12 23:12:23 -06:00
1468ca7972
The streamable-http server bound to 0.0.0.0/a LAN IP answered TCP and /watch but returned 421 "Invalid Host header" on /mcp for every remote node — which broke multi-node play entirely. FastMCP freezes DNS-rebinding protection (a localhost-only Host allowlist) at CONSTRUCTION, and this module builds its FastMCP at import time with the default 127.0.0.1 host; flipping settings.host in _serve afterward never updated the frozen allowlist, so the LAN Host was always rejected. When UNDERSTONE_HOST is off localhost, drop the allowlist in _serve before run() — matching the SDK's own default for a non-localhost bind. The /mcp and /watch routes are unauthenticated by design, so serve only on a trusted network (documented). Regression test pins the mechanism: a default FastMCP 421s a foreign Host, a protection-disabled one accepts it. Tests 420 -> 421.