World Monitor
ข่าวกรองโลกแบบเรียลไทม์: ความขัดแย้ง ตลาด พลังงาน การค้า การขนส่ง และไซเบอร์
ยังไม่มีคำอธิบายภาษาไทย ดูข้อเท็จจริงด้านล่าง หรือเปิดคำอธิบายต้นฉบับจากผู้ทำ
Personal MCP server for humans who create. Proof of authorship, license control.เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ผลตรวจผ่าน 4/5 · สิ่งที่คุณถามผ่านเซิร์ฟเวอร์ของผู้ทำ (kapoost.humanmcp.net) · ✓ ตรวจคำสั่งแล้ว 13 พ.ย. 2569
ขั้นแรก: คุณใช้ AI ตัวไหน
เลือกแอปที่คุณใช้ ขั้นตอนจะขึ้นด้านล่าง
ต่อกับ Claude ได้ · ประมาณ 2 นาที
ไม่ต้องใช้คีย์ ไม่ต้องลงโปรแกรม · ตั้งครั้งเดียวที่ claude.ai หรือแอปบนคอม แล้วใช้ในแชตได้ · บัญชีฟรีเพิ่มได้ 1 ตัว · แผน Team/Enterprise ให้เจ้าของ (Owner) เป็นคนเพิ่ม
CustomizeConnectors
คัดลอกจากที่นี่ไปวางในช่องชื่อเดียวกันบนหน้าจอของ Claude แล้วกด Continue
humanMCP — kapoosthttps://kapoost.humanmcp.net/mcpกด Continue ผ่านหน้าตรวจการล็อกอินที่ Claude ตรวจเจอ · หัวข้อ Authentication เลือกตามที่ผู้ทำบอก (Sign in now, Sign in when needed หรือ No sign in) แล้วกด Add
+ConnectorshumanMCP — kapoost
ใช้ humanMCP — kapoost บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude บอกว่ากำลังใช้ humanMCP — kapoost หรือมีชื่อเครื่องมือของ humanMCP — kapoost ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ ChatGPT ได้ ขึ้นกับแผน
MCP แบบเต็ม: ChatGPT Business, Enterprise หรือ Edu บนเว็บ · Pro: ต่อได้ด้วยสิทธิ์อ่านและดึงข้อมูล เครื่องมือที่แก้ข้อมูลอาจใช้ไม่ได้ · Plus: เอกสารยังไม่ยืนยัน ถ้าเห็นเมนูเพิ่ม MCP แบบกำหนดเองในหน้าปลั๊กอิน ลองตามขั้นตอนได้ · ใช้บนเว็บเท่านั้น
Plugins+Add custom MCP server
ใส่ชื่อ แล้ววางที่อยู่ใต้ Connection ติ๊กยอมรับคำเตือน แล้วกด Create as a plugin
humanMCP — kapoosthttps://kapoost.humanmcp.net/mcpเปิดแชตใหม่แล้วเลือก humanMCP — kapoost จากรายการปลั๊กอินก่อนพิมพ์
ใช้ humanMCP — kapoost บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า ChatGPT บอกว่ากำลังใช้ humanMCP — kapoost หรือมีชื่อเครื่องมือของ humanMCP — kapoost ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ OpenAI เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ Claude Code ได้ · ประมาณ 2 นาที
ไม่ต้องใช้คีย์ ไม่ต้องลงโปรแกรม
Mac: กด Command+Space พิมพ์ Terminal · Windows: เปิด PowerShell
claude mcp add --transport http --scope user humanmcp https://kapoost.humanmcp.net/mcpต้องเห็น humanMCP — kapoost ในรายการและขึ้นว่าเชื่อมต่อแล้ว
ใช้ humanMCP — kapoost บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude Code บอกว่ากำลังใช้ humanMCP — kapoost หรือมีชื่อเครื่องมือของ humanMCP — kapoost ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ Cursor ได้ · ประมาณ 2 นาที
ไม่ต้องใช้คีย์ ไม่ต้องลงโปรแกรม
ใช้ humanMCP — kapoost บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Cursor บอกว่ากำลังใช้ humanMCP — kapoost หรือมีชื่อเครื่องมือของ humanMCP — kapoost ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Cursor เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ VS Code ได้ · ประมาณ 2 นาที
ไม่ต้องใช้คีย์ ไม่ต้องลงโปรแกรม
ใช้ humanMCP — kapoost บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า VS Code บอกว่ากำลังใช้ humanMCP — kapoost หรือมีชื่อเครื่องมือของ humanMCP — kapoost ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ VS Code เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
โปรแกรมอื่นที่ใช้ MCP ได้ เช่น Windsurf, Zed หรือ Gemini CLI มีวิธีเพิ่มต่างกัน ดูวิธีของแต่ละตัวในหน้ารวมโปรแกรม
ที่อยู่สำหรับโปรแกรมที่ต่อผ่านเว็บ
https://kapoost.humanmcp.net/mcpค่าตั้งแบบไฟล์ JSON อยู่ในหัวข้อ “สำหรับคนเขียนโค้ด” ด้านล่าง
Claude Code
claude mcp add --transport http --scope user humanmcp https://kapoost.humanmcp.net/mcpCursor (~/.cursor/mcp.json)
{
"mcpServers": {
"humanmcp": {
"url": "https://kapoost.humanmcp.net/mcp"
}
}
}VS Code (mcp.json)
{
"servers": {
"humanmcp": {
"type": "http",
"url": "https://kapoost.humanmcp.net/mcp"
}
}
}ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ดูจากแบบการต่อของ server ตัวนี้ และเอกสารของผู้ทำโปรแกรมแต่ละตัว ตรวจเมื่อ 10 พ.ย. 2569
ต่อผ่านคลาวด์ได้ใน
ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
ชื่อและคำอธิบายเครื่องมือตามที่ server ตอบมาเมื่อ 11 พ.ย. 2569 ผู้ทำเป็นคนเขียน ไม่ใช่เรา แสดงเป็นข้อความล้วน
about_humanmcpSelf-description of this humanMCP server. Deterministic, no bootstrap required — call this first to decide whether the rest of the API is relevant.
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 instead
bootstrap_sessionValidate the Polish poetry session code, then emit the full team briefing (guardian + style + personas + skills + persist block). Rate-limited 5/min/IP.
delete_skillDelete a skill by slug. Owner-only: requires Authorization: Bearer .
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.
fetch_narada_resultPoll a narada job by ID. Statuses: pending, running, done, failed. When done, returns all persona voices.
get_author_profileAuthor identity, bio, and a browsing cheatsheet. Records a profile-view event.
get_certificateReturn a formatted copyright/authenticity certificate for a piece.
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.
get_persona_journalRead a persona's raw reflection journal. Owner-only — the journal is a private feedback loop, not for external callers.
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.
leave_commentAttach a short comment (≤280 chars) to a piece kapoost has published. Truncated silently past the limit.
leave_messageSend kapoost a longer message. context REQUIRED (why you're writing / which piece / which task). contact optional — without it no reply is possible.
list_blobsList typed data artifacts (images, contact, vectors, documents, datasets, capsules). Filter by blob_type. Readable-column reflects caller_kind + caller_id vs audience.
list_collectionList works kapoost owns but did NOT create. Public items always; members-only surface only after session activation.
list_contentList published pieces (slug, title, type, access, tags). Optional type/tag filters.
list_personasList every persona (slug, title, role). Full prompts unlock after bootstrap_session.
list_provenanceList provenance items (chain of custody, certificates, invoices) for an artwork slug. Tries piece then collection.
list_skill_groupsIndex of every skill tag in use, with slugs per group. Public — no bootstrap required.
list_skillsList skills (slug, category, title, tags). Optional category / tag filters.
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.
mysloodsiewnia_getFetch one document from kapoost's vault by slug. Requires Authorization: Bearer . 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_listEnumerate vault documents without FTS — for browsing by type or paginating. Requires Authorization: Bearer . 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 def
mysloodsiewnia_searchFull-text search (BM25 over SQLite FTS5) on kapoost's local vault corpus. Requires Authorization: Bearer . 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
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 .
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 . On Unauthorized: obtain
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_narada
read_blobRead one blob by slug. Returns text or base64-encoded data. Access-gated by audience unless blob is public.
read_collection_itemFull record for one collection item + dossier count. Access-gated: private is never visible, members needs session.
read_contentRead a public piece by slug. Locked pieces return a hint pointing at request_access.
read_provenanceReturn one provenance item with resolvable file URLs. slug + id required.
recallList memories saved under the given code, optionally substring-filtered by query. Session-gated for symmetry with remember.
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.
rememberPersist a note under the given session code. Session-gated — bootstrap_session first. Callers sharing the code share the memory.
request_accessGet the gate details for a locked piece: challenge question, manual-review flow, time-lock countdown, payment terms, or trade rules.
request_licenseDeclare intended use of a piece, get licensing terms + audit-log entry. caller_id is REQUIRED (whitespace-only rejected — storyboard-pinned).
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 match
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, while
submit_answerSubmit an answer to a challenge-gated piece. Correct answer unlocks and returns the full body.
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.
synthesise_persona_patternsForce-run Sonnet synthesis over a persona's raw journal, replacing the previous pattern set. Owner-only — paid + writes internal state.
upsert_skillCreate or replace a skill by slug. Owner-only: requires Authorization: Bearer . Writes JSON to content/skills/ .json.
verify_contentVerify a piece's Ed25519 signature against the server's owner public key.
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 16 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub kapoost ซึ่งเป็นเจ้าของ repo
มีการแก้โค้ดล่าสุด 7 วันที่ผ่านมา
ไม่พบไฟล์ license ใน repo
ไม่ต้องล็อกอิน
อ่านคำอธิบายเครื่องมือ 43 ตัวแล้ว ไม่พบคำสั่งแอบแฝงถึง AI
ถาม แชร์เคล็ดลับ หรือแจ้งว่าใช้ไม่ได้ เรียงตามที่คนกดว่ามีประโยชน์
ยังไม่มีใครโพสต์ ถามหรือแชร์เป็นคนแรกได้เลย
ข้อความในส่วนนี้เขียนโดยผู้ใช้ ไม่ใช่ทีม PopNx
ยังไม่มีรีวิว
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 4 จาก 5 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ
repo บน GitHub มีการแก้โค้ดล่าสุด 7 วันที่ผ่านมา และส่งรุ่นล่าสุด (0.3.0) เข้า registry 6 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT บนเว็บ (แบบเต็มในแผน Business ขึ้นไป · Pro แบบอ่านอย่างเดียว)
ในหมวดเดียวกันมี World Monitor, openstatus, Oh My Posh Validator, Strata, Jitsu
หมวดเดียวกันจากผู้ทำคนอื่น ผ่านตัวตรวจคำสั่งแล้ว ตัวทางการขึ้นก่อน แล้วเรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
ข่าวกรองโลกแบบเรียลไทม์: ความขัดแย้ง ตลาด พลังงาน การค้า การขนส่ง และไซเบอร์
Manage monitors, status pages, incidents and maintenances in your openstatus workspace.
Validate oh-my-posh configurations and segment snippets against the official schema.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Manage Jitsu data pipelines: destinations, streams, connections, functions, live events.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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.
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.
Content & Discovery
| Tool | Description |
|---|---|
get_author_profile | Who is kapoost — bio, content overview, how to browse |
list_content | Browse all pieces with metadata, filter by type or tag |
read_content | Read a piece — respects all access gates |
search_content | Full-text search across all pieces |
request_access | Get gate details for locked content |
submit_answer | Unlock challenge-gated content |
list_blobs | Browse typed data artifacts |
read_blob | Read image, contact, dataset, vector (respects audience) |
IP & Verification
| Tool | Description |
|---|---|
verify_content | Verify Ed25519 signature |
get_certificate | Full IP certificate: license, price, originality index, hash, signature |
upgrade_timestamp | Upgrade OTS proof to Bitcoin-anchored |
Interaction
| Tool | Description |
|---|---|
request_license | Declare intended use, get terms, logged for audit |
leave_comment | Leave a reaction — visible in author dashboard |
leave_message | Send a direct note (max 2000 chars, URLs welcome) |
ask_human | Ask the author a question (private, async — returns question_id) |
get_answer | Check if the author answered your question (by question_id) |
Session & Context
| Tool | Description |
|---|---|
bootstrap_session | Unlock private context with session code |
recall | Retrieve saved memories |
remember | Save observations |
query_vault | Search personal knowledge vault |
list_vault | List vault documents |
Skills
| Tool | Description |
|---|---|
list_skills / get_skill | Agent instruction catalog |
upsert_skill / delete_skill | Manage skills (agent token) |
Personas
| Tool | Description |
|---|---|
list_personas / get_persona | Your expert team (requires session code or VAULT_URL) |
upsert_persona / delete_persona | Manage personas (agent token) |
humanmcp-go is a framework. Persona prompts and skill bodies are yours — they don't ship in this repo. Two ways to supply them:
upsert_persona / upsert_skill with the EDIT_TOKEN, or drop JSON files into ${CONTENT_DIR}/personas/ and ${CONTENT_DIR}/skills/ on the host volume.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):
{"id":"hermes","name":"Hermes","role":"Process Optimizer","prompt":"<full system prompt>"}
Skill JSON shape (vault response):
{"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
| Tool | Description |
|---|---|
list_listings / read_listing | Browse classified ads |
respond_to_listing | Send response to listing |
subscribe_listings / unsubscribe_listings | Webhook subscriptions |
Federation
| Tool | Description |
|---|---|
list_peers | List known humanMCP servers in the network |
announce_peer | Announce your server to join the network |
Meta
| Tool | Description |
|---|---|
about_humanmcp | Open-source project info |
{
"mcpServers": { "kapoost": { "type": "http", "url": "https://kapoost.humanmcp.net/mcp" } } }
Pieces (Markdown files):
poem, essay, note, artwork, image, contactpublic / members / lockedchallenge (Q&A), time, manual, tradefree, cc-by, cc-by-nc, commercial, exclusive, all-rightsBlobs (typed data artifacts):
image, contact, vector, document, dataset, capsule, provenance[agent:claude, human:alice, agent:*]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_certificate returns:
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 pageREST API (for agents without MCP):
GET /api/content — list all piecesGET /api/content/{slug} — read pieceGET /api/search?q=... — full-text searchGET /api/profile — author name, bio, tagsGET /api/blobs — list data artifactsGET /listings/feed.json — listings feedGET /content/stream.json — unified content stream (pieces + listings, for humanNetwork)SEO:
robots.txt, sitemap.xml, humans.txt| Field | Limit |
|---|---|
| Message / comment text | 2000 chars |
| Blob inline text | 512 KB |
| File upload | 50 MB |
| Slug | 64 chars |
| Title | 256 chars |
list_peers / announce_peer MCP tools and /api/peers REST/data/new pagegit clone https://github.com/kapoost/humanmcp-go.git
cd humanmcp-go bash setup.sh
The script asks for your name and bio, then:
Done in ~2 minutes. You get:
https://yourname.humanmcp.net — your serverhttps://yourname.humanmcp.net/connect — share with friendshttps://humanmcp.net/humannetwork.html?add=https://yourname.humanmcp.net — 1-click followgo 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="..."
136 tests across content, MCP, and upload/signature/license suites.
go test ./...