kapoost avatar

humanMCP — kapoost

kapoost/humanmcp-go

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 humanmcp

Run 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/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 43 tools

Verified 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...

Parameters* required
contextstring
fromstring
question*string
bootstrap_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.

Parameters* required
code*string
delete_skillDelete a skill by slug. Owner-only: requires Authorization: Bearer <token>.1 params

Delete a skill by slug. Owner-only: requires Authorization: Bearer <token>.

Parameters* required
slug*string
fetch_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.

Parameters* required
id*string
fetch_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.

Parameters* required
id*string
get_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.

Parameters* required
slug*string
get_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.

Parameters* required
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
slug*string
get_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.

Parameters* required
slug*string
get_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.

Parameters* required
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
slug*string
leave_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.

Parameters* required
fromstring
slug*string
text*string
leave_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.

Parameters* required
contactstring
context*string
fromstring
regardingstring
text*string
list_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.

Parameters* required
blob_typestring
caller_idstring
caller_kindstring
list_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.

Parameters* required
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
list_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.

Parameters* required
tagstring
typestring
list_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.

Parameters* required
slug*string
list_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.

Parameters* required
categorystring
tagstring
load_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.

Parameters* required
name*string
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
mysloodsiewnia_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}.

Parameters* required
doc_slug*string
mysloodsiewnia_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...

Parameters* required
doc_typestring
limitinteger
offsetinteger
mysloodsiewnia_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...

Parameters* required
doc_slugstring
doc_typestring
limitinteger
query*string
mysloodsiewnia_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...

Parameters* required
body*string
doc_type*string
metaobject
source_pathstring
title*string
prepare_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...

Parameters* required
context*string
personasarray
Optional. Explicit persona slugs (from list_personas). When present the keyword manifest is not used. Omit for automatic keyword routing.
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
read_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.

Parameters* required
caller_idstring
caller_kindstring
slug*string
read_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.

Parameters* required
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
slug*string
read_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.

Parameters* required
slug*string
read_provenanceReturn one provenance item with resolvable file URLs. slug + id required.2 params

Return one provenance item with resolvable file URLs. slug + id required.

Parameters* required
id*string
slug*string
recallList 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.

Parameters* required
code*string
limitinteger
querystring
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
record_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.

Parameters* required
error_context*string
narada_id*string
persona_slug*string
rememberPersist 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.

Parameters* required
code*string
fromstring
session_tokenstring
Optional. The SESSION_TOKEN emitted by bootstrap_session. Pass it here when your client cannot set a per-call Authorization: Bearer header.
tagsarray
text*string
request_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.

Parameters* required
slug*string
request_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).

Parameters* required
caller_id*string
intended_use*string
slug*string
run_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...

Parameters* required
context*string
fromstring
personasarray
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.
search_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...

Parameters* required
limitinteger
query*string
submit_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.

Parameters* required
answer*string
slug*string
suggest_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.

Parameters* required
filesarray
git_originstring
languagesarray
synthesise_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.

Parameters* required
slug*string
upsert_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.

Parameters* required
body*string
category*string
slug*string
tagsarray
title*string
verify_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.

Parameters* required
slug*string

Sponsors

Readme

humanMCP

smithery badge

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+)


View the full README on GitHub

Details

Repository
github.com/kapoost/humanmcp-go
Transport
HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026

More from kapoost