Intent. Seat the crew's agents at the table on the same terms as a person, which is what the direction asks for, using the actions that already exist.
The split. #13 is "an agent can play" and waits on #10, the binding and the reveal. Measured on main today (948abc0): tools/list over POST /mcp answers list_tables, table_state, open_table, join_table, leave_table — an agent can sit down and watch and cannot take a turn, while POST /api/tables/:id/{start,offer,accept,pass} all work. Nothing about the reveal is needed to close that gap. This issue is the pre-reveal half; #13 keeps the reveal-aware parts.
Done looks like
[ ] Four tools in tools in src/mcp.ts — start_table, make_offer, accept_offer, pass_turn — each a name, one sentence, a JSON schema and the action. No rule in this file.
[ ] The schemas say what the game means, so a model can fill them without guessing: an accord is one named setting per clause of this table's charter, and a citation is a clause and a setting the caller may swear. The sentence for accept_offer says plainly that accepting spends a truth that becomes public forever (§6) and that naming no citation swears the first one the charter offers.
[ ] table_state's answer is the one an agent can act on: it carries may, cite and your_payoff from the state issue below, so an agent reads what it may do rather than probing for refusals.
[ ] A refusal is the action's own named failure and its sentence, mapped to an MCP error a model can correct from — never a bare "error".
[ ] Tests in src/server.test.ts that fail without it: an agent with a signed identity opens, sits, starts, offers, accepts and passes entirely over POST /mcp; an unsigned one gets signin_required at every one of them; an accord that is not this charter's is refused with the boundary's words.
[ ] README.md shows the two lines that put a crew agent in a seat.
Files I expect to change.src/mcp.ts, src/server.test.ts, README.md.
Risks. Every tool here writes, so each is same-origin-checked and rationed exactly like the HTTP door it shares an action with. The tools inherit the argument checking #60 is adding in pull #73 — land after it rather than beside it. An agent must never be able to read another seat's charge through a tool: the redaction is tableState's, and #63's property test is what proves it stays.
Who. @mason, reviewed by @sentinel. Waits on #60 and on the state issue.
Intent. Seat the crew's agents at the table on the same terms as a person, which is what the direction asks for, using the actions that already exist.
The split. #13 is "an agent can play" and waits on #10, the binding and the reveal. Measured on
maintoday (948abc0):tools/listoverPOST /mcpanswerslist_tables,table_state,open_table,join_table,leave_table— an agent can sit down and watch and cannot take a turn, whilePOST /api/tables/:id/{start,offer,accept,pass}all work. Nothing about the reveal is needed to close that gap. This issue is the pre-reveal half; #13 keeps the reveal-aware parts.Done looks like
toolsinsrc/mcp.ts—start_table,make_offer,accept_offer,pass_turn— each a name, one sentence, a JSON schema and the action. No rule in this file.accept_offersays plainly that accepting spends a truth that becomes public forever (§6) and that naming no citation swears the first one the charter offers.table_state's answer is the one an agent can act on: it carriesmay,citeandyour_payofffrom the state issue below, so an agent reads what it may do rather than probing for refusals.src/server.test.tsthat fail without it: an agent with a signed identity opens, sits, starts, offers, accepts and passes entirely overPOST /mcp; an unsigned one getssignin_requiredat every one of them; an accord that is not this charter's is refused with the boundary's words.README.mdshows the two lines that put a crew agent in a seat.Files I expect to change.
src/mcp.ts,src/server.test.ts,README.md.Risks. Every tool here writes, so each is same-origin-checked and rationed exactly like the HTTP door it shares an action with. The tools inherit the argument checking #60 is adding in pull #73 — land after it rather than beside it. An agent must never be able to read another seat's charge through a tool: the redaction is
tableState's, and #63's property test is what proves it stays.Who. @mason, reviewed by @sentinel. Waits on #60 and on the state issue.