# KillMeet > KillMeet is a line that closes. You write what must be true. You keep it, or the people who must answer get one card before a deadline. A kll is that line once it has a deadline (stored as a `kill`). Humans answer the card; agents may send the line via MCP. Pure `decide()` closes outcomes — nothing invents the decision. KillMeet is for people who need a written close instead of a meeting. Guests answer via invite token with no account. Default UI locale is English (`/en`); Norwegian is at `/nb`. Internally a kll is a `kill` record. MCP tools keep `*_kill` names. ## How humans use KillMeet - [Home (English)](https://killmeet.com/en): The line is the page — live composer, the card they open, the written close, one price, FAQ. Registers WebMCP when `document.modelContext` is supported. - [Home (Norwegian)](https://killmeet.com/nb): Same landing in Norwegian UI; brand saying stays English. - [Create a kll](https://killmeet.com/en/create): Write a line and send a kll. Sign-in required when Supabase is configured. - [Demo invite](https://killmeet.com/i/demo-vendor-km184): Guest card — Friday office vs remote (orient → cards → done). - [Login](https://killmeet.com/en/login): Magic link for creators only. Participants never need an account. ## How agents should use KillMeet ### Discovery (do this first) - [MCP Server Card](https://killmeet.com/.well-known/mcp.json): SEP-2127 discovery — Streamable HTTP remote at `/mcp`. - [Server Card (beside endpoint)](https://killmeet.com/mcp/server-card): Experimental `application/mcp-server-card+json` location. - [Legacy card path](https://killmeet.com/.well-known/mcp/server-card.json): Belt-and-braces for older clients. - [OAuth protected resource](https://killmeet.com/.well-known/oauth-protected-resource): RFC 9728 — MCP clients discover the authorization server here. - [OAuth authorization server](https://killmeet.com/.well-known/oauth-authorization-server): RFC 8414 — authorize / token / register / revoke. - Cursor / Claude remote config: `{ "mcpServers": { "killmeet": { "url": "https://killmeet.com/mcp" } } }` (OAuth consent opens for subscribers). ### Protocol - Transport: **Streamable HTTP** — `POST https://killmeet.com/mcp` with JSON-RPC 2.0 (`Accept: application/json, text/event-stream`). - Handshake: `initialize` → `tools/list` → `tools/call`. - Org tools: **OAuth Bearer** after subscriber consent (scopes `kills:read` `kills:write`). Dynamic client registration at `/mcp/oauth/register`. Legacy `MCP_AGENT_SECRET` remains a pilot fallback. - Guests: `submit_response` uses `invite_token` only — no account, no OAuth. - In-browser (WebMCP): on `/{lang}/` the page may register `open_create_kill`, `open_demo_invite`, `read_agent_map`, `read_mcp_server_card` via `document.modelContext` when supported (public navigation helpers — separate from remote OAuth MCP). ### Payments (x402) - Agent pay-per-call will use **x402** over MCP (Vercel `x402-mcp` / Coinbase MCP transport) — not Polar. - Flow: unpaid `tools/call` → `isError` + `PaymentRequired` (`structuredContent`) → retry with `_meta["x402/payment"]` → result may include `_meta["x402/payment-response"]`. - x402 pilot prices (USD / call): `create_kill` $0.05, `submit_response` $0.01, `fold_proposals` $0.01; `list_kills` / `get_kill` / `get_minutes` / `suggest_next_action` / `compile_line` free. - Settlement is **pilot-only** — `_meta["x402/payment"]` waives the call without on-chain verify. Do not send real funds expecting settlement. Human creator billing uses Polar (`/api/polar/checkout/start`). - Spec: https://github.com/coinbase/x402/blob/main/specs/transports-v2/mcp.md · Vercel: https://vercel.com/blog/introducing-x402-mcp-open-protocol-payments-for-mcp-tools ### Invariants - Drafts only: agenda, clarification, steelman, minutes narrative. Never invent consensus or treat `decide()` as a merge tool. - Guests are `invite_token` rows — do not require `auth.users` to participate. - MCP tools: `list_kills`, `get_kill`, `create_kill`, `submit_response`, `get_minutes`, `suggest_next_action`, `compile_line`, `fold_proposals`. There is **no** `decide` tool. ### Compile gate (agents are the 99%) - Every `create_kill` line is compiled like a human's: class, guest gesture, lock, stakes, reversibility → a route. `note` (low-risk note/lookup) is written to the ledger with no human interrupted; `batch` folds into the owner's open agent card (≤5 items, 15 min); `card` opens normally; `approval` returns `needs_approval` until you re-call with `confirmRisk: true` after a human has seen it. - `compile_line` returns that compile read-only. `fold_proposals` lets Jev pick among proposals under the org's criteria; `decide()` rule `policy` closes only at P ≥ 0.85 and uncontested, otherwise the owner is asked. Both leave ledger events. - Guests may answer by replying to the invite email; Jev classifies the reply into the card's gesture (≥0.85 recorded, 0.6–0.85 held for the owner, else text). ## Product invariants - `org_id` on every business row. - Deadline only (Europe/Oslo) — no start-time UI. - Outcomes: Closed / Decided / Unresolved / Escalated — no blood/weapons metaphors in copy. - Max one automatic clarification round; then owner resolve or unresolved. ## HTTP API (selected) - [POST /api/kills](https://killmeet.com/api/kills): Create + open a kll (API path stays `/api/kills`). - [GET /api/invites/:token](https://killmeet.com/api/invites/demo-vendor-km184): Guest load (+ clarifications when resolving). - [POST /api/invites/:token/responses](https://killmeet.com/api/invites/demo-vendor-km184/responses): Upsert answers; last guest may `complete`. - [POST /api/kills/decide](https://killmeet.com/api/kills/decide): Run pure decide engine (cron / lifecycle). - [GET /api/health](https://killmeet.com/api/health): Liveness. ## Optional - [GitHub](https://github.com/Walgermo/killmeet): Source repository. - [Agent guide](https://github.com/Walgermo/killmeet/blob/main/AGENTS.md): Contributor / coding-agent map.