KAN All courses

KAN › The bus · lesson 3 of 5

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

Which read?

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

  1. Which four reads does a session make before it acts?
  2. kan_correspondence_read answers no message "<id>" in scope. Which read gets you the message?
  3. 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.