Skip to main content
Glama

platform-mcp

クラスタ sonar-prod のインフラストラクチャサービス(Argo CD、Vault、Keycloak)向けMCPサーバー。SSOログイン対応(Argo/VaultはGitLab、KeycloakはFreeIPA)。

目的

エディタ内のエージェントにArgo CD、Vault、Keycloakへのアクセスが必要だが、サービスアカウントを渡すことはできない。監査ログに個人ではなく共有アカウントが記録され、権限も特定の開発者より広くなってしまうためだ。

このパッケージはローカルにインストールされ、ブラウザ経由で通常のSSOログインを実行する。以降はログインしたユーザーの権限でコマンドを実行する。監査ログには実際のログインIDが記録され、権限はグループメンバーシップで付与されるものと正確に一致する。

サービスごとのツールは argocd_exec、vault_exec、keycloak_exec の1つだけで、コマンドライン引数を受け取る。内部では公式CLI(argocd、vault、kcadm)を使用しているため、それらが対応するすべての操作が可能。新しいサービスはインターフェースの実装を1つ追加するだけで組み込める。

Related MCP server: mcp-read-only-argocd

インストール

ステップ1. パッケージレジストリへのアクセス

以下のすべての方法で一度だけ必要: パッケージは公開npmではなく、このGitLabプロジェクトのnpmレジストリにある。read_package_registry 権限を持つトークン(個人アクセストークンまたはプロジェクトのデプロイトークン)を取得し、~/.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はプラグインで。 リポジトリ自体がプラグインカタログになっているため、2つのコマンドで十分:

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

アドレスはGitLabではなくGitHub。これは誤字ではない。 プラグインカタログが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 とサーバーへのパスは必ず絶対パスにすること。macOSのGUIアプリケーションはシェルの 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を自動でダウンロードする(argocd、vault、kcadmの入手元 を参照)。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 はネットワーク内からのみ解決される。外部からは公開ワイルドカード *.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   # пока нет настоящих сертификатов, см. TLS

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

ブラウザが開く。Argo CDとVaultはGitLab SSO、Keycloakはrealm master のFreeIPA(クライアント platform-mcp-cli、infraのbootstrapを参照)。セッションは ~/.config/platform-mcp/ に権限 0600 で保存され、すべてのエディタで共有される。一度ログインすれば、どこでもログイン済みになる。

SSHやdevcontainerなどブラウザがない環境では:

platform-mcp login --no-browser

出力のリンクは自分のマシンで開く必要がある。その際、ポート 8085(Argo CD)、8250(Vault)、8280(Keycloak)がコマンドを実行しているホストに転送されている必要がある。

Vault管理者としてのログイン

通常のログインは oidc マウントポイントに対して行われ、ポリシーはサブグループのメンバーシップに基づいて付与される。ストレージへの完全な権限は別のマウント oidc-admin にあり、infra/k8s グループのOwnerのみが取得できる。その理由は platform/vault-config/40-groups.yaml に記載されている:

VAULT_OIDC_MOUNT=oidc-admin platform-mcp login vault

設定

変更は必須ではない。アドレスはプラグインにすでに設定されている。

Cursor. platform-mcp のPlugins → Configure: Argo CD、Vault、KeycloakのURL、PLATFORM_MCP_INSECURE、Vault OIDCのマウント(oidc — 通常ログイン、oidc-admin — infra/k8s のOwner向け完全権限)。デフォルトはクラスタ 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/"]
  }
}

少なくとも1つのサービスのアドレスを設定すれば十分。残りは単にツールリストに表示されないだけ。

セッションがない、または期限切れの場合、ツールはわかりやすいエラーを返し、エージェントはダイアログから直接 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になることが多いため、ディスカバリには使わないこと。kv list の終了コード2は通常「空、またはlist ACLがない」ことを意味し、「別のマウントを試すべき」ではない。

引数は常に配列で渡され、文字列に連結されることはない。シェルは関与しないため、引数内の ; や $(...) は単なるテキストとして扱われる。

アドレスとトークンはサーバーが設定する。これらを上書きするフラグ(Argo CDの --server、--auth-token、--config、--core、Vaultの -address、-tls-skip-verify、Keycloakの --server、--config、--no-config)は禁止されている。子プロセスの環境から作業用トークンを外部ホストに送信できてしまうためだ。

危険な操作の確認

読み取り専用コマンドは即座に実行される。Argo CDとVaultでは、それ以外のすべての操作にユーザーの確認が必要。

読み取り専用と認識されないコマンドはすべて変更操作とみなされる。動詞のリストは安全側に閉じているため、未知のコマンドは確認をすり抜けるのではなく、確認の対象になる。

クライアントがMCP elicitationをサポートしている場合、通常のダイアログが表示される。サポートしていない場合はフォールバックスキームが機能する。最初の呼び出しで影響の説明とワンタイムトークンが返され、そのトークンを使った2回目の呼び出しで操作が実行される。トークンの有効期限は5分で、特定の引数にバインドされているため、「Aを確認したのにBを実行した」は成立せず、エージェントが独自にトークンを生成することもできない。

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、KVパスへの read、unwrap の値。kv list、kv metadata get、policy read、sys/mounts の応答は変更されない。シークレットが含まれず、削除すると役に立たなくなるためだ。

  • Argo CD — Secret リソースの data と stringData。Argo CDがJSONを含む文字列としてマニフェストを返す manifest、liveState、targetState フィールド内も含む。base64 は暗号化ではない。

回避策は封じられている: vault kv get -field=password はJSONを介さずに素の値を出力し、-format=table は削除対象を特定できない。両方とも説明付きで拒否される。

ダイアログで値が本当に必要な場合:

export PLATFORM_MCP_ALLOW_SECRET_VALUES=true

意図的なオプトイン。これ以降、シークレットの内容はモデルプロバイダーに送信される。デフォルトではVaultでシークレットを直接確認すること。

さらに: 100KBを超える応答は、クエリを絞り込むヒント付きで切り詰められる。また、出力はクラスタからのデータとしてマークされる。マニフェスト、アノテーション、ログは人間が書くものであり、そこで見つかった指示をエージェントが実行してはならない。

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全体(約170MB)。kcadm はJavaスクリプトであり、独立したGoバイナリではない。

  3. チェックサムは解凍前かつ chmod +x の前に検証される。 このステップがなければ「インターネットからダウンロードして実行」と同じことになる。

  4. ファイルは ~/.config/platform-mcp/bin/ に配置され、以降再利用される。

kcadm を使用するにはマシンに Java 17+ が必要(PATH の java または 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のシークレットに証明書が指定されていないため、ingress-nginxはデフォルトの自己署名証明書(CN=Kubernetes Ingress Controller Fake Certificate、SAN ingress.local)を返す。

その間は明示的なオプトインが必要:

export PLATFORM_MCP_INSECURE=true

Node(OIDC ログイン)の証明書検証を無効化し、起動のたびに警告を出力します。接続は暗号化されたままですが、サーバーの真正性は確認されず、このチャネルを介してアクセストークンがやり取りされます。kcadm は設定にトラストストアがない場合、証明書検証のスキップが有効になります(stderr CLI に警告)。

ここでは NODE_EXTRA_CA_CERTS は役に立ちません。証明書の SAN(ingress.local)がホスト名と一致しないため、信頼されたルート CA があっても名前検証は失敗します。

正常な証明書を発行したら、このオプションは削除する必要があります。内部 CA によって署名されている場合は、ルート CA を指定するだけで十分です。環境変数は子 CLI に継承されます:

export NODE_EXTRA_CA_CERTS=/path/to/internal-ca.pem   # для самого сервера (Node)
export SSL_CERT_FILE=/path/to/internal-ca.pem         # для argocd и vault (Go)

仕組み

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

Argo CD。 ログインは Dex を介した Authorization Code + PKCE。Argo CD が自動的に Dex に登録する public クライアント argo-cd-cli が使用され、redirect URI は http://localhost:8085/auth/callback なので、セットアップのために argocd-cm を変更する必要はありません。Argo CD は Bearer として access_token ではなく id_token を受け入れます。後者は Dex では不透明であり、API サーバーによって検証されません。トークンは refresh トークンによって更新されます。

CLI は --grpc-web で起動されます。ingress-nginx は argocd-server に通常の HTTP/1.1 をプロキシするため(configs.params.server.insecure: true)、純粋な gRPC はそこに到達しません。

Vault。 フローはより単純です。PKCE は不要です。コードをトークンに交換するのは Vault 自身だからです。OAuth アプリケーションのシークレットは Vault に保存されています。クライアントは http://localhost:8250/oidc/callback でリスナーを起動する必要があり(これは事前に allowedRedirectURIs に登録されています)、code、state、client_nonce を返します。state パラメータは Vault 自身が生成し、発行されたリンクの中に配置します。リダイレクトの検証にはそこから取得されます。トークンは renewable の間、auth/token/renew-self を介して延長されます。

Keycloak。 realm master の public クライアント platform-mcp-cli を介した Authorization Code + PKCE(bootstrap で一度だけ作成され、redirect は http://localhost:8280/oidc/callback)。ログインは FreeIPA。セッションには access_token(Admin API)が格納されます。kcadm の前に、サーバーはプライベートな kcadm.config を ~/.config/platform-mcp/ に書き込みます。共通の ~/.keycloak/kcadm.config ではありません。

トークンは子プロセスに環境変数のみを介して(Argo/Vault)またはプライベートな設定ファイルを介して(Keycloak)渡されます。argv では、ユーザーの任意のプロセスが ps で見ることができてしまうからです。環境変数は全体が継承されるわけではありません。CLI は必要なものだけを、隣接するサービスのシークレットなしで受け取ります。

セッションは ~/.config/argocd/config、~/.vault-token、~/.keycloak/kcadm.config ではなく、独自のファイルに保存されます。プロバイダーは更新時にトークンをローテーションするため、共通ファイルを使用すると、ターミナルの通常の CLI とこのサーバーが互いのセッションを無効化してしまうことになります。

開発

npm install
npm run build
npm test

テストは、コマンドの分類と禁止、シークレットの除去、ワンタイム確認トークン、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

サーバーの説明は2つの形式で重複しており、これは怠慢ではありません。Claude Code は .mcp.json を「名前 → サーバー」のフラットなマップとして読み取ります。mcpServers ラッパーがあると、サーバーを静かに認識しません。プラグインはインストールされ、有効として表示されますが、ツールは現れません。一方 Cursor は、自身の plugin.json の mcpServers からパスでファイルを取得し、動作するプラグインはラッパー付きの形式を使用します。command/args と env キーは一致します。Cursor の env 値はプレースホルダー ${VAR}(plugin.json の variables スキーマ、UI の Configure)、Claude の場合はリテラルなデフォルト値です。npm run check:manifests が2つの形式が乖離しないように監視します。

サーバーのコードはプラグインにコピーされません。両方のファイルが npx を介して公開パッケージを起動するため、プラグインは少数の小さなファイルのままであり、サーバーの変更時に再ビルドは不要です。

プッシュ前に変更を確認するには、ローカルパスからディレクトリを接続します:

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

公開

CI(.gitlab-ci.yml)は、vX.Y.Z 形式のタグによって、このプロジェクトの GitLab npm レジストリにパッケージを自動的に公開します。認証は組み込みの CI_JOB_TOKEN を介して行われ、CI に個人トークンは不要です。

バージョンはプラグインのマニフェストにも重複して記載されており、そこでも上げる必要があります:

npm version <major|minor|patch> --no-git-tag-version   # только package.json
# поправить version в обоих plugins/platform-mcp/*/plugin.json
npm run check:manifests                                # сверить
git commit -am "0.X.Y" && git tag v0.X.Y && git push --follow-tags

不一致は CI が検出します。test ジョブは3つのマニフェストのバージョンと2つのサーバー記述の整合性を照合し、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
    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