Install
go install github.com/SohrabZ/x-browser-mcp@latest
Added
-allowed-host names a further Host the server answers to. Only a bind
beyond loopback that is reached by hostname needs it, now that every request has
to address the server by name; a loopback deployment never does.
Changed
- A read that fails says what failed. Anything that was not "login required" or
"rate limited" collapsed to internal error, so a list id that does not exist
read as a server fault. Now 400 for a request that was wrong, 404 for a
post, account or list X had nothing on, 503 while a login or a write holds the
profile, and 504 for a read that ran out of time. Only a fault you can do
nothing about is still hidden.
- Reaching the server by a hostname other than
localhost needs that name passed
to -allowed-host, including on a bind beyond loopback. See below.
Fixed
- A page you visit in an ordinary browser could reach the loopback server. A
domain the attacker controls, re-resolved to 127.0.0.1 after the page has
loaded, gave it a route to the port, and the read tools would have answered.
Every request is now checked before it reaches a handler, /mcp included: the
Host header has to name this server, and any Origin is refused because it
means a browser is calling. This applies to every bind — rebinding works against
a LAN address too, and exposing the session to a network is not exposing it to
every website.
- A read that broke was reported as a read that found nothing. A failure while
scraping or scrolling ended the collection loop, and an empty result then read as
"the account or list may not exist" — sending the caller after a post that was
probably there, and hiding the fault that stopped it being found.
- A failure reported the error it arrived wrapped in rather than the one that was
recognised, so a profile already in use answered with the path of the lock that
said so.
- The MCP server told clients a version that was written down, and had been three
releases stale. It is read from the build.