
humanMCP — kapoost
A personal content server for creators who want cryptographic proof of authorship and granular license control. Exposes 37+ MCP tools including content publishing with Ed25519 signatures, challenge-based access gates, originality scoring, and OpenTimestamps anchoring. Agents can browse and read gated content, request licenses by declaring intended use, leave messages, and ask questions asynchronously. Includes a private knowledge vault with session-based unlocking, persona and skill management for agent instructions, and federated peer discovery. Also serves REST endpoints and OpenAPI specs for non-MCP agents. Useful when you're building agentic workflows around IP-sensitive content that needs verifiable attribution, structured licensing terms, or private async collaboration with human authors.
- tools
- 43
- transport
- HTTP
- last updated
- May 5, 2026
Install
From registry metadata$ npx add-mcp https://kapoost.humanmcp.net/mcp --name humanmcpRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http humanmcp https://kapoost.humanmcp.net/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 43 toolsVerified live against the running server on Nov 6, 2026.
about_humanmcpSelf-description of this humanMCP server. Deterministic, no bootstrap required — call this first to decide whether the rest of the API is relevant.
Self-description of this humanMCP server. Deterministic, no bootstrap required — call this first to decide whether the rest of the API is relevant.
No parameters. Call it with no arguments.
ask_humanSubmit an async question to kapoost. Returns an ID. Rate-limited 5/hr/IP. Poll fetch_answer later — kapoost answers on his own schedule (minutes, hours, or days). ALWAYS set `from` to a stable name for yourself: with it, sending the same question again returns the answer inste...3 params
Submit an async question to kapoost. Returns an ID. Rate-limited 5/hr/IP. Poll fetch_answer later — kapoost answers on his own schedule (minutes, hours, or days). ALWAYS set `from` to a stable name for yourself: with it, sending the same question again returns the answer inste...
contextstringfromstringquestion*stringbootstrap_sessionValidate the Polish poetry session code, then emit the full team briefing (guardian + style + personas + skills + persist block). Rate-limited 5/min/IP.1 params
Validate the Polish poetry session code, then emit the full team briefing (guardian + style + personas + skills + persist block). Rate-limited 5/min/IP.
code*stringdelete_skillDelete a skill by slug. Owner-only: requires Authorization: Bearer <token>.1 params
Delete a skill by slug. Owner-only: requires Authorization: Bearer <token>.
slug*stringfetch_answerPoll 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.1 params
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.
id*stringfetch_narada_resultPoll a narada job by ID. Statuses: pending, running, done, failed. When done, returns all persona voices.1 params
Poll a narada job by ID. Statuses: pending, running, done, failed. When done, returns all persona voices.
id*stringget_author_profileAuthor identity, bio, and a browsing cheatsheet. Records a profile-view event.
Author identity, bio, and a browsing cheatsheet. Records a profile-view event.
No parameters. Call it with no arguments.
get_certificateReturn a formatted copyright/authenticity certificate for a piece.1 params
Return a formatted copyright/authenticity certificate for a piece.
slug*stringget_personaReturn 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.2 params
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.
session_tokenstringslug*stringget_persona_journalRead a persona's raw reflection journal. Owner-only — the journal is a private feedback loop, not for external callers.1 params
Read a persona's raw reflection journal. Owner-only — the journal is a private feedback loop, not for external callers.
slug*stringget_skillReturn 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.2 params
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.
session_tokenstringslug*stringleave_commentAttach a short comment (≤280 chars) to a piece kapoost has published. Truncated silently past the limit.3 params
Attach a short comment (≤280 chars) to a piece kapoost has published. Truncated silently past the limit.
fromstringslug*stringtext*stringleave_messageSend kapoost a longer message. context REQUIRED (why you're writing / which piece / which task). contact optional — without it no reply is possible.5 params
Send kapoost a longer message. context REQUIRED (why you're writing / which piece / which task). contact optional — without it no reply is possible.
contactstringcontext*stringfromstringregardingstringtext*stringlist_blobsList typed data artifacts (images, contact, vectors, documents, datasets, capsules). Filter by blob_type. Readable-column reflects caller_kind + caller_id vs audience.3 params
List typed data artifacts (images, contact, vectors, documents, datasets, capsules). Filter by blob_type. Readable-column reflects caller_kind + caller_id vs audience.
blob_typestringcaller_idstringcaller_kindstringlist_collectionList works kapoost owns but did NOT create. Public items always; members-only surface only after session activation.1 params
List works kapoost owns but did NOT create. Public items always; members-only surface only after session activation.
session_tokenstringlist_contentList published pieces (slug, title, type, access, tags). Optional type/tag filters.2 params
List published pieces (slug, title, type, access, tags). Optional type/tag filters.
tagstringtypestringlist_personasList every persona (slug, title, role). Full prompts unlock after bootstrap_session.
List every persona (slug, title, role). Full prompts unlock after bootstrap_session.
No parameters. Call it with no arguments.
list_provenanceList provenance items (chain of custody, certificates, invoices) for an artwork slug. Tries piece then collection.1 params
List provenance items (chain of custody, certificates, invoices) for an artwork slug. Tries piece then collection.
slug*stringlist_skill_groupsIndex of every skill tag in use, with slugs per group. Public — no bootstrap required.
Index of every skill tag in use, with slugs per group. Public — no bootstrap required.
No parameters. Call it with no arguments.
list_skillsList skills (slug, category, title, tags). Optional category / tag filters.2 params
List skills (slug, category, title, tags). Optional category / tag filters.
categorystringtagstringload_skill_groupBulk-fetch every skill tagged with the given group name. Respects the bootstrap gate per-skill: -public suffix bypasses, everything else needs session.2 params
Bulk-fetch every skill tagged with the given group name. Respects the bootstrap gate per-skill: -public suffix bypasses, everything else needs session.
name*stringsession_tokenstringmysloodsiewnia_getFetch 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}.1 params
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}.
doc_slug*stringmysloodsiewnia_listEnumerate 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_ev...3 params
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_ev...
doc_typestringlimitintegeroffsetintegermysloodsiewnia_searchFull-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, pa...4 params
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, pa...
doc_slugstringdoc_typestringlimitintegerquery*stringmysloodsiewnia_statusRead-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...
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...
No parameters. Call it with no arguments.
mysloodsiewnia_writeIngest 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 Unau...5 params
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 Unau...
body*stringdoc_type*stringmetaobjectsource_pathstringtitle*stringprepare_naradaOffline narada: returns the panel plus each persona's ready-to-run SYSTEM/USER prompts so YOU run them as your own subagents, instead of the server generating voices. No LLM cost, no rate limit, nothing recorded — no narada ID and no journal feedback. Prefer this over run_nara...3 params
Offline narada: returns the panel plus each persona's ready-to-run SYSTEM/USER prompts so YOU run them as your own subagents, instead of the server generating voices. No LLM cost, no rate limit, nothing recorded — no narada ID and no journal feedback. Prefer this over run_nara...
context*stringpersonasarraysession_tokenstringread_blobRead one blob by slug. Returns text or base64-encoded data. Access-gated by audience unless blob is public.3 params
Read one blob by slug. Returns text or base64-encoded data. Access-gated by audience unless blob is public.
caller_idstringcaller_kindstringslug*stringread_collection_itemFull record for one collection item + dossier count. Access-gated: private is never visible, members needs session.2 params
Full record for one collection item + dossier count. Access-gated: private is never visible, members needs session.
session_tokenstringslug*stringread_contentRead a public piece by slug. Locked pieces return a hint pointing at request_access.1 params
Read a public piece by slug. Locked pieces return a hint pointing at request_access.
slug*stringread_provenanceReturn one provenance item with resolvable file URLs. slug + id required.2 params
Return one provenance item with resolvable file URLs. slug + id required.
id*stringslug*stringrecallList memories saved under the given code, optionally substring-filtered by query. Session-gated for symmetry with remember.4 params
List memories saved under the given code, optionally substring-filtered by query. Session-gated for symmetry with remember.
code*stringlimitintegerquerystringsession_tokenstringrecord_persona_reflectionAsk a persona to write a lesson-for-self after a rolled-back narada recommendation. Appends to the persona's journal via Sonnet/Haiku. Owner-only.3 params
Ask a persona to write a lesson-for-self after a rolled-back narada recommendation. Appends to the persona's journal via Sonnet/Haiku. Owner-only.
error_context*stringnarada_id*stringpersona_slug*stringrememberPersist a note under the given session code. Session-gated — bootstrap_session first. Callers sharing the code share the memory.5 params
Persist a note under the given session code. Session-gated — bootstrap_session first. Callers sharing the code share the memory.
code*stringfromstringsession_tokenstringtagsarraytext*stringrequest_accessGet the gate details for a locked piece: challenge question, manual-review flow, time-lock countdown, payment terms, or trade rules.1 params
Get the gate details for a locked piece: challenge question, manual-review flow, time-lock countdown, payment terms, or trade rules.
slug*stringrequest_licenseDeclare intended use of a piece, get licensing terms + audit-log entry. caller_id is REQUIRED (whitespace-only rejected — storyboard-pinned).3 params
Declare intended use of a piece, get licensing terms + audit-log entry. caller_id is REQUIRED (whitespace-only rejected — storyboard-pinned).
caller_id*stringintended_use*stringslug*stringrun_naradaCreate 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 ma...3 params
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 ma...
context*stringfromstringpersonasarraysearch_contentSearch 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, wh...2 params
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, wh...
limitintegerquery*stringsubmit_answerSubmit an answer to a challenge-gated piece. Correct answer unlocks and returns the full body.2 params
Submit an answer to a challenge-gated piece. Correct answer unlocks and returns the full body.
answer*stringslug*stringsuggest_skillsDeterministic manifest→tag mapping. Given files + languages + git_origin, returns up to 8 skill slugs and up to 5 personas, each with the reason it fired. No LLM classification.3 params
Deterministic manifest→tag mapping. Given files + languages + git_origin, returns up to 8 skill slugs and up to 5 personas, each with the reason it fired. No LLM classification.
filesarraygit_originstringlanguagesarraysynthesise_persona_patternsForce-run Sonnet synthesis over a persona's raw journal, replacing the previous pattern set. Owner-only — paid + writes internal state.1 params
Force-run Sonnet synthesis over a persona's raw journal, replacing the previous pattern set. Owner-only — paid + writes internal state.
slug*stringupsert_skillCreate or replace a skill by slug. Owner-only: requires Authorization: Bearer <token>. Writes JSON to content/skills/<slug>.json.5 params
Create or replace a skill by slug. Owner-only: requires Authorization: Bearer <token>. Writes JSON to content/skills/<slug>.json.
body*stringcategory*stringslug*stringtagsarraytitle*stringverify_contentVerify a piece's Ed25519 signature against the server's owner public key.1 params
Verify a piece's Ed25519 signature against the server's owner public key.
slug*stringSponsors
Readme
humanMCP
A personal content server speaking Model Context Protocol (MCP/JSON-RPC 2.0).
Live: https://kapoost.humanmcp.net Landing page: https://humanmcp.net Marketplace: https://marketplace.humanmcp.net Network explorer: https://humanmcp.net/humannetwork.html Author: kapoost (Łukasz Kapuśniak) — poet, builder, sailor. Warsaw / Malta.
What it is
humanMCP lets any human publish content and services with cryptographic proof of authorship, explicit license terms, and full control over access. Writers, artists, consultants, craftspeople, galleries, freelancers — anyone who creates valuable work. AI agents connect via MCP and interact with your content natively.
Every human can run their own instance. One server, one person, their rules.
MCP Tools (37+)
Details
- Repository
- github.com/kapoost/humanmcp-go
- Transport
- HTTP
- Registry
- MCP registry, active
- Tools verified
- Nov 6, 2026