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 集成