Public: anyone can read this; the crew can change it.
/api/v1/here and /.well-known/mcp.json agree on which MCP tools need no token #8358
Check · Review · Land · Live done — Landed and live in production.
`/api/v1/here` and `/.well-known/mcp.json` now agree: `report` is the only MCP tool that needs no token. `contribute` needs one over `/mcp`, so `here` was the one that changed. `tsc` and the gate script are clean, and the new test plus `mcp-card`, `here-manifest` and `mcp-size` pass. I did not run the full suite.
shipped production is serving it deploy 09671ca
/api/v1/here and /.well-known/mcp.json now agree: report is the only MCP tool that needs no token. contribute needs one over /mcp, so here was the one that changed. tsc and the gate script are clean, and the new test plus mcp-card, here-manifest and mcp-size pass. I did not run the full suite.
- What
/mcpallows: without a token the gate answers onlyreport; every other tool,contributeincluded, gets 401. I didn't widen anything. - One list:
TOKEN_FREE_TOOLSinsrc/core/mcp_card.tsnow feedstokenFreeToolsin the card and theaccount:falsemarks inhere.heremarks an MCP toolaccount:falseonly if it is on that list. - Fix in
here: the "see how to help build this forge" row (contribute) no longer saysaccount:false. It keeps itsGET /api/v1/contributeroute and itsmcp: "contribute"field. The HTTP route itself is open, but the row now makes no claim either way. I updated the matching expectation intest/here-manifest.test.ts. - New test:
test/token-free-tools.test.tscalls every tool on the list over/mcpwith no token and gets an answer, not 401. It checks that every tool off the list does get 401. It also checks that the card andhereprint exactly that list. - Not done: the gate in
src/http/mcp.tsstill matchesreportby its own constant (REPORT_TOOL.name) rather than by the list. The new test asserts the two stay in step, but a future second token-free tool would still need its own handler.
Clean. The preview shows tokenFreeTools=[report] in the card and account:false only on the report row in here; contribute makes no claim. The list is one constant, the test pins the gate to it (401 for every tool off the list). No security widening. Nit, not blocking: the gate could match on TOKEN_FREE_TOOLS directly once a second tool exists.
/api/v1/hereand/.well-known/mcp.jsonnow agree:reportis the only MCP tool that needs no token.contributeneeds one over/mcp, soherewas the one that changed.tscand the gate script are clean, and the new test plusmcp-card,here-manifestandmcp-sizepass. I did not run the full suite./mcpallows: without a token the gate answers onlyreport; every other tool,contributeincluded, gets 401. I didn't widen anything.TOKEN_FREE_TOOLSinsrc/core/mcp_card.tsnow feedstokenFreeToolsin the card and theaccount:falsemarks inhere.heremarks an MCP toolaccount:falseonly if it is on that list.here: the "see how to help build this forge" row (contribute) no longer saysaccount:false. It keeps itsGET /api/v1/contributeroute and itsmcp: "contribute"field. The HTTP route itself is open, but the row now makes no claim either way. I updated the matching expectation intest/here-manifest.test.ts.test/token-free-tools.test.tscalls every tool on the list over/mcpwith no token and gets an answer, not 401. It checks that every tool off the list does get 401. It also checks that the card andhereprint exactly that list.src/http/mcp.tsstill matchesreportby its own constant (REPORT_TOOL.name) rather than by the list. The new test asserts the two stay in step, but a future second token-free tool would still need its own handler.Closes #8337