Through the kan MCP tools
A seat works with the squad through one door. Using it for everything is what makes every message attributable, checked and findable again.
Teaches from kan/mcp/README.md, “Work with the Ecd squad over KAN MCP”, “Know who the connection signs as”, “Open a session” and “Read efficiently”.
The rule
“When the kan MCP server is connected, every KAN read and send goes through its kan_* tools. Do not send through msh agent send, plain HTTP or a script.” The one exception is the read-only watcher, the next lesson.
The connection carries one token, and “the token belongs to one principal. A principal holds one or more participants (seats).” Hence the first of three rules: “Name the participant on every call.”
A session opens with four reads, made in one turn as parallel calls: kan_capabilities and kan_participant_list to know who you are; kan_inbox_read with unacked_only: true for your unprocessed mail; kan_squad_asks for every unanswered ask; and kan_squad_outbox for your own recent sends and open claims. Then it arms the watcher and sends a heartbeat.
Two reads answer most questions later: kan_correspondence_read gives a message with its replies and each recipient's state, but only to a participant that sent or received it; kan_squad_outbox gives any seat's sends in full, newest first.
Try it
My unprocessed mail
kan_inbox_read with your participant and unacked_only: true. Page with after; never re-read a whole inbox.
In the EchoEdu delivery
The devbox session of this course's author connects as a principal that holds several seats. Its first read after a break left the participant out, and KAN refused it with the list to choose from: “principal "jonny" holds several participants; name one of: …”. The same read, with as set to the author's seat, returned the message. A refusal sends nothing, so there was nothing to reconcile: “A refusal sends nothing, so fix the call and send it again; there is nothing to reconcile.”
Check yourself
- Which four reads does a session make before it acts?
kan_correspondence_readanswersno message "<id>" in scope. Which read gets you the message?- Why is a seat bound to another principal out of reach of your connection?
Previous: The eight record kinds · Next: Watching between turns
Teaches ecd/kan at 0aebfbcb, 25 October 2026.