beget-s3-mcp-ai-cli
Read-only MCP server for inspecting an existing Beget S3 bucket.
List visible buckets and scoped objects with pagination (up to 1000/page).
Read object metadata (HEAD) and fetch small objects inline up to 262144 bytes.
Preview first 65536 bytes with detected type and CSV header.
List multipart uploads and their parts.
Run bounded scans for largest objects, prefix usage aggregates, and unfinished uploads older than a threshold.
No write, delete, bucket creation, or presign tools are exposed; presign is disabled in this profile.
Beget S3 MCP Server & AI CLI
MCP-сервер и CLI для S3 Бегет (Beget): подключение готового бакета к Claude Code, Cursor и Codex, просмотр файлов и восстановление бэкапов. Бинарь beget-s3 учитывает возможности панели и консервативные ограничения S3-профиля.
English guide · Каталог S3 MCP-серверов
English
A Go MCP server, CLI and agent skill for Beget S3 Object Storage. Connect Claude Code, Cursor and Codex to scoped object storage for inspection and backup recovery. Buckets and share links use the console; presign and bucket API are disabled. See the full English guide.
Related MCP server: cloudru-s3-mcp-ai-cli
Быстрый старт
Возьми бинарь своей платформы из 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 --jsonauth set спрашивает key ID и secret без эха; без TTY читает две строки stdin. Не передавай секрет в argv. Файл ~/.config/beget-s3/credentials создаётся атомарно с 0600; более широкие права отклоняются.
Приоритет: флаги > env > файл. Переменные: 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 . Образ запускает MCP от uid 65532, содержит CA-сертификаты. Передай креды через приватное окружение/файл.
Возможности
Бакет сначала создайте в панели Beget: S3 API создания/удаления и чтения настроек бакета выключен. CORS и публичная политика настраиваются в панели. Presign MCP-инструменты выключены: срок 7 дней описан для панели, внешний SigV4 GET/PUT не подтверждён. Используйте FILE_ROOT для больших файлов; возможности API проверяйте по ресерчу.
Потоковые object CRUD, copy, multipart и presigned URL в пределах профиля.
Версии, теги, CORS, политика и Object Lock configuration регистрируются при наличии поддержки.
Ограниченные сканы, диагностика, JSON, установка MCP и встроенного skill.
Подключение к Claude Code, Cursor, Codex
Кнопка ставит MCP из Docker-образа ghcr.io/stufently/beget-s3-mcp-ai-cli:0.1.0 в режиме только чтения. Ключи в конфиг не пишутся: Cursor подставляет ${env:…} из окружения, поэтому задай BEGET_S3_ACCESS_KEY_ID и BEGET_S3_SECRET_ACCESS_KEY там, откуда запускается Cursor; 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 project: ./.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. FILE_ROOT включается через BEGET_S3_FILE_ROOT.
Инструменты MCP
Level | Tools |
read | s3_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_ROOT | s3_download_file |
write | s3_put_object, s3_create_folder, s3_copy_object, s3_multipart_create, s3_multipart_complete |
write + FILE_ROOT | s3_upload_file |
delete | s3_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 КиБ заменяется краткой сводкой. Ошибки: code/message/retryable; 429/503 SDK повторяет адаптивно.
Аналитика сканирует максимум 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 --markdowncp принимает обычные локальные пути и S3 URI s3://bucket/key либо beget-s3://bucket/key. Большие загрузки используют manager/multipart, --recursive копирует каталоги/префиксы. Перезапись требует --overwrite и подтверждения; выгрузка атомарна. rm/rb/mv без --yes на не-TTY дают код 2; на TTY спрашивают. --json общий, ошибки — stderr и ненулевой код.
doctor проверяет источник/права кредов, DNS/TLS, часы по Date и ListBuckets: >5 минут — предупреждение, >15 — ошибка.
Skill для AI-агентов
beget-s3 skill install
beget-s3 skill install --target ./agent-skills/beget-s3По умолчанию ~/.claude/skills/beget-s3. Идемпотентно устанавливает SKILL.md и шесть references: backup/restore, share, least privilege, cost hygiene, migration, incident response. Триггеры: «beget s3», «бакет Beget», «загрузи в s3», «presigned», «бэкап в s3».
Безопасность
Если conditional_writes:false, запись без перезаписи отказывает до S3-запросов: HEAD не даёт атомарной защиты. Для согласованной записи используй --overwrite --yes в CLI либо overwrite:true, confirm:true в MCP, сохраняя политику подтверждения. Если conditional_delete:false, mv и s3_move_object отключены.
MCP по умолчанию регистрирует только read; неподдерживаемые возможности и отсутствующие уровни исключают инструмент.
BEGET_S3_DESTRUCTIVE_POLICY: confirm использует elicitation при поддержке клиента, иначе нужен confirm:true после согласия человека; elicit требует elicitation и не допускает обхода confirm:true; block всегда запрещает, allow выполняет без гейта. Отказ предшествует любым S3-запросам. Гейт покрывает удаления, move, presigned PUT, политику/Object Lock, suspension 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; '..', абсолютные пути и симлинки наружу отклоняются. На каждый вызов одна JSON-строка в stderr; 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.
FAQ
Можно ли создать бакет Бегет командой mb или через MCP? Нет: bucket_create, bucket_delete и bucket_config выключены. Создайте бакет в панели Beget; таблица совместимости показывает ограничения текущего профиля.
Почему нет presigned-ссылок Beget в CLI и MCP? Внешний SigV4 presign не подтверждён, поэтому presign=false. Ссылки панели описаны в ресерче Beget; это не гарантия поддержки внешних GET/PUT-ссылок.
Как скачать бэкап из S3 Бегет через CLI? После beget-s3 auth set выполните stat bucket/key, затем cp s3://bucket/key ./new-file. Для MCP-скачивания дополнительно задайте BEGET_S3_FILE_ROOT, ограничивающий локальные пути.
Что такое MCP-сервер? Программа предоставляет агентам инструменты и ресурсы через Model Context Protocol; здесь stdio.
Как подключить MCP-сервер к Claude Code? Сохрани ключи auth set, затем используй project install либо напечатанную user-команду.
Безопасно ли давать агенту доступ к S3? Ограничь ключи, скоуп и уровни; сохрани confirm/block и одобряй разрушительные эффекты осознанно.
Чем это отличается от aws-cli и rclone? Бинарь объединяет MCP, гейт, аудит, аналитику, skill и CLI; aws-cli/rclone остаются самостоятельными средствами передачи/автоматизации.
Какие возможности поддерживаются? См. capabilities и compat. Инструменты регистрируются по профилю; lifecycle, ACL, bucket tagging и object retention эта версия не настраивает.
Другие провайдеры
Общий каталог: MCP-серверы и CLI для российских S3.
Провайдер | Репозиторий | Сценарий |
Selectel | Выбор пула и восстановление резервных копий | |
Yandex Cloud | Инвентаризация объектов и проверка версий бэкапов | |
VK Cloud | Проверка Hotbox/Icebox и доступ к нужному региону | |
Cloud.ru | Диагностика доступа к Evolution Object Storage | |
Timeweb Cloud | Восстановление архивов и учёт объёма префикса | |
MWS | Проверка HMAC-доступа и короткие ссылки на архивы | |
Beget | Просмотр и восстановление файлов из готового бакета | |
Shared Go 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.
Available Tools
10 toolss3_get_objectA
Read at most 262144 bytes inline as text/base64; use presign for larger objects.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| bucket | Yes | ||
| encoding | No | ||
| max_bytes | No | ||
| version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose two meaningful traits: a hard 262144-byte truncation cap and that content is returned as text or base64. It omits permission requirements, error behavior for missing keys, and whether truncated output is flagged, leaving real gaps for a read tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the size constraint and output format front-loaded, followed immediately by the routing alternative. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no annotations and no output schema, the description covers the essential size/encoding behavior but leaves key gaps: version_id handling, truncation signaling, and failure modes. Adequate to call the tool, not complete for an agent to do so confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with 5 parameters, so the description must compensate. It partially does: the byte cap implies max_bytes and 'text/base64' implies encoding, but version_id is never mentioned and its semantics are undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read an S3 object) plus a concrete scope for the operation (at most 262144 bytes, inline as text/base64). It explicitly distinguishes itself from s3_presign_get, but says nothing about how it differs from near-neighbors like s3_head_object or s3_preview_object, so the differentiation is partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not condition ('use presign for larger objects') and names the alternative tool, which is exactly the routing decision an agent needs. It stops short of a full when/when-not picture because it never addresses metadata-only (s3_head_object) or preview (s3_preview_object) use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_head_objectC
Read object metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| bucket | Yes | ||
| version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose that no object body is returned, whether permissions/403 errors are common, whether a version_id is required for non-current versions, or what metadata fields come back. Only the implied read-only nature of 'Read' is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no filler, which is structurally clean. But brevity here tips into under-specification: the sentence is too small to carry the tool's semantics rather than genuinely efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter coverage, an agent lacks everything it needs to call this correctly. Details on version_id usage, the metadata-only return, and error conditions are all missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does not. The three parameters (bucket, key, version_id) are only inferable from their names; the description adds no meaning, format, or requirement details beyond the schema property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Read object metadata' names a specific verb (read) and resource (object metadata), which is clearer than a tautology. However, it does not differentiate from close siblings like s3_get_object or s3_get_object_tagging, so an agent can't tell from the text alone why HEAD-style metadata retrieval is the right pick over a full GET.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as s3_get_object (content) or s3_get_object_tagging (tags). The distinction only surfaces semantically if the agent already knows S3 HEAD semantics; the description never states it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_largest_objectsC
Bounded largest objects scan, default max_scan 10000; partial results carry continuation token.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| bucket | Yes | ||
| prefix | No | ||
| max_scan | No | ||
| continuation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses bounded scanning, default max_scan=10000, and that partial results carry a continuation token. However, it omits read-only nature, permissions, cost/latency implications, and whether max_scan counts objects or bytes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single compact sentence, front-loaded with the core operation and key constraint. No fluff, but its brevity comes at the cost of missing parameter and usage detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter scan with no annotations or output schema, the description is too thin. It omits the roles of bucket, prefix, and limit, the relationship between limit and max_scan, how 'largest' is defined or ordered, and what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 5 parameters. The description only addresses max_scan and continuation_token, leaving bucket, prefix, and limit undefined, and does not clarify how limit differs from max_scan.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (scan for largest objects) and a key constraint (bounded with default max_scan). It does not differentiate from siblings like s3_list_objects or s3_prefix_usage, which also enumerate bucket contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this over s3_list_objects or s3_prefix_usage, nor any prerequisites. The default max_scan and continuation token are parameter behavior, not selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_list_bucketsB
List visible buckets with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| max_keys | No | ||
| continuation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses 'visible' buckets and pagination, which adds useful context beyond the schema, but omits auth requirements, return format, and whether visibility is account-scoped or permission-scoped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no waste, front-loading the action and resource. It is appropriately sized for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and zero schema description coverage on 2 parameters, the description is minimal. It leaves parameter meaning, return shape, and pagination mechanics unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description mentions only 'pagination', which loosely corresponds to max_keys and continuation_token. It does not explain the relationship between the parameters or their syntax, leaving most semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: listing buckets. It is distinguishable from siblings like s3_list_objects or s3_list_object_versions by the resource 'buckets'. However, it doesn't call out the distinction explicitly, so an agent must infer it from the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of 'visible' and 'pagination' implies usage context, but no explicit when-to-use, when-not-to-use, or sibling alternatives are given. An agent gets a weak signal without direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_list_multipart_uploadsC
List unfinished uploads; pass both returned markers.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | Yes | ||
| prefix | No | ||
| max_keys | No | ||
| upload_id | No | ||
| continuation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It hints that results are paginated via markers, but does not state read-only safety, required permissions, whether results are scoped by bucket/prefix, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse, front-loaded clauses with no padding. It is appropriately sized for a short definition, though the second clause is too compressed to be useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter coverage across 5 parameters, the description is far too thin for the complexity. An agent cannot determine filtering behavior, permission needs, or return shape from this text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 5 parameters, so the description must compensate and largely does not. The cryptic phrase "both returned markers" ambiguously gestures at continuation_token/upload_id while bucket, prefix, and max_keys remain completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ("List unfinished uploads"), which is better than a tautology. However, it does not differentiate from near-duplicate siblings such as s3_list_parts and s3_unfinished_uploads, leaving the agent to guess which is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is "pass both returned markers," which is a pagination instruction rather than a when-to-use rule. There is no indication of when this is preferable to s3_list_parts or s3_unfinished_uploads, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_list_objectsC
List a scoped prefix, at most 1000 objects per page.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | Yes | ||
| prefix | No | ||
| max_keys | No | ||
| continuation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a page limit of 1000 objects and implies pagination, but doesn't explain that continuation_token is used for pagination, what happens when no prefix is given, or any permissions or rate limits. This is insufficient for a tool with four parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, though it could benefit from being more front-loaded with essential information about pagination.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, no annotations, and no output schema, the description is too sparse. It fails to explain pagination, the role of continuation_token, or how to correctly scope the listing, leaving an agent likely to misuse the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only mentions 'scoped prefix' and '1000 objects per page', which loosely maps to prefix and max_keys, but provides no meaning for bucket or continuation_token, leaving critical parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the operation (list) and the resource (objects under a scoped prefix), and mentions a page limit of 1000. However, it doesn't clearly distinguish itself from sibling list tools like s3_list_object_versions or s3_list_parts, and lacks explicit S3 context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as s3_prefix_usage or s3_largest_objects. The mention of a 'scoped prefix' implies usage but doesn't specify when or why to choose this over other listing methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_list_partsD
List multipart parts.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| bucket | Yes | ||
| max_keys | No | ||
| upload_id | Yes | ||
| continuation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: no pagination behavior, no note that results are only meaningful for an active upload, no auth/permission requirements, no error semantics for expired upload IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is short but that brevity reflects under-specification rather than economy. There is no structure, no front-loaded context, and nothing to help an agent act correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 5 completely undocumented parameters, the definition is inadequate for an agent to invoke this tool correctly. It fails to convey required inputs' meaning or expected return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters (bucket, key, upload_id, max_keys, continuation_token), and the description adds no meaning for any of them. Notably, it never explains that upload_id identifies the upload whose parts are being listed, nor how max_keys/continuation_token drive pagination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List multipart parts' essentially restates the tool name (s3_list_parts) without adding distinguishing detail. It does not clarify that these are parts belonging to a single in-progress multipart upload, which is the key distinction from the sibling s3_list_multipart_uploads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance whatsoever on when to use this tool, what prerequisites exist (a valid upload_id from an in-progress multipart upload), or how it relates to s3_list_multipart_uploads and s3_unfinished_uploads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_prefix_usageC
Bounded usage by first-level prefixes; paginate aggregate rows with next_result_offset.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | Yes | ||
| prefix | No | ||
| max_scan | No | ||
| result_offset | No | ||
| continuation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it delivers very little. "Bounded" implies scan limits via max_scan and "paginate" implies a paged result set, but the description never states what the bound is, what permissions are needed, whether the operation is a read or a scan with cost implications, or what the aggregate rows contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the scoping idea and followed by the pagination note; there is no filler. It is appropriately brief, though brevity here borders on under-specification rather than discipline.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with zero schema descriptions, no annotations, and no output schema, the description leaves critical gaps: it never explains what "usage" is, how the aggregate is computed, why the scan is bounded, or how pagination terminates. An agent cannot confidently invoke this from the definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters (bucket, prefix, max_scan, result_offset, continuation_token), so the description is required to compensate and does not. Worse, it directs the agent to paginate with "next_result_offset," a name that does not exist in the schema, where the pagination fields are result_offset and continuation_token — a misleading reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase "usage by first-level prefixes" largely restates the tool name, s3_prefix_usage, without defining what "usage" actually measures (storage bytes, object counts, request volume). It does hint at aggregation grouped by top-level prefixes, but there is no clear verb and no differentiation from siblings such as s3_largest_objects that also report size-oriented data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over the other thirteen s3_* siblings, nor any stated preconditions or exclusions. The only procedural hint is that aggregate rows are paginated, which is mechanics rather than routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_preview_objectC
Preview first at most 65536 bytes, detected type and CSV header.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| bucket | Yes | ||
| encoding | No | ||
| max_bytes | No | ||
| version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses important traits such as the byte cap (65536) and partial-read behavior, and it mentions return content (detected type, CSV header). However, it omits read-only confirmation, permissions, side effects, error behavior, and rate/cost context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is appropriately sized for the description's scope, even though the content itself is sparse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, no output schema, and no annotations, the description is too sparse. It gives some return information but omits parameter semantics, access requirements, and operational constraints, leaving an agent under-informed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are five parameters, yet the description explains none of them. It mentions '65536 bytes' and 'CSV header' but does not map these to max_bytes, encoding, bucket, key, or version_id, so it fails to compensate for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('preview') and resource ('object' via name), plus the scope ('first at most 65536 bytes') and return content ('detected type and CSV header'). It is clear enough to distinguish it from full-object retrieval, but it does not explicitly name or route against siblings like s3_get_object or s3_head_object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus s3_get_object, s3_head_object, or other siblings. The word 'preview' implies a use case, but there are no explicit conditions, exclusions, or alternatives stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
s3_unfinished_uploadsC
Find uploads older than N hours (default 24), bounded by max_scan.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | Yes | ||
| prefix | No | ||
| max_scan | No | ||
| upload_id | No | ||
| older_than_hours | No | ||
| continuation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose one meaningful behavior not present in the schema: the scan is 'bounded by max_scan', implying results may be truncated. It says nothing about read-only safety, permissions, or how partial results are signalled, which leaves real gaps for a 6-parameter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, and the core scoping detail (older than N hours) is front-loaded. It is efficient, though arguably too terse for a six-parameter tool, which shows up as a completeness gap rather than verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and six parameters, the description should explain what is returned (list of uploads and which fields), how pagination via continuation_token works, and how this differs from s3_list_multipart_uploads. None of that is present, leaving the agent under-informed for a non-trivial tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds genuine meaning for the two least obvious parameters (older_than_hours default of 24, and max_scan as a scan bound), but leaves bucket, prefix, upload_id, and continuation_token entirely undocumented, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Find' plus 'uploads older than N hours' gives a rough idea, and the name says 'unfinished uploads', so the agent can infer this surfaces stale/incomplete multipart uploads. However, the description never actually says 'multipart' or what makes an upload 'unfinished', and it does not differentiate from the sibling s3_list_multipart_uploads, which appears to overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when not to use it, and no reference to the obvious alternative s3_list_multipart_uploads. The only contextual hint is the default threshold, which is a parameter detail rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
s3_get_object - First observed
s3_head_object - First observed
s3_largest_objects - First observed
s3_list_buckets - First observed
s3_list_multipart_uploads - First observed
s3_list_objects - First observed
s3_list_parts - First observed
s3_prefix_usage - First observed
s3_preview_object - First observed
s3_unfinished_uploads
TDQS
Scored across 10 tools
Most tools target distinct resources/actions (get, head, list, prefix usage, largest objects). However s3_list_multipart_uploads and s3_unfinished_uploads overlap heavily—both surface incomplete uploads—and s3_get_object vs s3_preview_object have some boundary fuzziness, though the descriptions help differentiate.
Every tool uses a uniform s3_ prefix with consistent snake_case verb_noun structure (s3_get_object, s3_list_buckets, s3_prefix_usage). The pattern is entirely predictable.
Ten tools is well-scoped for an S3 inspection/analytics surface, with each tool earning a place. A couple of the analytics tools (largest_objects, prefix_usage) could arguably be merged, but nothing feels bloated.
The surface is read-only and covers listing, metadata, content retrieval, and analytics well, but lacks any write/lifecycle operations (put, delete, copy, presign). Notably s3_get_object instructs users to 'use presign for larger objects' yet no presign tool exists—a dead end for large-object retrieval.
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
MCP server for InsForge BaaS — database, storage, edge functions, and deployments
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for AWS S3 — list buckets, browse objects, upload/download files, and generate presigned URLs.765 npm4MIT
- AlicenseCqualityAmaintenanceCloud.ru S3 MCP server and Go CLI: browse, preview and restore files in a bucket. Read-only by default; write, delete and admin tools only behind switches, destructive calls confirmed by a person.14MIT
- AlicenseCqualityAmaintenanceSelectel S3 MCP server and Go CLI: browse, preview and restore files in a bucket. Read-only by default; write, delete and admin tools only behind switches, destructive calls confirmed by a person.13MIT
- AlicenseCqualityAmaintenanceMWS S3 MCP server and Go CLI: browse, preview and restore files in a bucket. Read-only by default; write, delete and admin tools only behind switches, destructive calls confirmed by a person.14MIT