OneTime Secret MCP应用程序
](https://github.com/doobidoo/onetimesecret-mcp/releases) 
使用模型上下文协议(MCP)构建的以隐私为重点的秘密共享应用程序。共享在查看后自毁的加密秘密。
版本: 1.2.0 | 状态: 生产就绪
特性
- 零知识加密 -机密在客户端使用AES-256-GCM加密。服务器永远看不到明文。
- 自毁 -机密在时间限制或查看次数后自动过期。
- 基于链接的共享 -生成可共享的URL以便于分发。
- MCP集成 -直接从Claude Desktop或其他MCP客户端使用。
- 独立用户界面 -非克劳德用户可以通过简单的web界面查看秘密。
- Cloudflare后端 -具有全球边缘网络的无服务器存储。
建筑
┌─────────────────┐
│ Claude Desktop │
│ (MCP Client) │
└────────┬────────┘
│
│ MCP Protocol
│
┌────────▼────────┐
│ MCP Server │
│ (main.ts) │
└────────┬────────┘
│
│ REST API
│
┌────────▼────────────────┐
│ Cloudflare Worker │
│ - REST API │
│ - Serves reveal.html │
│ - KV Storage │
└─────────────────────────┘服务器 从未见过 明文秘密或密码短语-所有加密/解密都发生在客户端。
快速开始
安装
npm install发展
- 启动工人(本地):
npm run worker:dev- 使用MCP应用程序启动MCP服务器:
npm start- 添加到Claude桌面配置:
{
"mcpServers": {
"onetimesecret": {
"command": "node",
"args": ["/path/to/onetimesecret-mcp/dist/main.js"],
"env": {
"CLOUDFLARE_WORKER_URL": "http://localhost:8787"
}
}
}
}用法
来自克劳德桌面
- 从Claude打开MCP应用程序
- 使用密码创建密钥
- 共享生成的链接
来自MCP工具
让克劳德创造一个秘密:
Create a secret with the message "Hello World" using passphrase "test123"揭露秘密
收件人可以:
- 打开可共享链接(例如。,
https://worker.dev/s/{id}) - 输入密码
- 查看秘密(一次性或有限查看)
部署
看 部署.md 获取完整部署指南。
快速部署:
# Create KV namespace
npm run worker:create-kv
# Build all components
npm run build
# Deploy Worker
npm run worker:deploy
# Update .env with deployed URL
echo "CLOUDFLARE_WORKER_URL=https://your-worker.workers.dev" > .envAPI终点
POST/秘密
创建一个新的秘密。
请求:
{
"encryptedData": "base64...",
"iv": "base64...",
"ttlMinutes": 60,
"maxViews": 1
}限制: encryptedData 最大1 MB。退货 413 如果超过。
答复:
{
"success": true,
"secretId": "uuid",
"expiresAt": "2024-01-01T00:00:00.000Z",
"maxViews": 1
}GET/secrets/:id
检索并可选择销毁秘密。
答复:
{
"success": true,
"encryptedData": "base64...",
"iv": "base64...",
"destroyed": true,
"viewsRemaining": 0
}GET/secrets/:id/status
在不泄露的情况下检查秘密是否存在。
答复:
{
"exists": true,
"expiresAt": "2024-01-01T00:00:00.000Z",
"viewsRemaining": 1
}GET/s/:id
为秘密提供揭露页。
GET/健康
健康检查端点。
MCP工具
创建秘密
创建新的加密密钥。
论据:
encryptedData(字符串):Base64编码的加密数据(最大:1 MB)iv(string):Base64编码初始化向量ttlMinutes(数字,可选):生存时间(默认值:60,最大值:10080)maxViews(数字,可选):销毁前的最大视图数(默认值:1)
泄露秘密
检索加密的秘密。
论据:
secretId(string):秘密的UUID
检查机密状态
在不泄露的情况下检查是否存在秘密。
论据:
secretId(string):秘密的UUID
安全
限制
| 参数 | 限制 | 说明 |
|---|---|---|
| 秘密尺寸 | 1 MB | 加密数据的最大大小(base64) |
| TTL | 7天 | 最长生存时间(10080分钟) |
| 视图 | 1+ | 可配置,至少1个视图 |
加密流程
- 客户端加密:
- 生成随机16字节盐 - 使用PBKDF2从密码中导出密钥(100k迭代,SHA-256) - 使用AES-256-GCM加密 - 将加密的blob+IV发送到服务器
- 服务器存储:
- 使用元数据存储加密数据 - 永远看不到密码或明文 - 通过KV TTL自动到期
- 客户端解密:
- 检索加密的blob+IV - 从用户提供的密码中导出密钥 - 在浏览器中本地解密
共享选项
| 方法 | 安全级别 | 描述 |
|---|---|---|
| ID+单独的密码 | 高 | 通过不同渠道共享ID和密码 |
| 仅带ID的URL | 中高 | 单独共享URL和密码 |
| 带片段的URL(#key) | 中等 | 单链共享(URL片段中的密码) |
发展
项目结构
onetimesecret-mcp/
├── src/
│ ├── mcp-app.ts # MCP app UI logic
│ └── reveal.ts # Standalone reveal page logic
├── worker/
│ └── index.ts # Cloudflare Worker
├── mcp-app.html # MCP app UI (full features)
├── reveal.html # Standalone reveal page
├── main.ts # MCP server
├── wrangler.toml # Cloudflare Worker config
└── package.json构建命令
npm run build-构建所有组件npm run build:reveal-仅构建显示页面npm run start-开发模式(手表+服务器)npm run worker:dev-在本地运行Workernpm run worker:deploy-将Worker部署到Cloudflare
路线图
看 TODO.md 详细的路线图。
第1阶段:Cloudflare后端(已完成)
- 带KV存储的REST API
- 自动过期
- 查看计数跟踪
第二阶段:基于链接的共享(已完成)
- 可共享URL
- 独立展示页面
- 基于片段的一键链接
第三阶段:增强功能
- 密码保护的秘密
- 文件附件支持
- 刻录通知
- 速率限制
- 管理仪表盘
许可证
麻省理工学院
