mcp-argocd
Provides tools for interacting with the Argo CD REST API, enabling AI assistants to triage application status, sync, roll back, inspect drift, read logs, and manage ApplicationSets, clusters, projects, and repositories.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-argocdcheck the sync and health status of my guestbook app"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-argocd
mcp-argocd is a Model Context Protocol (MCP) server for the Argo CD REST API. It gives AI assistants 37 tools, 7 resources, and 7 prompts to triage application status, sync, roll back, inspect drift, read logs, and manage ApplicationSets, clusters, projects, and repositories. Works with Claude Desktop, Claude Code, Cursor, Windsurf, VS Code Copilot, and any MCP-compatible client. Runs in one of two modes: with writes, or locked read-only (MCP_READ_ONLY=true) so the 9 write tools are never offered to the model.
Works with Argo CD 3.3+ (any install: OSS, Akuity, OpenShift GitOps). Needs an API token, no cluster access.
Supports the MCP 2026-07-28 specification, often called MCP 2.0, and stays compatible with 2025-11-25 clients.
Built with FastMCP 4.x, httpx, and Pydantic.
Install: uvx mcp-argocd | PyPI | MCP Registry | Changelog
uvx mcp-argocd # with writes
MCP_READ_ONLY=true uvx mcp-argocd # locked read-only: write tools are not listed1-Click Installation
Tip: For other AI assistants (Claude Code, Windsurf, IntelliJ, Gemini CLI), visit the Argo CD MCP Installation Gateway.
Prerequisite: Install
uvfirst. Install uv.
Claude Code
# with writes
claude mcp add argocd -e ARGOCD_URL=https://argocd.example.com -e ARGOCD_TOKEN=<token> -- uvx mcp-argocd
# locked read-only
claude mcp add argocd -e MCP_READ_ONLY=true -e ARGOCD_URL=https://argocd.example.com -e ARGOCD_TOKEN=<token> -- uvx mcp-argocdWindsurf & IntelliJ
Windsurf: Add to ~/.codeium/windsurf/mcp_config.json
IntelliJ: Add to Settings | Tools | MCP Servers
Remove MCP_READ_ONLY to allow writes.
{
"mcpServers": {
"argocd": {
"command": "uvx",
"args": ["mcp-argocd"],
"env": {
"ARGOCD_URL": "https://argocd.example.com",
"ARGOCD_TOKEN": "<token>",
"MCP_READ_ONLY": "true"
}
}
}
}Gemini CLI
The repo ships gemini-extension.json; install it with the Gemini CLI extension flow, or add it directly:
# with writes
gemini mcp add -s user -e ARGOCD_URL=https://argocd.example.com -e ARGOCD_TOKEN=<token> argocd uvx mcp-argocd
# locked read-only
gemini mcp add -s user -e MCP_READ_ONLY=true -e ARGOCD_URL=https://argocd.example.com -e ARGOCD_TOKEN=<token> argocd uvx mcp-argocdVS Code
Add to .vscode/mcp.json. Remove MCP_READ_ONLY to allow writes.
{
"servers": {
"argocd": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-argocd"],
"env": {
"ARGOCD_URL": "https://argocd.example.com",
"ARGOCD_TOKEN": "<token>",
"MCP_READ_ONLY": "true"
}
}
}
}Codex
# with writes
codex mcp add argocd --env ARGOCD_URL=https://argocd.example.com --env ARGOCD_TOKEN=<token> -- uvx mcp-argocd
# locked read-only
codex mcp add argocd --env MCP_READ_ONLY=true --env ARGOCD_URL=https://argocd.example.com --env ARGOCD_TOKEN=<token> -- uvx mcp-argocdpip / uv
uvx mcp-argocd # run without installing
pip install mcp-argocd # or install into an environmentDrop MCP_READ_ONLY to allow writes. On a shared or hosted server put it in the deployer's env, not the client config.
Related MCP server: ArgoCD MCP Server
Configuration
Variable | Required | Default | Description |
| Yes | - | Base URL including any path prefix. Also reads |
| Yes | - | Bearer token. Also reads |
| No |
| Shared name across the mcp-* servers. Any value other than |
| No |
| Per-server alias for |
| No | - | Bearer token (min 16 chars) required to bind an HTTP transport to a non-loopback host; clients send |
| No |
| Request timeout in seconds |
| No |
|
|
| No | - | Default |
Getting an API token
Argo CD tokens come from a local account with the apiKey capability, or from a project role.
Add a local account in
argocd-cm: setaccounts.ci-bot: apiKey.Generate a token:
argocd account generate-token --account ci-bot --expires-in 24h.Set
ARGOCD_URLandARGOCD_TOKEN.
Minimum read-only RBAC:
p, role:mcp-ro, applications, get, */*, allow
p, role:mcp-ro, logs, get, */*, allow
p, role:mcp-ro, applicationsets, get, */*, allow
p, role:mcp-ro, projects, get, *, allow
p, role:mcp-ro, clusters, get, *, allow
p, role:mcp-ro, repositories, get, *, allowCompatibility
Component | Supported |
Argo CD | 3.3+ (OSS, Akuity, OpenShift GitOps); most tools also work on 2.x |
Python | 3.10, 3.11, 3.12, 3.13, 3.14 |
Transports | stdio, streamable-http, sse (deprecated) |
MCP spec | 2026-07-28 (MCP 2.0); compatible with 2025-11-25 |
Protocol support
Supports the MCP 2026-07-28 specification (MCP 2.0) and stays compatible with 2025-11-25 clients.
Built on FastMCP 4.x. A regression test lists all 37 tools with an in-memory MCP client pinned to
2026-07-28. The sse transport is
deprecated by the 2026-07-28 specification; it still works and prints a warning. The server uses
no roots, sampling, logging, elicitation, or resource subscriptions.
Error results
Expected failures — a missing app (404), a denied permission (403), a write that reaches the
read-only guard — return a tool result with isError: true rather than a success envelope. (In
locked read-only mode the write tools are hidden, so calling one returns an Unknown tool error;
the envelope below is the guard's own response, returned only when a client reaches a write tool
anyway.) The body is a JSON
object {"error", "status_code"?, "body"?, "hint"?}, where hint names a corrective action when
one applies. The body is the result's pretty-printed text content; the result carries no
structuredContent, because a strict MCP client (the TypeScript SDK) validates structuredContent
against the tool's outputSchema even when isError is true and would reject the error otherwise.
Unexpected bugs are also isError: true but carry TypeName: message text and a logged traceback.
Successful results carry the same JSON object as structuredContent alongside the pretty-printed
text, so a client may read either. Tools advertise no outputSchema: payloads pass upstream fields
through untyped, and a typed schema is opt-in per tool via output_schema=.
Tools (37)
Category | Count |
Applications — read | 14 |
Applications — write | 8 |
ApplicationSets | 3 |
Projects | 2 |
Clusters | 3 |
Repositories | 3 |
Server and account | 4 |
Applications — read
argocd_list_applications— List applications with slim rows; filter by sync, health, destination.argocd_get_application— Get one application: spec, sync/health, conditions, operation, counts.argocd_get_resource_tree— Get the live resource tree as slim nodes.argocd_get_managed_resources— Get live-vs-desired diffs for managed resources.argocd_get_resource— Get a single managed resource's live manifest.argocd_get_manifests— Get the rendered desired manifests for a revision.argocd_get_application_events— Get Kubernetes events for an application.argocd_get_pod_logs— Get container logs; never follows.argocd_get_application_history— Get deployment history, newest first.argocd_get_revision_metadata— Get commit metadata for a revision.argocd_get_operation— Get the current or last sync operation.argocd_wait_for_operation— Poll until an operation is terminal, gone, or times out.argocd_get_sync_windows— Get sync windows and whether the app can sync now.argocd_list_resource_actions— List the custom actions available on a resource.
Applications — write
argocd_sync_application— Sync an application; prune and force can delete or recreate resources.argocd_rollback_application— Roll back to a prior deployment history entry.argocd_terminate_operation— Terminate the running sync operation.argocd_create_application— Create an application from flattened parameters.argocd_patch_application— Patch an application; the one tool for every update.argocd_delete_application— Delete an application.argocd_run_resource_action— Run a custom resource action, such as restart.argocd_delete_resource— Delete a single managed resource so the controller recreates it.
ApplicationSets
argocd_list_applicationsets— List ApplicationSets with slim rows.argocd_get_applicationset— Get one ApplicationSet and the status of its generated apps.argocd_generate_applicationset— Dry-run the generators to preview generated apps; creates nothing.
Projects
argocd_list_projects— List projects with slim rows.argocd_get_project— Get a project's repos, destinations, and roles.
Clusters
argocd_list_clusters— List clusters with connection state, versions, and counts.argocd_get_cluster— Get one cluster by name or server URL.argocd_invalidate_cluster_cache— Invalidate a cluster's cached resources.
Repositories
argocd_list_repositories— List repositories; credentials are never returned.argocd_get_repository_refs— Get a repository's branches and tags.argocd_list_repository_apps— List the application paths discoverable in a repository.
Server and account
argocd_get_version— Get the Argo CD server version and bundled tool versions.argocd_get_userinfo— Get the authenticated identity.argocd_can_i— Check whether the account may perform a resource/action.argocd_get_settings— Get server settings and enabled features.
Resources (7)
The server exposes curated GitOps rules and guides as MCP resources.
resource://rules/sync-safety— Sync Safety Rules.resource://rules/rollback— Rollback Rules.resource://rules/gitops-change-flow— GitOps Change Flow.resource://rules/applicationsets— ApplicationSet Rules.resource://guides/status-triage— Status Triage Guide.resource://guides/rbac— RBAC and Permission Errors.resource://guides/api-token-setup— API Token Setup.
Prompts (7)
The server provides MCP prompts — multi-tool workflow templates clients surface as slash commands.
triage_application— Diagnose a Degraded or OutOfSync application.diagnose_sync_failure— Classify why the last sync failed.review_drift— Review OutOfSync apps and recommend a fix.safe_sync— Check sync windows, dry-run, then sync and wait.rollback_application— Roll back with the auto-sync check.fleet_status— Report clusters and apps that are not Synced/Healthy.inspect_applicationset— Compare generated vs existing apps.
Usage Examples
Triage: "Why is
paymentsDegraded?" runstriage_application— app conditions, unhealthy nodes, warning events, then pod logs.Drift: "What has drifted in
prod?" runsreview_drift— lists OutOfSync apps and shows each diff.Safe sync: "Sync
websafely" runssafe_sync— checks sync windows, dry-runs, then syncs and waits.Rollback: "Roll
apiback to the last good deploy" runsrollback_application— checks auto-sync first.Fleet: "Show cluster health" runs
fleet_status— clusters and the apps that are not healthy.
Security Considerations
Token scope: use the minimum RBAC the workflow needs. A read-only role needs
applications, getandlogs, get.Read-only mode: set
MCP_READ_ONLY=true(orARGOCD_READ_ONLY=true) in the launch you control and the server starts locked: the 9 write tools and the write-workflow prompts are not listed, a call to one returns "Unknown tool", and the guard refuses any write that still reaches it. Nothing lifts the lock at runtime — not afalsefrom another source, not a.envfile, not tool arguments; any value other thanfalse/0/no/off/empty locks, and--read-onlycan only raise it. The lock is only as strong as the launch: set it where users cannot edit it (a managed MCP config such as Claude Codemanaged-mcp.json, a container, k8s or systemd env, or a hosted HTTP deployment). A user who starts the server themselves controls its environment. Pair it with a read-only Argo CD RBAC role (applications, get;logs, get).SSL verification: on by default. Disable only for self-signed certificates in trusted networks.
Secret scrubbing: repository, cluster, and project payloads are scrubbed of credentials, cluster
config, and rolejwtTokens, even withfull=True.MCP tool annotations: every tool declares
readOnlyHint,destructiveHint, andidempotentHint.No credential storage: the server reads the token from the environment at startup and never persists it.
Destructive tools:
argocd_sync_application,argocd_rollback_application,argocd_terminate_operation,argocd_delete_application,argocd_run_resource_action,argocd_delete_resource.
Permissions
Operation | Argo CD RBAC |
Read apps and resources |
|
Read pod logs |
|
Sync |
|
Override a revision |
|
Roll back |
|
Delete an app |
|
Run a resource action |
|
Read clusters, projects, repos |
|
CLI & Transport Options
uvx mcp-argocd # stdio (default)
uvx mcp-argocd --transport streamable-http --port 9000
uvx mcp-argocd --transport sse # deprecated; prints a warning
uvx mcp-argocd --read-only --insecureAn HTTP transport serves every tool, with the owner's Argo CD token, to anyone who reaches the
port. Host/Origin protection is not authentication, so binding to a non-loopback host requires a
bearer token: set ARGOCD_HTTP_BEARER_TOKEN (min 16 chars; clients send Authorization: Bearer <token>). The server refuses to start on a non-loopback host without it.
ARGOCD_HTTP_BEARER_TOKEN=$(openssl rand -hex 32) \
uvx mcp-argocd --transport streamable-http --host 0.0.0.0 --port 9000Docker
The image defaults to locked read-only (MCP_READ_ONLY=true); pass -e MCP_READ_ONLY=false to allow writes.
docker build -t mcp-argocd .
# stdio, locked read-only (the image default)
docker run --rm -i \
-e ARGOCD_URL=https://argocd.example.com \
-e ARGOCD_TOKEN=<token> \
mcp-argocdThe image runs as a non-root user and defaults to stdio; pass
--transport streamable-http --host 0.0.0.0 (with ARGOCD_HTTP_BEARER_TOKEN) to serve over HTTP.
FAQ
Does mcp-argocd support MCP 2026-07-28 (MCP 2.0)? Yes. It supports the MCP 2026-07-28 specification, often called MCP 2.0, and stays compatible with 2025-11-25 clients.
How is it different from argoproj-labs/mcp-for-argocd? argoproj-labs/mcp-for-argocd is the official TypeScript server with 15 tools. mcp-argocd adds 37 tools with slim payloads by default, plus diff, rollback, terminate, wait-for-operation, ApplicationSet dry-run, and RBAC error hints.
Which Argo CD versions work? Argo CD 3.3 and newer. Most tools also work on 2.x; only run_resource_action uses a 3.x endpoint.
Does it need kubectl or cluster credentials? No. It talks to the Argo CD API over HTTPS with a bearer token. It never touches the cluster directly.
Can I run mcp-argocd read-only so the assistant cannot sync or delete anything? Yes. Start it with MCP_READ_ONLY=true (or ARGOCD_READ_ONLY=true). The 9 write tools and the write-workflow prompts are then not listed at all, so the model never sees them; a call to one returns "Unknown tool", and nothing can turn writes back on while the process runs. Set it in a launch you control — a managed MCP config, a container or systemd env, or a hosted deployment — because a user who starts the server themselves can start it without the variable.
Which token does it need? It needs a bearer token in ARGOCD_TOKEN. Generate one from a local account with the apiKey capability, or use a project-role token. It also reads ARGOCD_AUTH_TOKEN and ARGOCD_API_TOKEN.
Why do I get a 403 for an app that exists? Without project, Argo CD returns 403 for an app that does not exist. Pass project to get a real 404.
Can it sync only one resource? Yes. Pass resources to argocd_sync_application with [group:]kind:name[/namespace] selectors.
Can it roll back? Yes. Use argocd_rollback_application with a history id. It refuses while auto-sync is on and tells you how to disable it.
How does it keep responses small? Every tool returns a slim payload by default and pages lists client-side. Pass full=True for the raw payload.
Which transports? stdio, streamable-http, and sse. sse is deprecated by the 2026-07-28 spec but still works.
How do I install? Run uvx mcp-argocd, or add it to your MCP client config.
Related MCP Servers
mcp-gitlab — GitLab integration (83 tools, 7 resources, 6 prompts)
mcp-atlassian-extended — Jira + Confluence integration (22 tools, 15 resources, 5 prompts)
mcp-coda — Coda integration (53 tools, 12 resources, 5 prompts)
Development
git clone https://github.com/vish288/mcp-argocd.git
cd mcp-argocd
uv sync --all-extras
uv run pytest --cov
uv run ruff check .
uv run ruff format --check .License
MIT — see LICENSE.
Available Tools
37 toolsargocd_can_iArgocd Can IBRead-onlyIdempotent
Check whether the current account may perform resource/action on a subresource.
Returns {allowed: bool, ...}; the API answers the string yes/no.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | RBAC action | |
| resource | Yes | RBAC resource | |
| subresource | No | Sub-resource, e.g. */* or proj/app | */* |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds useful context: the API returns a string yes/no and the tool normalizes to {allowed: bool, ...}. The ellipsis hints at extra fields but doesn't say what. Reasonable value added atop annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, no waste. Front-loads the purpose then the return shape. Slightly under-specified rather than verbose, which is the right trade-off.
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?
No output schema, so the description should fully explain return values; it gives {allowed: bool, ...} which is partial. For a read-only permission check this is mostly adequate, but the vagueness of the extra return fields leaves a gap.
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% and both resource/action have enums, so the schema does the heavy lifting. The description mentions subresource and resource/action but adds no syntax details beyond the schema (e.g., what */* vs proj/app means is only in the schema description). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (whether account may perform resource/action on subresource). Clearly an RBAC permission-check tool, distinguishable from the siblings which mostly list/get actual resources. No explicit sibling differentiation, but the purpose is 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?
No guidance on when to use this versus, say, argocd_get_userinfo or the actual resource tools. No exclusions, no mention of whether it reflects live RBAC, policy caching, or project-scoped permissions. An agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_create_applicationArgocd Create ApplicationA
Create an application from flattened parameters. Use patch for anything this does not cover.
Returns the created application, slim. Idempotent only with upsert=True.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New application name | |
| path | No | Path within the repo (or use chart) | |
| chart | No | Helm chart name (or use path) | |
| prune | No | Prune on auto-sync (needs auto_sync) | |
| labels | No | Application labels | |
| upsert | No | Update if it already exists | |
| project | Yes | Project to create it in | |
| repo_url | Yes | Source repository URL | |
| validate | No | Validate the manifests | |
| auto_sync | No | Enable automated sync | |
| dest_name | No | Destination cluster name | |
| self_heal | No | Self-heal on drift (needs auto_sync) | |
| dest_server | No | Destination cluster API URL | |
| sync_options | No | Sync options list | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| dest_namespace | No | Destination namespace | |
| helm_parameters | No | Helm params as k=v | |
| target_revision | No | Branch, tag, or chart version | HEAD |
| create_namespace | No | Add CreateNamespace=true | |
| helm_value_files | No | Helm value file paths | |
| kustomize_images | No | Kustomize image overrides | |
| helm_release_name | No | Helm release name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds genuinely non-redundant behavior: the result is returned as a slimmed application, and the operation is idempotent only when upsert=True. It does not discuss side effects on the destination cluster or auto-sync consequences, so it is strong but not exhaustive.
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?
Three short sentences, no filler; the core action and its parameter model come first, then the alternative tool, then the return/idempotency note. Every sentence earns its 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 22-parameter creation tool with 100% schema coverage and no output schema, the description covers the key non-schema facts: return shape, idempotency, and the fallback tool. Remaining gaps (auth/permission needs, whether creation triggers a sync) are minor given the annotation and schema 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?
Schema description coverage is 100% across all 22 parameters, so the schema already documents each field including upsert and its meaning. The description only restates the upsert idempotency relationship, adding no syntax, format, or dependency detail beyond the schema. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an application') and immediately scopes it ('from flattened parameters'), which tells the agent this is the declarative/patchy path rather than an apply. It routes away from the sibling argocd_patch_application for uncovered fields, so it is distinguishable without opening the schema, though the phrase 'flattened parameters' is slightly jargon-like.
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?
Names an explicit alternative ('Use patch for anything this does not cover') and a conditional behavior ('Idempotent only with upsert=True'), which is real when-to-use guidance. It stops short of a full when/when-not boundary against siblings like argocd_generate_applicationset or argocd_sync_application, so it is clear context without exhaustive exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_delete_applicationArgocd Delete ApplicationBDestructive
Delete an application. destructive. cascade=False removes only the Application object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| cascade | No | Also delete the app's resources | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| propagation_policy | No | Kubernetes deletion propagation policy (cascade deletes only) | foreground |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the 'destructive' label is redundant. The added 'cascade=False removes only the Application object' clarifies the scope of deletion, but permissions, irreversibility, and 404/403 behavior are left to the schema.
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 definition is short and front-loaded, but the standalone 'destructive.' fragment duplicates the annotation and does not earn its 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?
The schema documents all five parameters and annotations cover the safety profile, so the sparse description is minimally adequate. However, for a destructive multi-parameter tool, it omits prerequisites and alternative deletion paths that an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description only touches the cascade parameter and adds no syntax or semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete an application'), which is enough to distinguish it from sibling deletion tools like argocd_delete_resource. The agent can identify the object type being deleted without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given, and no alternatives are named. The cascade note implies a choice but does not tell the agent when to choose cascade true versus false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_delete_resourceArgocd Delete ResourceBDestructive
Delete a single managed resource so the controller recreates it. destructive.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Resource kind, e.g. Deployment | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| force | No | Force delete | |
| group | No | API group ('' for core) | |
| orphan | No | Orphan dependents | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| version | No | API version | v1 |
| namespace | No | Resource namespace | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| resource_name | Yes | Target resource name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, and the trailing word 'destructive.' merely restates them. The description adds nothing about what is actually removed (the live object only, not the Git manifest), how force/orphan change the outcome, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted clauses. The trailing fragment 'destructive.' is redundant with the annotations and slightly dilutes the sentence, keeping it from a 5.
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?
Annotations fully cover the safety profile, the schema documents every parameter, and no output schema is present to explain. The description supplies the one thing structured fields cannot: that this is a transient delete whose purpose is controller-driven recreation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 10 parameters, including nuanced entries for project, orphan, force, and app_namespace, so the schema carries the burden. The description contributes no parameter meaning beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Delete a single managed resource') plus the consequence ('so the controller recreates it'), which separates it from argocd_delete_application and argocd_run_resource_action. It never names those siblings, so an agent must infer the distinction from the word 'managed resource'.
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 clause 'so the controller recreates it' implies the intent (forcing reconciliation/self-heal) and is the closest thing to usage guidance. There is no explicit when-to-use, no prerequisites, and no mention of argocd_delete_application as the alternative for removing the app itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_generate_applicationsetArgocd Generate ApplicationsetARead-onlyIdempotent
Dry-run the generators: preview the applications an ApplicationSet would produce. Creates nothing. The manifest must be JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationset | Yes | Full ApplicationSet manifest as JSON | |
| appset_namespace | No | ApplicationSet namespace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered; the description reinforces this with 'Creates nothing' and adds a concrete input constraint ('The manifest must be JSON'). It stops short of describing how large a preview can be or any limits.
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?
Three short sentences, front-loaded with the core action and immediately followed by the two facts an agent most needs (no side effects, JSON input). No filler.
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 two-parameter, read-only dry-run tool with no output schema, the description conveys the action, the no-side-effect guarantee, and the input format. It could say a bit more about what the returned preview contains, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema. The description's 'manifest must be JSON' restates the applicationset parameter's own description and adds no new semantics for appset_namespace; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Dry-run the generators ... the applications an ApplicationSet would produce') and clearly distinguishes itself from read-only siblings such as argocd_get_applicationset and argocd_list_applicationsets, which return existing objects rather than previewing generated ones.
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?
'Dry-run' and 'preview' imply the use case (checking what an ApplicationSet would generate before applying it), but there is no explicit statement of when to prefer this over argocd_get_applicationset or of any prerequisites. Usage is inferable rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_applicationArgocd Get ApplicationARead-onlyIdempotent
Get one application: spec, sync/health, conditions, operation, summary, resource counts.
refresh=hard forces reconciliation and re-fetches target manifests from the repo server.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw API payload instead of the slim one | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| refresh | No | normal reconciles against cache; hard re-fetches from the repo server | none |
| resources | No | Include status.resources filtered by this mode | none |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuine behavioral context that annotations cannot: refresh=hard forces reconciliation and re-fetches target manifests from the repo server, i.e. it has side effects on cache/repo despite being a read. It does not describe error behavior (404/403), which the schema covers instead.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the primary purpose and return shape front-loaded ahead of the refresh nuance. Every clause earns its 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?
There is no output schema, so the description correctly enumerates the returned fields (spec, sync/health, conditions, operation, summary, resource counts). For a 6-parameter read tool in a cluster of 40+ siblings, that is sufficient, though it omits any hint of response size or cost of the full/refresh options.
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 per-parameter descriptions and enum values, so the schema carries the load and baseline is 3. The description's refresh=hard note largely restates the schema's own wording ("hard re-fetches from the repo server"), adding only the word "reconciliation" beyond it.
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?
"Get one application" names a specific verb and resource, and the enumeration of returned facets (spec, sync/health, conditions, operation, summary, resource counts) distinguishes it from the sibling argocd_list_applications. An agent knows this is the singular, detailed read.
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?
Usage is implied by "one application" and the required name parameter, and the refresh=hard sentence hints at when to force a re-fetch. However, it never states when to prefer argocd_get_manifests, argocd_get_resource_tree, or argocd_get_application_history over this tool, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_application_eventsArgocd Get Application EventsARead-onlyIdempotent
Get Kubernetes events for an application, newest first, with messages capped at 500 chars.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| resource_uid | No | Resource UID | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| resource_name | No | Filter to one resource | |
| warnings_only | No | Only Warning events | |
| resource_namespace | No | Resource namespace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the bar is lower. The description still adds real behavioral context beyond them: results are ordered newest first and event messages are truncated at 500 characters, which affects what the agent can expect to read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource, ordering, and truncation constraint all appear immediately.
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 nine-parameter read tool with annotations covering safety and no output schema, the description is nearly sufficient. It omits mention of paging semantics (limit/offset interaction) and the warning-only filter, which is a minor gap given the schema documents them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters (limit, offset, project, warnings_only, resource filters, app_namespace) are already documented in the schema. The description adds no parameter syntax or interaction detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get Kubernetes events for an application') plus two distinguishing behaviors: newest-first ordering and 500-char message cap. It does not explicitly contrast with siblings like argocd_get_pod_logs or argocd_get_resource, but no other sibling serves events, so ambiguity is low.
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?
Usage is only implied by the purpose statement; there is no explicit when-to-use, when-not-to-use, or routing to an alternative (e.g. pod logs vs application events). The agent can infer intent but gets no decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_application_historyArgocd Get Application HistoryBRead-onlyIdempotent
Get deployment history (newest first) with revision, who deployed it, and the source.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, read-only operation, so the safety profile is covered. The description usefully adds result ordering (newest first) and the returned fact set, but says nothing about paging behavior or volume despite limit/offset parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the operation and then lists the returned fields and ordering. Nothing is redundant, though it is arguably terse enough to leave gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paged history lookup with a fully documented schema and no output schema, the description covers what the tool returns and its ordering. The main omissions are guidance on paging and on choosing this over adjacent history/event tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (name, limit, offset, project, app_namespace) are already documented in the schema, including the 404/403 semantics for project. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get deployment history for an application) and even summarizes the payload: revision, who deployed, and the source, ordered newest first. It is clearly separable from siblings like argocd_get_application_events or argocd_get_revision_metadata, though it never explicitly names those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives. An agent must infer that this is for historical deployment inspection rather than current state, and nothing tells it whether to prefer this over argocd_get_application_events or argocd_get_operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_applicationsetArgocd Get ApplicationsetARead-onlyIdempotent
Get one ApplicationSet: generators, strategy, and the status of the apps it generates.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw API payload instead of the slim one | |
| name | Yes | ApplicationSet name | |
| appset_namespace | No | ApplicationSet namespace | |
| include_template | No | Include the full spec.template | |
| include_applications | No | Include generated app statuses |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful content context by naming the returned fields, but says nothing about the effect of the full/include_template/include_applications flags or namespace defaulting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence that front-loads the action and resource and packs the return contents without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partially compensates by summarizing the returned shape (generators, strategy, generated-app statuses), and annotations cover safety. It is adequate for a read-only getter, though it does not explain how the include flags alter the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all five parameters, so the schema fully documents name, namespace, full, include_template, and include_applications. The description adds no syntax or defaulting detail beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one ApplicationSet') and enumerates what is returned (generators, strategy, generated-app status), which distinguishes it from the list and generate siblings. It does not explicitly name an alternative tool, so it stops short of a 5.
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?
'Get one' implies single-resource retrieval as opposed to argocd_list_applicationsets, but there is no explicit when-to-use/when-not guidance and no pointer to a sibling such as argocd_generate_applicationset. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_clusterArgocd Get ClusterARead-onlyIdempotent
Get one cluster by name or server URL. The credential config is always removed, even with full=True.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw API payload instead of the slim one | |
| cluster | Yes | Cluster name, or server URL (starts with http) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld, so the bar is lower, and the description adds a genuinely useful non-obvious behavior: the credential config is always stripped, even with full=True. That is a security-relevant disclosure the annotations do not provide. It omits any note on error behavior when the cluster is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the primary lookup behavior front-loaded and the credential caveat second. Nothing can be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only two-parameter get tool with no output schema and annotations already declaring the safety profile, the definition covers the essential call path and its most surprising side effect. A brief note on the returned shape or not-found behavior would make it fully complete.
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%, so both parameters are already documented, and the baseline is 3. The description mildly reinforces the 'cluster' identifier semantics and clarifies that full=True does not restore credentials, but adds no syntax or format detail 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?
States a specific verb (Get) and resource (one cluster) plus the lookup key (name or server URL), which clearly separates it from the sibling argocd_list_clusters that returns many. It does not name the sibling explicitly, so it stops short of a 5.
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?
Usage is implied: 'Get one cluster by name or server URL' tells the agent this is the single-cluster lookup path, and the sibling naming list makes the alternative evident. But there is no explicit when-to-use/when-not statement or prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_managed_resourcesArgocd Get Managed ResourcesARead-onlyIdempotent
Get managed resources with their live-vs-desired diffs (truncated by default).
include_states adds the parsed target, normalized-live, and predicted-live manifests with managedFields stripped.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter by kind | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| group | No | Filter by API group | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| version | No | Filter by API version | |
| namespace | No | Filter by namespace | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| modified_only | No | Only resources with a live-vs-desired diff | |
| resource_name | No | Filter by resource name | |
| include_states | No | Include parsed target/live/predicted states | |
| max_diff_chars | No | Truncate each diff to this many chars |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description still adds real behavioral value: default truncation of diffs and the side effect that include_states injects parsed target/normalized-live/predicted-live manifests with managedFields stripped, which is not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the core behavior (diff retrieval, truncated by default) is front-loaded before the include_states elaboration. Slightly dense/technical but every clause earns its 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?
With 11 parameters, no output schema, and only 1 required parameter, the description covers the key output-shaping flags but says nothing about the overall return structure, the effect of the sibling filter parameters, or how results are paged/limited. Adequate given the 100% schema coverage and read-only annotations, but not complete.
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%, so the baseline is 3, but the description meaningfully elaborates on include_states beyond the schema's terse 'Include parsed target/live/predicted states' by explaining the manifests added and that managedFields are stripped, and confirms the diff-truncation semantics behind max_diff_chars.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get managed resources') plus the salient output characteristic (live-vs-desired diffs, truncated by default). It is clear what the tool returns, though it never names or contrasts with overlapping siblings such as argocd_get_resource_tree, argocd_get_resource, or argocd_get_manifests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no mention of alternative tools for inspecting application resources. The only implicit context is that diffs are truncated by default and include_states expands output, which hints at usage but does not guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_manifestsArgocd Get ManifestsBRead-onlyIdempotent
Get the rendered desired manifests for a revision, parsed into objects and paged.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Client-side kind filter | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| revision | No | Revision to render | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| resource_name | No | Client-side name filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful context beyond that: results are parsed into discrete objects and are paged. It stops short of describing error behavior, though the schema's 'project' field hints at 404/403 semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause ('rendered desired', 'for a revision', 'parsed into objects', 'paged') carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should carry more of the return-shape burden; 'parsed into objects' is helpful but the object structure and paging envelope remain unspecified. For an 8-parameter read tool this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 8 parameters, including non-obvious semantics for name (namespace/name form), project (404 vs 403), and app_namespace (ARGOCD_APP_NAMESPACE default). The description adds nothing parameter-level, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and a precisely scoped resource ('rendered desired manifests for a revision'), plus the output shape ('parsed into objects and paged'). This implicitly distinguishes it from live-state siblings like argocd_get_managed_resources or argocd_get_resource, though no sibling is named.
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 gives no when-to-use guidance, no exclusions, and never names an alternative (e.g. argocd_get_managed_resources for live objects, argocd_get_application for app metadata). An agent must infer the selection criteria from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_operationArgocd Get OperationARead-onlyIdempotent
Get the current or last sync operation: phase, who started it, and per-status result counts.
Returns {"phase": null} when no operation has run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| include_resources | No | Include the requested resource subset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds genuine value beyond that by disclosing the return shape and the empty-state behavior ('Returns {"phase": null} when no operation has run'), which is meaningful given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences, front-loaded with what is retrieved and followed by the exact empty-state return. No filler and every clause earns its 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 read-only getter with no output schema, the description supplies the essential return content and even the null edge case. It falls slightly short by omitting how it relates to sibling operation tools and any permission/error context, but nothing critical to invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters (name, project, app_namespace, include_resources) including their scoping and default semantics. The description adds nothing about them; baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Get the current or last sync operation') and enumerates what it returns (phase, initiator, per-status result counts). The purpose is unambiguous, though it never explicitly distinguishes itself from siblings like argocd_wait_for_operation or argocd_get_application_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives. An agent is left to infer that this is for inspecting an existing operation rather than waiting for one (argocd_wait_for_operation) or terminating one (argocd_terminate_operation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_pod_logsArgocd Get Pod LogsARead-onlyIdempotent
Get container logs (never follows). Returns lines with pod and timestamp, the pods seen, and a shown_lines count; stops at the stream's last marker.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Owner kind, e.g. Deployment | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| group | No | Owner API group | |
| filter | No | Only lines containing this string | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| pod_name | No | Pod name; or pass kind + resource_name | |
| previous | No | Logs from the previous container instance | |
| container | No | Container name | |
| namespace | No | Pod namespace | |
| match_case | No | Case-sensitive filter | |
| tail_lines | No | Lines from the tail (1-1000) | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| resource_name | No | Owner resource name | |
| since_seconds | No | Only logs newer than N seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/openWorld, but the description adds real behavioral value beyond them: it discloses the return shape (per-line pod + timestamp, pods seen, shown_lines count) and the termination behavior ('stops at the stream's last marker', never follows). That materially helps an agent interpret results and avoid expecting a live stream.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the verb and the most important constraint ('never follows'), then the return format. No filler; every clause earns its 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 14-parameter read tool with no output schema, the description usefully compensates by describing the returned structure and the stream-termination behavior, while annotations cover safety. What remains thin is routing/selection guidance, but the core call contract is complete.
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% across 14 well-described parameters, so the schema carries the semantics. The description adds no parameter-level meaning (nothing on filter, tail_lines, previous, since_seconds, or pod_name vs kind+resource_name selection), so baseline 3 applies.
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?
Clear specific verb+resource: 'Get container logs (never follows)'. The parenthetical immediately delimits scope (snapshot, not streaming). It does not explicitly distinguish from sibling tools, but no sibling in the list retrieves pod logs, so ambiguity is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance, no named alternatives, no prerequisites. The 'never follows' clause implies a non-streaming snapshot, but the agent is not told when this is preferable to any other log/observability path, nor what conditions select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_projectArgocd Get ProjectARead-onlyIdempotent
Get a project: allowed repos, destinations, resource whitelists/blacklists, and roles.
Role token values (jwtTokens) are never returned; only a token count.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw API payload instead of the slim one | |
| name | Yes | Project name | |
| include_roles | No | Include role definitions (never jwtTokens) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuine behavioral context beyond that: role token values (jwtTokens) are never returned, only a count. It stops short of noting error behavior for a missing project or any size/rate considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the returned-content summary front-loaded and the redaction caveat immediately after. No filler or restated boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what the response contains and flags the jwtTokens redaction, which is the main gotcha for this call. It is nearly sufficient for a read-only getter; only error/not-found behavior and the effect of 'full' are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — 'full' is documented as raw vs slim payload and 'include_roles' already carries the '(never jwtTokens)' note — so the schema does the heavy lifting. The description's token note reinforces but does not extend parameter meaning, and the 'full' parameter is not addressed in prose. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('a project') and enumerates the payload contents (allowed repos, destinations, whitelists/blacklists, roles), which is more than a restatement of the name. It does not explicitly distinguish itself from the sibling argocd_list_projects, though the get-vs-list contrast is inferable.
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 offers no when-to-use guidance, no prerequisites (e.g. permissions, existence of the project), and no routing to alternatives such as argocd_list_projects for enumeration. Usage is only inferred from the verb and required 'name' parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_repository_refsArgocd Get Repository RefsARead-onlyIdempotent
Get a repository's branches and tags, each paged separately with its own counts.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository URL | |
| limit | No | Max branches/tags per list (1-500) | |
| offset | No | Result offset for paging | |
| app_project | No | Project scope | |
| force_refresh | No | Bypass the cache |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds a genuinely useful behavioral detail beyond the annotations and schema: branches and tags are paged independently, each with its own counts, which changes how an agent should drive limit/offset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, and the non-obvious paging nuance is attached to it. Nothing is wasted and nothing essential is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, annotated tool with no output schema, the description covers purpose and the key paging behavior. It omits any indication of the response shape (e.g. whether counts are totals or page-local) and any permission/auth context, but these are minor omissions here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description earns an extra point by clarifying that the paging window applies separately to the branch list and the tag list. It adds no guidance on app_project scoping or force_refresh caching, which are covered only by 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?
States a specific verb (get) and resource (a repository's branches and tags), which separates it from sibling listing tools like argocd_list_repositories or argocd_list_repository_apps. It does not explicitly name a sibling, so it stops just short of a 5.
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 says what is returned but gives no when-to-use guidance, no prerequisites (e.g. that repo must be registered in Argo CD), and names no alternatives for retrieving revision information. The agent must infer the context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_resourceArgocd Get ResourceARead-onlyIdempotent
Get a single managed resource's live manifest, with managedFields and the last-applied annotation removed.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw API payload instead of the slim one | |
| kind | Yes | Resource kind, e.g. Deployment | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| group | No | API group ('' for core) | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| version | No | API version | v1 |
| namespace | No | Resource namespace | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| resource_name | Yes | Target resource name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds genuine behavioral detail the annotations do not: the returned payload is slimmed, with managedFields and the last-applied annotation stripped, which maps directly onto the `full` flag's tradeoff.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, and every clause earns its place by qualifying what the manifest is and how it has been modified.
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?
There is no output schema, so the description must convey the return shape, and it does so usefully (live manifest minus managedFields and last-applied). It omits error/empty behavior and pagination-irrelevant details, but those are handled by parameter descriptions for this single-object read.
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% across all 9 parameters, including edge-case behavior like project-driven 404/403 and namespace defaults, so the schema carries the burden. The description adds only indirect meaning to `full` via the mention of stripped fields; it documents no parameter syntax itself, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get), a precise resource (a single managed resource's live manifest), and the transformation applied to the output. It is clearly distinguishable in intent from manifest-listing siblings, though it never names an alternative to differentiate itself from argocd_get_manifests or argocd_get_managed_resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no conditions, and no named alternative among the many sibling getters (get_manifests, get_managed_resources, get_resource_tree). The reader must infer from 'live manifest' that this fetches the cluster-side object rather than the desired-state manifest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_resource_treeArgocd Get Resource TreeARead-onlyIdempotent
Get the live resource tree as slim nodes (kind, name, health, images, parent).
Drops networkingInfo, uid, and resourceVersion. Filters by kind and health client-side.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Client-side kind filter | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| include_info | No | Include each node's info[] entries | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| health_status | No | Client-side health filter | |
| include_orphaned | No | Include orphaned nodes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world behavior, so the safety profile is covered. The description adds valuable behavioral detail beyond that: which fields are dropped (networkingInfo, uid, resourceVersion) and that kind/health filtering is client-side. It does not mention pagination defaults, but the schema covers those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, front-loaded sentences: output shape first, then what is dropped, then filtering behavior. Every clause adds information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tree fetch with a full schema and no output schema, the description covers what the tool returns, what it omits, and the filtering model. The main missing piece is how it relates to the sibling managed-resources tool, but that is a usage-guideline gap rather than a completeness gap for calling 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?
Schema description coverage is 100%, so every parameter is already documented. The description reinforces that kind and health_status are client-side filters, which is a minor addition. Baseline 3 is appropriate since the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (live resource tree) and immediately characterizes the output as 'slim nodes (kind, name, health, images, parent)'. This distinguishes it from argocd_get_managed_resources and argocd_get_resource, which return different shapes.
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 implies usage by describing output shape and client-side filtering, but does not state when to pick this tool over argocd_get_managed_resources or argocd_get_resource. No explicit exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_revision_metadataArgocd Get Revision MetadataBRead-onlyIdempotent
Get commit metadata for a revision: author, date, message, tags, signature info.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| revision | Yes | Git revision or chart version | |
| version_id | No | History version id | |
| source_index | No | Source index for multi-source apps | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety/idempotency are covered by structured data. The description adds the set of returned fields, which is genuinely useful given no output schema exists, but says nothing about failure modes (e.g., invalid revision) or the effect of project/version_id on lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the most important information (what is fetched) leads. Slightly terse — it allocates no space to usage or behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with full schema coverage and annotations, the remaining need is knowing what comes back — and the description enumerates the returned fields, compensating for the absent output schema. Error behavior and revision-format expectations are the only notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the six parameters already documented (including the 404/403 semantics of project). The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('commit metadata for a revision') and enumerates the returned fields (author, date, message, tags, signature info). No sibling tool covers revision/commit metadata, so the boundary is implicitly clear, though it never names an alternative.
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 offers no when-to-use guidance, prerequisites, or alternatives — it only describes the payload. An agent gets no signal about when this is preferable to, say, argocd_get_application_history or argocd_get_manifests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_settingsArgocd Get SettingsARead-onlyIdempotent
Get server settings: URL, enabled features, tracking method, and plugin names.
Drops OIDC/Dex config and UI banner fields in the slim view.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw API payload instead of the slim one |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds genuine behavioral context by disclosing that the slim view intentionally drops OIDC/Dex config and UI banner fields, which tells the agent what data it will not receive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two crisp sentences, front-loaded with the primary purpose and then the slim-view caveat. 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?
No output schema exists, but the description enumerates the returned fields and explains the slim/full distinction, so an agent knows what it will get. It does not cover auth requirements or failure behavior, a minor gap for a read-only getter.
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% and the 'full' parameter is already described in the schema. The description nonetheless reinforces the semantics by contrasting the raw payload with the 'slim view' and the fields it omits, adding meaning beyond the schema's terse wording.
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 gives a specific verb ('Get') plus resource ('server settings') and enumerates the returned fields (URL, enabled features, tracking method, plugin names). This is clearly distinct from the cluster/repo/app-oriented siblings in substance, though it never names or contrasts an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no direction on when to prefer the slim view versus setting full=true. The agent is left to infer usage entirely from the field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_sync_windowsArgocd Get Sync WindowsARead-onlyIdempotent
Get sync windows for an application: whether it can sync now, plus active and assigned windows.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description usefully discloses the shape of the result (sync-now status, active windows, assigned windows), but says nothing about permissions, error behavior, or rate limits beyond what the schema notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the sync-now verdict precedes the enumeration of window sets, which is the right order for an agent scanning the text.
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?
There is no output schema, so the description takes on the job of hinting at the return contents, and it does so concisely. For a read-only lookup with fully documented parameters it is nearly complete, though it omits any note about what an empty or absent window set means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains 'name' (including namespace/name form) and the project/app_namespace semantics and their 403/404 implications. The description adds no parameter-level meaning, which is the expected baseline when the schema does the work.
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 names a specific verb (Get) and resource (sync windows) scoped to an application, and further specifies the content returned: whether it can sync now plus active and assigned windows. That distinguishes it from every sibling in the list, none of which deal with sync windows.
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 phrase 'whether it can sync now' implies the motivating use case (deciding or explaining sync eligibility), but the description never states when to prefer this over, say, argocd_get_application or argocd_sync_application, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_userinfoArgocd Get UserinfoARead-onlyIdempotent
Get the authenticated identity: username, groups, whether logged in, and the token issuer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety is covered. The description adds value beyond them by disclosing the actual return payload (username, groups, logged-in status, token issuer), which is meaningful since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause names a distinct returned field. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the burden of describing the response and does so adequately by listing the key fields. It does not mention error/auth-failure behavior, but for a simple read-only identity lookup this is minor.
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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The schema is empty and fully covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('the authenticated identity') and enumerates the returned fields, so the agent immediately knows this returns the caller's own user context. It is effectively unique among siblings, but it never explicitly contrasts itself with neighbors like argocd_can_i or argocd_get_settings, which also touch auth context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer it should call this when it needs to know who it is authenticated as, but there is no stated condition, prerequisite, or exclusion relative to alternatives. No guidance on when this is preferable to argocd_can_i for permission checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_get_versionArgocd Get VersionARead-onlyIdempotent
Get the Argo CD server version and its bundled tool versions. The connectivity probe.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety and repeatability are covered. The 'connectivity probe' framing adds modest context beyond that, but nothing is said about auth requirements or what the version payload looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, value front-loaded with the return content first and the probe framing second. Every phrase earns its place with no padding.
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 no-parameter read tool with no output schema, the description says what it returns (server version plus bundled tool versions) and when it is useful. It is nearly self-sufficient; only the response shape remains unspecified, which is minor given the tool's simplicity.
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 takes zero parameters, so there is nothing for the description to clarify and the baseline is 4. No parameter detail is expected or needed here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the Argo CD server version') plus the payload ('its bundled tool versions'). No sibling in the list retrieves version information, so the agent can distinguish it immediately from get_settings, get_userinfo, and the rest.
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 connectivity probe.' gives a clear situational context for calling it — as a lightweight liveness/connectivity check. It does not name alternatives or exclusions, but no sibling overlaps, so there is little to route away from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_invalidate_cluster_cacheArgocd Invalidate Cluster CacheAIdempotent
Invalidate a cluster's cached resources — the standard fix for phantom OutOfSync or Unknown health. Removes nothing real.
| Name | Required | Description | Default |
|---|---|---|---|
| cluster | Yes | Cluster name, or server URL (starts with http) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-readOnly, idempotent, non-destructive operation. 'Removes nothing real' adds genuine value by reconciling the apparent write (readOnlyHint=false) with destructiveHint=false and reassuring the agent that the cache drop is safe and repeatable. It doesn't mention scope (whole cluster vs. one app) or any auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the effect front-loaded before the corrective guidance. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and annotations covering the safety profile, this is nearly complete — the symptom it fixes and its harmlessness are both stated. A note on scope or the expected result (e.g., subsequent refresh behavior) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'cluster' parameter already documents the name-or-server-URL format. The description adds no parameter detail beyond the schema, so the baseline 3 applies.
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?
Specific verb (invalidate) plus resource (cluster's cached resources) that no sibling shares — the other tools read or mutate applications/clusters directly, none invalidate cache. An agent can distinguish this from argocd_get_cluster or argocd_sync_application immediately.
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?
States the trigger condition explicitly: 'the standard fix for phantom OutOfSync or Unknown health.' That tells an agent when to reach for it, but no alternatives are named and no exclusion (e.g., don't use when the app genuinely is OutOfSync) is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_list_applicationsArgocd List ApplicationsARead-onlyIdempotent
List applications with slim rows (name, project, sync/health, source, destination, policy).
Filters sync_status, health_status, destination, and name_prefix client-side; the Argo CD list endpoint has no paging, so results are sorted by name and sliced here.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filter by source repo URL | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| projects | No | Filter by project names | |
| selector | No | Label selector, e.g. team=platform | |
| destination | No | Match destination.server or destination.name | |
| name_prefix | No | Client-side name prefix filter | |
| sync_status | No | Filter by sync status | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| health_status | No | Filter by health | |
| dest_namespace | No | Match destination namespace | |
| operation_phase | No | Filter by current operation phase |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, so the safety profile is covered. The description goes beyond them by disclosing that the upstream list endpoint has no paging, that results are sorted by name and sliced locally to satisfy limit/offset, and that four filters run client-side — non-obvious latency and result-ordering behavior an agent should know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads what is returned, the second carries the behavioral caveats. No filler, and the most decision-relevant fact (slim output shape) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by naming the returned fields. Combined with the client-side filtering and slicing notes, an agent has enough to call it correctly; only the interaction between defaults (limit 50 / offset 0) and the name-sorted slice is left implicit.
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%, so the baseline is 3, but the description adds a distinction the schema does not: sync_status, health_status, destination, and name_prefix are applied client-side rather than server-side. That is real semantic value about filter cost and correctness beyond the per-parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('List applications') plus an enumeration of the returned row shape (name, project, sync/health, source, destination, policy), which is unusual and useful detail. It is trivially distinguished from singletons like argocd_get_application or argocd_list_repository_apps by its 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 implies the tool's role (filtered bulk listing) but never states when to prefer it over siblings such as argocd_get_application for a single app or argocd_list_repository_apps for a repo view. No exclusions or prerequisites are given, so usage is only inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_list_applicationsetsArgocd List ApplicationsetsARead-onlyIdempotent
List ApplicationSets with slim rows (generators present, strategy, health, conditions).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| projects | No | Filter by project names | |
| selector | No | Label selector | |
| appset_namespace | No | ApplicationSet namespace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, openWorld=true, so safety is covered. The description adds that rows are 'slim' and names the included fields (generators, strategy, health, conditions), which is useful. It doesn't mention pagination behavior or default limit effect beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence, field list front-loaded, zero padding.
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 read-only list tool with a fully documented schema and no output schema, the description is minimally adequate. It omits what happens with pagination, the default limit of 50, and what 'conditions' looks like, but annotations carry the safety profile.
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%, so every parameter is already documented. The description does not add syntax or semantics for projects/selector/namespace filtering beyond naming them indirectly. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (ApplicationSets), and names the sibling it differs from implicitly via 'slim rows' vs get_applicationset's detail. An agent can tell this is a list/discovery operation distinct from argocd_get_applicationset.
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?
Usage is implied by 'List' and the slim-row framing, but the description never explicitly says when to use this vs argocd_get_applicationset or argocd_generate_applicationset. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_list_clustersArgocd List ClustersARead-onlyIdempotent
List clusters with slim rows (connection state, server version, app and cache counts).
The cluster credential config is never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by cluster name | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| server | No | Filter by server URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds a genuinely useful behavioral fact beyond the structured fields: the cluster credential config is never returned, which tells the agent not to hunt for secrets here. It does not discuss pagination limits or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The positive capability is stated first and the exclusion follows, which is a sensible front-loaded order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and flags the one thing that is withheld. Annotations cover the safety profile and the schema covers all parameters, so the definition is nearly self-sufficient, though it omits paging behaviour for a defaulted limit/offset pair.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, server, limit and offset are all documented in the schema itself. The description adds no filter syntax, matching rules, or paging guidance beyond that, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List clusters') and goes further by naming the shape of each row (connection state, server version, app and cache counts). It does not explicitly contrast with the sibling argocd_get_cluster, though 'slim rows' implies that a fuller single-cluster view lives elsewhere.
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?
Usage is implied by the verb and the 'slim rows' framing, which suggests reaching for argocd_get_cluster when full detail is needed. There is no explicit when-to-use statement, no mention of when this is preferable to the sibling tools, and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_list_projectsArgocd List ProjectsBRead-onlyIdempotent
List projects with slim rows (repo/destination counts, role names, sync-window count).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter to one project name | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so the safety profile is covered. The description adds the useful detail that returned rows are a 'slim' projection with counts rather than full project objects, which is genuine extra context, though it says nothing about pagination defaults or result caps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no waste, front-loaded with the verb and resource and the row-shape detail appended. Appropriately sized for a simple list tool.
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?
There is no output schema, so the description does carry some burden for describing returns, and it partially discharges that with the 'slim rows' preview. However, it omits pagination behavior and the fact that name filters to a single project, leaving an agent to infer these from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with name, limit, and offset each documented inline including the 1-200 bound on limit. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (projects), and the parenthetical previews the row shape (repo/destination counts, role names, sync-window count). It is clearly distinguishable from argocd_get_project by the listing scope, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus argocd_get_project (single project) or the many other list_* siblings. Nothing about filtering by name, paging, or when the slim projection is preferable. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_list_repositoriesArgocd List RepositoriesARead-onlyIdempotent
List repositories with slim rows and connection state. Credentials are never returned; has_credentials reports whether any are configured.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filter by repo URL | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| app_project | No | Filter by project | |
| force_refresh | No | Re-check connection state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so safety is covered. The description adds genuinely new context: credentials are never returned, and has_credentials signals whether any exist, which is security-relevant output semantics not present in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences; the return-shape fact is front-loaded and the credential constraint follows immediately. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully characterizes the response (slim rows, connection state, has_credentials) and the credential exclusion. Paging behavior and the distinction from repository-adjacent siblings remain unaddressed, but the essential call information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (repo, limit, offset, app_project, force_refresh) are already documented in the schema. The description adds no filtering, paging, or refresh semantics beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List repositories') and adds scope detail: 'slim rows and connection state'. An agent knows exactly what the tool returns at a high level. It stops short of naming or distinguishing itself from repo-related siblings like argocd_get_repository_refs or argocd_list_repository_apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the repository-adjacent siblings, and no prerequisites or exclusions stated. Usage is only inferable from the tool name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_list_repository_appsArgocd List Repository AppsBRead-onlyIdempotent
List the application paths (and their config type) discoverable in a repository.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository URL | |
| limit | No | Max results to return (1-200) | |
| offset | No | Result offset for paging | |
| revision | No | Revision to inspect | |
| app_project | No | Project scope |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safe-read profile is covered. The description adds that results are application paths with their config type, which tells the agent roughly what comes back, but says nothing about pagination or repository access requirements despite the openWorldHint network call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the list action and scope front-loaded and zero filler. Nothing could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema the description carries some burden for describing returns, and it only gestures at the result shape (paths plus config type) without saying how revision/app_project filtering affects results. For a 5-parameter discovery tool it is adequate but leaves clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (repo, limit, offset, revision, app_project) are already documented in the schema. The description adds no syntax, format or scoping detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("List") and resource ("application paths ... discoverable in a repository"), and notes the config-type detail returned. It implicitly separates itself from sibling list tools like argocd_list_repositories (repos, not apps within a repo), but never makes that distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. credential/repo access requirements), and no routing to alternatives such as argocd_list_repositories or argocd_get_repository_refs. The agent must infer the discovery use case on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_list_resource_actionsArgocd List Resource ActionsBRead-onlyIdempotent
List the custom resource actions available on a resource (e.g. restart, pause).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Resource kind, e.g. Deployment | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| group | No | API group ('' for core) | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| version | No | API version | v1 |
| namespace | No | Resource namespace | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| resource_name | Yes | Target resource name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds nothing behavioral beyond what the annotations and name provide — no note on auth requirements, whether the listed actions carry argument schemas, or error behavior when the resource doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource, the verb and illustrative examples; no filler and nothing that could be cut without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, no output schema and a read-only list operation, the description is marginally adequate but leaves the return shape (bare action names vs. actions with parameters) and the relationship to argocd_run_resource_action unstated. Since no output schema exists, the description should carry more of that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 8 parameters, including the non-obvious project/app_namespace ones, so the schema does the heavy lifting and the description adds no parameter detail. Baseline 3 is correct for a fully-documented 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 pairs a specific verb ('List') with a specific resource ('custom resource actions available on a resource') and gives concrete examples (restart, pause), so an agent knows exactly what comes back. It does not, however, explicitly distinguish itself from the sibling argocd_run_resource_action, which is the obvious adjacent tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no routing to alternatives such as argocd_run_resource_action. Usage is only implied by the verb 'List' — an agent must infer that this is the discovery step before running an action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_patch_applicationArgocd Patch ApplicationAIdempotent
Patch an application — the one tool for every update.
Examples: change targetRevision with patch='{"spec":{"source":{"targetRevision":"v2"}}}'; disable auto-sync with patch='{"spec":{"syncPolicy":{"automated":null}}}'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| patch | Yes | JSON patch body | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| patch_type | No | merge (RFC 7386) or json (RFC 6902) | merge |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds no behavioral context beyond that — no mention of permissions, partial-failure semantics, or what a failed patch returns. Adequate but not additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, front-loaded with the purpose before the payload examples. Every clause earns its 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?
With full schema coverage, annotations covering the safety profile, and no output schema to explain, the description supplies the missing payload guidance. It could go further on merge-vs-json patch implications, but nothing essential for calling the tool is absent.
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%, so the baseline is 3, but the description earns extra credit by supplying concrete patch payload examples for the required 'patch' string parameter — exactly the kind of syntax the schema's 'JSON patch body' line does not convey. This is genuine value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Patch an application') and adds the routing phrase 'the one tool for every update', which distinguishes it from create/delete/sync/rollback siblings. It stops short of naming a specific sibling, but the scope claim is clear.
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 phrase 'the one tool for every update' plus two concrete examples (change targetRevision, disable auto-sync) give a clear sense of when to reach for this tool. No explicit when-not or negative routing is provided, so it isn't a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_rollback_applicationArgocd Rollback ApplicationADestructive
Roll back to a prior deployment history entry. destructive.
Argo CD refuses a rollback while auto-sync is on, so this pre-reads the app and returns an actionable error first. A rollback re-applies an old revision, so fix Git afterward.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| wait | No | Wait for the operation to finish | |
| prune | No | Prune resources during rollback | |
| dry_run | No | Preview only | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| history_id | Yes | status.history id to roll back to | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| timeout_seconds | No | Wait timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation: it discloses that the tool pre-reads the app and returns an actionable error before failing, and warns that Git is left diverged after the re-apply. These are non-obvious behaviors an agent can't get from the annotations or schema.
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?
Three short sentences, zero waste, front-loaded with the core action and its destructive nature. Each sentence earns its place by adding a distinct constraint or warning.
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 destructive mutation with full annotation coverage and a fully documented 8-param schema, the description covers the key failure mode and side effect. It omits what a successful rollback returns, but with a rich schema and safety annotations this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters (including wait, prune, dry_run, project, timeout_seconds) are already documented in the schema. The description implies the history_id target but adds no syntax or semantics beyond the structured fields, so the baseline 3 applies.
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?
Clear verb+resource: 'roll back to a prior deployment history entry' precisely names the action and the target, with 'destructive' flagged up front. It is distinguishable from siblings like sync_application conceptually, but no sibling is named to make the routing explicit.
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?
Provides a real precondition/exclusion: rollback is refused while auto-sync is on, and gives the post-rollback remedy ('fix Git afterward'). Clear context, though it never names an alternative tool for the auto-sync case, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_run_resource_actionArgocd Run Resource ActionCDestructive
Run a custom resource action (restart a Deployment, pause a Rollout). destructive.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Resource kind, e.g. Deployment | |
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| group | No | API group ('' for core) | |
| action | Yes | Action name, e.g. restart | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| version | No | API version | v1 |
| namespace | No | Resource namespace | |
| parameters | No | Action parameters | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| resource_name | Yes | Target resource name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true; the trailing word 'destructive' merely repeats a structured field rather than adding context. With annotations present the bar is lower, but nothing is said about what state is destroyed, whether actions are reversible, required permissions, or side effects on the running workload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the verb and scope front-loaded and zero filler. It is efficient, though the terseness leaves gaps that concision was traded against.
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 10-parameter mutation with no output schema, the description is thin: it does not indicate that name/action/kind/resource_name are all required, nor that the action must exist for the target kind. The annotations do carry the safety profile, and the schema is fully documented, so the gap is moderate rather than severe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, and the baseline is 3. The parenthetical examples loosely connect kind/action pairs ('restart' with Deployment, 'pause' with Rollout), which adds marginal mapping value, but nothing is said about how the free-form 'parameters' object should be populated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Run) and resource (custom resource action) and grounds it with two concrete examples (restart a Deployment, pause a Rollout). It does not, however, explicitly separate itself from the sibling argocd_list_resource_actions, which is the natural point of confusion for an agent picking between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. An agent is not told to check argocd_list_resource_actions first to discover valid action names, nor what preconditions (sync state, app health) must hold for an action to succeed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_sync_applicationArgocd Sync ApplicationADestructive
Sync an application. destructive because prune and force can delete or recreate resources.
Returns the started operation; with wait=True, the final one. revision override needs the
applications, override RBAC permission.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| wait | No | Wait for the operation to finish | |
| force | No | Force apply (recreate on conflict) | |
| prune | No | Delete resources no longer in Git | |
| dry_run | No | Preview only; change nothing | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| revision | No | Sync to this revision (needs override RBAC) | |
| resources | No | Scope to [group:]kind:name[/namespace] selectors | |
| retry_limit | No | Retry attempts on failure | |
| sync_options | No | Free-form sync options, e.g. ServerSideApply=true | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| timeout_seconds | No | Wait timeout in seconds | |
| apply_out_of_sync_only | No | Apply only out-of-sync resources |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description goes further by naming what actually causes destruction (prune deletes resources no longer in Git, force recreates on conflict) and the authorization requirement for revision overrides. It also discloses return behavior (started operation vs. final with wait=True), which is meaningful for a long-running mutation.
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?
Three short, front-loaded sentences with no filler: purpose first, then the destruction rationale, then return/RBAC notes. Every sentence carries information not present elsewhere.
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 13-parameter mutating tool with no output schema, the description covers the essential risks, return semantics, and one key permission gate, and annotations cover the safety profile. It stops short of describing error behavior or how dry_run interacts with wait, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 13 parameters, including the override-RBAC note on revision and the wait flag. The description's added value is limited to clarifying the wait return semantics, which is helpful but marginal; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sync an application'), which is clear and distinguishes it from read-oriented siblings like argocd_get_application or argocd_list_applications. It does not explicitly name the nearest mutating siblings (argocd_rollback_application, argocd_terminate_operation) to disambiguate when sync vs rollback is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It flags the destructive conditions ('prune and force can delete or recreate resources') and the RBAC prerequisite for revision overrides, which implies usage context. However, there is no explicit when-to-use vs alternatives guidance (e.g., use dry_run to preview, or argocd_wait_for_operation to poll) and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_terminate_operationArgocd Terminate OperationADestructiveIdempotent
Terminate the running sync operation. Use to unstick a sync hanging in Running.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is largely covered. The description adds the operational scenario (hung sync) but does not disclose what termination does to in-flight resources or partial sync state — useful context that annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action introduced first and the usage hint immediately after. Every sentence earns its 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?
With annotations carrying the safety profile, a complete schema, and no output schema, the description covers the essentials for a straightforward terminate call. It could still note the resulting application state after termination, but nothing blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, project, and app_namespace are fully documented in the schema, including the 404/403 semantics for project and the ARGOCD_APP_NAMESPACE default. The description adds nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Terminate the running sync operation"), which is clearly distinct from siblings like argocd_sync_application, argocd_rollback_application, and argocd_wait_for_operation. It stops short of explicitly naming the closest sibling (wait_for_operation) to sharpen the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete triggering condition: "Use to unstick a sync hanging in Running." That is a clear when-to-use signal, but it names no alternatives or when-not-to-use cases (e.g., what to do with a healthy running sync).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
argocd_wait_for_operationArgocd Wait For OperationARead-onlyIdempotent
Poll an application until its operation reaches a terminal phase, disappears, or times out.
Never errors on timeout; returns timed_out=true with the latest operation, sync, and health.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name; accepts namespace/name for apps-in-any-namespace | |
| project | No | Project; with it a missing app is 404 and a wrong-project app is 403 | |
| app_namespace | No | Override appNamespace; defaults to ARGOCD_APP_NAMESPACE | |
| timeout_seconds | No | Give up after N seconds (10-600) | |
| poll_interval_seconds | No | Seconds between polls (1-30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the description earns credit for going further: it discloses that timeouts never surface as errors and that the response carries timed_out=true with the latest operation, sync, and health. That error-semantics disclosure is exactly the kind of behavior annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The terminating behavior is front-loaded and the non-obvious timeout guarantee is stated immediately after, with nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by naming the returned fields (operation, sync, health) and the timed_out flag, plus the terminal-phase semantics. It stops short of enumerating which phases count as terminal, which would be the last missing piece for an agent interpreting the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (name, project, app_namespace, timeout_seconds, poll_interval_seconds) is already documented with ranges and defaults in the schema. The description's mention of 'timed out' loosely ties to timeout_seconds but adds no format, interaction, or defaulting detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (poll an application's operation) along with the three termination conditions: terminal phase, disappearance, or timeout. This is clearly distinct from a one-shot read like argocd_get_operation, though it never names that sibling explicitly to close the loop.
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?
Usage is only implied: an agent must infer that this is the tool to call after triggering argocd_sync_application, argocd_rollback_application, or argocd_run_resource_action in order to block on completion. There is no explicit when-to-use, when-not-to-use, or named alternative such as argocd_get_operation for non-blocking checks.
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.
37 tool updates
v0.4.0- Changed
argocd_can_i1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_create_application1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_delete_application3 fields changed- changed
Input schema / properties / propagation_policy / descriptionPrevious value: -"Kubernetes deletion propagation policy"New value: +"Kubernetes deletion propagation policy (cascade deletes only)" - changed
Input schema / properties / propagation_policy / enumPrevious value: -[ - "foreground", - "background", - "orphan" -]New value: +[ + "foreground", + "background" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_delete_resource1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_generate_applicationset1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_application1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_application_events1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_application_history1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_applicationset1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_cluster1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_managed_resources1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_manifests1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_operation1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_pod_logs3 fields changed- changed
Input schema / properties / tail_lines / descriptionPrevious value: -"Lines from the tail (0-1000)"New value: +"Lines from the tail (1-1000)" - changed
Input schema / properties / tail_lines / minimumPrevious value: -0New value: +1 - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_project1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_repository_refs1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_resource1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_resource_tree1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_revision_metadata1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_settings1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_sync_windows1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_userinfo1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_get_version1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_invalidate_cluster_cache1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_list_applications1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_list_applicationsets1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_list_clusters1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_list_projects1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_list_repositories1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_list_repository_apps1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_list_resource_actions1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_patch_application1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_rollback_application1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_run_resource_action1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_sync_application1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_terminate_operation1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
argocd_wait_for_operation1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
37 tool updates
v0.1.0- First observed
argocd_can_i - First observed
argocd_create_application - First observed
argocd_delete_application - First observed
argocd_delete_resource - First observed
argocd_generate_applicationset - First observed
argocd_get_application - First observed
argocd_get_application_events - First observed
argocd_get_application_history - First observed
argocd_get_applicationset - First observed
argocd_get_cluster - First observed
argocd_get_managed_resources - First observed
argocd_get_manifests - First observed
argocd_get_operation - First observed
argocd_get_pod_logs - First observed
argocd_get_project - First observed
argocd_get_repository_refs - First observed
argocd_get_resource - First observed
argocd_get_resource_tree - First observed
argocd_get_revision_metadata - First observed
argocd_get_settings - First observed
argocd_get_sync_windows - First observed
argocd_get_userinfo - First observed
argocd_get_version - First observed
argocd_invalidate_cluster_cache - First observed
argocd_list_applications - First observed
argocd_list_applicationsets - First observed
argocd_list_clusters - First observed
argocd_list_projects - First observed
argocd_list_repositories - First observed
argocd_list_repository_apps - First observed
argocd_list_resource_actions - First observed
argocd_patch_application - First observed
argocd_rollback_application - First observed
argocd_run_resource_action - First observed
argocd_sync_application - First observed
argocd_terminate_operation - First observed
argocd_wait_for_operation
TDQS
Scored across 37 tools
Most tools have a clearly distinct resource+action target, and the read-heavy application tools (get_application, get_resource_tree, get_managed_resources, get_resource, get_manifests) are separated by descriptions explaining live vs desired vs single-resource scope. The only mild risk is confusion between the managed-resource/rendered-manifest readers and between list_applicationsets/get_applicationset, but the wording disambiguates them adequately.
Every tool follows the same argocd_verb_noun snake_case pattern (argocd_list_applications, argocd_get_application, argocd_patch_application, argocd_delete_resource). Exceptions like argocd_can_i and argocd_get_version still fit the prefix+verb convention, so the surface is highly predictable.
37 tools is heavy and above the comfortable band, but Argo CD is a genuinely broad domain (clusters, repos, projects, ApplicationSets, applications, resources, logs, operations) and most tools map to a distinct operation rather than duplicating each other. A few informational tools (get_version, get_settings, get_userinfo, can_i) could plausibly be consolidated, so it sits at the borderline rather than being well-scoped.
Application lifecycle is well covered (list/get/create/patch/delete plus sync, rollback, terminate, history, logs, events), and per-resource actions and deletion exist. However, there is no create/update/delete for projects, clusters, repositories, or ApplicationSets (generate_applicationset is dry-run only), leaving notable management gaps for a server whose stated scope spans those entities.
Maintenance
Related MCP Connectors
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Operate GitHub from your AI assistant: repos, PRs, issues, Actions. Previews and read-only mode.
Read and write KukGit repositories, files, issues and pull requests from an AI assistant.
Fail-closed policy guardrails for AI agents running kubectl, terraform, helm, and argocd.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with ArgoCD APIs through standardized MCP tools for managing applications, resources, and deployments.MIT
- AlicenseAqualityBmaintenanceSafety-first GitOps operations for ArgoCD via the Model Context Protocol. Enables listing, diagnosing, syncing, and managing ArgoCD applications with progressive disclosure and defense-in-depth security.15Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Argo CD applications, managing clusters, applications, and resources through natural language.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with Argo CD applications through natural language, providing tools for cluster, project, application, and resource management via stdio and HTTP transports.Apache 2.0