Hive Secrets

io.github.srotzin由 GitHub 帳號 srotzin 發布v1.0.0更新於 Oct 24, 2026

Encrypted secret store and rotation for autonomous agent credentials

發布方自己的服務:Secrets.RealEstate

已驗證Streamable HTTP可網頁執行金融安全與監控

概覽

AI 產生的概覽

一個遠端 MCP 伺服器,依代理命名空間加密存放與讀取代理憑證,讀寫操作以 Base 上的 USDC 付費結算。

可以做什麼
依命名空間與鍵存放、讀取、刪除密鑰,靜態加密採用 AES-256-GCM,並限定在呼叫方代理 DID 的命名空間內。列出某個命名空間中的鍵。讀取依命名空間記錄的稽核日誌,包含付款與錯誤事件。查看當日營收快照與服務健康狀態。付費操作需提供 Base USDC 交易雜湊,服務會先在鏈上核驗再執行呼叫。
適用情境
適用於自主代理需要在多次執行之間託管保存 API 金鑰等憑證、且依代理身分隔離,並能接受為讀寫支付少量 USDC 單次費用的情境。
執行需求
遠端 streamable-HTTP 端點;無需本機安裝,也未宣告身分驗證。付費呼叫需向營運方錢包發起 Base USDC 轉帳,並在請求內容或 x402-tx-hash 標頭中提供交易雜湊。自架需要 Node.js、npm 與 SECRETS_MASTER_KEY 環境變數;未設定時寫入會回傳 503。
安裝前請注意
此服務保存真實憑證:任何能以你的代理 DID 身分操作的人都能讀取你的命名空間,輪換主金鑰會使所有已存密文失效。讀寫需在 Base 上支付 USDC 並提交交易雜湊;README 另公開了錢包地址與付款細節。寫入、刪除與稽核讀取會變更或暴露已存資料,託管執行個體及其主金鑰由營運方掌握。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Hive Secrets,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.srotzin%2Fhive-mcp-secrets/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "hive-secrets": {
      "type": "http",
      "url": "https://hive-mcp-secrets.onrender.com/mcp"
    }
  }
}

README

hive-mcp-secrets

[srotzin/hive-mcp-secrets MCP server]

Encrypted secret store for the A2A network — Hive Civilization. AES-256-GCM at rest, agent-DID-scoped namespaces, audit log, x402 USDC settlement on Base L2. MCP 2024-11-05. Inbound only.

Agents put encrypted secrets keyed by (namespace, key) and retrieve them later. The namespace is the agent DID — a caller can only see and write to its own namespace. The master key lives in the operator's environment and is never committed, logged, or returned over the wire.

brand : Hive Civilization gold #C08D23 (Pantone 1245 C)spec  : MCP 2024-11-05 / Streamable-HTTP / JSON-RPC 2.0wallet: W1 MONROE 0x15184bf50b3d3f52b60434f8942b7d52f2eb436e (Base)crypto: AES-256-GCM, 12-byte IV per record, 16-byte auth tag, node:crypto

Quick start

bash
git clone https://github.com/srotzin/hive-mcp-secretscd hive-mcp-secretsnpm install
# 32 random bytes as hex — never commit this valueexport SECRETS_MASTER_KEY=$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")
npm start# hive-mcp-secrets on :3000

Hosted endpoint: https://hive-mcp-secrets.onrender.com/mcp

Tools and pricing

ToolUSD / callNotes
secrets_get$0.002Read and decrypt a secret. Caller must own the namespace.
secrets_put$0.005Encrypt and store a secret. Returns 503 if master key not configured.
secrets_listfreeList keys in a namespace. Tier 0.
secrets_audit$0.002Read the audit log for a namespace.

All payments are inbound. Submit a Base USDC tx_hash (caller → W1) in the request body or x402-tx-hash header. The shim reads the receipt from Base RPC, decodes the USDC Transfer log, and verifies recipient and amount before serving the call.

Operator note — master key required for writes

hive-mcp-secrets reads SECRETS_MASTER_KEY from the process environment at startup.

  • If set, it is parsed as 64-char hex → 32 raw bytes; or as base64 → 32 raw bytes; or otherwise SHA-256 hashed to 32 bytes.
  • If not set, writes return 503 service_unavailable with reason: "SECRETS_MASTER_KEY not set". Reads of records that do not exist return 404 as usual; reads of stored records require the same key that wrote them, since AES-256-GCM rejects decryption with any other key.

The key is never committed to the repository, never logged, and never returned over the wire. Operators are expected to set it in the deployment environment (Render env var, Kubernetes secret, etc.) before enabling production traffic. Rotating the key invalidates all previously stored ciphertexts.

Namespace model

The namespace parameter on every endpoint is the agent DID that owns the data. Every endpoint enforces caller_did === namespace and returns forbidden_namespace_mismatch otherwise. There is no superuser, no cross-namespace read, and no multi-DID sharing in v1.

The audit log is per-namespace and records every action — get, put, delete, list, audit, plus the negative paths payment_required, error:not_found, error:integrity_check_failed, etc. Entries store caller_did, action, ts_ms, and (for paid ops) tx_hash, payer, and amount_usd.

REST endpoints

MethodPathPurpose
GET/v1/secrets/{namespace}/{key}Read and decrypt one secret. Paid.
PUT/v1/secrets/{namespace}/{key}Encrypt and store one secret. Paid. Returns 503 without master key.
DELETE/v1/secrets/{namespace}/{key}Remove a secret. Free, caller-owned.
GET/v1/secrets/{namespace}List keys in a namespace. Free, Tier 0.
GET/v1/secrets/auditAudit log read. Paid. Query: namespace, caller_did, since_ms?, until_ms?, limit?.
GET/v1/secrets/todayToday's revenue snapshot. Free.
GET/healthService health, including master_key_loaded.
GET/.well-known/mcp.jsonMCP discovery.
POST/mcpMCP JSON-RPC.

PUT /v1/secrets/{namespace}/{key} body

json
{  "value": "the-secret-string",  "caller_did": "did:hive:0xabc...",  "tx_hash": "0x...64-char-tx-on-base..."}

Without tx_hash, the response is a 402 envelope:

json
{  "error": "payment_required",  "x402": {    "type": "x402", "version": "1", "kind": "secrets_put",    "asking_usd": 0.005, "accept_min_usd": 0.005,    "asset": "USDC", "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",    "network": "base", "pay_to": "0x15184bf50b3d3f52b60434f8942b7d52f2eb436e",    "nonce": "...", "issued_ms": 1714200000000  }}

Encryption details

  • Algorithm: aes-256-gcm (FIPS-recognized AEAD)
  • Key length: 32 bytes
  • IV length: 12 bytes, fresh crypto.randomBytes(12) per record
  • Auth tag length: 16 bytes
  • Storage: SQLite secrets table — (namespace, key, ciphertext, iv, auth_tag, created_ms, updated_ms, version) with PRIMARY KEY (namespace, key)
  • Write path: node:crypto.createCipheriv → update → final, then getAuthTag(). All three values stored as base64 TEXT.
  • Read path: createDecipheriv → setAuthTag → update → final. Any single bit flipped in ciphertext, iv, or auth_tag causes final() to throw, which surfaces as integrity_check_failed.

The smoke test below verifies tampered ciphertext fails to decrypt — this is real AES-GCM, not an integrity check tacked on after the fact.

MCP usage

bash
curl -X POST https://hive-mcp-secrets.onrender.com/mcp \  -H "content-type: application/json" \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
bash
curl -X POST https://hive-mcp-secrets.onrender.com/mcp \  -H "content-type: application/json" \  -d '{    "jsonrpc":"2.0","id":2,"method":"tools/call",    "params":{      "name":"secrets_put",      "arguments":{        "namespace":"did:hive:0xabc",        "key":"openai_api_key",        "value":"sk-...",        "caller_did":"did:hive:0xabc",        "tx_hash":"0x..."      }    }  }'

Local smoke test

bash
export SECRETS_MASTER_KEY=$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")npm start &sleep 1
# Tier 0 list (empty)curl -s "http://localhost:3000/v1/secrets/did:hive:0xa/" | jq .
# PUT without tx_hash → 402 envelopecurl -s -X PUT "http://localhost:3000/v1/secrets/did:hive:0xa/k1" \  -H "content-type: application/json" \  -d '{"value":"hello","caller_did":"did:hive:0xa"}' | jq .
# PUT with stub tx (set VERIFY_ONCHAIN=false locally)VERIFY_ONCHAIN=false curl -s -X PUT "http://localhost:3000/v1/secrets/did:hive:0xa/k1" \  -H "content-type: application/json" \  -d '{"value":"hello","caller_did":"did:hive:0xa","tx_hash":"0xtest"}' | jq .
# GET round-tripVERIFY_ONCHAIN=false curl -s "http://localhost:3000/v1/secrets/did:hive:0xa/k1?caller_did=did:hive:0xa&tx_hash=0xtest" | jq .

Hosting

Deployed to Render: srv hive-mcp-secrets, oregon, starter, autoDeploy=true. The Render env var SECRETS_MASTER_KEY is the operator's responsibility to set. Without it, the deployed service still runs, /health reports master_key_loaded: false, and writes return 503.

License

MIT — see LICENSE.

Hive Civilization Directory

Part of the Hive Civilization — agent-native financial infrastructure.

Brand: #C08D23

來源:README.md,提交 d7d19b7

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Secrets 整合