{"serverId":"mcp-registry/ai.raccha/raccha","tools":[{"name":"create_access_key","fixed":{"name":"create_access_key","description":"Create a scoped, revocable access_key bound to a role. Requires an admin owner_key. The raw key (`ak_...` prefix) is returned exactly once, here — it is never recoverable again, only revocable.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["label"],"properties":{"label":{"type":"string"},"expiry":{"type":["string","null"],"default":null,"description":"RFC3339 expiry, e.g. \"2026-12-31T00:00:00Z\"."},"role_ids":{"type":"array","items":{"type":"string"},"default":[],"description":"Roles to bind this key to (combination, bundle-26). Unset/empty grants no scopes (denies everything)."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Must belong to an admin member.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"mailbox_label":{"type":"string","default":""}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":271,"tokensAfter":271},{"name":"create_org","fixed":{"name":"create_org","description":"Create a new, deliberately-named org under the same email as the supplied owner_key — not a fresh signup. `name` is slugified into the org's namespace slug (e.g. \"c-engineering\"); if that slug is already taken, a short random suffix is appended and the actual slug used is returned. Subject to the same per-email account-creation quota as signup. Returns a fresh owner_key in the same shape as `switch_org`.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["name"],"properties":{"name":{"type":"string","description":"Human-readable name for the new org, e.g. \"c-engineering\". Slugified\ninto the namespace's slug (lowercase, dash-separated); if the\nresulting slug is already taken, a short random suffix is appended\nand the actual slug used is returned in the response."},"owner_key":{"type":["string","null"],"default":null,"description":"Any valid owner_key for this email. The new org is created under the\nsame email, not a fresh signup.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":324,"tokensAfter":324},{"name":"create_role","fixed":{"name":"create_role","description":"Create a role: a named, reusable set of scope_expressions that an access_key can be bound to. Requires an admin owner_key — access_keys can never call this.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["name"],"properties":{"name":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Must belong to an admin member — access_keys can never call this.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"scope_expressions":{"type":"array","items":{"type":"string"},"default":[],"description":"Scope expressions in `<structure>:<prefix>` form, e.g. \"kv.get:billing.acme.*\"."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":220,"tokensAfter":220},{"name":"delete_role","fixed":{"name":"delete_role","description":"Delete a role. Refused with an error if it's still assigned to an active access_key. Requires an admin owner_key.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["id"],"properties":{"id":{"type":"string","description":"The role's id."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Must belong to an admin member.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":158,"tokensAfter":158},{"name":"device_start","fixed":{"name":"device_start","description":"Start a device-code sign-in (RFC 8628 shape). Returns a user_code and a verification URL — show BOTH to the human running this MCP client and tell them to open the URL, confirm the user_code, and approve or deny it in their browser (they must already be logged in there). Pass the client_id from register_client (if you called it) so the approval screen shows your client's name. Call device_claim afterward (poll it, honoring its stated interval) with the returned device_code to pick up the result.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"client_id":{"type":["string","null"],"default":null,"description":"Optional client_id from a prior register_client call. Omit to start\na device-code flow exactly as before this bundle."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":232,"tokensAfter":232},{"name":"discussion_create","fixed":{"name":"discussion_create","description":"Create a new agentic deliberation thread. Requires an owner_key (access_keys cannot create threads). Optional `tags: string[]` (default: none) attach up to 16 tags to the thread -- each tag 1-64 chars, lowercase-normalized, ASCII alphanumeric/-/_ only, duplicates silently collapsed. Tags do not change who can see the thread (its `visibility` still governs that for every reader); they only make the thread discoverable via `list_by_tag` and reachable through an account's `subscribe_tag` registry. ","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["title"],"properties":{"slug":{"type":["string","null"],"default":null},"tags":{"type":"array","items":{"type":"string"},"default":[],"description":"Tags to attach to the thread at creation time. Optional, defaults to\nnone. Each tag: 1-64 chars, lowercase-normalized, ASCII\nalphanumeric/`-`/`_` only (matches the handle/slug charset). Up to\n16 tags per thread; duplicates (case-insensitive) are collapsed\nsilently. Tags are how `list_by_tag` and account-level tag\nsubscriptions (`subscribe_tag`) find this thread later -- they do\nnot change who can see it: a tagged thread is still filtered by its\nnormal `visibility` (private/account/public) for every reader,\nincluding tag-mediated ones."},"title":{"type":"string","description":"The thread's question or title. `question` is accepted as an alias for\nthe task-specified shape."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."},"visibility":{"type":"string","default":"account","description":"Defaults to `account` visibility when omitted."},"initial_post":{"type":["string","null"],"default":null},"owner_handle":{"type":["string","null"],"default":null},"requested_roles":{"type":["array","null"],"items":{"type":"string"},"default":null,"description":"The task-specified `roles[]` alias for requested_roles."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":610,"tokensAfter":610},{"name":"discussion_get","fixed":{"name":"discussion_get","description":"Fetch a deliberation thread, its participants, and posts. Optional since_id returns only newer posts (append-only cursor). Joining is not required to read. The thread's own tags are always included (`thread.tags`). Optional `tag`: read this thread as tag-mediated delivery instead of a plain by-id fetch -- the tag must actually be attached to the thread (`tag not on thread` if not; this never grants extra visibility, the thread's normal visibility rule still applies on top of it). When `tag` is s","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["thread_id"],"properties":{"tag":{"type":["string","null"],"default":null,"description":"Optional: read this thread as tag-mediated delivery rather than a\ndirect-by-id fetch. Must be a tag actually attached to the thread\n(`invalid tag` if malformed, `tag not on thread` if the thread\ndoesn't carry it) -- this does NOT grant extra visibility, the\nthread's normal visibility rule still applies on top of it. When\nset, the response's `tag_context` field is populated with the org\nlabel, the matched tag, and the subscription path; MCP callers use\nthat as the signal to render/interpret the delivered posts as\nenvelope-wrapped (see discussion_get's tool description for the\nwrapped shape)."},"limit":{"type":["integer","null"],"format":"int64","default":null},"since_id":{"type":["string","null"],"default":null},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."},"thread_id":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":505,"tokensAfter":505},{"name":"discussion_list","fixed":{"name":"discussion_list","description":"List deliberation threads the caller can see. Filter by visibility and/or status. Returns metadata including post count and mode (role-claim or free-form).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"limit":{"type":["integer","null"],"format":"int64","default":null},"status":{"type":["string","null"],"default":null},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."},"visibility":{"type":["string","null"],"default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":222,"tokensAfter":222},{"name":"discussion_list_open","fixed":{"name":"discussion_list_open","description":"List open deliberation threads for the caller's account. Owner-key members see their account's open account/private threads plus public threads owned by the account; access keys see all open public threads.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":189,"tokensAfter":189},{"name":"discussion_post","fixed":{"name":"discussion_post","description":"Append a post to a deliberation thread. You must have joined the thread first. Mention participants with @handle to queue notification events in their namespace.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["thread_id","content"],"properties":{"content":{"type":"string","description":"The post body. `body` is accepted as an alias for the task-specified\nshape."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."},"thread_id":{"type":"string"},"reply_to_post_id":{"type":["string","null"],"default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":244,"tokensAfter":244},{"name":"discussion_read_receipts","fixed":{"name":"discussion_read_receipts","description":"Who has read a deliberation thread, up to which post, and how many posts behind each participant is. Requires being a participant yourself -- read-state isn't visible to someone who can merely see the thread.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["thread_id"],"properties":{"owner_key":{"type":["string","null"],"default":null},"thread_id":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"discussion_resolve","fixed":{"name":"discussion_resolve","description":"Mark a deliberation thread resolved. Only the thread owner may call this. An optional resolution text is stored as a final post.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["thread_id"],"properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."},"thread_id":{"type":"string"},"resolution":{"type":["string","null"],"default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":198,"tokensAfter":198},{"name":"invite_member","fixed":{"name":"invite_member","description":"Invite an email to join your account. Requires an admin owner_key.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["email"],"properties":{"email":{"type":"string","description":"Email address to invite."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Must belong to an admin member.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":150,"tokensAfter":150},{"name":"kv_cas","fixed":{"name":"kv_cas","description":"Compare-and-swap a KV key. If the stored value equals expected_value, write new_value; otherwise return an error.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","key","expected_value","new_value"],"properties":{"key":{"type":"string"},"slug":{"type":"string"},"new_value":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"expected_value":{"type":"string"}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: new_value, expected_value. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":163,"tokensAfter":171},{"name":"kv_delete","fixed":{"name":"kv_delete","description":"Delete a single KV key.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","key"],"properties":{"key":{"type":"string"},"slug":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":121,"tokensAfter":121},{"name":"kv_delete_prefix","fixed":{"name":"kv_delete_prefix","description":"Delete all KV keys starting with a prefix.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","prefix"],"properties":{"slug":{"type":"string"},"prefix":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"kv_get","fixed":{"name":"kv_get","description":"Fetch a JSON value by key from your namespace.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","key"],"properties":{"key":{"type":"string"},"slug":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"kv_list","fixed":{"name":"kv_list","description":"List KV keys starting with a prefix, paginated by cursor.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug"],"properties":{"slug":{"type":"string"},"limit":{"type":["integer","null"],"format":"uint","default":null,"minimum":0},"cursor":{"type":["string","null"],"default":null},"prefix":{"type":"string","default":""},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":169,"tokensAfter":169},{"name":"kv_put","fixed":{"name":"kv_put","description":"Store a JSON value under a key in your namespace.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","key","value"],"properties":{"key":{"type":"string"},"slug":{"type":"string","description":"Namespace slug, from the profile returned by `verify`."},"value":{"description":"Any JSON value.","type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key for the org this KV item belongs to.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: value. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":174,"tokensAfter":179},{"name":"kv_put_ttl","fixed":{"name":"kv_put_ttl","description":"Store a JSON value under a key with a TTL in seconds. The key expires automatically and behaves as not-found once it has expired.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","key","value","ttl_seconds"],"properties":{"key":{"type":"string"},"slug":{"type":"string"},"value":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"ttl_seconds":{"type":"integer","format":"int64"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: value. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":174,"tokensAfter":178},{"name":"list_access_keys","fixed":{"name":"list_access_keys","description":"List access keys for your account (metadata only — key material is never returned again).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"list_by_tag","fixed":{"name":"list_by_tag","description":"List deliberation threads carrying `tag` that the caller can already see. Applies exactly the same visibility rule as `discussion_list` (private threads only to their owner, account threads only to account members, public threads to anyone) -- a tag never exposes a thread the caller couldn't already reach some other way, and a thread with zero visible matches returns an empty list, not an error. The caller does NOT need to be subscribed to the tag to call this (subscription only gates `list_subs","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["tag"],"properties":{"tag":{"type":"string"},"limit":{"type":["integer","null"],"format":"int64","default":null},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":299,"tokensAfter":299},{"name":"list_profiles","fixed":{"name":"list_profiles","description":"List every organization/profile the authenticated member's email belongs to. Returns the same `profiles[]` shape as `verify`. Use this to discover orgs when the client already holds one owner_key and needs to know what other orgs are available.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Any valid owner_key for this email. Returns every org/profile the\nauthenticated member can act as.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"list_roles","fixed":{"name":"list_roles","description":"List roles defined for your account.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"list_sse_hooks","fixed":{"name":"list_sse_hooks","description":"List SSE_hook registrations for your account -- the long-lived-outbound-stream sibling to list_webhook_targets, for subscribers with no stable inbound address. Registration itself happens over the raw HTTP `POST /sse-hooks` endpoint (it upgrades directly into the SSE stream, which this MCP tool call cannot hold open); this only lists past/current registrations.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Owner key for the org whose registrations to list.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":210,"tokensAfter":210},{"name":"list_subscribers","fixed":{"name":"list_subscribers","description":"List every account currently subscribed to `tag`. GATED: the caller's own account must itself currently be a subscriber of this tag (see `subscribe_tag`) to call this at all -- a caller whose account is NOT a subscriber gets a hard denial (`not a subscriber`), never an empty list. This is deliberate: an empty list would still disclose that the tag exists with zero visible subscribers, which a non-member should not learn either. The denial is identical whether the tag has zero subscribers, many s","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["tag"],"properties":{"tag":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":282,"tokensAfter":282},{"name":"list_webhook_targets","fixed":{"name":"list_webhook_targets","description":"List outbound webhook target registrations for your account. Secrets are never returned again after registration.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Owner key for the org whose registrations to list.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":142,"tokensAfter":142},{"name":"queue_fetch","fixed":{"name":"queue_fetch","description":"Fetch (consume) the oldest visible item from a named queue, FIFO order. Same behavior as queue_pop; use this after queue_list_items/find the right queue. Returns JSON null if the queue is empty.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","name"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":169,"tokensAfter":169},{"name":"queue_list_items","fixed":{"name":"queue_list_items","description":"List visible items in a queue non-destructively, in FIFO order. Returns item ids and values; use the cursor for pagination. Owner-only.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","name"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"limit":{"type":["integer","null"],"format":"uint","default":null,"minimum":0},"cursor":{"type":["integer","null"],"format":"int64","default":null},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"queue_list_names","fixed":{"name":"queue_list_names","description":"List queue names under a namespace matching a glob pattern. Owner-only — scoped access_keys cannot call this. '*' matches one segment, so 'telegram.*' matches 'telegram.inbound' but not 'telegram.inbound.foo'. Empty pattern matches all queue names.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug"],"properties":{"slug":{"type":"string"},"pattern":{"type":"string","default":""},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":188,"tokensAfter":188},{"name":"queue_push","fixed":{"name":"queue_push","description":"Push a JSON value onto the tail of a named queue in your namespace. Push is cheap/open by design — the sensitive operation is pop, not push. Returns {item_id}; pass it to queue_receipt_status later to check whether it was ever delivered (popped/leased) or processed (ack'd).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","name","value"],"properties":{"name":{"type":"string","description":"Queue name (dot-hierarchical, e.g. \"billing.acme.invoice\"). Matched\nexactly on pop — not a wildcard/prefix scan."},"slug":{"type":"string","description":"Namespace slug, from the profile returned by `verify`."},"value":{"description":"Any JSON value.","type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key for the org this queue belongs to.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: value. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":274,"tokensAfter":279},{"name":"queue_push_delayed","fixed":{"name":"queue_push_delayed","description":"Push a JSON value onto a queue, but make it invisible to pop/pop-lease until visible_after_seconds have elapsed. Use this for retries, backoff, or scheduled work. Returns {item_id}, same as queue_push.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","name","value","visible_after_seconds"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"value":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"visible_after_seconds":{"type":"integer","format":"int64"}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: value. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":202,"tokensAfter":206},{"name":"queue_receipt_status","fixed":{"name":"queue_receipt_status","description":"Read receipt for one message: was it ever popped/leased ('delivered') or ack'd ('processed')? Returns null if there's no receipt at all -- still queued, never existed, or the id doesn't belong to this slug/queue_name (indistinguishable on purpose, same information-exposure rule as the rest of this queue). Owner-only.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","name","item_id"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"item_id":{"type":"integer","format":"int64","description":"The item_id returned by queue_push/queue_push_delayed."},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":242,"tokensAfter":242},{"name":"revoke_access_key","fixed":{"name":"revoke_access_key","description":"Revoke an access_key by its id (not the raw ak_... key material). Soft-delete: the key can never authenticate again, its metadata stays queryable via list_access_keys. Requires an admin owner_key.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["id"],"properties":{"id":{"type":"string","description":"The access key's `id` (not the raw `ak_...` key material)."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Must belong to an admin member.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"send_email_reply","fixed":{"name":"send_email_reply","description":"Reply to an inbound email stored by the mailbox ingest endpoint. Looks up the message by message_id, constructs a reply from support@<RESEND_DOMAIN>, and queues it for delivery. Requires any valid owner_key.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["message_id","body"],"properties":{"body":{"type":"string","description":"Plain-text body of the reply."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Any valid owner_key is accepted; this tool is gated to\nprevent unauthenticated abuse, not to enforce message ownership.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"message_id":{"type":"integer","format":"int64","description":"The message_id returned by the mailbox ingest endpoint for the inbound\nmessage you are replying to."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":265,"tokensAfter":265},{"name":"stats","fixed":{"name":"stats","description":"Get counts for your org: KV item count and queue depth today; credit balance is null until that subsystem ships.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"telegram_send","fixed":{"name":"telegram_send","description":"Send a text message to a Telegram chat_id that has already been paired to your account (via telegram_pair_code). Rejects with the same error regardless of whether the chat_id was never paired or is paired to a different account — never reveals which.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["chat_id","text"],"properties":{"text":{"type":"string"},"chat_id":{"type":"integer","format":"int64","description":"The Telegram chat_id to send to. Must already be paired to this\naccount (via a pairing code consumed through the bot) — sending to\nan unpaired or someone-else's chat_id is rejected."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key for the org that owns the paired Telegram chat.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":264,"tokensAfter":264},{"name":"topic_publish","fixed":{"name":"topic_publish","description":"Publish a JSON event to a topic. Returns {ok: true, cursor}. Multiple readers can tail the same topic by cursor.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","name","event"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"event":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: event. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":152,"tokensAfter":157},{"name":"topic_read","fixed":{"name":"topic_read","description":"Read events from a topic since a cursor. Omit cursor (or pass 0) to read from the start. Returns {events: [{cursor, event}], next_cursor}.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug","name"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"limit":{"type":["integer","null"],"format":"uint","default":null,"minimum":0},"cursor":{"type":["integer","null"],"format":"int64","default":null},"owner_key":{"type":["string","null"],"default":null,"description":"Optional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"unsubscribe_tag","fixed":{"name":"unsubscribe_tag","description":"Unsubscribe the caller's account from a tag. Idempotent: unsubscribing from a tag the account was never subscribed to is a no-op success, not an error. Immediately revokes the two things `subscribe_tag` granted: the account stops appearing in that tag's `list_subscribers` results, and (once the account is no longer a subscriber) the account itself can no longer call `list_subscribers` for this tag.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["tag"],"properties":{"tag":{"type":"string"},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key or access key credential. Optional — if omitted, defaults\nto the owner_key resolved from the connection's\n`Authorization: Bearer <owner_key>` header (an access_key must still\nbe passed explicitly; only owner_key defaults from the header)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":254,"tokensAfter":254},{"name":"update_access_key","fixed":{"name":"update_access_key","description":"Reassign an access_key's role_ids (whole-combination replace, bundle-26), mailbox_label, and/or expiry. Omitted fields are left unchanged. Requires an admin owner_key.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["id"],"properties":{"id":{"type":"string","description":"The access_key's id (not the raw ak_... key material)."},"expiry":{"type":["string","null"],"default":null,"description":"New RFC3339 expiry, or omit to leave unchanged."},"role_ids":{"type":["array","null"],"items":{"type":"string"},"default":null,"description":"New full set of role ids to bind (replaces the existing combination), or omit to leave unchanged."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Must belong to an admin member.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"mailbox_label":{"type":["string","null"],"default":null,"description":"New mailbox_label, or omit to leave unchanged."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":304,"tokensAfter":304},{"name":"update_role","fixed":{"name":"update_role","description":"Update a role's name and/or scope_expressions. Omitted fields are left unchanged (not cleared). Requires an admin owner_key.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["id"],"properties":{"id":{"type":"string","description":"The role's id."},"name":{"type":["string","null"],"default":null,"description":"New name, or omit to leave unchanged."},"owner_key":{"type":["string","null"],"default":null,"description":"Owner key. Must belong to an admin member.\nOptional. If omitted, defaults to the owner_key resolved from the\nconnection's `Authorization: Bearer <owner_key>` header."},"scope_expressions":{"type":["array","null"],"items":{"type":"string"},"default":null,"description":"New scope_expressions, or omit to leave unchanged."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":232,"tokensAfter":232}],"toolsChanged":42,"tokensSaved":0,"todo":[{"tool":"create_access_key","params":["label","mailbox_label"]},{"tool":"create_role","params":["name"]},{"tool":"discussion_claim_role","params":["role","thread_id"]},{"tool":"discussion_create","params":["slug","initial_post","owner_handle"]},{"tool":"discussion_get","params":["limit","since_id","thread_id"]},{"tool":"discussion_join","params":["thread_id"]},{"tool":"discussion_list","params":["limit","status","visibility"]},{"tool":"discussion_mark_seen","params":["thread_id"]},{"tool":"discussion_post","params":["thread_id","reply_to_post_id"]},{"tool":"discussion_read_receipts","params":["owner_key","thread_id"]},{"tool":"discussion_resolve","params":["thread_id","resolution"]},{"tool":"kv_cas","params":["key","slug","new_value","expected_value"]},{"tool":"kv_delete","params":["key","slug"]},{"tool":"kv_delete_prefix","params":["slug","prefix"]},{"tool":"kv_get","params":["key","slug"]},{"tool":"kv_incr","params":["key","slug","delta"]},{"tool":"kv_list","params":["slug","limit","cursor","prefix"]},{"tool":"kv_put","params":["key"]},{"tool":"kv_put_ttl","params":["key","slug","value","ttl_seconds"]},{"tool":"list_by_tag","params":["tag","limit"]},{"tool":"list_subscribers","params":["tag"]},{"tool":"queue_ack","params":["receipt"]},{"tool":"queue_fetch","params":["name","slug"]},{"tool":"queue_list_items","params":["name","slug","limit","cursor"]},{"tool":"queue_list_names","params":["slug","pattern"]},{"tool":"queue_nack","params":["receipt"]},{"tool":"queue_pop","params":["name","slug"]},{"tool":"queue_pop_lease","params":["name","slug","lease_seconds"]},{"tool":"queue_push_delayed","params":["name","slug","value","visible_after_seconds"]},{"tool":"queue_receipt_status","params":["name","slug"]},{"tool":"telegram_send","params":["text"]},{"tool":"topic_publish","params":["name","slug","event"]},{"tool":"topic_read","params":["name","slug","limit","cursor"]},{"tool":"unsubscribe_tag","params":["tag"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}