{"serverId":"mcp-registry/io.github.kapoost/humanmcp","tools":[{"name":"delete_skill","fixed":{"name":"delete_skill","description":"Delete a skill by slug. Owner-only: requires Authorization: Bearer <token>.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"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":58,"tokensAfter":58},{"name":"fetch_answer","fixed":{"name":"fetch_answer","description":"Poll for an answer to an ask_human question. Marks the question as fetched the first time an answer is returned. Rate-limited 30/hr/IP.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"fetch_narada_result","fixed":{"name":"fetch_narada_result","description":"Poll a narada job by ID. Statuses: pending, running, done, failed. When done, returns all persona voices.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"get_author_profile","fixed":{"name":"get_author_profile","description":"Author identity, bio, and a browsing cheatsheet. Records a profile-view event.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":48,"tokensAfter":48},{"name":"get_certificate","fixed":{"name":"get_certificate","description":"Return a formatted copyright/authenticity certificate for a piece.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":56,"tokensAfter":56},{"name":"get_persona","fixed":{"name":"get_persona","description":"Return one persona's full prompt by slug. Session-gated except for Hodor (guardian rules must always apply). Pass session_token if your client cannot set an Authorization header.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"session_token":{"type":"string","description":"Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"get_persona_journal","fixed":{"name":"get_persona_journal","description":"Read a persona's raw reflection journal. Owner-only — the journal is a private feedback loop, not for external callers.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":72,"tokensAfter":72},{"name":"get_skill","fixed":{"name":"get_skill","description":"Return one skill's full body by slug. Session-gated except for -public suffixed skills (guardian bypass). Pass session_token if your client cannot set an Authorization header.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"session_token":{"type":"string","description":"Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":138,"tokensAfter":138},{"name":"list_blobs","fixed":{"name":"list_blobs","description":"List typed data artifacts (images, contact, vectors, documents, datasets, capsules). Filter by blob_type. Readable-column reflects caller_kind + caller_id vs audience.","inputSchema":{"type":"object","properties":{"blob_type":{"type":"string"},"caller_id":{"type":"string"},"caller_kind":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":96,"tokensAfter":96},{"name":"list_collection","fixed":{"name":"list_collection","description":"List works kapoost owns but did NOT create. Public items always; members-only surface only after session activation.","inputSchema":{"type":"object","properties":{"session_token":{"type":"string","description":"Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":110,"tokensAfter":110},{"name":"list_content","fixed":{"name":"list_content","description":"List published pieces (slug, title, type, access, tags). Optional type/tag filters.","inputSchema":{"type":"object","properties":{"tag":{"type":"string"},"type":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":61,"tokensAfter":61},{"name":"list_personas","fixed":{"name":"list_personas","description":"List every persona (slug, title, role). Full prompts unlock after bootstrap_session.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":49,"tokensAfter":49},{"name":"list_provenance","fixed":{"name":"list_provenance","description":"List provenance items (chain of custody, certificates, invoices) for an artwork slug. Tries piece then collection.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"list_skill_groups","fixed":{"name":"list_skill_groups","description":"Index of every skill tag in use, with slugs per group. Public — no bootstrap required.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":50,"tokensAfter":50},{"name":"list_skills","fixed":{"name":"list_skills","description":"List skills (slug, category, title, tags). Optional category / tag filters.","inputSchema":{"type":"object","properties":{"tag":{"type":"string"},"category":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"mysloodsiewnia_get","fixed":{"name":"mysloodsiewnia_get","description":"Fetch one document from kapoost's vault by slug. Requires Authorization: Bearer <edit token or friend token>. Friend tokens: vault-side filter enforces scope + access:private invisibility — an out-of-scope or private slug returns not_found. Vault offline ⇒ {status:offline}.","inputSchema":{"type":"object","required":["doc_slug"],"properties":{"doc_slug":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"mysloodsiewnia_list","fixed":{"name":"mysloodsiewnia_list","description":"Enumerate vault documents without FTS — for browsing by type or paginating. Requires Authorization: Bearer <edit token or friend token>. Friend tokens see only their scoped doc_types; access:private is invisible. Args: {doc_type?: string filter (note/pdf/literatura/calendar_event/...), limit?: int 1-200 default 50, offset?: int default 0}. Returns [{slug, title, doc_type, created_at, chunk_count}]. Vault offline ⇒ {status:offline}.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"doc_type":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":171,"tokensAfter":171},{"name":"mysloodsiewnia_search","fixed":{"name":"mysloodsiewnia_search","description":"Full-text search (BM25 over SQLite FTS5) on kapoost's local vault corpus. Requires Authorization: Bearer <edit token or friend token>. Friend tokens see only their scoped doc_types; access:private is invisible. Returns {status, results:[{source, type, body, doc_slug, title, page, citation}], summary}. Vault offline ⇒ {status:offline}.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer"},"query":{"type":"string"},"doc_slug":{"type":"string"},"doc_type":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"mysloodsiewnia_status","fixed":{"name":"mysloodsiewnia_status","description":"Read-only liveness probe on kapoost's local vault (mysłoodsiewnia). Returns {status: online|degraded|offline, last_seen, commit_sha, personas_updated_at, skills_updated_at}. Offline is a stable state — retry later, don't escalate. Requires Authorization: Bearer <edit token or friend token>.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":108,"tokensAfter":108},{"name":"mysloodsiewnia_write","fixed":{"name":"mysloodsiewnia_write","description":"Ingest a new document into kapoost's vault (wave 2). OWNER-ONLY — friend tokens receive {status:write_denied,reason:owner_only}. Args: {doc_type (required), title (required), body (required, ≤100 KiB), source_path?, meta?}. Requires Authorization: Bearer <owner token>. On Unauthorized: obtain the token by either (a) calling bootstrap_session(code=<owner poet fragment>) and reading SESSION_TOKEN from the response briefing (1h TTL, preferred for agents that already know the code), or (b) if you ha","inputSchema":{"type":"object","required":["doc_type","title","body"],"properties":{"body":{"type":"string"},"meta":{"type":"object"},"title":{"type":"string"},"doc_type":{"type":"string"},"source_path":{"type":"string"}}},"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":215,"tokensAfter":215},{"name":"read_blob","fixed":{"name":"read_blob","description":"Read one blob by slug. Returns text or base64-encoded data. Access-gated by audience unless blob is public.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"caller_id":{"type":"string"},"caller_kind":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"read_collection_item","fixed":{"name":"read_collection_item","description":"Full record for one collection item + dossier count. Access-gated: private is never visible, members needs session.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"session_token":{"type":"string","description":"Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"read_content","fixed":{"name":"read_content","description":"Read a public piece by slug. Locked pieces return a hint pointing at request_access.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"read_provenance","fixed":{"name":"read_provenance","description":"Return one provenance item with resolvable file URLs. slug + id required.","inputSchema":{"type":"object","required":["slug","id"],"properties":{"id":{"type":"string"},"slug":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":66,"tokensAfter":66},{"name":"run_narada","fixed":{"name":"run_narada","description":"Create an async narada job: server routes context to 3-5 personas via keyword manifest, then generates each voice via Sonnet 4.6 (Haiku 4.5 for journal recaps). Returns job ID for polling. Pass `personas` to pick the voices yourself and skip the router entirely — the router matches keywords only and cannot read a request to include or exclude someone written in the context.","inputSchema":{"type":"object","required":["context"],"properties":{"from":{"type":"string"},"context":{"type":"string"},"personas":{"type":"array","items":{"type":"string"},"description":"Optional. Explicit persona slugs (from list_personas) to consult. When present the keyword manifest is not used and these exact personas answer, in this order. Omit for automatic keyword routing."}}},"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":224,"tokensAfter":224},{"name":"search_content","fixed":{"name":"search_content","description":"Search kapoost's pieces by words in title, tags, description and body. Every word must match (AND). Polish diacritics are folded, so \"czlowieczenstwa\" finds \"człowieczeństwa\". Use this BEFORE ask_human — most questions about which piece is which are answered here instantly, while ask_human waits for a human. Locked pieces are matched by title and tags only; their body is never searched or quoted.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer"},"query":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":158,"tokensAfter":158},{"name":"submit_answer","fixed":{"name":"submit_answer","description":"Submit an answer to a challenge-gated piece. Correct answer unlocks and returns the full body.","inputSchema":{"type":"object","required":["slug","answer"],"properties":{"slug":{"type":"string"},"answer":{"type":"string"}}},"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":74,"tokensAfter":74},{"name":"upsert_skill","fixed":{"name":"upsert_skill","description":"Create or replace a skill by slug. Owner-only: requires Authorization: Bearer <token>. Writes JSON to content/skills/<slug>.json.","inputSchema":{"type":"object","required":["slug","category","title","body"],"properties":{"body":{"type":"string"},"slug":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"category":{"type":"string"}}},"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":116,"tokensAfter":116}],"toolsChanged":28,"tokensSaved":0,"todo":[{"tool":"ask_human","params":["from","context","question"]},{"tool":"bootstrap_session","params":["code"]},{"tool":"delete_skill","params":["slug"]},{"tool":"fetch_answer","params":["id"]},{"tool":"fetch_narada_result","params":["id"]},{"tool":"get_certificate","params":["slug"]},{"tool":"get_persona","params":["slug"]},{"tool":"get_persona_journal","params":["slug"]},{"tool":"get_skill","params":["slug"]},{"tool":"leave_comment","params":["from","slug","text"]},{"tool":"leave_message","params":["from","text","contact","context","regarding"]},{"tool":"list_blobs","params":["blob_type","caller_id","caller_kind"]},{"tool":"list_content","params":["tag","type"]},{"tool":"list_provenance","params":["slug"]},{"tool":"list_skills","params":["tag","category"]},{"tool":"load_skill_group","params":["name"]},{"tool":"mysloodsiewnia_get","params":["doc_slug"]},{"tool":"mysloodsiewnia_list","params":["limit","offset","doc_type"]},{"tool":"mysloodsiewnia_search","params":["limit","query","doc_slug","doc_type"]},{"tool":"mysloodsiewnia_write","params":["body","meta","title","doc_type","source_path"]},{"tool":"prepare_narada","params":["context"]},{"tool":"read_blob","params":["slug","caller_id","caller_kind"]},{"tool":"read_collection_item","params":["slug"]},{"tool":"read_content","params":["slug"]},{"tool":"read_provenance","params":["id","slug"]},{"tool":"recall","params":["code","limit","query"]},{"tool":"record_persona_reflection","params":["narada_id","persona_slug","error_context"]},{"tool":"remember","params":["code","from","tags","text"]},{"tool":"request_access","params":["slug"]},{"tool":"request_license","params":["slug","caller_id","intended_use"]},{"tool":"run_narada","params":["from","context"]},{"tool":"search_content","params":["limit","query"]},{"tool":"submit_answer","params":["slug","answer"]},{"tool":"suggest_skills","params":["files","languages","git_origin"]},{"tool":"synthesise_persona_patterns","params":["slug"]},{"tool":"upsert_skill","params":["body","slug","tags","title","category"]},{"tool":"verify_content","params":["slug"]}],"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."}