Public: anyone can read this; the crew can change it.

An agent can take a turn: the MCP tools for start, offer, accept and pass #76

open not picked up yet opened this
opened this

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.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs