humanMCP
About
Personal MCP server for humans. Publish poetry, essays, listings with Ed25519 signatures. Store skills and memories. Bootstrap session unlocks expert team. Go stdlib only, zero deps.
Details
- Transport
- SSE
Explore
Setup
Install humanMCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/kapoost/humanmcp-go
Follow the installation instructions in the repository README, then restart your MCP client.
about_humanmcp
Self-description of this humanMCP server. Deterministic, no bootstrap required — call this first to decide whether the rest of the API is relevant.
ask_human
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).
bootstrap_session
Validate the Polish poetry session code, then emit the full team briefing (guardian + style + personas + skills + persist block). Rate-limited 5/min/IP.
delete_skill
Delete a skill by slug. Owner-only: requires Authorization: Bearer <token>.
fetch_answer
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.
fetch_narada_result
Poll a narada job by ID. Statuses: pending, running, done, failed. When done, returns all persona voices.
get_author_profile
Author identity, bio, and a browsing cheatsheet. Records a profile-view event.
get_certificate
Return a formatted copyright/authenticity certificate for a piece.
get_persona
Return one persona's full prompt by slug. Session-gated except for Hodor (guardian rules must always apply).
get_persona_journal
Read a persona's raw reflection journal. Owner-only — the journal is a private feedback loop, not for external callers.
get_skill
Return one skill's full body by slug. Session-gated except for -public suffixed skills (guardian bypass).
leave_comment
Attach a short comment (≤280 chars) to a piece kapoost has published. Truncated silently past the limit.
leave_message
Send kapoost a longer message. context REQUIRED (why you're writing / which piece / which task). contact optional — without it no reply is possible.
list_blobs
List typed data artifacts (images, contact, vectors, documents, datasets, capsules). Filter by blob_type. Readable-column reflects caller_kind + caller_id vs audience.
list_collection
List works kapoost owns but did NOT create. Public items always; members-only surface only after session activation.
list_content
List published pieces (slug, title, type, access, tags). Optional type/tag filters.
list_personas
List every persona (slug, title, role). Full prompts unlock after bootstrap_session.
list_provenance
List provenance items (chain of custody, certificates, invoices) for an artwork slug. Tries piece then collection.
list_skill_groups
Index of every skill tag in use, with slugs per group. Public — no bootstrap required.
list_skills
List skills (slug, category, title, tags). Optional category / tag filters.
load_skill_group
Bulk-fetch every skill tagged with the given group name. Respects the bootstrap gate per-skill: -public suffix bypasses, everything else needs session.
mysloodsiewnia_get
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}.
mysloodsiewnia_list
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}.
mysloodsiewnia_search
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}.
mysloodsiewnia_status
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>.
mysloodsiewnia_write
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 have shell access on kapoost's Mac, running `security find-generic-password -s humanmcp-edit-token -w` to fetch the persistent EDIT_TOKEN. Server-side vault auto-tags via:humanmcp-bridge; op_id is dedup key (idempotent retries safe). Delete is permanently unavailable. Envelopes: {status:online, op_id, result:{slug, created_at}}, {status:invalid_args}, {status:payload_too_large, limit, got}, {status:offline}, {status:vault_timeout}, {status:vault_error, error}.
read_blob
Read one blob by slug. Returns text or base64-encoded data. Access-gated by audience unless blob is public.
read_collection_item
Full record for one collection item + dossier count. Access-gated: private is never visible, members needs session.
read_content
Read a public piece by slug. Locked pieces return a hint pointing at request_access.
read_provenance
Return one provenance item with resolvable file URLs. slug + id required.
recall
List memories saved under the given code, optionally substring-filtered by query. Session-gated for symmetry with remember.
record_persona_reflection
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.
remember
Persist a note under the given session code. Session-gated — bootstrap_session first. Callers sharing the code share the memory.
request_access
Get the gate details for a locked piece: challenge question, manual-review flow, time-lock countdown, payment terms, or trade rules.
request_license
Declare intended use of a piece, get licensing terms + audit-log entry. caller_id is REQUIRED (whitespace-only rejected — storyboard-pinned).
run_narada
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.
submit_answer
Submit an answer to a challenge-gated piece. Correct answer unlocks and returns the full body.
suggest_skills
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.
synthesise_persona_patterns
Force-run Sonnet synthesis over a persona's raw journal, replacing the previous pattern set. Owner-only — paid + writes internal state.
upsert_skill
Create or replace a skill by slug. Owner-only: requires Authorization: Bearer <token>. Writes JSON to content/skills/<slug>.json.
verify_content
Verify a piece's Ed25519 signature against the server's owner public key.
- about_humanmcp: Self-description of this humanMCP server. Deterministic, no bootstrap required — call this first to decide whether the rest of the API is relevant.
- ask_human: 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).
- bootstrap_session: Validate the Polish poetry session code, then emit the full team briefing (guardian + style + personas + skills + persist block). Rate-limited 5/min/IP.
- delete_skill: Delete a skill by slug. Owner-only: requires Authorization: Bearer <token>.
- fetch_answer: 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.
- fetch_narada_result: Poll a narada job by ID. Statuses: pending, running, done, failed. When done, returns all persona voices.
- get_author_profile: Author identity, bio, and a browsing cheatsheet. Records a profile-view event.
- get_certificate: Return a formatted copyright/authenticity certificate for a piece.
- get_persona: Return one persona's full prompt by slug. Session-gated except for Hodor (guardian rules must always apply).
- get_persona_journal: Read a persona's raw reflection journal. Owner-only — the journal is a private feedback loop, not for external callers.
- get_skill: Return one skill's full body by slug. Session-gated except for -public suffixed skills (guardian bypass).
- leave_comment: Attach a short comment (≤280 chars) to a piece kapoost has published. Truncated silently past the limit.
- leave_message: Send kapoost a longer message. context REQUIRED (why you're writing / which piece / which task). contact optional — without it no reply is possible.
- list_blobs: List typed data artifacts (images, contact, vectors, documents, datasets, capsules). Filter by blob_type. Readable-column reflects caller_kind + caller_id vs audience.
- list_collection: List works kapoost owns but did NOT create. Public items always; members-only surface only after session activation.
- list_content: List published pieces (slug, title, type, access, tags). Optional type/tag filters.
- list_personas: List every persona (slug, title, role). Full prompts unlock after bootstrap_session.
- list_provenance: List provenance items (chain of custody, certificates, invoices) for an artwork slug. Tries piece then collection.
- list_skill_groups: Index of every skill tag in use, with slugs per group. Public — no bootstrap required.
- list_skills: List skills (slug, category, title, tags). Optional category / tag filters.
- load_skill_group: Bulk-fetch every skill tagged with the given group name. Respects the bootstrap gate per-skill: -public suffix bypasses, everything else needs session.
- mysloodsiewnia_get: 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}.
- mysloodsiewnia_list: 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}.
- mysloodsiewnia_search: 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}.
- mysloodsiewnia_status: 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>.
- mysloodsiewnia_write: 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 have shell access on kapoost's Mac, running security find-generic-password -s humanmcp-edit-token -w to fetch the persistent EDIT_TOKEN. Server-side vault auto-tags via:humanmcp-bridge; op_id is dedup key (idempotent retries safe). Delete is permanently unavailable. Envelopes: {status:online, op_id, result:{slug, created_at}}, {status:invalid_args}, {status:payload_too_large, limit, got}, {status:offline}, {status:vault_timeout}, {status:vault_error, error}.
- read_blob: Read one blob by slug. Returns text or base64-encoded data. Access-gated by audience unless blob is public.
- read_collection_item: Full record for one collection item + dossier count. Access-gated: private is never visible, members needs session.
- read_content: Read a public piece by slug. Locked pieces return a hint pointing at request_access.
- read_provenance: Return one provenance item with resolvable file URLs. slug + id required.
- recall: List memories saved under the given code, optionally substring-filtered by query. Session-gated for symmetry with remember.
- record_persona_reflection: 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.
- remember: Persist a note under the given session code. Session-gated — bootstrap_session first. Callers sharing the code share the memory.
- request_access: Get the gate details for a locked piece: challenge question, manual-review flow, time-lock countdown, payment terms, or trade rules.
- request_license: Declare intended use of a piece, get licensing terms + audit-log entry. caller_id is REQUIRED (whitespace-only rejected — storyboard-pinned).
- run_narada: 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.
- submit_answer: Submit an answer to a challenge-gated piece. Correct answer unlocks and returns the full body.
- suggest_skills: 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.
- synthesise_persona_patterns: Force-run Sonnet synthesis over a persona's raw journal, replacing the previous pattern set. Owner-only — paid + writes internal state.
- upsert_skill: Create or replace a skill by slug. Owner-only: requires Authorization: Bearer <token>. Writes JSON to content/skills/<slug>.json.
- verify_content: Verify a piece's Ed25519 signature against the server's owner public key.
A personal content server speaking Model Context Protocol (MCP/JSON-RPC 2.0).
Live:https://kapoost.humanmcp.netLanding page:https://humanmcp.netMarketplace:https://marketplace.humanmcp.netNetwork explorer:https://humanmcp.net/humannetwork.htmlAuthor:kapoost (Łukasz Kapuśniak) — poet, builder, sailor. Warsaw / Malta.
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.
humanmcp-go is aframework. Persona prompts and skill bodies are yours — they don't ship in this repo. Two ways to supply them:
-
Owner API / mounted volume— POSTupsert_persona/upsert_skillwith theEDIT_TOKEN, or drop JSON files into${CONTENT_DIR}/personas/and${CONTENT_DIR}/skills/on the host volume.
External vault (recommended)— setVAULT_URLenv to a server you control (e.g. a private FastAPI on your tailnet). SkillStore fetchesGET ${VAULT_URL}/persona/{id}andGET ${VAULT_URL}/skill/{slug}on demand with a 5min in-memory cache. Lets your sensitive prompts stay on your machine while the public framework serves them.
{"id":"hermes","name":"Hermes","role":"Process Optimizer","prompt":"<full system prompt>"}
{"slug":"system-diagram","title":"...","description":"...","persona_id":"mira","tags":[...],"instructions":"<full playbook>"}
WhenVAULT_URLis unreachable, bootstrap_session loudly reports the downgrade (won't silently fall back). Seeinternal/content/skill.gofor the fetch/cache implementation.
{ "mcpServers": { "kapoost": { "type": "http", "url": "https://kapoost.humanmcp.net/mcp" } } }
- Types:poem,essay,note,artwork,image,contact
- Access:public/members/locked
- Gates:challenge(Q&A),time,manual,trade
- Licenses:free,cc-by,cc-by-nc,commercial,exclusive,all-rights
- Price: free-form string (e.g. "500 PLN", "$200", "trade")
- Types:image,contact,vector,document,dataset,capsule,provenance
- Audience:[agent:claude, human:alice, agent:*]
- Auto-signed on save if SIGNING_PRIVATE_KEY is set
- Provenance documents link to artwork pieces (certificate, sale, opinion, appraisal)
- humanMCP Marketplace— federated search across all humanMCP servers. Find listings, offers, trades by humans.MCP endpoint·Source
- humanNetwork— wall-style aggregator showing chronological content from your followed humanMCP servers (stream.json preferred, MCP fallback)
Public links:read_blob slug:"kapoost-contact"— name, handle, github, instagram, facebook, landing page.
Private email:read_content slug:"kapoost-contact-private"— gated. Answer the challenge to access.
Every piece is signed with Ed25519.get_certificatereturns:
- SHA-256 content hash
- Ed25519 signature + public key
- Originality Index(0.0–1.0): burstiness (Fano Factor), lexical density (CTTR), Shannon entropy, structural signature — grades S/A/B/C/D
- License terms and price in sats (for commercial licenses)
- /.well-known/agent.json— agent profile card
- /.well-known/mcp-server.json— MCP server discovery
- /openapi.json— OpenAPI 3.1 spec (ChatGPT, Gemini)
- /llms.txt— LLM preferences (signed)
- /for-agents— agent onboarding page
- /connect— connection methods page
- GET /api/content— list all pieces
- GET /api/content/{slug}— read piece
- GET /api/search?q=...— full-text search
- GET /api/profile— author name, bio, tags
- GET /api/blobs— list data artifacts
- GET /listings/feed.json— listings feed
- GET /content/stream.json— unified content stream (pieces + listings, for humanNetwork)
- i18n— PL/EN language toggle on main page (EN default, stored in localStorage)
- License wizard— per-piece usage rules: what humans may do, what AI agents may do
- Artworks— photo upload, medium, dimensions, year, provenance documents
- Provenance— attach certificates, sale records, expert opinions to artworks (signed)
- ask_human— agents can ask the author questions privately (async Q&A, invisible to public)
- Federation— peer discovery vialist_peers/announce_peerMCP tools and/api/peersREST
- Dynamic sections— main page shows only sections with published content
- Free-form pricing— any currency, any format ("500 PLN", "$200", "trade only")
- Go 1.22, zero external dependencies
- Fly.io (region: waw), persistent volume at/data
- Ed25519 signing (stdlib crypto)
- Plain Markdown files as database
- No JS except 8-line drag-drop on/newpage
git clone https://github.com/kapoost/humanmcp-go.git cd humanmcp-go bash setup.sh
The script asks for your name and bio, then:
- Creates a Fly.io app (free tier)
- Generates Ed25519 signing keys
- Sets secrets and deploys
- Prints your login token and 1-click follow link
- https://yourname.humanmcp.net— your server
- https://yourname.humanmcp.net/connect— share with friends
- https://humanmcp.net/humannetwork.html?add=https://yourname.humanmcp.net— 1-click follow
go build ./cmd/server/ EDIT_TOKEN=secret AUTHOR_NAME=yourname ./server
fly launch --name yourname-humanmcp fly secrets set EDIT_TOKEN=secret AUTHOR_NAME=yourname fly deploy
go run ./cmd/keygen/ fly secrets set SIGNING_PRIVATE_KEY="..." SIGNING_PUBLIC_KEY="..."
- C2PA manifest embedding for blob files (when CA trust chain opens to individuals)
- Lightning Network payment gate for commercial licenses
- Scored conversational gate (agent brings API key, Claude evaluates answers)
- IP rate limiting + engagement tokens for anti-spam
136 tests across content, MCP, and upload/signature/license suites.
Chia Health MCP Server — Patient workflow integration for a licensed US telehealth platform. Browse GLP-1 medications (semaglutide, tirzepatide), peptide therapies (sermorelin, NAD+, glutathione), and longevity treatments. Check eligibility, complete intake, sign consents, and manage treatment plans. 30 tools, HIPAA-compliant. All prescriptions evaluated by licensed US healthcare providers and delivered from FDA-regulated pharmacies across 50 states + DC.
Broker + MCP server for last-bidder-wins games on Solana — agents register, auto-fund a Privy wallet, and bid via streamable HTTP
AI-powered no-code app builder with 17 MCP tools — create projects, generate pages from natural language, AI text/image generation (GPT, Claude, Gemini, 14+ models), page CRUD, workflow execution, publish & version control. SSE transport, API key auth.
An mcp server for your food ordering needs.
Agent-to-Agent handoff certification for multi-agent systems — validates context preservation, verifies agent capabilities before handoff, logs transfer chains, and ensures no data loss in agent orchestration.
Unified MCP & skill management gateway with progressive disclosure. Manages multiple MCP servers as Agent Apps, loading tool schemas on demand for 99% context token savings. Shared across Claude Code, Codex, OpenCode and more.
A collection of Model Context Protocol (MCP) servers for various tasks and integrations, supporting both Python and Node.js environments.
Open-souSecurely feeds real security refreshed rules into Cursor, Claude Code, and Windsurf — zero config, no API key.
Health intelligence MCP — access biomarkers, biological age, and personalized longevity action plans from your Aniva profile.
Real-time stock heatmaps and investment tools delivered as interactive React components.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



