mcpField
Y
yandex-s3-mcp-ai-cli

yandex-s3-mcp-ai-cli

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

关于 yandex-s3-mcp-ai-cli

面向 Yandex Cloud Object Storage 的 Go MCP 服务、命令行工具和 Agent skill,供用户及编码 Agent 检查和管理存储对象。它支持受限 S3 访问、备份恢复,并可为破坏性操作设置人工审批。

主要功能

  1. 01受限的 S3 对象访问
  2. 02列出对象并检查版本
  3. 03备份恢复与文件传输
  4. 04读、写、删、管理权限分级
  5. 05破坏性操作需人工审批
  6. 06内置命令行工具和 Agent skill

适用场景

  1. 01盘点对象并检查备份版本
  2. 02恢复或复制 Yandex Cloud S3 文件
  3. 03将 Agent 限定在指定存储桶和前缀

MCP 相关

通过 stdio 向 MCP 客户端提供 Yandex Cloud S3 操作和资源。默认仅启用读取;写入、删除和管理工具须分别启用,并可受确认策略约束。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"stufently-yandex-s3-mcp-ai-cli": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"YANDEX_S3_ACCESS_KEY_ID",
"-e",
"YANDEX_S3_SECRET_ACCESS_KEY",
"-e",
"YANDEX_S3_POOL",
"-e",
"YANDEX_S3_ENDPOINT",
"-e",
"YANDEX_S3_ALLOW_INSECURE",
"-e",
"YANDEX_S3_ALLOW",
"-e",
"YANDEX_S3_DESTRUCTIVE_POLICY",
"-e",
"YANDEX_S3_ALLOWED_BUCKETS",
"-e",
"YANDEX_S3_ALLOWED_PREFIXES",
"-e",
"YANDEX_S3_FILE_ROOT",
"-e",
"YANDEX_S3_AUDIT_FILE",
"ghcr.io/stufently/yandex-s3-mcp-ai-cli:0.1.0"
],
"env": {
"YANDEX_S3_ACCESS_KEY_ID": "<YANDEX_S3_ACCESS_KEY_ID>",
"YANDEX_S3_SECRET_ACCESS_KEY": "<YANDEX_S3_SECRET_ACCESS_KEY>",
"YANDEX_S3_POOL": "<YANDEX_S3_POOL>",
"YANDEX_S3_ENDPOINT": "<YANDEX_S3_ENDPOINT>",
"YANDEX_S3_ALLOW_INSECURE": "<YANDEX_S3_ALLOW_INSECURE>",
"YANDEX_S3_ALLOW": "<YANDEX_S3_ALLOW>",
"YANDEX_S3_DESTRUCTIVE_POLICY": "<YANDEX_S3_DESTRUCTIVE_POLICY>",
"YANDEX_S3_ALLOWED_BUCKETS": "<YANDEX_S3_ALLOWED_BUCKETS>",
"YANDEX_S3_ALLOWED_PREFIXES": "<YANDEX_S3_ALLOWED_PREFIXES>",
"YANDEX_S3_FILE_ROOT": "<YANDEX_S3_FILE_ROOT>",
"YANDEX_S3_AUDIT_FILE": "<YANDEX_S3_AUDIT_FILE>"
}
}
}
}
启动命令docker run -i --rm -e YANDEX_S3_ACCESS_KEY_ID -e YANDEX_S3_SECRET_ACCESS_KEY -e YANDEX_S3_POOL -e YANDEX_S3_ENDPOINT -e YANDEX_S3_ALLOW_INSECURE -e YANDEX_S3_ALLOW -e YANDEX_S3_DESTRUCTIVE_POLICY -e YANDEX_S3_ALLOWED_BUCKETS -e YANDEX_S3_ALLOWED_PREFIXES -e YANDEX_S3_FILE_ROOT -e YANDEX_S3_AUDIT_FILE ghcr.io/stufently/yandex-s3-mcp-ai-cli:0.1.0
需要配置的环境变量
YANDEX_S3_ACCESS_KEY_ID密钥S3 access key ID
YANDEX_S3_SECRET_ACCESS_KEY密钥S3 secret access key
YANDEX_S3_POOLSigning pool
YANDEX_S3_ENDPOINTOptional endpoint override
YANDEX_S3_ALLOW_INSECURESet 1 only for explicit HTTP test endpoints
YANDEX_S3_ALLOWIndependent write,delete,admin levels; read only by default
YANDEX_S3_DESTRUCTIVE_POLICY
YANDEX_S3_ALLOWED_BUCKETSComma-separated bucket scope
YANDEX_S3_ALLOWED_PREFIXESComma-separated bucket/prefix/ scope
YANDEX_S3_FILE_ROOTOptional confined local file root
YANDEX_S3_AUDIT_FILEOptional private append-only audit output

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

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

工具

还没有获取到工具列表

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

详细介绍

Yandex Cloud S3 MCP Server & AI CLI

Status License

用于 Yandex Cloud S3(Yandex Cloud Object Storage)的 MCP 服务和 CLI,可通过 Claude Code、Cursor 和 Codex 搜索文件、查看版本并恢复备份。二进制文件 yandex-s3 集成了 MCP、命令行和 Agent 技能。

English guide · S3 MCP 服务目录

English

用于 Yandex Cloud S3 Object Storage 的 Go MCP 服务、CLI 和 Agent 技能。将 Claude Code、Cursor 和 Codex 连接到受限范围的对象存储,以便检查和恢复备份。适用于 ru-central1;配置文件限制适用于禁止覆盖的写入操作。参见完整英文指南。

快速开始

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

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

auth set 会提示输入 key ID 和 secret,输入内容不会回显;没有 TTY 时会从 stdin 读取两行。不要将 secret 传入 argv。文件 ~/.config/yandex-s3/credentials 会以原子方式创建,权限为 0600;权限过于宽松时会被拒绝。

优先级:标志 > env > 文件。环境变量:YANDEX_S3_ACCESS_KEY_ID、YANDEX_S3_SECRET_ACCESS_KEY、YANDEX_S3_POOL(ru-central1)、YANDEX_S3_ENDPOINT。HTTP 需要设置 YANDEX_S3_ALLOW_INSECURE=1。

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

功能

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

连接到 Claude Code、Cursor、Codex

将 yandex-s3 MCP 服务添加到 Cursor

此按钮会以只读模式从 Docker 镜像 ghcr.io/stufently/yandex-s3-mcp-ai-cli:0.1.0 安装 MCP。密钥不会写入配置:Cursor 会从环境变量中替换 ${env:…},因此请在启动 Cursor 的环境中设置 YANDEX_S3_ACCESS_KEY_ID 和 YANDEX_S3_SECRET_ACCESS_KEY;如果存储桶不在默认池中,还需设置 YANDEX_S3_POOL(空值 = 默认池)。同一配置块也适用于 Windsurf(mcp_config.json)以及手动配置 ~/.cursor/mcp.json:

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

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

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

各级权限可独立启用:yandex-s3 mcp --allow-write --allow-delete --allow-admin,或设置 YANDEX_S3_ALLOW=write,delete,admin。mcp install 也支持这些标志。通过 YANDEX_S3_FILE_ROOT 启用 FILE_ROOT。

MCP 工具

级别工具
读取s3_list_buckets, s3_list_objects, s3_head_object, s3_get_object, s3_preview_object, s3_presign_get, s3_list_object_versions, s3_list_multipart_uploads, s3_list_parts, s3_get_bucket_config, s3_largest_objects, s3_prefix_usage, s3_unfinished_uploads, s3_get_object_tagging
读取 + FILE_ROOTs3_download_file
写入s3_put_object, s3_create_folder, s3_copy_object, s3_presign_put, s3_multipart_create, s3_multipart_presign_part, s3_multipart_complete, s3_put_object_tagging
写入 + FILE_ROOTs3_upload_file
删除s3_delete_object, s3_delete_objects, s3_multipart_abort
管理s3_create_bucket, s3_put_bucket_versioning, s3_put_bucket_cors, s3_put_bucket_policy, s3_delete_bucket_policy, s3_put_object_lock_configuration
管理 + 删除s3_delete_bucket

资源:yandex-s3://config、yandex-s3://capabilities、yandex-s3://pools。不支持的功能对应的工具会被排除。

列表最多包含 1000 个条目,并带有 continuation_token;版本和 multipart 操作还有第二个标记。Inline get/put 限制为 262144 字节,preview 限制为 65536 字节;较大的文件通过 presigned URL 或 FILE_ROOT 处理。响应包含 structuredContent 和 JSON 文本;超过 256 KiB 的文本会替换为简短摘要。错误包含 code/message/retryable;遇到 429/503 时,SDK 会自适应重试。

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

场景:对象清单与备份版本检查

恢复前,请检查 Яндекс Object Storage 中前缀的内容和对象版本。versions 命令适用于已启用版本控制的存储桶;下面的 cp 会下载当前版本:

yandex-s3 ls backups/daily/ --json
yandex-s3 versions backups/daily/ --json
yandex-s3 cp s3://backups/daily/archive.tar ./restored-yandex.tar

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

CLI

yandex-s3 mb backups
yandex-s3 cp ./archive.tar s3://backups/daily/archive.tar --part-size 5242880 --overwrite --yes
yandex-s3 ls backups/daily/ --max-keys 100 --json
yandex-s3 stat backups/daily/archive.tar
yandex-s3 cp s3://backups/daily/archive.tar ./restored.tar
yandex-s3 cp ./directory s3://backups/tree/ --recursive --overwrite --yes
yandex-s3 cp s3://backups/tree/ ./restored-directory --recursive
yandex-s3 cp s3://backups/daily/archive.tar s3://backups/copy.tar --overwrite --yes
yandex-s3 cat backups/daily/notes.txt
yandex-s3 versions backups/daily/ --json
yandex-s3 du backups/daily/ --max-scan 10000 --json
yandex-s3 presign backups/daily/archive.tar --expires 3600
yandex-s3 rm backups/moved.tar --yes
yandex-s3 rb empty-bucket --yes
yandex-s3 doctor --json
yandex-s3 compat --markdown

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

doctor 会检查凭证来源/权限、DNS/TLS、通过 Date 检查时钟,以及 ListBuckets:偏差超过 5 分钟会发出警告,超过 15 分钟则报错。

AI Agent 技能

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

默认安装在 ~/.claude/skills/yandex-s3。幂等地安装 SKILL.md 和六份参考资料:备份/恢复、分享、最小权限、成本管理、迁移、事件响应。触发词:「yandex s3」「Yandex Cloud 存储桶」「上传到 s3」「presigned」「s3 备份」。

安全

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

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

YANDEX_S3_DESTRUCTIVE_POLICY:confirm 在客户端支持时使用 elicitation,否则需要在获得人工同意后设置 confirm:true;elicit 要求支持 elicitation,且不允许通过 confirm:true 绕过;block 始终禁止操作,allow 则不经过确认门禁直接执行。拒绝操作时不会发起任何 S3 请求。此门禁涵盖删除、move、presigned PUT、策略/Object Lock、versioning suspension 和覆盖写入。

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

范围:YANDEX_S3_ALLOWED_BUCKETS=backups 和 YANDEX_S3_ALLOWED_PREFIXES=backups/daily/。前缀会检查段边界;daily-evil 不匹配。段 '..' 会被拒绝。部分范围会禁止整个存储桶和宽泛列表,即使该存储桶包含在 ALLOWED_BUCKETS 中也是如此。Copy/move 会同时检查源和目标。

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

s3_download_file 默认会发布下载的文件,且不会替换已有文件,包括下载期间创建的文件。要进行替换,请传入 overwrite:true:此操作会应用破坏性策略,并通过表单确认,或者在获得人工同意后设置 confirm:true。

Yandex Cloud 存储池和存储类别

存储池、端点和类别见兼容性表;每项事实、价格和错误信息及其原始来源见调研。默认存储池:ru-central1;SigV4 区域等于所选存储池。配置文件中的 verified:false 表示在 versitygw 上的检查并不能证实云 API 的情况。未经证实的信息标记为**[假设]**;配置文件中的价格不能用于计算账单。

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

常见问题

如何将 Yandex Object Storage 连接到 Claude Code? 构建 yandex-s3,通过 auth set 保存 S3 密钥,然后执行 mcp install --client claude-code --scope project。MCP 启动时仅具有只读权限;密钥不会写入客户端配置。

为什么可能禁止向 Yandex S3 上传时不覆盖已有对象? 配置文件中为 conditional_writes=false:尚未确认所有写入路径都能保证条件写入。请勿为了自动化而绕过拒绝;详情和实际验证的预期请参阅研究文档。

可以分享 Yandex S3 中文件的链接吗? yandex-s3 presign backups/daily/archive.tar --expires 3600 会创建临时 GET 链接。请将其视为机密;最长有效期和服务的实际行为仍需实际验证。

什么是 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 和 compat。工具按配置文件注册;此版本不配置 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 和 Yandex Cloud 文档。

评论

支持 Markdown

第一次接触 MCP?

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

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