mcpField
B
beget-s3-mcp-ai-cli

beget-s3-mcp-ai-cli

本地服务
github.com/stufently文件与存储12 周前更新

关于 beget-s3-mcp-ai-cli

beget-s3-mcp-ai-cli 是用于 Beget S3 对象存储的 MCP 服务、命令行工具和 Agent 技能,可检查对象并恢复备份。它按访问范围和能力配置工具,默认仅开放读取,并支持破坏性操作的人工确认。

主要功能

  1. 01列出、读取、复制和管理对象
  2. 02通过命令行上传、下载和检查文件
  3. 03按权限级别启用读写和删除工具
  4. 04限制可访问的存储桶和对象前缀
  5. 05为破坏性操作设置确认策略
  6. 06安装 MCP 配置和 Agent 技能

适用场景

  1. 01检查现有存储桶中的备份文件
  2. 02从对象存储下载并恢复归档
  3. 03限制 Agent 对存储桶和路径的访问

MCP 相关

该 MCP 服务通过 stdio 向客户端提供对象存储工具和配置资源。工具按读取、写入、删除及管理权限分级注册,并可设置存储范围和破坏性操作确认。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"stufently-beget-s3-mcp-ai-cli": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"BEGET_S3_ACCESS_KEY_ID",
"-e",
"BEGET_S3_SECRET_ACCESS_KEY",
"-e",
"BEGET_S3_POOL",
"-e",
"BEGET_S3_ENDPOINT",
"-e",
"BEGET_S3_ALLOW_INSECURE",
"-e",
"BEGET_S3_ALLOW",
"-e",
"BEGET_S3_DESTRUCTIVE_POLICY",
"-e",
"BEGET_S3_ALLOWED_BUCKETS",
"-e",
"BEGET_S3_ALLOWED_PREFIXES",
"-e",
"BEGET_S3_FILE_ROOT",
"-e",
"BEGET_S3_AUDIT_FILE",
"ghcr.io/stufently/beget-s3-mcp-ai-cli:0.1.0"
],
"env": {
"BEGET_S3_ACCESS_KEY_ID": "<BEGET_S3_ACCESS_KEY_ID>",
"BEGET_S3_SECRET_ACCESS_KEY": "<BEGET_S3_SECRET_ACCESS_KEY>",
"BEGET_S3_POOL": "<BEGET_S3_POOL>",
"BEGET_S3_ENDPOINT": "<BEGET_S3_ENDPOINT>",
"BEGET_S3_ALLOW_INSECURE": "<BEGET_S3_ALLOW_INSECURE>",
"BEGET_S3_ALLOW": "<BEGET_S3_ALLOW>",
"BEGET_S3_DESTRUCTIVE_POLICY": "<BEGET_S3_DESTRUCTIVE_POLICY>",
"BEGET_S3_ALLOWED_BUCKETS": "<BEGET_S3_ALLOWED_BUCKETS>",
"BEGET_S3_ALLOWED_PREFIXES": "<BEGET_S3_ALLOWED_PREFIXES>",
"BEGET_S3_FILE_ROOT": "<BEGET_S3_FILE_ROOT>",
"BEGET_S3_AUDIT_FILE": "<BEGET_S3_AUDIT_FILE>"
}
}
}
}
启动命令docker run -i --rm -e BEGET_S3_ACCESS_KEY_ID -e BEGET_S3_SECRET_ACCESS_KEY -e BEGET_S3_POOL -e BEGET_S3_ENDPOINT -e BEGET_S3_ALLOW_INSECURE -e BEGET_S3_ALLOW -e BEGET_S3_DESTRUCTIVE_POLICY -e BEGET_S3_ALLOWED_BUCKETS -e BEGET_S3_ALLOWED_PREFIXES -e BEGET_S3_FILE_ROOT -e BEGET_S3_AUDIT_FILE ghcr.io/stufently/beget-s3-mcp-ai-cli:0.1.0
需要配置的环境变量
BEGET_S3_ACCESS_KEY_ID密钥S3 access key ID
BEGET_S3_SECRET_ACCESS_KEY密钥S3 secret access key
BEGET_S3_POOLSigning pool
BEGET_S3_ENDPOINTOptional endpoint override
BEGET_S3_ALLOW_INSECURESet 1 only for explicit HTTP test endpoints
BEGET_S3_ALLOWIndependent write,delete,admin levels; read only by default
BEGET_S3_DESTRUCTIVE_POLICY
BEGET_S3_ALLOWED_BUCKETSComma-separated bucket scope
BEGET_S3_ALLOWED_PREFIXESComma-separated bucket/prefix/ scope
BEGET_S3_FILE_ROOTOptional confined local file root
BEGET_S3_AUDIT_FILEOptional private append-only audit output

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/stufently/beget-s3-mcp-ai-cli:0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Beget S3 MCP 服务与 AI CLI

状态 许可证

用于 Beget S3 的 MCP 服务和 CLI:将现成的存储桶连接到 Claude Code、Cursor 和 Codex,查看文件并恢复备份。beget-s3 二进制文件会考虑控制面板提供的功能和 S3 配置文件的保守限制。

英文指南 · S3 MCP 服务目录

English

面向 Beget S3 Object Storage 的 Go MCP 服务、CLI 和 Agent 技能。将 Claude Code、Cursor 和 Codex 连接到受限的对象存储,以便检查和恢复备份。存储桶和共享链接需通过控制台管理;presign 和存储桶 API 已禁用。请参阅完整英文指南。

快速开始

从 Releases 下载适用于你平台的二进制文件(已发布 v0.1.0;已收录于 MCP Registry 和 Smithery),或使用 Go 1.27.2 构建:

bash scripts/go.sh go build -o beget-s3 ./cmd/beget-s3
./beget-s3 version
./beget-s3 auth set
./beget-s3 auth status
./beget-s3 ls --json

auth set 会提示输入 key ID 和 secret,且不会回显;没有 TTY 时会从 stdin 读取两行。不要将 secret 作为 argv 传递。文件 ~/.config/beget-s3/credentials 会以 0600 权限原子创建;权限范围更宽时会被拒绝。

优先级:标志 > 环境变量 > 文件。环境变量:BEGET_S3_ACCESS_KEY_ID、BEGET_S3_SECRET_ACCESS_KEY、BEGET_S3_POOL (ru1)、BEGET_S3_ENDPOINT。HTTP 需要设置 BEGET_S3_ALLOW_INSECURE=1。

镜像:ghcr.io/stufently/beget-s3-mcp-ai-cli:0.1.0;本地构建:docker build -t beget-s3 . 镜像以 uid 65532 身份运行 MCP,并包含 CA 证书。通过私有环境或文件传递凭据。

功能

请先在 Beget 控制面板中创建存储桶:S3 API 的创建、删除和读取存储桶设置功能已关闭。CORS 和公开策略需在控制面板中配置。Presign MCP 工具已禁用:控制面板中说明的有效期为 7 天,但尚未确认外部 SigV4 GET/PUT。大文件请使用 FILE_ROOT;请根据调研文档检查 API 功能。

  • 在配置文件范围内支持流式 object CRUD、copy、multipart 和 presigned URL。
  • 在支持的情况下注册版本、标签、CORS、策略和 Object Lock 配置。
  • 支持受限扫描、诊断、JSON、MCP 和内置 skill 的安装。

连接到 Claude Code、Cursor、Codex

将 beget-s3 MCP 服务添加到 Cursor

此按钮会以只读模式安装 Docker 镜像 ghcr.io/stufently/beget-s3-mcp-ai-cli:0.1.0 中的 MCP。密钥不会写入配置:Cursor 会从环境中读取 ${env:…},因此请在启动 Cursor 的环境中设置 BEGET_S3_ACCESS_KEY_ID 和 BEGET_S3_SECRET_ACCESS_KEY;如果存储桶不在默认池中,也请设置 BEGET_S3_POOL(空值 = 默认池)。Windsurf(mcp_config.json)和手动配置 ~/.cursor/mcp.json 时也使用同一配置块:

{
  "mcpServers": {
    "beget-s3": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "BEGET_S3_ACCESS_KEY_ID",
        "-e",
        "BEGET_S3_SECRET_ACCESS_KEY",
        "-e",
        "BEGET_S3_POOL",
        "ghcr.io/stufently/beget-s3-mcp-ai-cli:0.1.0"
      ],
      "env": {
        "BEGET_S3_ACCESS_KEY_ID": "${env:BEGET_S3_ACCESS_KEY_ID}",
        "BEGET_S3_SECRET_ACCESS_KEY": "${env:BEGET_S3_SECRET_ACCESS_KEY}",
        "BEGET_S3_POOL": "${env:BEGET_S3_POOL}"
      }
    }
  }
}
beget-s3 mcp install --client cursor --dry-run
beget-s3 mcp install --client cursor
beget-s3 mcp install --client claude-desktop
beget-s3 mcp install --client codex
beget-s3 mcp install --client claude-code --scope project
beget-s3 mcp install --client claude-code --scope user

最后一条命令只会打印 claude mcp add。二进制文件路径为绝对路径;密钥不会写入配置。Cursor:~/.cursor/mcp.json,Claude Code 项目:./.mcp.json;Desktop — 使用对应操作系统的配置目录。JSON 会保留其他密钥、.bak 和幂等性。

Codex:~/.codex/config.toml。现有表需要使用 --force;只有 # >>> beget-s3 (managed) / # <<< beget-s3 (managed) 之间的区块会被替换。没有标记的表即使使用 --force 也不会被替换;TOML 的其他字节保持不变。

各级别可独立启用:beget-s3 mcp --allow-write --allow-delete --allow-admin,或设置 BEGET_S3_ALLOW=write,delete,admin。mcp install 也支持这些标志。通过 BEGET_S3_FILE_ROOT 启用 FILE_ROOT。

MCP 工具

级别工具
reads3_list_buckets, s3_list_objects, s3_head_object, s3_get_object, s3_preview_object, s3_list_multipart_uploads, s3_list_parts, s3_largest_objects, s3_prefix_usage, s3_unfinished_uploads
read + FILE_ROOTs3_download_file
writes3_put_object, s3_create_folder, s3_copy_object, s3_multipart_create, s3_multipart_complete
write + FILE_ROOTs3_upload_file
deletes3_delete_object, s3_delete_objects, s3_multipart_abort

资源:beget-s3://config、beget-s3://capabilities、beget-s3://pools。不支持的功能不会提供对应工具。

列表最多包含 1000 个项目,并带有 continuation_token;版本列表和 multipart 列表还有第二个标记。Inline get/put 上限为 262144 字节,preview 上限为 65536 字节;大文件通过 FILE_ROOT/multipart 处理,此配置中禁用 presign。响应包含 structuredContent 和 JSON 文本;超过 256 KiB 的文本会替换为简短摘要。错误包含 code/message/retryable;SDK 会对 429/503 错误进行自适应重试。

分析最多扫描 max_scan(默认 10000)个项目;partial/token 表示结果不完整。Prefix usage 会通过 next_result_offset 返回聚合结果分页。这不是计费数据。

场景:查看并恢复现有存储桶中的文件

在 Beget 面板中创建存储桶,并使用其访问密钥。检查备份只需列出对象、查看元数据并下载;无需通过此配置创建存储桶或 presigned 链接:

beget-s3 ls backups/daily/ --json
beget-s3 stat backups/daily/archive.tar
beget-s3 cp s3://backups/daily/archive.tar ./restored-beget.tar

示例使用现有存储桶 backups 和对象 daily/archive.tar;请替换为自己的值。配置和云 API 仍需实际验证。

CLI

beget-s3 cp ./archive.tar s3://backups/daily/archive.tar --part-size 5242880 --overwrite --yes
beget-s3 ls backups/daily/ --max-keys 100 --json
beget-s3 stat backups/daily/archive.tar
beget-s3 cp s3://backups/daily/archive.tar ./restored.tar
beget-s3 cp ./directory s3://backups/tree/ --recursive --overwrite --yes
beget-s3 cp s3://backups/tree/ ./restored-directory --recursive
beget-s3 cp s3://backups/daily/archive.tar s3://backups/copy.tar --overwrite --yes
beget-s3 cat backups/daily/notes.txt
beget-s3 du backups/daily/ --max-scan 10000 --json
beget-s3 rm backups/moved.tar --yes
beget-s3 doctor --json
beget-s3 compat --markdown

cp 接受普通本地路径和 S3 URI:s3://bucket/key 或 beget-s3://bucket/key。大文件上传使用 manager/multipart,--recursive 会复制目录/前缀。覆盖需要使用 --overwrite 并确认;下载为原子操作。在非 TTY 环境中,rm/rb/mv 未指定 --yes 时会返回代码 2;在 TTY 环境中则会询问。--json 为通用选项,错误输出到 stderr,并返回非零代码。

doctor 会检查凭据来源/权限、DNS/TLS、Date 时间以及 ListBuckets:偏差超过 5 分钟时发出警告,超过 15 分钟时视为错误。

AI Agent 技能

beget-s3 skill install
beget-s3 skill install --target ./agent-skills/beget-s3

默认安装到 ~/.claude/skills/beget-s3。幂等地安装 SKILL.md 和六个参考文档:备份/恢复、共享、最小权限、成本规范、迁移、事件响应。触发词:“beget s3”、“Beget 存储桶”、“上传到 s3”、“presigned”、“备份到 s3”。

安全

如果 conditional_writes:false,则无覆盖写入会在发送 S3 请求前失败:HEAD 无法提供原子性保护。要执行一致性写入,请在 CLI 中使用 --overwrite --yes,或在 MCP 中使用 overwrite:true, confirm:true,并保留确认策略。如果 conditional_delete:false,则禁用 mv 和 s3_move_object。

MCP 默认仅注册读取工具;不支持的功能和缺失的权限级别会导致工具不被注册。

BEGET_S3_DESTRUCTIVE_POLICY:confirm 在客户端支持时使用 elicitation,否则需要在人员同意后设置 confirm:true;elicit 要求支持 elicitation,且不能通过 confirm:true 绕过;block 始终禁止操作,allow 则无需关卡直接执行。拒绝操作会先于任何 S3 请求。关卡适用于删除、move、presigned PUT、策略/Object Lock、暂停 versioning 以及覆盖操作。

当 conditional_writes:true 时,put/copy/move/multipart complete/upload file 操作会使用 overwrite:false、对目标执行 HEAD 并设置 If-None-Match: *;当其为 false 时,默认拒绝写入。overwrite:true 需要通过同一关卡。

作用域:BEGET_S3_ALLOWED_BUCKETS=backups 和 BEGET_S3_ALLOWED_PREFIXES=backups/daily/。前缀按路径段边界匹配;daily-evil 不匹配。拒绝包含 '..' 的路径段。部分作用域会禁止整个存储桶和范围过宽的列表操作,即使该存储桶已列在 ALLOWED_BUCKETS 中也是如此。Copy/move 会检查源和目标。

文件 MCP 工具使用 os.Root:仅允许 FILE_ROOT 内的相对路径;拒绝 '..'、绝对路径和指向外部的符号链接。每次调用都会向 stderr 写入一行 JSON;BEGET_S3_AUDIT_FILE 还会以 0600 权限写入日志。日志和错误信息中的机密信息及 X-Amz-Signature/Credential/Security-Token 会被隐藏。完整签名链接仅作为操作结果返回。还应限制 S3 密钥本身的权限。

s3_download_file 默认会发布下载的文件,但不会替换已存在的文件,包括下载期间创建的文件。要替换文件,请传入 overwrite:true:此操作将遵循破坏性策略,并通过表单确认或在人员同意后设置 confirm:true。

Beget 存储池和存储类别

存储池、端点和存储类别见兼容性表;每项事实、价格和错误及其一手来源见研究文档。默认存储池:ru1;SigV4 区域与所选存储池相同。配置文件中的 verified:false 表示 versitygw 上的验证无法确认云 API。未经确认的信息标记为 [假设];配置文件中的价格不能用作账单计算器。

云服务可能支持 Lifecycle、ACL、bucket tagging 和 object retention,但此版本未提供用于配置这些功能的工具;配置文件中的数据描述的是 S3 API 兼容性。

常见问题

可以通过 mb 命令或 MCP 创建 Beget 存储桶吗? 不可以:bucket_create、bucket_delete 和 bucket_config 均已禁用。请在 Beget 面板中创建存储桶;兼容性表列出了当前配置的限制。

为什么 Beget 的预签名链接不能通过 CLI 和 MCP 使用? 外部 SigV4 预签名尚未得到确认,因此 presign=false。面板链接见 Beget 调研;这并不保证支持外部 GET/PUT 链接。

如何通过 CLI 从 Beget S3 下载备份? 执行 beget-s3 auth set 后,运行 stat bucket/key,然后运行 cp s3://bucket/key ./new-file。若要通过 MCP 下载,还需设置 BEGET_S3_FILE_ROOT,以限制本地路径。

什么是 MCP 服务? 它是一种通过 Model Context Protocol 向 Agent 提供工具和资源的程序;此处使用 stdio。

如何将 MCP 服务连接到 Claude Code? 保存 auth set 中的密钥,然后使用 project install 或已打印的 user 命令。

允许 Agent 访问 S3 是否安全? 请限制密钥、范围和权限级别;保留 confirm/block,并谨慎批准具有破坏性影响的操作。

它与 aws-cli 和 rclone 有何不同? 该二进制文件整合了 MCP、网关、审计、分析、skill 和 CLI;aws-cli/rclone 仍是独立的传输/自动化工具。

支持哪些功能? 请参阅 capabilities 和 兼容性。工具会根据配置注册;此版本无法配置 lifecycle、ACL、bucket tagging 和 object retention。

其他提供商

通用目录:适用于俄罗斯 S3 的 MCP 服务和 CLI。

提供商仓库使用场景
Selectelselectel-s3-mcp-ai-cli选择存储池并恢复备份
Yandex Cloudyandex-s3-mcp-ai-cli清点对象并检查备份版本
VK Cloudvkcloud-s3-mcp-ai-cli检查 Hotbox/Icebox 并访问所需区域
Cloud.rucloudru-s3-mcp-ai-cli诊断 Evolution Object Storage 的访问问题
Timeweb Cloudtimeweb-s3-mcp-ai-cli恢复归档并统计前缀占用空间
MWSmws-s3-mcp-ai-cli检查 HMAC 访问并生成归档短链接
Begetbeget-s3-mcp-ai-cli查看并恢复现有存储桶中的文件
Shared Go kits3-mcp-ai-cli-kit通用 MCP、CLI、防护机制和 CI

许可证

MIT。已验证的事实与假设。

Docker 中的检查:bash scripts/go.sh go test -race ./...、bash scripts/conformance.sh、bash scripts/mcp_smoke.sh、bash scripts/mutation_gate.sh、bash scripts/check_docs.sh。Conformance 使用 versitygw v1.8.0 和测试密钥。

通用 MCP/CLI、防护机制和检查由 s3-mcp-ai-cli-kit v0.1.0 提供;本仓库保留内置配置、精简的 main 和 Beget 文档。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。