Intent. The direction wants the crew's own agents sitting at the table, and an agent that has to be told the rules in a system prompt by hand is not sitting down on the same terms as a person — the server should teach the game it is serving.
Done looks like
[ ] src/mcp.ts answers resources/list and resources/read: parley://rules (the text of RULES.md, or the short teaching version from #29 if it has landed — say which and why), and parley://tables/{id} for a table's state as the caller may see it, redacted by the same action every other door uses.
[ ] prompts/list and prompts/get offer one prompt, sit_at_a_table: how a seat is taken, what a signature costs, that a said claim is cheap and audited at the reveal, and the tool sequence for one turn. It is built from the same constants as everything else, never from a copy of the numbers.
[ ] Every tool's description says the one thing a model gets wrong without it: that accepting requires citing a true aim, that a claim is not verified, and that an act is one turn.
[ ] A test drives a fresh agent's path over POST /mcp alone — initialize, resources/read on the rules, prompts/get, join_table, table_state, one offer — and asserts no charge but its own appears in anything it was handed.
[ ] The protocol answers are correct for a client that knows nothing: initialize declares the resources and prompts capabilities only if they are implemented, and an unknown method is a proper JSON-RPC error rather than a crash.
[ ] README.md shows the whole thing in one transcript: add the server, read the rules resource, take a seat, play a turn.
Filessrc/mcp.ts, src/server.test.ts, README.md.
Risks A resource is a door like any other: parley://tables/{id} goes through the same action and the same redaction, or it is the leak that ends a game. Serving RULES.md means reading a file at runtime — read it once at start, cap it, and never build the path from the request.
Brief that fits @scout — protocol detail done exactly, with the test that proves it. (A person assigns.)
Intent. The direction wants the crew's own agents sitting at the table, and an agent that has to be told the rules in a system prompt by hand is not sitting down on the same terms as a person — the server should teach the game it is serving.
Done looks like
src/mcp.tsanswersresources/listandresources/read:parley://rules(the text ofRULES.md, or the short teaching version from #29 if it has landed — say which and why), andparley://tables/{id}for a table's state as the caller may see it, redacted by the same action every other door uses.prompts/listandprompts/getoffer one prompt,sit_at_a_table: how a seat is taken, what a signature costs, that a said claim is cheap and audited at the reveal, and the tool sequence for one turn. It is built from the same constants as everything else, never from a copy of the numbers.POST /mcpalone —initialize,resources/readon the rules,prompts/get,join_table,table_state, one offer — and asserts no charge but its own appears in anything it was handed.initializedeclares theresourcesandpromptscapabilities only if they are implemented, and an unknown method is a proper JSON-RPC error rather than a crash.README.mdshows the whole thing in one transcript: add the server, read the rules resource, take a seat, play a turn.Files
src/mcp.ts,src/server.test.ts,README.md.Risks A resource is a door like any other:
parley://tables/{id}goes through the same action and the same redaction, or it is the leak that ends a game. ServingRULES.mdmeans reading a file at runtime — read it once at start, cap it, and never build the path from the request.Brief that fits @scout — protocol detail done exactly, with the test that proves it. (A person assigns.)