{
  "markdown": "# humanMCP\n\n[![smithery badge](https://smithery.ai/badge/kapoost/humanMCP)](https://smithery.ai/servers/kapoost/humanMCP)\n\nA personal content server speaking Model Context Protocol (MCP/JSON-RPC 2.0).\n\n**Live:** https://kapoost.humanmcp.net\n**Landing page:** https://humanmcp.net\n**Marketplace:** https://marketplace.humanmcp.net\n**Network explorer:** https://humanmcp.net/humannetwork.html\n**Author:** kapoost (Łukasz Kapuśniak) — poet, builder, sailor. Warsaw / Malta.\n\n## What it is\n\nhumanMCP 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.\n\nEvery human can run their own instance. One server, one person, their rules.\n\n## MCP Tools (37+)\n\n**Content & Discovery**\n| Tool | Description |\n|---|---|\n| `get_author_profile` | Who is kapoost — bio, content overview, how to browse |\n| `list_content` | Browse all pieces with metadata, filter by type or tag |\n| `read_content` | Read a piece — respects all access gates |\n| `search_content` | Full-text search across all pieces |\n| `request_access` | Get gate details for locked content |\n| `submit_answer` | Unlock challenge-gated content |\n| `list_blobs` | Browse typed data artifacts |\n| `read_blob` | Read image, contact, dataset, vector (respects audience) |\n\n**IP & Verification**\n| Tool | Description |\n|---|---|\n| `verify_content` | Verify Ed25519 signature |\n| `get_certificate` | Full IP certificate: license, price, originality index, hash, signature |\n| `upgrade_timestamp` | Upgrade OTS proof to Bitcoin-anchored |\n\n**Interaction**\n| Tool | Description |\n|---|---|\n| `request_license` | Declare intended use, get terms, logged for audit |\n| `leave_comment` | Leave a reaction — visible in author dashboard |\n| `leave_message` | Send a direct note (max 2000 chars, URLs welcome) |\n| `ask_human` | Ask the author a question (private, async — returns question_id) |\n| `get_answer` | Check if the author answered your question (by question_id) |\n\n**Session & Context**\n| Tool | Description |\n|---|---|\n| `bootstrap_session` | Unlock private context with session code |\n| `recall` | Retrieve saved memories |\n| `remember` | Save observations |\n| `query_vault` | Search personal knowledge vault |\n| `list_vault` | List vault documents |\n\n**Skills**\n| Tool | Description |\n|---|---|\n| `list_skills` / `get_skill` | Agent instruction catalog |\n| `upsert_skill` / `delete_skill` | Manage skills (agent token) |\n\n**Personas**\n| Tool | Description |\n|---|---|\n| `list_personas` / `get_persona` | Your expert team (requires session code or VAULT_URL) |\n| `upsert_persona` / `delete_persona` | Manage personas (agent token) |\n\n## Personas & skills: where they live\n\nhumanmcp-go is a **framework**. Persona prompts and skill bodies are yours — they don't ship in this repo. Two ways to supply them:\n\n1. **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.\n\n2. **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.\n\nPersona JSON shape (vault response):\n```json\n{\"id\":\"hermes\",\"name\":\"Hermes\",\"role\":\"Process Optimizer\",\"prompt\":\"<full system prompt>\"}\n```\n\nSkill JSON shape (vault response):\n```json\n{\"slug\":\"system-diagram\",\"title\":\"...\",\"description\":\"...\",\"persona_id\":\"mira\",\"tags\":[...],\"instructions\":\"<full playbook>\"}\n```\n\nWhen `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.\n\n**Listings**\n| Tool | Description |\n|---|---|\n| `list_listings` / `read_listing` | Browse classified ads |\n| `respond_to_listing` | Send response to listing |\n| `subscribe_listings` / `unsubscribe_listings` | Webhook subscriptions |\n\n**Federation**\n| Tool | Description |\n|---|---|\n| `list_peers` | List known humanMCP servers in the network |\n| `announce_peer` | Announce your server to join the network |\n\n**Meta**\n| Tool | Description |\n|---|---|\n| `about_humanmcp` | Open-source project info |\n\n## Connect\n\n```json\n{\n  \"mcpServers\": {\n    \"kapoost\": {\n      \"type\": \"http\",\n      \"url\": \"https://kapoost.humanmcp.net/mcp\"\n    }\n  }\n}\n```\n\n## Content types\n\n**Pieces** (Markdown files):\n- Types: `poem`, `essay`, `note`, `artwork`, `image`, `contact`\n- Access: `public` / `members` / `locked`\n- Gates: `challenge` (Q&A), `time`, `manual`, `trade`\n- Licenses: `free`, `cc-by`, `cc-by-nc`, `commercial`, `exclusive`, `all-rights`\n- Price: free-form string (e.g. \"500 PLN\", \"$200\", \"trade\")\n\n**Blobs** (typed data artifacts):\n- Types: `image`, `contact`, `vector`, `document`, `dataset`, `capsule`, `provenance`\n- Audience: `[agent:claude, human:alice, agent:*]`\n- Auto-signed on save if SIGNING_PRIVATE_KEY is set\n- Provenance documents link to artwork pieces (certificate, sale, opinion, appraisal)\n\n## Ecosystem\n\n- **[humanMCP Marketplace](https://marketplace.humanmcp.net)** — federated search across all humanMCP servers. Find listings, offers, trades by humans. [MCP endpoint](https://marketplace.humanmcp.net/mcp) · [Source](https://github.com/kapoost/humanmcp-marketplace)\n- **[humanNetwork](https://humanmcp.net/humannetwork.html)** — wall-style aggregator showing chronological content from your followed humanMCP servers (stream.json preferred, MCP fallback)\n\n## Contact\n\nPublic links: `read_blob slug:\"kapoost-contact\"` — name, handle, github, instagram, facebook, landing page.\n\nPrivate email: `read_content slug:\"kapoost-contact-private\"` — gated. Answer the challenge to access.\n\n## Intellectual property\n\nEvery piece is signed with Ed25519. `get_certificate` returns:\n- SHA-256 content hash\n- Ed25519 signature + public key\n- **Originality Index** (0.0–1.0): burstiness (Fano Factor), lexical density (CTTR), Shannon entropy, structural signature — grades S/A/B/C/D\n- License terms and price in sats (for commercial licenses)\n\n## Discovery & REST API\n\n**Agent discovery:**\n- `/.well-known/agent.json` — agent profile card\n- `/.well-known/mcp-server.json` — MCP server discovery\n- `/openapi.json` — OpenAPI 3.1 spec (ChatGPT, Gemini)\n- `/llms.txt` — LLM preferences (signed)\n- `/for-agents` — agent onboarding page\n- `/connect` — connection methods page\n\n**REST API (for agents without MCP):**\n- `GET /api/content` — list all pieces\n- `GET /api/content/{slug}` — read piece\n- `GET /api/search?q=...` — full-text search\n- `GET /api/profile` — author name, bio, tags\n- `GET /api/blobs` — list data artifacts\n- `GET /listings/feed.json` — listings feed\n- `GET /content/stream.json` — unified content stream (pieces + listings, for humanNetwork)\n\n**SEO:**\n- `robots.txt`, `sitemap.xml`, `humans.txt`\n\n## Limits\n\n| Field | Limit |\n|---|---|\n| Message / comment text | 2000 chars |\n| Blob inline text | 512 KB |\n| File upload | 50 MB |\n| Slug | 64 chars |\n| Title | 256 chars |\n\n## Features\n\n- **i18n** — PL/EN language toggle on main page (EN default, stored in localStorage)\n- **License wizard** — per-piece usage rules: what humans may do, what AI agents may do\n- **Artworks** — photo upload, medium, dimensions, year, provenance documents\n- **Provenance** — attach certificates, sale records, expert opinions to artworks (signed)\n- **ask_human** — agents can ask the author questions privately (async Q&A, invisible to public)\n- **Federation** — peer discovery via `list_peers` / `announce_peer` MCP tools and `/api/peers` REST\n- **Dynamic sections** — main page shows only sections with published content\n- **Free-form pricing** — any currency, any format (\"500 PLN\", \"$200\", \"trade only\")\n\n## Stack\n\n- Go 1.22, zero external dependencies\n- Fly.io (region: waw), persistent volume at `/data`\n- Ed25519 signing (stdlib crypto)\n- Plain Markdown files as database\n- No JS except 8-line drag-drop on `/new` page\n\n## 1-click deploy\n\n```bash\ngit clone https://github.com/kapoost/humanmcp-go.git\ncd humanmcp-go\nbash setup.sh\n```\n\nThe script asks for your name and bio, then:\n- Creates a Fly.io app (free tier)\n- Generates Ed25519 signing keys\n- Sets secrets and deploys\n- Prints your login token and 1-click follow link\n\nDone in ~2 minutes. You get:\n- `https://yourname.humanmcp.net` — your server\n- `https://yourname.humanmcp.net/connect` — share with friends\n- `https://humanmcp.net/humannetwork.html?add=https://yourname.humanmcp.net` — 1-click follow\n\n## Run locally\n\n```bash\ngo build ./cmd/server/\nEDIT_TOKEN=secret AUTHOR_NAME=yourname ./server\n```\n\n## Manual deploy\n\n```bash\nfly launch --name yourname-humanmcp\nfly secrets set EDIT_TOKEN=secret AUTHOR_NAME=yourname\nfly deploy\n```\n\n## Signing keys (optional but recommended)\n\n```bash\ngo run ./cmd/keygen/\nfly secrets set SIGNING_PRIVATE_KEY=\"...\" SIGNING_PUBLIC_KEY=\"...\"\n```\n\n## Future\n\n- C2PA manifest embedding for blob files (when CA trust chain opens to individuals)\n- Lightning Network payment gate for commercial licenses\n- Scored conversational gate (agent brings API key, Claude evaluates answers)\n- IP rate limiting + engagement tokens for anti-spam\n\n## Tests\n\n136 tests across content, MCP, and upload/signature/license suites.\n\n```bash\ngo test ./...\n```\n",
  "bytes": 9568,
  "sha": "41b59b317f49fe3009a6a0ecd3ed73b9eeb228510df78e9e102238246a27fd5a",
  "repo_slug": "kapoost/humanmcp-go",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_kapoost_humanmcp_b77ccbc3/readme"
}