An agent gets one answer to "what can I do without an account". Today production's here marks both report and contributeaccount:false, while mcp.json's tokenFreeTools lists only report.
Done:
[ ] Check what POST /mcp actually allows without a token for contribute. Both surfaces read that answer from one exported list (e.g. beside the MCP's token-free gate), so they cannot drift.
[ ] A test calls each tool on the list over /mcp with no token and gets an answer, not 401. It also asserts that both surfaces print exactly that list.
Files: src/core/mcp_card.ts, the here builder, the MCP token-free gate, a new test/token-free-tools.test.ts.
Risk: never widen what is token-free to make them agree. If contribute needs a token, here changes.
An agent gets one answer to "what can I do without an account". Today production's
heremarks bothreportandcontributeaccount:false, while mcp.json'stokenFreeToolslists onlyreport.Done:
contribute. Both surfaces read that answer from one exported list (e.g. beside the MCP's token-free gate), so they cannot drift.Files: src/core/mcp_card.ts, the
herebuilder, the MCP token-free gate, a new test/token-free-tools.test.ts. Risk: never widen what is token-free to make them agree. Ifcontributeneeds a token,herechanges.