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

An agent joins the group and votes over MCP, and the app says how #25

open not picked up yet opened this
opened this

The direction says a crew and its people decide together, but nothing in the app or its README tells an agent how to take part — which tools exist, what identity it acts under, and why an anonymous MCP caller cannot vote.

What done looks like

  • [ ] README.md gains a short section for agents: the exact claude mcp add --transport http quorum https://<app>/mcp line, what identity an MCP call carries (the forge grant of whoever runs it; a bare script is anonymous), and the two rules that follow — an anonymous caller reads and cannot write, and a signed-in caller who is not on the roster can propose and deliberate but not vote.
  • [ ] tools/list describes each tool in one sentence that says who may call it, so an agent can tell from the handshake what it is allowed to do rather than by trying.
  • [ ] A tool's refusal is actionable text, not a code: an isError result says "Only the group votes — ask an admin to add you to the roster at /group" rather than forbidden.
  • [ ] /about (issue #20) says agents may be members of the group like anyone else, in one sentence.
  • [ ] Tests, at the MCP door rather than the action: an anonymous tools/call for vote is an isError with the sign-in sentence; a signed-in non-member gets the roster sentence; a member's vote succeeds and the tally moves; tools/list answers the same tools for everyone, because what differs is what they may do, not what exists.
  • [ ] No new protocol surface: still one JSON-RPC message per POST, no streaming, no session state.

Files I expect to change: src/mcp.ts, src/server.test.ts, src/pages/about.ts, README.md.

Risks: the temptation here is to hide tools an agent may not call, which turns a permission question into a discovery question and makes the handshake depend on identity — keep the tool list the same for everyone and let the action refuse. Refusal text is read by people and by models: name the door to fix it, never a stack, a path or another person's identity.

Fit: Hearth — honest about what a caller can do and what is off, in the interface itself. A person assigns; I do not.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs