humanMCP — kapoost

io.github.kapoost由 GitHub 账号 kapoost 发布v0.3.0更新于 Oct 25, 2026

Personal MCP server for humans who create. Proof of authorship, license control.

发布方自己的服务:TAP

已验证Streamable HTTP可网页运行知识与记忆沟通与协作商业与电商

概览

AI 生成的概览

一个个人发布服务器,让助手浏览、搜索并阅读某位作者带签名的作品,申请授权,并留言或提问。

可以做什么
浏览和搜索已发布的作品、合集与带类型的数据制品,读取时遵守访问限制,并可提交挑战答案和访问申请以解锁受限内容。获取作者身份证书、来源记录和授权条款,并声明作品的使用意图。留下评论、发送较长留言,以及提交异步问题供作者稍后回复。用会话码解锁受会话保护的上下文,然后读取和保存记忆,并查看人格与技能目录。提供 bearer 令牌时可搜索、列出并读取作者私人保险库中的文档。
适用场景
适合助手需要处理某位创作者已发布内容目录的场景:查找和阅读作品、核对作者身份与授权,或异步联系作者。也适合希望把作者的人格提示词和技能手册引入自身工作流的代理。
运行要求
远程 streamable HTTP 端点,无需本地运行时或安装包。公开工具未声明认证,但受会话保护的工具需要 bootstrap_session 提供的会话码,保险库工具需要 Authorization bearer 令牌(编辑令牌或好友令牌)。仅限所有者的工具需要所有者令牌。
安装前请注意
多个工具会写入或发送数据:评论、留言、问题、授权声明、访问申请、记忆和保险库写入都会被记录,部分还会进入审计日志。保险库访问需要 bearer 令牌,会在其范围内暴露私人文档。部分作品受付款条款、时间锁或交换规则限制,授权可能附带价格。问题和留言由作者按自己的时间安排回复。

安装

在 SourceWeft 中

  1. 打开 控制台中的 humanMCP — kapoost,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.kapoost%2Fhumanmcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "humanmcp-kapoost": {
      "type": "http",
      "url": "https://kapoost.humanmcp.net/mcp"
    }
  }
}

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

Content & Discovery

ToolDescription
get_author_profileWho is kapoost — bio, content overview, how to browse
list_contentBrowse all pieces with metadata, filter by type or tag
read_contentRead a piece — respects all access gates
search_contentFull-text search across all pieces
request_accessGet gate details for locked content
submit_answerUnlock challenge-gated content
list_blobsBrowse typed data artifacts
read_blobRead image, contact, dataset, vector (respects audience)

IP & Verification

ToolDescription
verify_contentVerify Ed25519 signature
get_certificateFull IP certificate: license, price, originality index, hash, signature
upgrade_timestampUpgrade OTS proof to Bitcoin-anchored

Interaction

ToolDescription
request_licenseDeclare intended use, get terms, logged for audit
leave_commentLeave a reaction — visible in author dashboard
leave_messageSend a direct note (max 2000 chars, URLs welcome)
ask_humanAsk the author a question (private, async — returns question_id)
get_answerCheck if the author answered your question (by question_id)

Session & Context

ToolDescription
bootstrap_sessionUnlock private context with session code
recallRetrieve saved memories
rememberSave observations
query_vaultSearch personal knowledge vault
list_vaultList vault documents

Skills

ToolDescription
list_skills / get_skillAgent instruction catalog
upsert_skill / delete_skillManage skills (agent token)

Personas

ToolDescription
list_personas / get_personaYour expert team (requires session code or VAULT_URL)
upsert_persona / delete_personaManage personas (agent token)

Personas & skills: where they live

humanmcp-go is a framework. Persona prompts and skill bodies are yours — they don't ship in this repo. Two ways to supply them:

  1. Owner API / mounted volume — POST upsert_persona / upsert_skill with the EDIT_TOKEN, or drop JSON files into ${CONTENT_DIR}/personas/ and ${CONTENT_DIR}/skills/ on the host volume.

  2. External vault (recommended) — set VAULT_URL env to a server you control (e.g. a private FastAPI on your tailnet). SkillStore fetches GET ${VAULT_URL}/persona/{id} and GET ${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.

Persona JSON shape (vault response):

json
{"id":"hermes","name":"Hermes","role":"Process Optimizer","prompt":"<full system prompt>"}

Skill JSON shape (vault response):

json
{"slug":"system-diagram","title":"...","description":"...","persona_id":"mira","tags":[...],"instructions":"<full playbook>"}

When VAULT_URL is unreachable, bootstrap_session loudly reports the downgrade (won't silently fall back). See internal/content/skill.go for the fetch/cache implementation.

Listings

ToolDescription
list_listings / read_listingBrowse classified ads
respond_to_listingSend response to listing
subscribe_listings / unsubscribe_listingsWebhook subscriptions

Federation

ToolDescription
list_peersList known humanMCP servers in the network
announce_peerAnnounce your server to join the network

Meta

ToolDescription
about_humanmcpOpen-source project info

Connect

json
{  "mcpServers": {    "kapoost": {      "type": "http",      "url": "https://kapoost.humanmcp.net/mcp"    }  }}

Content types

Pieces (Markdown files):

  • 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")

Blobs (typed data artifacts):

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

Ecosystem

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

Contact

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.

Intellectual property

Every piece is signed with Ed25519. get_certificate returns:

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

Discovery & REST API

Agent discovery:

  • /.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

REST API (for agents without MCP):

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

SEO:

  • robots.txt, sitemap.xml, humans.txt

Limits

FieldLimit
Message / comment text2000 chars
Blob inline text512 KB
File upload50 MB
Slug64 chars
Title256 chars

Features

  • 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 via list_peers / announce_peer MCP tools and /api/peers REST
  • Dynamic sections — main page shows only sections with published content
  • Free-form pricing — any currency, any format ("500 PLN", "$200", "trade only")

Stack

  • 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 /new page

1-click deploy

bash
git clone https://github.com/kapoost/humanmcp-go.gitcd humanmcp-gobash 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

Done in ~2 minutes. You get:

  • 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

Run locally

bash
go build ./cmd/server/EDIT_TOKEN=secret AUTHOR_NAME=yourname ./server

Manual deploy

bash
fly launch --name yourname-humanmcpfly secrets set EDIT_TOKEN=secret AUTHOR_NAME=yournamefly deploy

Signing keys (optional but recommended)

bash
go run ./cmd/keygen/fly secrets set SIGNING_PRIVATE_KEY="..." SIGNING_PUBLIC_KEY="..."

Future

  • 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

Tests

136 tests across content, MCP, and upload/signature/license suites.

bash
go test ./...

来源:README.md,提交 d5b43b9

工具

43

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). ALWAYS set `from` to a stable name for yourself: with it, sending the same question again returns the answer instead of creating a duplicate, which is the reliable path when your runtime cannot keep the ID between sessions.

输入参数fromcontextquestion必填

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.

输入参数code必填

delete_skill

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

输入参数slug必填

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.

输入参数id必填

fetch_narada_result

Poll a narada job by ID. Statuses: pending, running, done, failed. When done, returns all persona voices.

输入参数id必填

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.

输入参数slug必填

get_persona

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.

输入参数slug必填session_token

get_persona_journal

Read a persona's raw reflection journal. Owner-only — the journal is a private feedback loop, not for external callers.

输入参数slug必填

get_skill

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.

输入参数slug必填session_token

leave_comment

Attach a short comment (≤280 chars) to a piece kapoost has published. Truncated silently past the limit.

输入参数fromslug必填text必填

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.

输入参数fromtext必填contactcontext必填regarding

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.

输入参数blob_typecaller_idcaller_kind

list_collection

List works kapoost owns but did NOT create. Public items always; members-only surface only after session activation.

输入参数session_token

list_content

List published pieces (slug, title, type, access, tags). Optional type/tag filters.

输入参数tagtype

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.

输入参数slug必填

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.

输入参数tagcategory

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.

输入参数name必填session_token

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

输入参数doc_slug必填

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

输入参数limitoffsetdoc_type

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

输入参数body必填metatitle必填doc_type必填source_path

prepare_narada

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_narada when your subagents can read material the server cannot (a repository, local files) or when the server has no API key. Session-gated.

输入参数context必填personassession_token

read_blob

Read one blob by slug. Returns text or base64-encoded data. Access-gated by audience unless blob is public.

输入参数slug必填caller_idcaller_kind

read_collection_item

Full record for one collection item + dossier count. Access-gated: private is never visible, members needs session.

输入参数slug必填session_token

read_content

Read a public piece by slug. Locked pieces return a hint pointing at request_access.

输入参数slug必填

read_provenance

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

输入参数id必填slug必填

recall

List memories saved under the given code, optionally substring-filtered by query. Session-gated for symmetry with remember.

输入参数code必填limitquerysession_token

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.

输入参数narada_id必填persona_slug必填error_context必填

remember

Persist a note under the given session code. Session-gated — bootstrap_session first. Callers sharing the code share the memory.

输入参数code必填fromtagstext必填session_token

request_access

Get the gate details for a locked piece: challenge question, manual-review flow, time-lock countdown, payment terms, or trade rules.

输入参数slug必填

request_license

Declare intended use of a piece, get licensing terms + audit-log entry. caller_id is REQUIRED (whitespace-only rejected — storyboard-pinned).

输入参数slug必填caller_id必填intended_use必填

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

输入参数fromcontext必填personas

search_content

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.

输入参数limitquery必填

submit_answer

Submit an answer to a challenge-gated piece. Correct answer unlocks and returns the full body.

输入参数slug必填answer必填

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.

输入参数fileslanguagesgit_origin

synthesise_persona_patterns

Force-run Sonnet synthesis over a persona's raw journal, replacing the previous pattern set. Owner-only — paid + writes internal state.

输入参数slug必填

upsert_skill

Create or replace a skill by slug. Owner-only: requires Authorization: Bearer <token>. Writes JSON to content/skills/<slug>.json.

输入参数body必填slug必填tagstitle必填category必填

verify_content

Verify a piece's Ed25519 signature against the server's owner public key.

输入参数slug必填

版本历史

1
  1. v0.3.0最新Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。

其他 Human 集成