platform-mcp
platform-mcp
MCP-Server für die Infrastrukturdienste des Clusters sonar-prod — Argo CD, Vault und
Keycloak — mit SSO-Anmeldung (GitLab für Argo/Vault, FreeIPA für Keycloak).
Warum
Der Agent im Editor braucht Zugriff auf Argo CD, Vault und Keycloak, aber ein Dienstkonto darf man ihm nicht geben: Im Audit taucht statt einer Person ein gemeinsames Konto auf, und die Rechte wären umfassender als die jedes einzelnen Entwicklers.
Dieses Paket wird lokal installiert und führt eine normale SSO-Anmeldung über den Browser durch. Danach führt es Befehle im Namen des angemeldeten Benutzers aus: In den Audit-Logs ist der echte Login sichtbar, und die Rechte sind genau die, die die Gruppenmitgliedschaft gewährt.
Pro Dienst gibt es genau ein Werkzeug — argocd_exec, vault_exec und keycloak_exec,
die Kommandozeilenargumente entgegennehmen. Unter der Haube stecken die offiziellen CLIs
(argocd, vault, kcadm), daher ist alles verfügbar, was diese können. Ein neuer Dienst
wird mit einer einzigen Interface-Implementierung hinzugefügt.
Related MCP server: mcp-read-only-argocd
Installation
Schritt 1. Zugriff auf die Paket-Registry
Wird einmal benötigt und gilt für alle folgenden Wege: Das Paket liegt in der npm-Registry
dieses GitLab-Projekts, nicht im öffentlichen npm. Besorgen Sie sich ein Token mit der
Berechtigung read_package_registry (persönliches Access Token oder Deploy-Token des
Projekts) und fügen Sie es in ~/.npmrc ein:
@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 токен>Schritt 2. Anbindung an den Editor
Claude Code und Cursor — per Plugin. Das Repository ist selbst ein Plugin-Katalog, daher genügen zwei Befehle:
/plugin marketplace add https://github.com/K-manankov/platform-mcp.git
/plugin install platform-mcpDie Adresse ist GitHub, nicht GitLab, und das ist kein Tippfehler — siehe Warum der Plugin-Katalog auf GitHub liegt.
Die Adressen von Argo CD, Vault und Keycloak sind bereits im Plugin hinterlegt — es muss
nichts konfiguriert werden. Updates kommen von selbst: Das Plugin startet den Server über
npx -y, also immer die neueste veröffentlichte Version. Das Plugin selbst aktualisieren —
/plugin marketplace update.
Claude Desktop installiert Plugins dieses Formats nicht, daher wird der Eintrag dort manuell vorgenommen. Installieren Sie das Paket global:
npm install -g @sonar/platform-mcpund fügen Sie es in claude_desktop_config.json ein (Settings → Developer → Edit Config).
Der Pfad zu node und zum Server muss unbedingt absolut sein: GUI-Anwendungen auf macOS
erben PATH nicht aus der Shell. Ihre Pfade ermitteln Sie mit which node und
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 und Keycloak müssen in keiner der Varianten separat installiert werden: Der
Server lädt die benötigten CLI-Versionen beim ersten Zugriff selbst herunter (siehe
Woher argocd, vault und kcadm kommen). Für kcadm
muss auf dem Rechner Java 17+ vorhanden sein.
Warum der Plugin-Katalog auf GitHub liegt
Claude Desktop bindet Plugin-Kataloge nur von GitHub ein. Außerdem lebt unser GitLab im
internen Netzwerk und ist von außen grundsätzlich nicht erreichbar, sodass es
git.sonar-corp.ru ohnehin nicht erreichen würde.
Deshalb bleibt der Quellcode in GitLab, und unter
github.com/K-manankov/platform-mcp ist ein
Spiegel der geschützten Branches eingerichtet. Geschützt ist ein Branch — main, und genau
dieser wandert bei jedem Push zu GitHub. Eine Rücksynchronisierung gibt es nicht: Änderungen
werden nur in GitLab vorgenommen, die GitHub-Kopie existiert für die Plugin-Installation.
Der Spiegel selbst gibt nichts Überflüssiges preis — dort liegen derselbe öffentliche
npm-Paket und Adressen interner Dienste, die ohnehin nur aus dem Netzwerk aufgelöst werden.
Geheimnisse gibt es im Repository nicht und darf es nicht geben: Zugriffstokens hält der
Server in ~/.config/platform-mcp/, und das Registry-Token legt sich jeder selbst in
~/.npmrc an.
Das installierte Plugin nach Änderungen aktualisieren:
/plugin marketplace update sonar-infra
/plugin update platform-mcpAnmeldung
VPN ist erforderlich: Die Namen argocd.infra.sonar-corp.ru, vault.infra.sonar-corp.ru
und auth.infra.sonar-corp.ru werden nur von innerhalb des Netzwerks aufgelöst. Von außen
fängt sie der öffentliche Wildcard *.infra.sonar-corp.ru ab, und die Anfrage geht still
in die falsche Richtung — die Prüfung dig +short argocd.infra.sonar-corp.ru muss
192.168.88.106 ergeben.
Am einfachsten melden Sie sich direkt aus dem Dialog an: Bitten Sie den Agenten,
argocd_login, vault_login oder keycloak_login aufzurufen, öffnen Sie den ausgegebenen
Link und schließen Sie die Anmeldung ab. Ein Neustart des Editors ist nicht nötig.
Dasselbe aus dem Terminal, wenn das Paket global installiert ist:
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 # только в одинEin Browser öffnet sich: für Argo CD und Vault — GitLab-SSO, für Keycloak — FreeIPA im
Realm master (Client platform-mcp-cli, siehe Bootstrap in infra). Die Sitzungen landen
in ~/.config/platform-mcp/ mit Rechten 0600 und sind für alle Editoren gemeinsam: Wer
sich einmal angemeldet hat, ist überall angemeldet.
Über SSH oder in einem Devcontainer ohne Browser:
platform-mcp login --no-browserDen Link aus der Ausgabe müssen Sie auf Ihrem eigenen Rechner öffnen; der Port 8085
(Argo CD), 8250 (Vault) oder 8280 (Keycloak) muss dabei auf den Host weitergeleitet
sein, auf dem der Befehl läuft.
Anmeldung als Vault-Administrator
Die normale Anmeldung geht an den Mount-Punkt oidc, wo die Policy über die
Untergruppenmitgliedschaft vergeben wird. Vollständige Rechte auf den Speicher liegen in
einem separaten Mount oidc-admin und stehen nur Owner der Gruppe infra/k8s zu — warum
das so ist, ist in
platform/vault-config/40-groups.yaml
beschrieben:
VAULT_OIDC_MOUNT=oidc-admin platform-mcp login vaultKonfiguration
Etwas zu ändern ist nicht nötig — die Adressen sind bereits im Plugin hinterlegt.
Cursor. Plugins → Configure für platform-mcp: URLs von Argo CD, Vault und Keycloak,
PLATFORM_MCP_INSECURE und der Vault-OIDC-Mount (oidc — normale Anmeldung, oidc-admin —
volle Rechte für Owner von infra/k8s). Die Defaults entsprechen dem Cluster sonar-prod.
Claude Code und manuelle Konfiguration. Falls etwas anderes benötigt wird (eigene
Instanz, oidc-admin, eigene Verbote), überschreiben Sie die Werte über Umgebungsvariablen
in der Editor-Konfiguration oder legen Sie sie in ~/.config/platform-mcp/config.json ab:
{
"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/"]
}
}Es genügt, die Adresse mindestens eines Dienstes zu setzen — die übrigen erscheinen dann einfach nicht in der Werkzeugliste.
Wenn keine Sitzung vorhanden oder sie abgelaufen ist, geben die Werkzeuge eine verständliche
Fehlermeldung zurück, und der Agent kann argocd_login / vault_login / keycloak_login
direkt aus dem Dialog aufrufen — ein Neustart des Editors ist nicht nötig. Diese Werkzeuge
öffnen einen Browser und geben den Link sofort zurück, ohne auf den Abschluss der
Anmeldung zu warten: Ein Mensch braucht für SSO Minuten, während das Request-Timeout bei
MCP-Clients meist 60 Sekunden beträgt. Das Ergebnis wird mit einem separaten Aufruf
*_auth_status geprüft.
Befehle
platform-mcp # MCP-сервер поверх stdio (так его запускает редактор)
platform-mcp login [сервис] # интерактивный вход, --no-browser для headless
platform-mcp status [сервис] # кто вошёл и до какого момента действует токен
platform-mcp logout [сервис] # удалить сохранённую сессиюDer Dienst ist argocd, vault oder keycloak; ohne ihn gilt der Befehl für alle
konfigurierten.
Werkzeuge
Pro Dienst: <dienst>_exec, <dienst>_login, <dienst>_auth_status, <dienst>_logout.
argocd_exec, vault_exec und keycloak_exec nehmen args entgegen — ein Array von
Kommandozeilenargumenten:
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"] }Beginnen Sie bei Vault mit vault_auth_status: An den policies ist sofort zu erkennen,
ob Zugriff auf KV besteht. ["token","lookup"] ist der CLI-Kanon (nicht lookup-self).
sys/mounts liefert bei normalen OIDC-Benutzern oft 403 — nicht für Discovery verwenden.
Exit-Code 2 bei kv list bedeutet meist „leer oder kein list-ACL“, nicht „anderen Mount
versuchen“.
Argumente werden immer als Array übergeben und nie zu einem String zusammengefügt: Die Shell
ist nicht beteiligt, daher bleiben ; und $(...) in Argumenten gewöhnlicher Text.
Adresse und Token setzt der Server ein. Flags, die sie überschreiben (--server,
--auth-token, --config, --core bei Argo CD; -address, -tls-skip-verify bei Vault;
--server, --config, --no-config bei Keycloak), sind verboten — sonst könnte das
arbeitende Token aus der Umgebung des Kindprozesses an einen fremden Host geschickt werden.
Bestätigung gefährlicher Operationen
Lesende Befehle werden sofort ausgeführt. Für Argo CD und Vault erfordert alles andere eine Benutzerbestätigung.
Als mutierend gilt jeder Befehl, der nicht als lesend erkannt wird: Die Verb-Liste ist zur sicheren Seite hin abgeschlossen, daher fällt ein unbekannter Befehl unter die Bestätigung und rutscht nicht daran vorbei.
Wenn der Client MCP-Elicitation unterstützt, erscheint ein normaler Dialog. Wenn nicht, greift ein Ersatzschema: Der erste Aufruf liefert eine Beschreibung der Folgen und ein Einmal-Token, der zweite Aufruf mit diesem Token führt die Operation aus. Das Token lebt 5 Minuten und ist an die konkreten Argumente gebunden, daher funktioniert „eins bestätigt, anderes ausgeführt“ nicht, und der Agent kann es sich nicht selbst ausdenken.
Keycloak ist eine Ausnahme: Mutationen werden sofort ausgeführt, aber der Antwort an den
Agenten wird eine Warnung hinzugefügt — die Konfiguration läuft über CR/Operator, manuelle
Änderungen über kcadm kann der Operator beim Sync überschreiben. Bevorzugt sind Manifests
in Git.
Gänzlich verboten sind:
An- und Abmeldung (
argocd login,vault login,kcadm config …) — die Sitzung verwaltet der Server selbst;Befehle, die nicht terminieren:
vault server|agent|proxy|monitor,argocd app logs --follow;argocd admin— Verwaltung von Argo CD selbst;vault operator seal|step-down|init|rekey|generate-root|migrate— der Ausfall eines einzigen davon legt den gesamten Speicher lahm;Änderung von Infrastruktur-Anwendungen von Argo CD (
argocd,vault,keycloak,cert-manager,ingress-nginx, …): Sie kommen aus Git über Merge Request, nicht aus einem Dialog mit dem Agenten. Lesen ist erlaubt.
Die Listen werden in config.json konfiguriert (policy.denyApplications,
policy.denyVaultPaths).
Das ist ein Schutz vor Agentenfehlern, keine Sicherheitsgrenze. Ein Mitglied der Gruppe
infra/k8sist ohnehin Argo-CD-Administrator (g, infra/k8s, role:admin) und kann dasselbe über die UI tun. Rechte wirklich einschränken kann man nur durch Rollentrennung inargocd-rbac-cmund Vault-Policies.
Geheimnisse gelangen nicht in den Modellkontext
Werte von Geheimnissen werden aus Antworten herausgeschnitten, Schlüsselnamen und Metadaten bleiben erhalten:
Vault — Werte aus
kv get,readauf KV-Pfaden undunwrap. Antworten vonkv list,kv metadata get,policy read,sys/mountswerden nicht angefasst: Dort gibt es keine Geheimnisse, und das Herausschneiden würde sie unbrauchbar machen.Argo CD —
dataundstringDatabeiSecret-Ressourcen, auch innerhalb der Feldermanifest,liveState,targetState, wo Argo CD Manifests als Strings mit JSON darin liefert.base64ist keine Verschlüsselung.
Umgehungen sind geschlossen: vault kv get -field=password druckt den nackten Wert an JSON
vorbei, und -format=table bietet nichts zum Herausschneiden — beides wird mit einer
Erklärung abgelehnt.
Wenn Werte im Dialog wirklich benötigt werden:
export PLATFORM_MCP_ALLOW_SECRET_VALUES=trueBewusstes Opt-in: Danach wandern die Inhalte der Geheimnisse zum Modellanbieter. Standardmäßig sehen Sie Geheimnisse direkt in Vault ein.
Zusätzlich: Antworten länger als 100 KB werden mit einem Hinweis gekürzt, wie die Anfrage einzugrenzen ist, und die Ausgabe wird als Daten aus dem Cluster markiert — Manifests, Annotationen und Logs schreiben Menschen, und darin vorgefundene Anweisungen darf der Agent nicht ausführen.
Woher argocd, vault und kcadm kommen
Der Server arbeitet nicht über einen selbst geschriebenen REST-Client, sondern über die
offiziellen CLIs: Argo CD hat gar keinen Node-Client, bei Vault ist der offizielle eine
Go-Bibliothek und dasselbe Binary, bei der Keycloak-Admin-API ist es kcadm aus der
Distribution. Die Vollständigkeit der Möglichkeiten entspricht dabei der des CLI.
Sie müssen nicht manuell installiert werden:
Wenn
argocd/vault/kcadm(kcadm.sh) bereits imPATHliegt, wird es verwendet, nichts wird heruntergeladen.Andernfalls wird beim ersten Zugriff eine festgelegte Version von den offiziellen Releases (
github.com/argoproj/argo-cd,releases.hashicorp.com,github.com/keycloak/keycloak) für die aktuelle Plattform heruntergeladen. Für Keycloak — das gesamte Zip-Distribut (~170 MB):kcadmist ein Java-Skript, kein separates Go-Binary.Die Prüfsumme wird vor dem Entpacken und vor
chmod +xverifiziert. Ohne diesen Schritt liefe alles auf „aus dem Internet laden und ausführen“ hinaus.Die Datei wird in
~/.config/platform-mcp/bin/abgelegt und danach wiederverwendet.
Für kcadm wird auf dem Rechner Java 17+ benötigt (java im PATH oder JAVA_HOME).
Ohne sie gibt der Server eine verständliche Fehlermeldung zurück.
Der Download erfolgt bei der ersten Verwendung, nicht in postinstall:
postinstall-Skripte werden vielerorts deaktiviert (npm ci --ignore-scripts), und die
Installation bliebe still unvollständig.
Die Versionen sind in src/config.ts festgelegt und entsprechen den im
Cluster ausgerollten (Argo CD v3.4.5, Vault 2.0.3, Keycloak 26.6.4). Bei einem
Cluster-Update müssen sie auch hier angehoben werden.
TLS
argocd.infra.sonar-corp.ru, vault.infra.sonar-corp.ru und auth.infra.sonar-corp.ru
haben derzeit keine echten Zertifikate: Im Ingress ist kein Secret mit Zertifikat
angegeben, daher liefert ingress-nginx sein Standard-Selbstsigniertes aus
(CN=Kubernetes Ingress Controller Fake Certificate, SAN ingress.local).
Solange das so ist, ist ein explizites Opt-in erforderlich:
export PLATFORM_MCP_INSECURE=trueEr deaktiviert die Zertifikatsprüfung für Node (OIDC-Login) und gibt bei jedem Start eine Warnung aus. Die Verbindung bleibt verschlüsselt, aber die Authentizität des Servers wird nicht bestätigt, und über diesen Kanal laufen Zugriffstokens. Bei kcadm ist bei fehlendem Truststore in der Konfiguration die Skip-Certificate-Validation aktiviert (Warnung in stderr der CLI).
NODE_EXTRA_CA_CERTS hilft hier nicht: Das SAN des Zertifikats (ingress.local) stimmt nicht mit dem Hostnamen überein, daher schlägt die Namensprüfung selbst mit vertrauenswürdiger Root-CA fehl.
Nach der Ausstellung normaler Zertifikate muss die Option entfernt werden. Wenn sie von einer internen CA signiert sind, reicht es, die Root anzugeben – die Variablen werden an untergeordnete CLIs vererbt:
export NODE_EXTRA_CA_CERTS=/path/to/internal-ca.pem # для самого сервера (Node)
export SSL_CERT_FILE=/path/to/internal-ca.pem # для argocd и vault (Go)Wie das funktioniert
редактор ──stdio──▶ platform-mcp ──argv+env──▶ argocd ──▶ Argo CD
(OIDC, политика, vault ──▶ Vault
вырезание секретов) kcadm ──▶ KeycloakArgo CD. Login – Authorization Code + PKCE über Dex. Verwendet wird der Public-Client argo-cd-cli, den Argo CD automatisch in Dex registriert, zusammen mit der Redirect-URI http://localhost:8085/auth/callback, daher muss argocd-cm für die Installation nicht geändert werden. Argo CD akzeptiert als Bearer genau das id_token, nicht das access_token – letzteres ist bei Dex undurchsichtig und wird vom API-Server nicht geprüft. Das Token wird über das Refresh-Token erneuert.
Die CLI wird mit --grpc-web gestartet: ingress-nginx proxyt in argocd-server normales HTTP/1.1 (configs.params.server.insecure: true), und reines gRPC erreicht ihn nicht.
Vault. Der Ablauf ist einfacher: PKCE ist nicht nötig, weil der Code gegen das Token von Vault selbst getauscht wird – das Secret der OAuth-Anwendung liegt in Vault. Vom Client wird verlangt, einen Listener auf http://localhost:8250/oidc/callback zu starten (dieser ist vorab in allowedRedirectURIs eingetragen) und code, state und client_nonce zurückzugeben. Den Parameter state generiert Vault selbst und legt ihn in den ausgegebenen Link – von dort wird er für die Prüfung des Redirects genommen. Das Token wird über auth/token/renew-self verlängert, solange renewable.
Keycloak. Authorization Code + PKCE über den Public-Client platform-mcp-cli im Realm master (wird einmalig im Bootstrap angelegt, Redirect http://localhost:8280/oidc/callback). Login – FreeIPA. In die Session wird das access_token gelegt (Admin-API). Vor kcadm schreibt der Server eine private kcadm.config nach ~/.config/platform-mcp/ – nicht die gemeinsame ~/.keycloak/kcadm.config.
Tokens werden an untergeordnete Prozesse nur über die Umgebung (Argo/Vault) oder über eine private Config-Datei (Keycloak) übergeben: In argv wären sie in ps für jeden Prozess des Benutzers sichtbar. Die Umgebung wird nicht vollständig vererbt – die CLI bekommt genau das, was sie braucht, ohne Geheimnisse benachbarter Dienste.
Sessions werden in eigenen Dateien gespeichert, nicht in ~/.config/argocd/config, ~/.vault-token und ~/.keycloak/kcadm.config: Der Provider rotiert das Token bei der Aktualisierung, und eine gemeinsame Datei würde dazu führen, dass normale CLIs im Terminal und dieser Server sich gegenseitig die Sessions invalidieren würden.
Entwicklung
npm install
npm run build
npm testDie Tests decken die Klassifizierung von Befehlen und Verbote, das Herausschneiden von Secrets, Einmal-Bestätigungstokens, das Fehlen einer Shell beim Start der CLI und einen eigenen ZIP-Entpacker ab (dieser ist nötig, weil HashiCorp vault als Archiv ausliefert und es in Node keinen eingebauten Entpacker gibt).
Plugin
Das Repository ist gleichzeitig Plugin-Verzeichnis und Plugin selbst:
.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 — с обёрткой mcpServersDie Serverbeschreibung ist in zwei Formen dupliziert, und das ist keine Nachlässigkeit. Claude Code liest .mcp.json als flache Karte „Name → Server“: Mit dem Wrapper mcpServers übernimmt er den Server stillschweigend nicht – das Plugin wird installiert und gilt als aktiviert, aber es erscheinen keine Tools. Cursor hingegen nimmt die Datei über den Pfad aus mcpServers in seinem plugin.json, und funktionierende Plugins für Cursor verwenden die Form mit Wrapper. command/args und die env-Schlüssel stimmen überein; die env-Werte bei Cursor sind Platzhalter ${VAR} (Schema variables in plugin.json, Configure in der UI), bei Claude – literale Defaults. npm run check:manifests sorgt dafür, dass die Formen nicht auseinanderlaufen.
Der Servercode wird nicht ins Plugin kopiert: Beide Dateien starten das veröffentlichte Paket über npx, daher bleibt das Plugin aus wenigen kleinen Dateien bestehen und benötigt bei Serveränderungen keinen Neubau.
Änderungen kann man vor dem Push prüfen, indem man das Verzeichnis über einen lokalen Pfad anbindet:
/plugin marketplace add /путь/к/platform-mcp
/plugin install platform-mcpVeröffentlichung
CI (.gitlab-ci.yml) veröffentlicht das Paket automatisch im GitLab-npm-Registry dieses Projekts über ein Tag der Form vX.Y.Z, die Authentifizierung erfolgt über das eingebaute CI_JOB_TOKEN, persönliche Tokens sind in CI nicht erforderlich.
Die Version ist in den Plugin-Manifesten dupliziert und muss dort ebenfalls angehoben werden:
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-tagsAbweichungen fängt CI ab: Der Job test gleicht die Versionen in den drei Manifesten und die Konsistenz der beiden Serverbeschreibungen ab, publish – die Version aus dem Tag mit package.json. Ohne das bliebe das Plugin beim Benutzer „unverändert“ bei frischem Server: Sowohl Claude Code als auch Cursor entscheiden anhand der version des Plugins, ob sie es aktualisieren.
Das Plugin muss nirgendwo separat veröffentlicht werden: Ein Push in main geht per Spiegel der geschützten Branches auf GitHub, und Benutzer übernehmen Änderungen über /plugin marketplace update. Beachten Sie, dass das Plugin aus dem Branch und nicht aus dem Tag installiert wird: Sobald eine Änderung in main gelandet ist, ist sie für alle verfügbar – selbst wenn die Version noch nicht per Tag veröffentlicht wurde.
Available Tools
8 toolsargocd_auth_statusA
Кто вошёл в Argo CD и до какого момента действует токен.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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) стоит добавлять всегда, когда команда его поддерживает: табличный вывод разбирать сложнее и в нём теряются поля.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Аргументы командной строки, по одному на элемент массива. | |
| stdin | No | Данные на стандартный ввод команды, если она их читает. | |
| __confirm | No | Токен подтверждения. Заполняется только при повторном вызове, после явного согласия пользователя на мутирующую операцию. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| noBrowser | No | Не открывать браузер, только вернуть ссылку (SSH, devcontainer). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 и до какого момента действует токен.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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). Значения секретов вырезаются: возвращаются имена ключей и метаданные, но не содержимое — оно не должно попадать в контекст модели.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Аргументы командной строки, по одному на элемент массива. | |
| stdin | No | Данные на стандартный ввод команды, если она их читает. | |
| __confirm | No | Токен подтверждения. Заполняется только при повторном вызове, после явного согласия пользователя на мутирующую операцию. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| noBrowser | No | Не открывать браузер, только вернуть ссылку (SSH, devcontainer). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.2.1- First observed
argocd_auth_status - First observed
argocd_exec - First observed
argocd_login - First observed
argocd_logout - First observed
vault_auth_status - First observed
vault_exec - First observed
vault_login - First observed
vault_logout
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Related MCP Servers
- AlicenseAqualityDmaintenanceAn 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.1012MIT
- AlicenseAqualityBmaintenanceA secure MCP server providing read-only access to Argo CD instances using browser session cookies, enabling querying of applications, projects, clusters, and repositories.14MIT
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol (MCP) server that enables secure execution of shell commands with a dynamic approval system, audit logging, and command revocation.42Apache 2.0
- AlicenseCqualityAmaintenanceMCP server for interacting with GitLab API, supporting dynamic tool selection and enterprise-grade security.21010MIT