Skip to main content
Glama

platform-mcp

sonar-prod 클러스터의 인프라 서비스(Argo CD, Vault, Keycloak)를 위한 MCP 서버로, SSO 로그인(GitLab은 Argo/Vault, FreeIPA는 Keycloak)을 지원합니다.

왜 필요한가

에디터의 에이전트가 Argo CD, Vault, Keycloak에 접근해야 하지만, 서비스 계정을 발급할 수는 없습니다. 감사 로그에 사람 대신 공용 계정이 남고, 권한도 특정 개발자의 권한보다 넓어지기 때문입니다.

이 패키지는 로컬에 설치되어 브라우저를 통한 일반적인 SSO 로그인을 수행합니다. 이후 로그인한 사용자의 신분으로 명령을 실행합니다. 감사 로그에는 실제 로그인이 기록되고, 권한은 그룹 멤버십이 부여하는 만큼만 정확히 부여됩니다.

서비스별 도구는 정확히 하나씩입니다 — argocd_exec, vault_exec, keycloak_exec이며, 명령줄 인자를 받습니다. 내부적으로는 공식 CLI(argocd, vault, kcadm)를 사용하므로 이들이 지원하는 모든 기능을 사용할 수 있습니다. 새 서비스는 인터페이스 구현 하나로 추가됩니다.

Related MCP server: mcp-read-only-argocd

설치

1단계. 패키지 레지스트리 접근

아래 모든 방법에 공통으로 한 번만 필요합니다. 패키지는 공개 npm이 아니라 이 GitLab 프로젝트의 npm 레지스트리에 있습니다. read_package_registry 권한이 있는 토큰(개인 액세스 토큰 또는 프로젝트 deploy 토큰)을 발급받아 ~/.npmrc에 추가하세요:

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

2단계. 에디터 연결

Claude Code 및 Cursor — 플러그인으로. 이 저장소 자체가 플러그인 카탈로그이므로 두 명령이면 충분합니다:

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

주소는 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 패키지와 내부 서비스 주소가 있는데, 이 주소는 어차피 네트워크 내부에서만 resolve됩니다. 저장소에는 비밀이 없어야 하고 없을 것입니다. 액세스 토큰은 서버가 ~/.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는 네트워크 내부에서만 resolve됩니다. 외부에서는 공개 wildcard *.infra.sonar-corp.ru가 이를 가로채 요청이 조용히 엉뚱한 곳으로 전송됩니다. dig +short argocd.infra.sonar-corp.ru가 192.168.88.106을 반환해야 합니다.

대화창에서 바로 로그인하는 것이 가장 간단합니다. 에이전트에게 argocd_login, vault_login 또는 keycloak_login을 호출하도록 요청하고, 발급된 링크를 열어 로그인을 완료하세요. 에디터를 재시작할 필요는 없습니다.

패키지가 전역으로 설치된 경우 터미널에서도 동일하게:

export ARGOCD_BASE_URL=https://argocd.infra.sonar-corp.ru
export VAULT_ADDR=https://vault.infra.sonar-corp.ru
export KEYCLOAK_BASE_URL=https://auth.infra.sonar-corp.ru
export PLATFORM_MCP_INSECURE=true   # пока нет настоящих сертификатов, см. TLS

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

브라우저가 열립니다. Argo CD와 Vault는 GitLab SSO, Keycloak은 master realm의 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/"]
  }
}

서비스 하나의 주소만 설정해도 충분합니다. 나머지는 도구 목록에 표시되지 않을 뿐입니다.

세션이 없거나 만료된 경우 도구는 이해하기 쉬운 오류를 반환하고, 에이전트는 대화창에서 바로 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가 아님). 일반 OIDC 사용자에게 sys/mounts는 종종 403입니다 — discovery에 사용하지 마세요. kv list의 exit code 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을 지원하면 일반 대화 상자가 표시됩니다. 지원하지 않으면 대체 방식이 작동합니다. 첫 번째 호출은 영향 설명과 일회용 토큰을 반환하고, 이 토큰을 사용한 두 번째 호출이 작업을 실행합니다. 토큰은 5분간 유효하며 특정 인자에 바인딩되므로 "하나를 확인하고 다른 것을 실행"할 수 없고, 에이전트가 스스로 토큰을 만들어낼 수도 없습니다.

Keycloak은 예외입니다. 변경 작업은 즉시 실행되지만 응답에 에이전트용 warning이 추가됩니다. 구성이 CR/operator를 통해 전달되므로 kcadm을 통한 수동 수정은 sync 시 operator가 덮어쓸 수 있습니다. 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은 별도의 Go 바이너리가 아닌 Java 스크립트이기 때문입니다.

  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은 구성에 truststore가 없으면 인증서 검증 건너뛰기가 활성화됩니다(stderr CLI에 경고).

NODE_EXTRA_CA_CERTS는 여기서 도움이 되지 않습니다: 인증서의 SAN(ingress.local)이 호스트 이름과 일치하지 않으므로, 신뢰할 수 있는 루트 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는 access_token이 아닌 id_token을 Bearer로 받습니다 — Dex의 access_token은 불투명하며 API 서버가 검증하지 않습니다. 토큰은 refresh 토큰으로 갱신됩니다.

CLI는 --grpc-web으로 실행됩니다: ingress-nginx가 일반 HTTP/1.1을 argocd-server로 프록시하며(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. master realm의 public 클라이언트 platform-mcp-cli를 통한 Authorization Code + PKCE(bootstrap에서 한 번 생성, redirect http://localhost:8280/oidc/callback). 로그인은 FreeIPA입니다. 세션에는 access_token(Admin API)이 저장됩니다. kcadm 실행 전에 서버는 ~/.config/platform-mcp/에 개인 kcadm.config를 씁니다 — 공용 ~/.keycloak/kcadm.config가 아닙니다.

토큰은 하위 프로세스에 환경 변수를 통해서만(Argo/Vault) 또는 개인 config 파일을 통해(Keycloak) 전달됩니다: argv에 있으면 사용자의 모든 프로세스가 ps에서 볼 수 있기 때문입니다. 환경 변수는 전체가 상속되지 않습니다 — CLI는 인접 서비스의 시크릿 없이 필요한 것만 정확히 받습니다.

세션은 ~/.config/argocd/config, ~/.vault-token, ~/.keycloak/kcadm.config가 아닌 자체 파일에 저장됩니다: 공급자가 갱신 시 토큰을 교체하므로, 공용 파일을 사용하면 터미널의 일반 CLI와 이 서버가 서로의 세션을 무효화하게 됩니다.

개발

npm install
npm run build
npm test

테스트는 명령 분류와 금지 규칙, 시크릿 제거, 일회용 확인 토큰, CLI 실행 시 shell 부재, 자체 ZIP 압축 해제기(HashiCorp가 vault를 아카이브로 제공하고 Node에 내장 압축 해제기가 없기 때문에 필요)를 다룹니다.

플러그인

리포지토리는 동시에 플러그인 카탈로그이자 플러그인 자체입니다:

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

서버 설명이 두 가지 형식으로 중복되어 있는데, 이는 부주의가 아닙니다. Claude Code는 .mcp.json을 평면적인 "이름 → 서버" 맵으로 읽습니다: mcpServers 래퍼가 있으면 서버를 조용히 인식하지 못합니다 — 플러그인은 설치되고 활성화된 것으로 표시되지만 도구는 나타나지 않습니다. 반면 Cursor는 자체 plugin.json의 mcpServers 경로에서 파일을 가져오며, Cursor용 작업 플러그인은 래퍼가 있는 형식을 사용합니다. command/args와 env 키는 일치합니다; Cursor의 env 값은 ${VAR} 플레이스홀더(plugin.json의 variables 스키마, UI의 Configure)이고, Claude의 값은 리터럴 기본값입니다. npm run check:manifests가 두 형식이 어긋나지 않도록 관리합니다.

서버 코드는 플러그인에 복사되지 않습니다: 두 파일 모두 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 작업은 세 매니페스트의 버전과 두 서버 설명의 일관성을 검증하고, 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.

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