Skip to main content
Glama

platform-mcp

MCP-сервер для инфраструктурных сервисов кластера sonar-prod — Argo CD, Vault и Keycloak — с SSO-входом (GitLab для Argo/Vault, FreeIPA для Keycloak).

Зачем

Агенту в редакторе нужен доступ к Argo CD, Vault и Keycloak, но выдавать ему сервисную учётку нельзя: в аудите вместо человека появится общий аккаунт, а права окажутся шире, чем у любого конкретного разработчика.

Этот пакет ставится локально и проводит обычный SSO-вход через браузер. Дальше он выполняет команды от имени вошедшего пользователя: в аудит-логах виден реальный логин, а права ровно те, что даёт членство в группах.

Инструмент на сервис ровно один — argocd_exec, vault_exec и keycloak_exec, принимающие аргументы командной строки. Под капотом — официальные CLI (argocd, vault, kcadm), поэтому доступно всё, что умеют они. Новый сервис добавляется одной реализацией интерфейса.

Related MCP server: mcp-read-only-argocd

Установка

Шаг 1. Доступ к реестру пакетов

Нужен один раз и для всех способов ниже: пакет лежит в npm registry этого GitLab-проекта, а не в публичном npm. Возьмите токен с правом read_package_registry (личный access token или deploy token проекта) и добавьте в ~/.npmrc:

@sonar:registry=https://git.sonar-corp.ru/api/v4/projects/98/packages/npm/
//git.sonar-corp.ru/api/v4/projects/98/packages/npm/:_authToken=<ваш gitlab токен>

Шаг 2. Подключение к редактору

Claude Code и Cursor — плагином. Репозиторий сам себе каталог плагинов, поэтому достаточно двух команд:

/plugin marketplace add https://github.com/K-manankov/platform-mcp.git
/plugin install platform-mcp

Адрес именно GitHub, а не GitLab, и это не опечатка — см. Почему каталог плагинов на GitHub.

Адреса Argo CD, Vault и Keycloak уже прописаны в плагине — настраивать ничего не нужно. Обновления приезжают сами: плагин запускает сервер через npx -y, то есть всегда последнюю опубликованную версию. Обновить сам плагин — /plugin marketplace update.

Claude Desktop плагины этого формата не устанавливает, поэтому там запись делается вручную. Поставьте пакет глобально:

npm install -g @sonar/platform-mcp

и добавьте в claude_desktop_config.json (Settings → Developer → Edit Config). Путь к node и к серверу — обязательно абсолютные: GUI-приложения на macOS не наследуют PATH из шелла. Свои пути посмотрите командами which node и which platform-mcp:

{
  "mcpServers": {
    "platform": {
      "command": "/opt/homebrew/bin/node",
      "args": ["/opt/homebrew/lib/node_modules/@sonar/platform-mcp/dist/index.js"],
      "env": {
        "ARGOCD_BASE_URL": "https://argocd.infra.sonar-corp.ru",
        "VAULT_ADDR": "https://vault.infra.sonar-corp.ru",
        "KEYCLOAK_BASE_URL": "https://auth.infra.sonar-corp.ru",
        "PLATFORM_MCP_INSECURE": "true"
      }
    }
  }
}

Argo CD, Vault и Keycloak ставить отдельно не нужно ни в одном из вариантов: сервер сам скачает нужные версии CLI при первом обращении (см. Откуда берутся CLI). Для kcadm на машине должна быть Java 17+.

Почему каталог плагинов на GitHub

Claude Desktop подключает каталоги плагинов только с GitHub. Плюс к этому наш GitLab живёт во внутренней сети и снаружи недоступен в принципе, так что до git.sonar-corp.ru он бы и не дотянулся.

Поэтому исходный код остаётся в GitLab, а в github.com/K-manankov/platform-mcp настроено зеркало защищённых веток. Защищена одна ветка — main, и именно она уезжает на GitHub при каждом пуше. Обратной синхронизации нет: правки делаются только в GitLab, GitHub-копия существует ради установки плагина.

Само зеркало ничего не раскрывает лишнего — там тот же публичный npm-пакет и адреса внутренних сервисов, которые всё равно резолвятся только из сети. Секретов в репозитории нет и быть не должно: токены доступа сервер держит в ~/.config/platform-mcp/, а токен реестра пакетов каждый заводит себе сам в ~/.npmrc.

Обновить установленный плагин после изменений:

/plugin marketplace update sonar-infra
/plugin update platform-mcp

Вход

Нужен VPN: имена argocd.infra.sonar-corp.ru, vault.infra.sonar-corp.ru и auth.infra.sonar-corp.ru резолвятся только изнутри сети. Публичный auth.sonar-corp.ru служит OIDC issuer; Admin API доступен по внутреннему адресу. Снаружи внутренние имена подхватывает публичный wildcard *.infra.sonar-corp.ru, и запрос молча уезжает не туда — проверка dig +short argocd.infra.sonar-corp.ru должна дать 192.168.88.106.

Проще всего войти прямо из диалога: попросите агента вызвать argocd_login, vault_login или keycloak_login, откройте выданную ссылку и завершите вход. Перезапускать редактор не нужно.

То же самое из терминала, если пакет установлен глобально:

export ARGOCD_BASE_URL=https://argocd.infra.sonar-corp.ru
export VAULT_ADDR=https://vault.infra.sonar-corp.ru
export KEYCLOAK_BASE_URL=https://auth.infra.sonar-corp.ru
export PLATFORM_MCP_INSECURE=true   # временно, если корпоративный CA ещё не доверен; см. TLS

platform-mcp login             # во все настроенные сервисы подряд
platform-mcp login keycloak    # только в один

Откроется браузер: для Argo CD и Vault — GitLab SSO, для Keycloak — FreeIPA в realm master (клиент platform-mcp-cli, см. bootstrap в infra). Сессии лягут в ~/.config/platform-mcp/ с правами 0600 и общие для всех редакторов: войдя один раз, вы вошли везде.

По SSH или в devcontainer, где браузера нет:

platform-mcp login --no-browser

Ссылку из вывода нужно открыть на своей машине; порт 8085 (Argo CD), 8250 (Vault) или 8280 (Keycloak) при этом должен быть проброшен на хост, где запущена команда.

Вход администратором Vault

Обычный вход идёт в точку монтирования oidc, где политика выдаётся по членству в подгруппе. Полные права на хранилище живут в отдельном mount'е oidc-admin и достаются только Owner'ам группы infra/k8s — почему так, описано в platform/vault-config/40-groups.yaml:

VAULT_OIDC_MOUNT=oidc-admin platform-mcp login vault

Настройка

Менять что-либо необязательно — адреса уже прописаны в плагине.

Cursor. Plugins → Configure у platform-mcp: URL Argo CD, Vault и Keycloak, PLATFORM_MCP_INSECURE, и mount Vault OIDC (oidc — обычный вход, oidc-admin — полные права для Owner'ов infra/k8s). Дефолты совпадают с кластером sonar-prod.

Claude Code и ручной конфиг. Если нужно другое (свой инстанс, oidc-admin, свои запреты), переопределите переменными окружения в конфиге редактора либо положите в ~/.config/platform-mcp/config.json:

{
  "argocdUrl": "https://argocd.infra.sonar-corp.ru",
  "vaultUrl": "https://vault.infra.sonar-corp.ru",
  "keycloakUrl": "https://auth.infra.sonar-corp.ru",
  "vaultOidcMount": "oidc",
  "policy": {
    "requireConfirmation": true,
    "denyVaultPaths": ["kv/infra/"]
  }
}

Достаточно задать адрес хотя бы одного сервиса — остальные просто не появятся в списке инструментов.

Если сессии нет или она истекла, инструменты вернут понятную ошибку, а агент сможет вызвать argocd_login / vault_login / keycloak_login прямо из диалога — перезапускать редактор не нужно. Эти инструменты открывают браузер и сразу возвращают ссылку, не дожидаясь завершения входа: человек ходит по SSO минуты, а таймаут запроса у MCP-клиентов обычно 60 секунд. Результат проверяется отдельным вызовом *_auth_status.

Команды

platform-mcp                    # MCP-сервер поверх stdio (так его запускает редактор)
platform-mcp login [сервис]     # интерактивный вход, --no-browser для headless
platform-mcp status [сервис]    # кто вошёл и до какого момента действует токен
platform-mcp logout [сервис]    # удалить сохранённую сессию

Сервис — argocd, vault или keycloak; без него команда применяется ко всем настроенным.

Инструменты

На каждый сервис: <сервис>_exec, <сервис>_login, <сервис>_auth_status, <сервис>_logout.

argocd_exec, vault_exec и keycloak_exec принимают args — массив аргументов командной строки:

argocd_exec { "args": ["app", "list", "-o", "json"] }
argocd_exec { "args": ["app", "sync", "team-a-api"] }
vault_auth_status   # сначала: username, role, policies
vault_exec  { "args": ["token", "lookup"] }
vault_exec  { "args": ["kv", "list", "kv/teams"] }
vault_exec  { "args": ["kv", "get", "kv/teams/team-a/postgres"] }
keycloak_exec { "args": ["get", "realms"] }
keycloak_exec { "args": ["get", "users", "-r", "sonar-prod", "-q", "username=alice"] }

Для Vault начинайте с vault_auth_status: по policies сразу видно, есть ли доступ к KV. ["token","lookup"] — канон CLI (не lookup-self). sys/mounts у обычных OIDC-пользователей часто 403 — не используйте для discovery. Exit code 2 у kv list обычно значит «пусто или нет list ACL», а не «нужно пробовать другой mount».

Аргументы всегда передаются массивом и никогда не склеиваются в строку: shell не участвует, поэтому ; и $(...) в аргументах остаются обычным текстом.

Адрес и токен подставляет сервер. Флаги, которые их переопределяют (--server, --auth-token, --config, --core у Argo CD; -address, -tls-skip-verify у Vault; --server, --config, --no-config у Keycloak), запрещены — иначе рабочий токен из окружения дочернего процесса можно было бы отправить на чужой хост.

Подтверждение опасных операций

Читающие команды выполняются сразу. Для Argo CD и Vault всё остальное требует подтверждения пользователя.

Мутирующей считается любая команда, которая не опознана как читающая: список глаголов замкнут в безопасную сторону, поэтому незнакомая команда попадёт под подтверждение, а не проскочит мимо него.

Если клиент поддерживает MCP elicitation, появляется обычный диалог. Если нет — работает запасная схема: первый вызов возвращает описание последствий и одноразовый токен, второй вызов с этим токеном выполняет операцию. Токен живёт 5 минут и привязан к конкретным аргументам, поэтому «подтвердил одно, выполнил другое» не пройдёт, а придумать его самостоятельно агент не может.

Keycloak — исключение: мутации выполняются сразу, но в ответе агенту добавляется warning — конфиг едет через CR/оператор, ручные правки через kcadm оператор может перетереть при sync. Предпочтительны манифесты в Git.

Отдельно запрещены совсем:

  • вход и выход (argocd login, vault login, kcadm config …) — сессией управляет сам сервер;

  • команды, которые не завершаются: vault server|agent|proxy|monitor, argocd app logs --follow;

  • argocd admin — управление самим Argo CD;

  • vault operator seal|step-down|init|rekey|generate-root|migrate — отказ любой из них кладёт хранилище целиком;

  • изменение инфраструктурных приложений Argo CD (argocd, vault, keycloak, cert-manager, ingress-nginx, …): они едут из Git через merge request, а не из диалога с агентом. Читать их можно.

Списки настраиваются в config.json (policy.denyApplications, policy.denyVaultPaths).

Это защита от ошибок агента, а не граница безопасности. Участник группы infra/k8s и так администратор Argo CD (g, infra/k8s, role:admin) и может сделать то же самое через UI. Реально ограничить права можно только разделением ролей в argocd-rbac-cm и политиками Vault.

Секреты не попадают в контекст модели

Значения секретов вырезаются из ответов, а имена ключей и метаданные остаются:

  • Vault — значения из kv get, read по KV-пути и unwrap. Ответы kv list, kv metadata get, policy read, sys/mounts не трогаются: там нет секретов, и вырезание сделало бы их бесполезными.

  • Argo CD — data и stringData у ресурсов Secret, в том числе внутри полей manifest, liveState, targetState, где Argo CD отдаёт манифесты строками с JSON внутри. base64 — это не шифрование.

Обходные пути закрыты: vault kv get -field=password печатает голое значение мимо JSON, а -format=table не даёт из чего вырезать — оба отклоняются с объяснением.

Если значения действительно нужны в диалоге:

export PLATFORM_MCP_ALLOW_SECRET_VALUES=true

Осознанный опт-ин: после него содержимое секретов уезжает провайдеру модели. По умолчанию смотрите секреты в Vault напрямую.

Дополнительно: ответы длиннее 100 КБ обрезаются с подсказкой, чем сузить запрос, а вывод помечается как данные из кластера — манифесты, аннотации и логи пишут люди, и встреченные там указания агент выполнять не должен.

Откуда берутся argocd, vault и kcadm

Сервер работает не через самописный REST-клиент, а через официальные CLI: у Argo CD Node-клиента нет вовсе, у Vault официальный — это Go-библиотека и тот же бинарник, у Keycloak Admin API — kcadm из дистрибутива. Полнота возможностей при этом равна полноте CLI.

Ставить их вручную не нужно:

  1. Если argocd / vault / kcadm (kcadm.sh) уже есть в PATH — используется он, ничего не скачивается.

  2. Иначе при первом обращении скачивается закреплённая версия с официальных релизов (github.com/argoproj/argo-cd, releases.hashicorp.com, github.com/keycloak/keycloak) под текущую платформу. Для Keycloak — zip дистрибутива целиком (~170 МБ): kcadm — Java-скрипт, а не отдельный Go-бинарник.

  3. Контрольная сумма сверяется до распаковки и до chmod +x. Без этого шага всё свелось бы к «скачать из интернета и выполнить».

  4. Файл кладётся в ~/.config/platform-mcp/bin/ и переиспользуется дальше.

Для kcadm на машине нужна Java 17+ (java в PATH или JAVA_HOME). Без неё сервер вернёт понятную ошибку.

Скачивание происходит при первом использовании, а не в postinstall: postinstall-скрипты повсеместно отключают (npm ci --ignore-scripts), и установка молча оставалась бы неполной.

Версии закреплены в src/config.ts и совпадают с развёрнутыми в кластере (Argo CD v3.4.5, Vault 2.0.3, Keycloak 26.6.4). При обновлении кластера их нужно поднять здесь же.

TLS

У argocd.infra.sonar-corp.ru, vault.infra.sonar-corp.ru и auth.infra.sonar-corp.ru Ingress предъявляет сертификаты Vault PKI, подписанные корпоративным корнем FreeIPA. Для Keycloak публичный auth.sonar-corp.ru завершается на NPM с публичным сертификатом, но KEYCLOAK_BASE_URL у platform-mcp остаётся внутренним ради Admin API.

Настройте доверие к корпоративному CA на машине с platform-mcp:

export NODE_EXTRA_CA_CERTS=/path/to/freeipa-root-ca.pem  # Node/OIDC
export SSL_CERT_FILE=/path/to/freeipa-root-ca.pem         # argocd и vault (Go)
export PLATFORM_MCP_INSECURE=false

kcadm использует отдельный truststore; platform-mcp строит его из NODE_EXTRA_CA_CERTS. Манифесты плагина пока сохраняют совместимый дефолт PLATFORM_MCP_INSECURE=true для машин без установленного CA. Это временный обход, который следует отключить после настройки доверия:

export PLATFORM_MCP_INSECURE=true

Он отключает проверку сертификата для Node и печатает предупреждение при каждом запуске. Соединение остаётся шифрованным, но подлинность сервера не подтверждается, а по этому каналу ходят токены доступа. Используйте его лишь пока корпоративный CA не добавлен в доверенные.

Как это устроено

редактор ──stdio──▶ platform-mcp ──argv+env──▶ argocd ──▶ Argo CD
                    (OIDC, политика,  vault  ──▶ Vault
                     вырезание секретов) kcadm ──▶ Keycloak

Argo CD. Вход — Authorization Code + PKCE через Dex. Используется public-клиент argo-cd-cli, которого Argo CD регистрирует в Dex автоматически вместе с redirect URI http://localhost:8085/auth/callback, поэтому менять argocd-cm для установки не нужно. Argo CD принимает как Bearer именно id_token, а не access_token — последний у Dex непрозрачный и API-сервером не проверяется. Токен обновляется по refresh-токену.

CLI запускается с --grpc-web: ingress-nginx проксирует в argocd-server обычный HTTP/1.1 (configs.params.server.insecure: true), и чистый gRPC до него не доходит.

Vault. Поток проще: PKCE не нужен, потому что код на токен меняет сам Vault — секрет OAuth-приложения хранится в нём. От клиента требуется поднять listener на http://localhost:8250/oidc/callback (он заранее прописан в allowedRedirectURIs) и вернуть code, state и client_nonce. Параметр state генерирует сам Vault и кладёт внутрь выданной ссылки — оттуда он и берётся для проверки редиректа. Токен продлевается через auth/token/renew-self, пока renewable.

Keycloak. Authorization Code + PKCE через public-клиент platform-mcp-cli в realm master (заводится один раз в bootstrap, redirect http://localhost:8280/oidc/callback). Вход — FreeIPA. В сессию кладётся access_token (Admin API). Перед kcadm сервер пишет приватный kcadm.config в ~/.config/platform-mcp/ — не общий ~/.keycloak/kcadm.config.

Токены передаются дочерним процессам только через окружение (Argo/Vault) или через приватный config-файл (Keycloak): в argv они были бы видны в ps любому процессу пользователя. Окружение не наследуется целиком — CLI получает ровно то, что ему нужно, без секретов соседних сервисов.

Сессии хранятся в собственных файлах, а не в ~/.config/argocd/config, ~/.vault-token и ~/.keycloak/kcadm.config: провайдер ротирует токен при обновлении, и общий файл приводил бы к тому, что обычные CLI в терминале и этот сервер инвалидировали бы сессии друг другу.

Разработка

npm install
npm run build
npm test

Тесты покрывают классификацию команд и запреты, вырезание секретов, одноразовые токены подтверждения, отсутствие shell при запуске CLI и собственный распаковщик ZIP (он нужен потому, что HashiCorp отдаёт vault архивом, а встроенного распаковщика в Node нет).

Плагин

Репозиторий одновременно и каталог плагинов, и сам плагин:

.claude-plugin/marketplace.json      каталог для Claude Code
.cursor-plugin/marketplace.json      каталог для Cursor
plugins/platform-mcp/
  .claude-plugin/plugin.json         манифест для Claude Code
  .cursor-plugin/plugin.json         манифест для Cursor
  .mcp.json                          сервер для Claude Code — ПЛОСКАЯ карта
  mcp.json                           тот же сервер для Cursor — с обёрткой mcpServers

Описание сервера продублировано в двух формах, и это не небрежность. Claude Code читает .mcp.json как плоскую карту «имя → сервер»: с обёрткой mcpServers он молча не подхватывает сервер — плагин ставится и числится включённым, но инструментов не появляется. Cursor же берёт файл по пути из mcpServers в своём plugin.json, и рабочие плагины для него используют форму с обёрткой. command/args и ключи env совпадают; значения env у Cursor — плейсхолдеры ${VAR} (схема variables в plugin.json, Configure в UI), у Claude — литеральные дефолты. npm run check:manifests следит, чтобы формы не разъехались.

Код сервера в плагин не копируется: оба файла запускают опубликованный пакет через npx, поэтому плагин остаётся несколькими небольшими файлами и не требует пересборки при изменениях сервера.

Проверить изменения до пуша можно, подключив каталог с локального пути:

/plugin marketplace add /путь/к/platform-mcp
/plugin install platform-mcp

Публикация

CI (.gitlab-ci.yml) публикует пакет в GitLab npm registry этого проекта автоматически по тегу вида vX.Y.Z, аутентификация — через встроенный CI_JOB_TOKEN, личных токенов в CI не требуется.

Версия продублирована в манифестах плагина, и её нужно поднимать там же:

npm version <major|minor|patch> --no-git-tag-version   # package.json и package-lock.json
# поправить version в обоих plugins/platform-mcp/*/plugin.json
npm run check:manifests                                # сверить
git add -A && git commit -m "0.X.Y"                    # затем слить MR в main
git tag v0.X.Y && git push origin v0.X.Y               # тег ставится на main

Расхождение поймает CI: задание test сверяет версии в трёх манифестах и согласованность двух описаний сервера, а publish — версию из тега с package.json. Без этого плагин у пользователя остался бы «неизменившимся» при свежем сервере: и Claude Code, и Cursor решают, обновлять ли плагин, по его version.

Отдельно выкладывать плагин никуда не нужно: пуш в main уезжает на GitHub зеркалом защищённых веток, и пользователи подхватывают изменения через /plugin marketplace update. Обратите внимание, что плагин ставится из ветки, а не из тега: как только правка попала в main, она уже доступна всем — даже если версия ещё не выпущена тегом.

Available Tools

8 tools
argocd_auth_statusA

Кто вошёл в Argo CD и до какого момента действует токен.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although no annotations are provided, the description adds meaningful behavioral context by specifying the exact output (user identity and token timeout). This is sufficient for a read-only status tool and supports the agent's understanding of what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundant information. It is concise and front-loaded, stating exactly what the tool reports.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with no output schema, the description provides all necessary context: it tells the agent what the tool returns and implies its read-only nature. There are no gaps in coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so the description carries the full burden by confirming that no arguments are needed. This aligns with the baseline for parameterless tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly identifies the tool's function: reporting who is logged into Argo CD and the token's expiration. It clearly distinguishes this status query from sibling tools like argocd_login and argocd_logout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The nature of a status tool implies it is used to check current authentication state, but no explicit guidance is given about when to use this versus alternatives. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

argocd_execA

Выполнить команду argocd (https://argocd.infra.sonar-corp.ru) от имени вошедшего пользователя.

Аргументы командной строки argocd, массивом. Адрес и токен подставляются сервером — флаги --server, --auth-token, --config, --core запрещены.

Примеры: ["app", "list", "-o", "json"] ["app", "get", "team-a-api", "-o", "json"] ["app", "sync", "team-a-api"] ["app", "logs", "team-a-api", "--tail", "100"] ["proj", "list", "-o", "json"]

Флаг вывода в JSON (-o json) стоит добавлять всегда, когда команда его поддерживает: табличный вывод разбирать сложнее и в нём теряются поля.

NameRequiredDescriptionDefault
argsYesАргументы командной строки, по одному на элемент массива.
stdinNoДанные на стандартный ввод команды, если она их читает.
__confirmNoТокен подтверждения. Заполняется только при повторном вызове, после явного согласия пользователя на мутирующую операцию.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It explains that the address and token are supplied by the server and that certain flags are prohibited, which adds useful context. However, it does not mention potential side effects of mutating commands (e.g., `app sync`) or the confirmation flow described in the `__confirm` parameter schema, nor does it describe error/exit-code handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and concise: it front-loads the purpose, then states key constraints, provides illustrative examples, and finishes with a useful tip. Every sentence serves a purpose without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an exec-style tool, the description covers invocation, authentication, forbidden flags, and output format advice. It does not explicitly state the return format (e.g., raw stdout, exit codes) or error handling, which is a minor gap given there is no output schema. Overall, it is sufficient for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage, but the description goes beyond by showing concrete examples of the `args` array structure and recommending `-o json` for better output parseability. This adds practical meaning that the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it executes an `argocd` command on behalf of the authenticated user, using a specific verb and resource. It clearly distinguishes itself from sibling tools like `argocd_login`, `argocd_auth_status`, and `argocd_logout` by focusing on command execution rather than authentication. Examples further solidify the scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (to run argocd commands) and gives practical advice, such as always adding `-o json` for parseable output and forbidding certain flags (`--server`, `--auth-token`, `--config`, `--core`). However, it does not explicitly state prerequisites like 'authenticate first with argocd_login' or compare with alternative tools for specific scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

argocd_loginA

Начать вход в Argo CD через GitLab SSO. Возвращает ссылку сразу, не дожидаясь завершения входа: результат нужно проверить вызовом argocd_auth_status.

NameRequiredDescriptionDefault
noBrowserNoНе открывать браузер, только вернуть ссылку (SSH, devcontainer).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly discloses that the tool returns immediately without waiting for login completion, which is a critical non-obvious behavior. It also states that a link is returned, adding useful context, though it doesn't detail side effects or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise, consisting of two short sentences that immediately convey the main action and the asynchronous behavior. It avoids extraneous details while including the essential next step, making it well-structured and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description sufficiently covers the tool's behavior for a simple login initiation: it returns a link and requires follow-up via argocd_auth_status. It doesn't describe the exact response format beyond 'link', but given the simplicity of the tool and absence of output schema, this is adequate. The context provided by sibling tools reinforces the intended workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents the single parameter noBrowser with a clear description in Russian, giving 100% schema coverage. The tool description does not elaborate on this parameter, but since the schema covers it, a baseline score of 3 is appropriate without additional value from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it initiates an Argo CD login via GitLab SSO and returns a link immediately, using the specific verb 'login' and resource 'Argo CD'. It also distinguishes itself from the sibling argocd_auth_status by noting that the result must be checked via that tool, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by explaining that the login is asynchronous and directing the agent to call argocd_auth_status to verify the result. While it doesn't explicitly exclude other tools or mention preconditions, it effectively guides the agent to the correct workflow among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

argocd_logoutA

Удалить сохранённую сессию Argo CD.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears the full burden of behavioral disclosure. 'Удалить сохранённую сессию' explicitly states that a saved session is deleted, which conveys a clear side effect. However, it does not indicate whether the deletion is purely local or also interacts with the server, and whether it is irreversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no filler. Every word contributes to the meaning, and the information is efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter logout operation, the description is mostly sufficient. It could add a note about the irreversible nature of removing local credentials or that the user must re-authenticate afterwards, but the core behavior is clear enough for such a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the input schema is fully covered (empty schema). According to the calibration baseline for zero-parameter tools, a score of 4 is appropriate since there is no parameter information to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Удалить сохранённую сессию Argo CD' clearly states the action (delete) and the resource (saved Argo CD session), distinguishing it from sibling tools like argocd_login and argocd_auth_status. The verb and object are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool or how it relates to alternatives. It does not mention that it reverses argocd_login or that it should be called before checking auth status with argocd_auth_status. Usage context must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_auth_statusA

Кто вошёл в Vault и до какого момента действует токен.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It clearly states what is reported (user and token expiry) and implies it is a read-only status operation. It does not mention prerequisites like 'must be logged in' or error handling, but for a simple status tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that delivers complete meaning without waste. It is front-loaded with the core purpose and adds no redundant details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters, no output schema, and a simple status-check function, the description adequately covers the essential information: who and until when. It does not detail edge cases like unauthenticated state, but that is not critical for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema coverage is trivially 100%. Per the rubric, the baseline for 0 params is 4; the description appropriately omits parameter details since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: showing who is logged into Vault and the token expiration time. It uses a specific verb (status check) and resource (Vault), distinguishing it from sibling tools like argocd_auth_status, which clearly targets ArgoCD.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is evident: this is for checking Vault authentication status, as opposed to login/logout or ArgoCD-related tools. It stops short of explicitly naming alternatives or exclusion criteria, but the intended use is clear from the description and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_execA

Выполнить команду vault (https://vault.infra.sonar-corp.ru) от имени вошедшего пользователя.

Аргументы командной строки vault, массивом. Адрес и токен подставляются сервером — флаги -address, -tls-skip-verify запрещены, вход делается через vault_login.

Примеры: ["kv", "list", "kv/teams"] ["kv", "get", "kv/teams/team-a/postgres"] ["kv", "put", "kv/teams/team-a/postgres", "password=..."] ["policy", "read", "team-a"] ["read", "sys/mounts"]

Вывод по умолчанию в JSON (VAULT_FORMAT=json). Значения секретов вырезаются: возвращаются имена ключей и метаданные, но не содержимое — оно не должно попадать в контекст модели.

NameRequiredDescriptionDefault
argsYesАргументы командной строки, по одному на элемент массива.
stdinNoДанные на стандартный ввод команды, если она их читает.
__confirmNoТокен подтверждения. Заполняется только при повторном вызове, после явного согласия пользователя на мутирующую операцию.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adds significant behavioral context: server-side address/token injection, JSON output, and secret redaction ('Значения секретов вырезаются'). It omits the __confirm requirement for mutating operations (only in schema), but the redaction and credential handling are valuable disclosures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: purpose, constraints, examples, and output behavior in three tight paragraphs. The examples are relevant and not excessive, earning their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic command executor, it covers execution scope, authentication precondition, output format, and secret safety. The missing confirmation flow is covered in the schema, so the description is sufficiently complete for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter having a clear description. The description's examples ('kv get', 'kv put') show how to structure args arrays, but they add practical value rather than deep semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it executes vault commands on behalf of the logged-in user ('Выполнить команду vault ... от имени вошедшего пользователя'), which distinguishes it from sibling auth tools. Examples like 'kv get' and 'policy read' illustrate the supported operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies a precondition: login via vault_login ('вход делается через vault_login'), and prohibits certain flags (-address, -tls-skip-verify). It doesn't explicitly name alternatives, but sibling tools are clearly auth-only, leaving vault_exec as the execution counterpart.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_loginA

Начать вход в Vault через GitLab SSO. Возвращает ссылку сразу, не дожидаясь завершения входа: результат нужно проверить вызовом vault_auth_status.

NameRequiredDescriptionDefault
noBrowserNoНе открывать браузер, только вернуть ссылку (SSH, devcontainer).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It transparently reveals the asynchronous nature ('returns a link immediately, does not wait for login completion') and instructs to verify via vault_auth_status. This goes beyond basic 'login' expectations, though it does not mention edge cases like already-authenticated states or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the action and key detail (returns a link). Every sentence contributes value: the first states the purpose, the second explains the async behavior and follow-up. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple login tool with one optional parameter and no output schema, the description is complete. It tells the user what to expect (a link) and what to do next (call vault_auth_status). The schema covers the parameter, and the flow is adequately explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for the single parameter 'noBrowser'. The description does not add any additional meaning beyond what the schema already provides, so the baseline of 3 applies. No enhancement or clarification is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Start login to Vault via GitLab SSO.' It uses a specific verb ('start login'), names the resource (Vault) and the method (GitLab SSO), and distinguishes itself from sibling tools like vault_logout or vault_auth_status by focusing on initiating the login flow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by stating that the tool returns a link immediately and that the result must be checked via vault_auth_status. This implicitly guides the user to follow up with the status check. However, it does not explicitly compare with alternatives like argocd_login, though the resource distinction is obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_logoutA

Удалить сохранённую сессию Vault.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral consequences. It only states that a saved session is deleted, without explaining side effects (e.g., whether the Vault token is invalidated server-side, whether other sessions are affected, or whether the action is reversible). This is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with no redundant words. It is front-loaded and efficient, conveying the full purpose in minimal space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of a logout tool, the description is adequate but leaves out behavioral details such as idempotency, error outcomes, or whether an active session is required. With no annotations and no output schema, a bit more context would be helpful, but the tool is basic enough that a 3 is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is trivially 100% covered. Per the baseline rule for 0-param tools, the description need not add parameter details, and the empty schema leaves no room for ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Удалить сохранённую сессию Vault' (Delete saved Vault session) uses a specific verb and resource, clearly distinguishing it from siblings like vault_login and vault_auth_status. It leaves no ambiguity about the tool's core function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus siblings such as argocd_logout or vault_login. There is no mention of prerequisites, typical scenarios, or conditions under which this tool should be preferred.

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.

  1. 8 tool updatesv0.2.1
    • First observedargocd_auth_status
    • First observedargocd_exec
    • First observedargocd_login
    • First observedargocd_logout
    • First observedvault_auth_status
    • First observedvault_exec
    • First observedvault_login
    • First observedvault_logout

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

Each tool is clearly scoped to either Argo CD or Vault, and within each service the login, auth_status, logout, and exec actions are distinct. The system prefix (argocd_ vs vault_) removes any ambiguity between the two sets.

Naming Consistency5/5

All tool names follow the consistent pattern {service}_{action} using lowercase snake_case: login, auth_status, logout, exec. The naming is uniform and predictable across both Argo CD and Vault.

Tool Count5/5

With 8 tools covering two infrastructure services, the count is well-scoped. Each tool serves a clear and necessary purpose, leaving no redundancy or bloat.

Completeness5/5

For a server designed to provide authenticated CLI access to Argo CD and Vault, the tool surface is complete: login, auth status check, logout, and command execution for each system. The exec tools are generic enough to cover the full command surface of both CLIs.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP (Model Context Protocol) server that integrates with the ArgoCD API, enabling AI assistants and large language models to manage ArgoCD applications and resources through natural language interactions.
    10
    12
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A secure MCP server providing read-only access to Argo CD instances using browser session cookies, enabling querying of applications, projects, clusters, and repositories.
    14
    23 PyPI
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    A Model Context Protocol (MCP) server that enables secure execution of shell commands with a dynamic approval system, audit logging, and command revocation.
    42
    Apache 2.0