内容
# Proofdrop MCP
[](https://www.skills.sh/mezotv/proofdrop/attach-review-proof)
小型HTTP MCP服务器,允许代理将临时公共审查证明放入可配置的[文件SDK](https://files-sdk.dev/)存储中,并获取一个URL。
预期用途是GitHub PR描述、问题评论和代理报告的截图和其他审查工件。代理可以上传资产并嵌入返回的URL,而不是创建临时分支、将二进制文件推送到无关的仓库或滥用临时仓库。
## 免责声明
本服务仅适用于公共、短期审查资产。
将其用于GitHub PR截图、问题评论、代理报告和其他需要图片、屏幕录制或截图URL的短期审查工件。
不要上传内部文档、客户数据、机密、私人产品截图、凭证、未发布的机密材料或任何应保密的内容。每个返回的URL都视为对任何拥有它的人公开。
`PROOFDROP_API_KEY`可以限制谁可以调用托管的MCP端点,但它并不使上传的图片私有。上传的资产URL在有效期内仍然可共享/公开。
## 工具
- `upload_asset`:将本地文件上传到配置的文件SDK存储适配器,并返回一个URL。
- `delete_asset`:通过返回的存储键删除上传的对象。
上传的对象可能在存储层是私有的,但返回的URL是拥有它的任何人的公共访问能力。对于签名适配器,返回的URL根据`ASSET_URL_TTL_SECONDS`或工具输入过期。对于公共/CDN/静态适配器,URL可能不会过期。
## 存储
Proofdrop使用[haydenbleasel/files-sdk](https://files-sdk.dev/),因此审查工件与Neon无关。默认适配器是通用S3兼容存储,与AWS S3、Neon对象存储、Cloudflare R2 S3兼容HTTP凭证、MinIO、Tigris和类似服务一起工作。
设置`FILES_ADAPTER=s3`以使用S3兼容存储,或设置`FILES_ADAPTER=fs`以使用本地开发/CI存储。
有用的files-sdk文档:
- [概述](https://files-sdk.dev/)
- [S3适配器](https://files-sdk.dev/adapters/s3)
- [文件系统适配器](https://files-sdk.dev/adapters/fs)
- [URL API](https://files-sdk.dev/api/url)
## 设置
```bash
pnpm install
pnpm run build
```
需要Node.js 22.12.0或更新版本。
启动HTTP服务器:
```bash
pnpm run start
```
默认情况下,它监听:
```text
http://localhost:3000/mcp
```
设置`MCP_PORT`以更改端口。
将HTTP服务器添加到Codex:
```bash
npx add-mcp http://localhost:3000/mcp --name proofdrop-mcp --agent codex --global
```
对于API密钥保护的部署:
```bash
npx add-mcp https://your-host.example/mcp --name proofdrop-mcp --agent codex --global --header 'Authorization: Bearer ${PROOFDROP_API_KEY}'
```
Codex不会为您启动HTTP MCP服务器。在Codex使用此MCP端点时,请保持`pnpm run start`或您的托管部署运行。
对于本地开发:
```bash
pnpm run dev
```
## 配置
- `FILES_ADAPTER`:存储适配器,可以是`s3`或`fs`。默认为`s3`。
- `MCP_PORT`:可选HTTP端口,默认为`3000`。
- `PROOFDROP_API_KEY`:托管部署的可选API密钥。设置后,`/mcp`需要`Authorization: Bearer <value>`或`X-API-Key: <value>`。
- `ASSET_KEY_PREFIX`:可选密钥前缀,默认为`proofdrop`。
- `ASSET_URL_TTL_SECONDS`:可选默认URL生命周期,默认为`86400`。
- `MAX_ASSET_BYTES`:可选最大本地文件大小,默认为`26214400`。
### S3兼容存储
- `FILES_BUCKET`:目标存储桶名称。
- `FILES_S3_ENDPOINT`:可选S3兼容端点URL。默认为`AWS_ENDPOINT_URL_S3`。
- `FILES_S3_REGION`:可选签名区域。默认为`AWS_REGION`,然后是`AWS_DEFAULT_REGION`,然后是`auto`。
- `FILES_S3_ACCESS_KEY_ID`:可选静态访问密钥ID。默认为`AWS_ACCESS_KEY_ID`。
- `FILES_S3_SECRET_ACCESS_KEY`:可选静态秘密访问密钥。默认为`AWS_SECRET_ACCESS_KEY`。
- `FILES_S3_SESSION_TOKEN`:可选静态会话令牌。默认为`AWS_SESSION_TOKEN`。
- `FILES_S3_FORCE_PATH_STYLE`:可选布尔值,默认为`true`,适用于S3兼容提供商。
- `FILES_PUBLIC_BASE_URL`:可选公共/CDN/自定义域名基础URL。设置后,`upload_asset`返回`${FILES_PUBLIC_BASE_URL}/${key}`而不是签名URL。
`FILES_S3_BUCKET`、`AWS_S3_BUCKET_NAME`、`S3_BUCKET_NAME`和`AWS_BUCKET_NAME`被接受为存储桶名称的备用方案。
### 本地文件系统存储
- `FILES_ADAPTER=fs`:使用files-sdk的本地文件系统适配器。
- `FILES_FS_ROOT`:可选存储根目录,默认为`.proofdrop-assets`。
- `FILES_PUBLIC_BASE_URL`:另一个服务器公开`FILES_FS_ROOT`的可选HTTP基础URL。
如果没有`FILES_PUBLIC_BASE_URL`,文件系统适配器返回`file://` URL,这对于本地测试很有用,但不适用于浏览器可见的PR评论。
## 上传示例
使用以下命令调用`upload_asset`:
```json
{
"file_path": "/tmp/screenshot.png",
"content_type": "image/png",
"expires_in_seconds": 86400
}
```
响应包括:
```json
{
"bucket": "example-bucket",
"storageProvider": "s3",
"storageLocation": "example-bucket",
"key": "proofdrop/2026-06-26/uuid-screenshot.png",
"url": "https://...",
"urlExpires": true,
"expiresAt": "2026-06-27T08:00:00.000Z",
"contentType": "image/png",
"sizeBytes": 12345
}
```
`expiresAt`仅在返回的URL签名且实际上过期时才包含。公共/CDN/静态URL包含`"urlExpires": false`,不包含`expiresAt`。
在PR描述或评论中使用`url`。如果要稍后调用`delete_asset`,请保留`key`。
## 临时对象清理
签名URL会自动过期,但底层对象在删除或由提供商生命周期规则过期之前仍保留在存储中。如果要自动保留,请为存储提供商中的`ASSET_KEY_PREFIX`前缀配置清理。