Skip to main content
Glama
peopleforrester

ArgoCD MCP Server

ArgoCD MCP Server: a safety layer between an AI agent and a GitOps cluster

ArgoCD MCP Server

Give an AI agent real operational control of your production GitOps cluster, without giving it the ability to quietly delete it. Read-only by default, dry-run on every write, and destructive operations that make you type the application name twice.

CI License Python MCP Code style: ruff Type checked: mypy Pre-commit


At a Glance

Where to check

15 tools, 3 safety tiers

9 read, 4 write, 2 destructive

src/argocd_mcp/tools/

272 tests

250 unit, 22 integration against a real ArgoCD on Kind

tests/

96% line coverage

CI fails the build below 80%

pyproject.toml

Python 3.11 – 3.14

every version exercised on each push

.github/workflows/ci.yml

The integration suite is not mocked: CI stands up a Kind cluster, installs ArgoCD, and drives the real API, including the delete and prune paths.


Related MCP server: argocd-mcp

Why This Exists

"95% of MCP servers are garbage."

We built this because we were tired of:

The Empty Error Message Problem. You sync an app. It fails. The error? "Sync failed." Thanks, very helpful. Meanwhile, the actual cause is buried across three different Kubernetes events, two pod logs, and a misconfigured HPA that nobody told you about. Our diagnose_sync_failure tool aggregates all of that into one coherent analysis.

The "Oops, I Deleted Production" Problem. Most MCP servers treat every operation the same. Read a deployment? Same as deleting a namespace! We implement defense-in-depth: read-only by default, writes require explicit opt-in, destructive operations require typing the resource name twice. Because at 3 AM, you don't need an LLM with root access to your production cluster.

The YAML Fatigue Problem. When you have 47 applications across 12 clusters, the ArgoCD UI becomes a slideshow. We built this for SREs who live in terminals and need answers fast: "What's broken in prod?" should return an answer, not a loading spinner.

The Context Window Problem. MCP servers that dump entire manifests into the context are doing it wrong. We use progressive disclosure: simple status first, details on request, full manifests only when you explicitly ask. Your context window is precious real estate.


Quick Demo

Illustrative example — the conversation below is a hand-written demonstration of how an agent would use these tools, not a transcript of a real session. Tool names, parameters, and responses match what the server actually returns; the surrounding chat is for illustration only.

You: What applications are failing in production?

Claude: Let me check the production applications for you.

[calls list_applications(health_status="Degraded", project="prod")]

Found 2 application(s):

- payment-service [prod] health=Degraded sync=OutOfSync dest=payments@https://prod.k8s...
- notification-api [prod] health=Degraded sync=Synced dest=notifications@https://prod.k8s...

The payment-service is both unhealthy AND out of sync. Want me to diagnose what's wrong?
You: Why is payment-service broken?

Claude: I'll run a full diagnosis.

[calls diagnose_sync_failure(name="payment-service")]

Diagnosis for 'payment-service':

Found 4 issue(s):
  - Application is out of sync (revision: abc123f)
  - [SyncError] Failed to sync: resource payment-deployment: container crashed
  - Image pull failed: ImagePullBackOff for payments:v2.3.1
  - Found 2 unhealthy resources in resource tree
    - Deployment/payment-deployment: Container crashloopbackoff
    - Pod/payment-deployment-7f8b9-x2k4j: CrashLoopBackOff

Suggestions:
  - Verify image exists and registry credentials are configured
  - Check pod logs for application startup errors
  - Run get_application_diff to see pending changes

The image tag v2.3.1 doesn't seem to exist. Can you verify it was pushed to the registry?
You: Show me what would change if I sync it

Claude: [calls get_application_diff(name="payment-service")]

Diff for application 'payment-service':

Resources to UPDATE (3):
  ~ Deployment/payment-deployment
  ~ ConfigMap/payment-config
  ~ Service/payment-service

Resources in sync: 12

The sync would update the deployment (probably the image tag fix), update the
config, and touch the service. Want me to run the sync?
You: Yes, sync it

Claude: [calls sync_application(name="payment-service", dry_run=false)]

Sync initiated for 'payment-service'
Revision: HEAD
Prune: false

Use get_application_status to monitor progress.

I'll check the status in a moment to confirm it's progressing.

Philosophy

Progressive Disclosure

Not everything needs to be visible all the time. We tier our tools:

Tier

Access

Examples

Tier 1

Always available

list_applications, get_application_status, diagnose_sync_failure

Tier 2

Requires MCP_READ_ONLY=false

sync_application, refresh_application

Tier 3

Requires confirmation + typing name

delete_application, sync_application_with_prune

This isn't bureaucracy. This is respecting that production systems deserve more friction than rm -rf /.

Dry-Run by Default

Every write operation defaults to preview mode. You have to explicitly say "yes, really do this" before anything changes. We learned this lesson from too many "I thought that was staging" incidents.

Agent-Friendly Error Messages

# Bad (what most tools return)
Error: exit status 1

# Good (what we return)
ArgoCD API error (403): Application payment-service not found in project 'default'

Suggestions:
  - Check if application exists: list_applications(project="prod")
  - Verify you have access to the target project

Errors should tell you what went wrong AND what to try next.


Quick Start

Installation

# Clone the repository
git clone https://github.com/peopleforrester/mcp-k8s-observability-argocd-server
cd mcp-k8s-observability-argocd-server

# Install with uv
uv sync

Claude Desktop / Claude Code Configuration

Add to your Claude configuration (~/.claude.json for Claude Code):

{
  "mcpServers": {
    "argocd": {
      "type": "stdio",
      "command": "/path/to/uv",
      "args": [
        "run",
        "--directory",
        "/path/to/mcp-k8s-observability-argocd-server",
        "argocd-mcp"
      ],
      "env": {
        "ARGOCD_URL": "https://argocd.example.com",
        "ARGOCD_TOKEN": "your-api-token",
        "ARGOCD_INSECURE": "false"
      }
    }
  }
}

Note: Replace /path/to/uv with the full path to your uv binary (run which uv to find it).

See examples/ for more configuration options including multi-cluster setups.

Docker

# Build the image
docker build -t argocd-mcp-server .

# Run with environment variables
docker run -e ARGOCD_URL=https://argocd.example.com \
           -e ARGOCD_TOKEN=your-token \
           argocd-mcp-server:latest

Running Directly

# Set environment variables
export ARGOCD_URL=https://argocd.example.com
export ARGOCD_TOKEN=your-token

# Run the server
uv run argocd-mcp

Security Model

We don't just check permissions. We make it hard to do the wrong thing.

Layer

Environment Variable

Default

What It Does

Read-only Mode

MCP_READ_ONLY

true

Blocks ALL write operations. You can look, but you cannot touch.

Non-destructive Mode

MCP_DISABLE_DESTRUCTIVE

true

Blocks delete/prune even if writes enabled. Deletes require this AND read-only off.

Single-cluster Mode

MCP_SINGLE_CLUSTER

false

Restricts operations to the default cluster. For when multi-cluster access is too scary.

Audit Logging

MCP_AUDIT_LOG

(disabled)

Logs every operation to a file. For when you need to know who did what.

Secret Masking

MCP_MASK_SECRETS

true

Redacts tokens, passwords, and API keys from output. Always on unless you're debugging.

Rate Limiting

MCP_RATE_LIMIT_CALLS

100

Max API calls per minute. Prevents runaway loops from eating your ArgoCD API.

Enabling Write Operations (Carefully)

# Enable writes (still blocks destructive operations)
export MCP_READ_ONLY=false

# Enable destructive operations (delete, prune) - DANGER ZONE
export MCP_DISABLE_DESTRUCTIVE=false

For the full security model deep-dive, see docs/SECURITY.md.


Tool Reference

Tier 1: Essential Read Operations (Always Available)

Tool

What It Does

list_applications

List apps with filtering by project, health, or sync status. The "show me what's on fire" tool.

get_application

Get detailed app info: source, destination, status. The deep dive.

get_application_status

Quick health/sync check. Fast and cheap.

get_application_diff

Preview what would change on sync. Look before you leap.

get_application_history

View deployment history with commits. "What changed and when?"

diagnose_sync_failure

AI-powered troubleshooting. Aggregates logs, events, status into actionable analysis.

get_application_logs

Get pod logs for debugging. Filter by pod, container, and time range.

list_clusters

List registered clusters with connection status.

list_projects

List ArgoCD projects.

Tier 2: Write Operations (Require MCP_READ_ONLY=false)

Tool

What It Does

sync_application

Sync with dry-run default. Set dry_run=false to actually apply.

refresh_application

Force manifest refresh from Git. "Did you push? Let me check again."

rollback_application

Rollback to a previous deployment. Dry-run by default.

terminate_sync

Stop a running sync operation. For when syncs get stuck.

Tier 3: Destructive Operations (Require explicit confirmation)

Tool

What It Does

delete_application

Delete application. Requires confirm=true AND confirm_name matching the app name. We make you type it twice for a reason.

sync_application_with_prune

Sync and DELETE cluster resources missing from Git. Dry-run by default. Live runs require confirm=true AND confirm_name matching the app name.

For detailed parameter documentation, see docs/TOOLS.md.


Example Conversations

"What applications are failing in production?"

list_applications(health_status="Degraded", project="prod")

"Why is my-app not syncing?"

diagnose_sync_failure(name="my-app")

"Deploy the latest changes to staging"

sync_application(name="my-app", dry_run=false)

"Show me what would change if I sync"

get_application_diff(name="my-app")

"What was deployed last week?"

get_application_history(name="my-app", limit=20)

Configuration Reference

Environment Variables

Variable

Description

Default

ARGOCD_URL

ArgoCD server URL

(required)

ARGOCD_TOKEN

ArgoCD API token

(required)

ARGOCD_INSECURE

Skip TLS verification (dev only!)

false

MCP_READ_ONLY

Block write operations

true

MCP_DISABLE_DESTRUCTIVE

Block delete/prune

true

MCP_SINGLE_CLUSTER

Restrict to default cluster

false

MCP_AUDIT_LOG

Path to audit log file

(disabled)

MCP_RATE_LIMIT_CALLS

Max API calls per window

100

MCP_RATE_LIMIT_WINDOW

Rate limit window (seconds)

60

ARGOCD_MCP_LOG_LEVEL

Logging level

INFO

Multi-Instance Configuration

For managing multiple ArgoCD instances (multi-cluster, multi-environment):

# Primary instance
export ARGOCD_URL=https://argocd-prod.example.com
export ARGOCD_TOKEN=prod-token

# Additional instances can be configured via the multi-env example.
# See examples/claude-desktop-multi-env.json

Development

Prerequisites

  • Python 3.11, 3.12, 3.13, or 3.14

  • uv (recommended) or pip

  • Docker (for container builds)

  • Kind 0.32+ (for local Kubernetes testing)

Setup

# Install dependencies
uv sync --dev

# Run tests
uv run pytest

# Run linting
uv run ruff check src tests
uv run mypy src

# Build Docker image
docker build -t argocd-mcp-server .

Testing with Kind

Important: Kubernetes 1.36 removed cgroup v1 support entirely — a node on a cgroup v1 host will not start. (cgroup v1 had been in maintenance mode since 1.31; 1.35 was the last release to support it.) Check your cgroup version:

docker info | grep "Cgroup Version"
  • Cgroup Version: 2 - Use Kubernetes 1.36 (default in Kind 0.32+)

  • Cgroup Version: 1 - Pin Kubernetes 1.35.x or earlier, or upgrade Docker/WSL2 to cgroup v2

# Auto-detect cgroup version and create cluster
./scripts/setup-test-cluster.sh

# Or manually with specific version:
# For cgroups v2 (recommended):
kind create cluster --name argocd-mcp-test --image kindest/node:v1.36.1

# For cgroups v1 hosts (last supported release):
kind create cluster --name argocd-mcp-test --image kindest/node:v1.35.0

# Install ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Wait for ArgoCD to be ready
kubectl wait --for=condition=available --timeout=300s deployment/argocd-server -n argocd

# Get ArgoCD admin password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

# Port forward
kubectl port-forward svc/argocd-server -n argocd 8080:443

Architecture

argocd-mcp-server/
├── src/argocd_mcp/
│   ├── server.py           # Entrypoint: FastMCP instance, lifespan, ServerContext, registration
│   ├── config.py           # Configuration management (pydantic-settings)
│   ├── tools/
│   │   ├── read.py         # Tier-1 read-only handlers
│   │   ├── write.py        # Tier-2 write handlers (require MCP_READ_ONLY=false)
│   │   ├── destructive.py  # Tier-3 destructive handlers (require confirmation)
│   │   ├── params.py       # Pydantic parameter models for every tool
│   │   └── _safety.py      # Shared destination-cluster guard
│   ├── resources/
│   │   └── applications.py # MCP resources: argocd://instances, argocd://security
│   └── utils/
│       ├── client.py       # ArgoCD API client with retry logic and secret masking
│       ├── safety.py       # Confirmation patterns, rate limiting
│       └── logging.py      # Structured logging, audit trail
├── tests/
│   ├── unit/               # Unit tests
│   └── integration/        # Integration tests (Kind cluster)
├── docs/
│   ├── TOOLS.md            # Detailed tool documentation
│   └── SECURITY.md         # Security model deep-dive
├── examples/               # Example configurations
└── Dockerfile              # Multi-stage container build

Contributing

See CONTRIBUTING.md for development setup and guidelines.


License

Apache 2.0 - See LICENSE for details.


Acknowledgments

Built on the shoulders of:


Built by SREs, for SREs. Because production deserves better than "LGTM, ship it."

Available Tools

15 tools
delete_applicationA
Delete an ArgoCD application (DESTRUCTIVE).

Requires explicit confirmation. Set confirm=true AND confirm_name
matching the application name to proceed. With cascade=true (default),
also deletes Kubernetes resources managed by this application.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the operation is DESTRUCTIVE, requires explicit confirmation, and that cascade=true (default) also deletes managed Kubernetes resources. This surfaces critical side effects clearly. It doesn't mention reversibility or permission requirements, but the key destructive behavior is well-documented.

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

Conciseness5/5

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

Three tight sentences, zero fluff. The destructive warning is front-loaded in bold, followed by the confirmation requirements and cascade side-effect. Every sentence earns its place.

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

Completeness4/5

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

For a destructive operation with no annotations and 0% schema coverage, the description thoroughly explains the safety-critical behavior. It has an output schema which may document return values, so it needn't cover those. The main gap is not describing what happens to the app in ArgoCD vs the managed resources separately, but the delete behavior for both is implied. Reasonably complete.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate entirely for parameter meaning. The description explains the critical parameters: confirm must be true, confirm_name must match the app name for confirmation, and cascade default deletes managed resources. It notably omits instance (which defaults to 'primary') and doesn't add nuance beyond confirming what schema fields already convey, but covers the safety-critical params effectively.

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

Purpose5/5

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

The description clearly states 'Delete an ArgoCD application' with a specific verb+resource. It distinguishes from siblings by explicitly labeling it DESTRUCTIVE, which separates it from read tools like get_application and list_applications in the sibling list.

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

Usage Guidelines4/5

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

The description provides explicit when-to-use guidance for the destructive confirmation flow: 'Requires explicit confirmation. Set confirm=true AND confirm_name matching the application name to proceed.' It lacks explicit exclusions/when-not-to-use but the destructive warning implies caution, and the confirmation requirements clearly gate usage.

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

diagnose_sync_failureB

Diagnose why an application sync failed.

Aggregates sync status, resource conditions, events, and recent logs to identify root cause. Provides actionable suggestions for resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It states it aggregates multiple data sources and provides suggestions, but critically does not disclose that it likely performs a read-only diagnostic operation nor whether it consumes significant resources by fetching logs across multiple resources. It also doesn't reveal what specific output format or how findings are structured beyond 'actionable suggestions.' For a tool with zero annotation coverage, more behavioral detail is warranted.

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

Conciseness4/5

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

The description is concise and efficiently structured - two sentences covering purpose and method. It front-loads the core purpose (diagnose why sync failed) before describing what it aggregates. Every sentence earns its place without fluff or repetition. The brevity is appropriate though slightly marginal given the missing parameter guidance.

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

Completeness3/5

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

Given the tool's diagnostic complexity (aggregating multiple data sources), the description could be richer, but an output schema exists. The description covers what it does and what it provides (root cause + suggestions). However, it doesn't explain how it differs from simply calling get_application_status and get_application_logs separately, nor when to prefer this over the raw data tools. For a diagnostic tool, the description is adequate but leaves room for more guidance on when to use it.

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

Parameters2/5

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

Schema description coverage is 0%, and there are no parameter descriptions beyond the raw schema text still being incomplete (the schema shows 'name' and 'instance' but the coverage metric says 0% because no description field text that adds nuance). The description mentions 'application' but doesn't explain that 'name' is the application name and 'instance' is which ArgoCD instance to query. The description adds zero value for understanding parameters; with 0% coverage, it should explicitly clarify the parameter semantics but does not.

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

Purpose4/5

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

The description clearly states the tool's purpose: diagnosing why an application sync failed, with a specific verb (diagnose) and resource (sync failure). It mentions aggregation of status, conditions, events, and logs to identify root cause. However, it doesn't explicitly distinguish from siblings like get_application_status or get_application_logs, which it also draws upon. The action and scope are clear, but sibling differentiation requires inference from the 'root cause + suggestions' framing.

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

Usage Guidelines3/5

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

The description implies this is the go-to tool when a sync has failed and you need diagnostics rather than raw data. It mentions consolidating multiple data sources, hinting it should be used instead of individually querying status and logs. However, there is no explicit when-to-use vs alternatives guidance, no exclusions, and no mention of when the generic get_application tools would be preferred. Usage context is implied but not explicitly articulated.

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

get_applicationB

Get detailed information about a specific ArgoCD application.

Returns comprehensive application details including source repo, sync status, health status, deployment destination, and any conditions or errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the disclosure burden. It clearly states it's a read-only operation returning details and doesn't hint at any destructive or mutating behavior, which is inferred to be safe. However, it doesn't disclose pagination, response structure beyond a list of fields, or any rate-limit/auth considerations. Adequate for a read operation but not rich.

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

Conciseness4/5

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

Two sentences, front-loaded with the core purpose and a focused enumeration of returned fields. No wasted words. Could arguably add param guidance without becoming verbose, but current structure is clean and efficient.

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

Completeness3/5

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

With an output schema present, the description needn't detail return types, and the field list (source repo, sync status, health, destination, conditions) is useful. However, with 0% schema description coverage and undocumented parameters (especially 'instance' with a default), there's a noticeable gap. For a single-app detail tool with output schema present, it's adequate but could clarify both parameters.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for the two parameters. The description mentions fields returned but doesn't explain the 'name' and 'instance' parameters at all — notably 'instance' with its 'primary' default is undocumented. The description provides some context about the tool's output but nothing about how parameters relate to the output.

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

Purpose4/5

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

The description says 'Get detailed information about a specific ArgoCD application' with a clear verb+resource focus, and lists the specific details returned (source repo, sync status, health status, destination, conditions/errors). It distinguishes from siblings somewhat by noting it returns comprehensive details rather than status-only, though it doesn't explicitly contrast with get_application_status.

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

Usage Guidelines3/5

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

The description implies use when you need full application details vs. just status, but does not explicitly state when to use get_application_status instead for quick status checks, or when alternatives like list_applications or get_application_diff are appropriate. No explicit when/when-not guidance, just implied context from mentioning comprehensive detail coverage.

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

get_application_diffA

Preview what would change on sync (dry-run diff).

Shows resources that would be created, updated, or deleted if sync were triggered. Use this before syncing to understand the impact.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It correctly frames this as a non-mutating preview ('would be created... if sync were triggered'), which is good behavioral disclosure. However, it doesn't mention what happens with the output format, whether it's safe/read-only explicitly, or rate-limit considerations. The 'dry-run diff' framing implies read-only, which is acceptable 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.

Conciseness5/5

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

Three short sentences, zero waste. States purpose, what it shows, and when to use it. Perfectly front-loaded and economical.

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

Completeness4/5

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

For a read-only diff-preview tool with an output schema available, the description covers the essential context: what it does, what it returns conceptually, and when to use it. It could mention that this is non-destructive or that it relates to sync_application, but the output schema presumably covers the return structure. Adequate for a tool of this complexity.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries full burden for parameters, but it adds zero parameter-level detail. The schema itself documents name (application name), instance (ArgoCD instance name), and revision (target revision). Given the params are self-explanatory in the schema and the description's purpose is clear, baseline 3 is appropriate. The description doesn't add semantics beyond what the schema gives.

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

Purpose4/5

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

The description clearly states the tool previews a dry-run diff of sync changes (create/update/delete). It's distinct from sync_application (which triggers the sync) and get_application_status (which shows current state). Clear verb+resource+scope, though it doesn't explicitly name sibling alternatives.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this before syncing to understand the impact,' which provides clear timing guidance. It implies this is a pre-sync checkpoint tool distinct from the sync_application siblings. However, it doesn't give explicit 'when NOT to use' guidance or name alternatives.

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

get_application_historyA

View deployment history with commit info and timestamps.

Shows recent deployments including revision, timestamp, and initiator. Useful for understanding recent changes and finding rollback targets.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the disclosure burden. It's a read-only operation (View) which is evident from the description. It doesn't disclose pagination behavior, how many entries are returned by default, or whether results include only successful deployments. The output schema exists which reduces the burden somewhat.

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

Conciseness5/5

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

Three sentences total, no wasted words. First sentence states the purpose, second details content, third provides practical use cases. Very well-structured and front-loaded.

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

Completeness3/5

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

The tool has a good output schema and describes the purpose adequately. However, with no annotations and 0% param coverage, it could clarify which parameters are optional and how limit interacts with the tool's output. Given it's a history-viewing tool with an output schema, it's roughly adequate but could mention default history depth or ordering (e.g., newest first).

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

Parameters3/5

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

Schema description coverage is 0%, meaning parameters (name, limit, instance) are only described at the schema level with brief descriptions ('Application name', 'Maximum number of history entries', 'ArgoCD instance name'). The tool description mentions revision, timestamp, initiator which relates to what the history contains but doesn't add parameter-level meaning beyond the schema. Baseline 3 is appropriate given the moderate complexity.

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

Purpose4/5

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

The description clearly states the verb (View) and resource (deployment history) with specific content (commit info, timestamps, revision, initiator). It distinguishes from siblings like get_application_status and get_application_logs which focus on different aspects, though it doesn't explicitly name them. The purpose is clear and specific.

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

Usage Guidelines3/5

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

The description provides a clear usage context ('Useful for understanding recent changes and finding rollback targets') which implies the tool is for investigation/history purposes. However, it doesn't explicitly state when NOT to use it or differentiate it from get_application_status or get_application_logs among siblings. The context is implied but not explicit.

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

get_application_logsA

Get pod logs for an application.

Retrieves logs from pods managed by the application. Useful for debugging application issues, checking startup errors, or monitoring runtime behavior.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It's a read-only log retrieval tool, which is fairly benign and low-risk, but the description doesn't disclose tail-line limits (max 1000), pagination behavior, or what happens if pods/containers are not found. For a non-destructive read tool, this is acceptable but not rich.

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

Conciseness4/5

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

Description is brief and front-loaded with the core purpose in the first line. The elaboration sentence about use cases adds value without bloat. Could be slightly more compact but is efficient overall.

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

Completeness4/5

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

An output schema exists, so return format need not be explained. The description covers the tool's purpose and when it's useful. Annotations are missing but the tool is a low-risk read operation; the key gap is the lack of guidance on distinguishing from sibling read tools and clarifying pod/container selection behavior. Adequate for a read-only log tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. However, the schema itself has rich per-parameter descriptions (Application name, ArgoCD instance name, specific pod name, container name, tail lines, since seconds). The description adds no parameter-level semantics beyond what the schema already provides. With well-documented schema params, baseline 3 is appropriate.

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

Purpose4/5

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

The description states a clear purpose: 'Get pod logs for an application' with a specific verb+resource. It elaborates on use cases (debugging, checking startup errors, monitoring runtime). It doesn't explicitly distinguish from siblings, but the siblings list shows many read tools for app state/status/diff/history, while this one is uniquely about 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.

Usage Guidelines3/5

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

The description gives implied usage ('useful for debugging application issues, checking startup errors, or monitoring runtime behavior') but no explicit when-not or alternative guidance. Among many sibling tools, it doesn't clarify when to use logs vs get_application_status or diagnose_sync_failure. The what-it's-for hint provides moderate direction but with no exclusions.

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

get_application_statusB

Get condensed health and sync status for quick checks.

Use this for a quick status check when you don't need full application details.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. There are no annotations to contradict (so not a contradiction), but the description doesn't disclose what happens on error, auth requirements, rate limits, or what 'condensed' means in terms of what gets excluded from the response. For a read-only health check tool, this is a modest gap.

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

Conciseness5/5

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

Two sentences, no filler, front-loaded purpose followed by usage guidance. Every sentence earns its place. This is appropriately concise.

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

Completeness3/5

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

The tool has an output schema, which reduces the need to describe return values in the description. Given that it's a straightforward health-check read tool with a simple schema (1-2 params), the description is mostly adequate. However, it doesn't clarify what 'condensed' excludes compared to get_application, and no annotations exist to cover safety/behavior, leaving some gaps around edge cases and error behavior.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the schema properties have no descriptions in the description field that overlaps. The description 'condensed health and sync status' adds general semantic context about the output but provides no guidance on the parameters. The parameter names (name, instance) are self-explanatory, but with 1 required parameter and zero description coverage, the description should compensate more than it does.

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

Purpose4/5

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

The description states it returns condensed health and sync status for quick checks, which is a clear verb+resource purpose. It mentions condensed status specifically, distinguishing somewhat from the sibling get_application which likely returns full details, though it doesn't explicitly name the sibling as an alternative.

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

Usage Guidelines4/5

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

The description explicitly says to use this when you don't need full application details, establishing clear context. It provides solid guidance on when to select this tool over get_application, though it doesn't enumerate other alternatives or when-not-to-use cases.

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

list_applicationsA

List ArgoCD applications with optional filtering.

Returns applications matching the specified filters. Use this to get an overview of applications in a project or find unhealthy/out-of-sync apps.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. The description notes it's a read/list operation returning matching applications, which is helpful, but it doesn't disclose return format, pagination, or whether it summarizes vs. returns full app details. For a list operation without annotations, it gives basic behavioral context but not rich detail.

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

Conciseness4/5

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

Two sentences, efficient and to the point. The second sentence adds useful context about use cases but has minor redundancy ('overview of applications in a project' overlaps with filtering concept). No wasted words.

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

Completeness3/5

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

An output schema exists, so return format is documented elsewhere. The tool has 4 filters forming a straightforward list query. The description covers purpose and use cases adequately but doesn't disclose behavioral traits like whether it returns all fields per app or a condensed summary, and doesn't mention the instance parameter's role. Adequate but not rich for a tool with no annotations.

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

Parameters4/5

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

Schema description coverage is 0% — the schema has 4 properties (project, instance, sync_status, health_status) with inline descriptions, but the paraphrase field in schema is empty (meaning no generated descriptions). Actually, each parameter does have a 'description' field in the schema covering all 4 params. The tool description adds the filtering concept and gives examples of status values indirectly. With all params documented in the schema, the description adds marginal extra meaning about filtering intent.

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

Purpose4/5

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

The description states the verb ('List') and resource ('ArgoCD applications') with optional filtering, and mentions use cases ('overview of applications in a project or find unhealthy/out-of-sync apps'). However, it doesn't explicitly distinguish itself from siblings, though the filtering by sync/health status helps differentiate from get_application (which fetches a single app).

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

Usage Guidelines3/5

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

The description gives implicit use cases ('get an overview', 'find unhealthy/out-of-sync apps') which communicate when to use it, but it doesn't explicitly state when NOT to use it or name alternative tools. Getting a single application's details would better use get_application, but this isn't stated.

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

list_clustersB

List registered Kubernetes clusters with health status.

Shows all clusters registered with ArgoCD and their connection status.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It does disclose the read-only nature implicitly ('List', 'Shows all clusters') and adds the health/connection status behavior. However, it doesn't disclose what happens with no registered clusters, whether there's pagination, or what the returned structure looks like despite an output schema existing.

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

Conciseness5/5

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

Two sentences, zero waste. Each sentence earns its place: the first states the action and key details, the second reinforces the scope. This is a model of conciseness.

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

Completeness3/5

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

For a simple list-with-status tool and given an output schema exists, the description is mostly adequate. However, the undocumented instance parameter is a real gap that undermines completeness, and there's no mention of the health/connection status format or the kinds of status values the agent might expect to see.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate. The 'instance' parameter (ArgoCD instance name) is entirely undocumented in the tool description. The description doesn't clarify what 'primary' default means or whether there can be multiple instances worth filtering by.

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

Purpose4/5

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

The description states the verb+resource clearly: 'List registered Kubernetes clusters' and adds 'with health status' plus 'connection status'. This distinguishes it from the application/project-focused siblings (list_applications, list_projects), though it doesn't explicitly name the sibling alternatives.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. It's clear that it lists clusters rather than applications or projects, but there are no explicit when/when-not conditions, prerequisites, or exclusions provided.

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

list_projectsA

List ArgoCD projects.

Shows all projects which organize and control application access.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description implies a read-only listing operation ('List projects'), which is reasonably clear. However, it doesn't disclose anything about output ordering, pagination, instance-specific behavior, or what happens when no projects exist. For a simple list tool this is adequate but not rich.

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

Conciseness4/5

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

The description is brief and front-loaded with the core purpose in the first sentence. The second sentence adds useful context about what projects are. Two sentences with no waste; appropriate for the tool's simplicity.

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

Completeness4/5

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

For a simple list operation with one parameter, an output schema, and clear read-only intent, the description covers the essentials. It names the resource, explains the organizing role of projects, and is sufficient for an agent to select this tool vs. the application-focused siblings. No output format details are needed since an output schema exists.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries full parameter documentation burden. However, there is only one parameter ('instance') whose very similar description already exists in the schema. The description adds nothing about what 'instance' means or how it affects results beyond what the schema states, which is minimal. With 1 parameter and no coverage, this is a baseline scenario.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('ArgoCD projects') with a clarifying note that projects organize and control application access. It distinguishes from the sibling tools, which are all application/cluster-focused operations, though it doesn't explicitly name the distinction.

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

Usage Guidelines3/5

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

The description provides some context about what projects are ('organize and control application access') but offers no explicit when-to-use guidance or exclusion criteria vs. alternatives. It's a simple list operation, so the need for extensive guidance is modest, but no alternative tools are named.

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

refresh_applicationB

Force manifest refresh from Git.

Triggers ArgoCD to re-fetch manifests from the Git repository. Use hard=true to invalidate cache and force full refresh.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description reveals this is a state-changing operation (triggers a refresh) but doesn't disclose what happens to in-flight syncs, whether the refresh is synchronous or async (does the tool wait for completion?), rate-limit concerns, or the impact of the refresh on the application. The return/behavior after refresh completion is undocumented.

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

Conciseness4/5

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

The description is compact with a one-line title and a two-line body. It front-loads the primary purpose. No redundancy or filler. It could be slightly better structured to surface the hard-refresh param guidance more explicitly, but it's efficiently written.

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

Completeness3/5

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

For a state-changing tool with no annotations and 0% schema coverage, the description does important work explaining the hard parameter. An output schema exists, which relieves the return-value explanation burden. However, key context is missing: whether this is async (ArgoCD refreshes are typically async), what happens to a currently-running sync operation, and when you'd prefer this over sync_application. These gaps are notable for a mutation tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. The description does explain the 'hard' parameter meaning ('invalidate cache and force full refresh'), which is genuinely helpful beyond the bare schema description. However, it doesn't clarify 'instance' (which ArgoCD instance — presumably multiple exist given the default) or 'name' semantics beyond what the schema states.

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

Purpose4/5

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

The description clearly states the action ('Force manifest refresh from Git') and identifies the resource (ArgoCD application). It distinguishes this from sibling tools by being the refresh-specific operation among read/mutate/sync tools. However, it doesn't explicitly differentiate from sync_application or rollback_application, both of which also deal with application state.

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

Usage Guidelines3/5

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

The description provides context that this triggers a manifest re-fetch, which implies it's for when the application shows stale or out-of-sync manifests. However, it doesn't give explicit when-to-use vs when-not-to-use guidance, no alternatives for manual reconcile vs hard refresh, and doesn't explain when hard=true is warranted beyond 'invalidate cache and force full refresh'.

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

rollback_applicationB
Rollback application to a previous deployment revision.

Use get_application_history to find revision IDs, then rollback
to a known-good state. Defaults to dry-run mode for safety.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions dry-run defaults for safety, which is useful. However, it doesn't disclose that this is a destructive/irreversible operation when dry_run=false, doesn't mention whether it restarts/restores state, and doesn't describe what the output/response looks like (despite having an output schema). For a mutation tool with zero annotation coverage, this is a significant gap.

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

Conciseness4/5

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

The description is compact at three sentences, front-loaded with the core purpose, and every sentence adds value (purpose, workflow hint, safety default). It could be slightly more structured but is appropriate in length and density.

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

Completeness3/5

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

The description covers the primary workflow (get history → rollback) and safety default well. However, given this is a potentially destructive mutation tool with no annotations and 0% schema description coverage, it should provide more context: what happens during rollback, whether it's reversible, permission requirements, and what the return value indicates. The output schema helps somewhat but the behavioral risk of a rollback operation warrants deeper disclosure.

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

Parameters3/5

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

Schema description coverage is 0%, meaning the description must compensate for parameter documentation. The description mentions revision_id ('rollback to a previous deployment revision' and the get_application_history workflow) and dry-run ('Defaults to dry-run mode'). However, it adds no meaning for 'name' (beyond what the schema property says) or 'instance'. It partially compensates but doesn't fully cover the parameters.

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

Purpose4/5

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

The description clearly states the verb (rollback) and resource (application to a previous deployment revision). It distinguishes itself from sibling tools like sync_application and refresh_application by its rollback-specific purpose. It could slightly improve by clarifying it uses ArgoCD history, but the core intent is unambiguous.

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

Usage Guidelines4/5

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

The description gives explicit usage guidance by directing users to call get_application_history first to find revision IDs, and mentions dry-run mode as the default for safety. It doesn't explicitly state when NOT to use it versus alternatives like sync_application, but the workflow hint is valuable and the safety emphasis provides clear context.

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

sync_applicationA
Synchronize application with Git repository (non-destructive).

By default runs in dry-run mode showing what would change.
Set dry_run=false to apply changes. This tool NEVER prunes resources —
for sync-with-prune (which deletes cluster resources missing from Git),
use the Tier-3 `sync_application_with_prune` tool, which requires
explicit confirmation.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses that dry-run is the default, that changes are non-destructive, that pruning is never performed, and flags the confirmation requirement on the prune variant. While it doesn't detail return values or side effects of force, the key safety-relevant behaviors are well disclosed.

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

Conciseness4/5

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

Three sentences, front-loaded with the purpose and safety posture. Every sentence earns its place: purpose, dry-run behavior, and the prune alternative/confirmation note. Slightly verbose in the prune clause but acceptable given the important safety distinction.

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

Completeness4/5

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

With an output schema present and a 5-parameter schema that is reasonably self-documented, the description covers the critical behavioral dimensions: safety posture, dry-run default, and the destructive alternative. It could mention the force parameter's behavior or what the return format looks like, but the safety tradeoffs most important for agent decision-making are covered.

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

Parameters3/5

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

Schema description coverage is 0%, meaning the description should compensate for parameter documentation. However, the description does not describe any parameters beyond the dry_run/dry_run=false distinction embedded narratively. The schema itself has decent per-parameter descriptions (name, force, dry_run, instance, revision all explained), so the baseline is moderate. The description adds minimal parameter value beyond schema.

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

Purpose5/5

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

The description states a specific verb+resource (synchronize application with Git repository) and clearly distinguishes scope by noting it is non-destructive and never prunes resources. It explicitly contrasts with the Tier-3 sync_application_with_prune alternative, which differentiates it from the closest sibling.

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

Usage Guidelines5/5

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

Excellent guidance: explicitly states dry-run default behavior, when to set dry_run=false to apply, that it NEVER prunes resources, and names the exact alternative tool (sync_application_with_prune) to use for pruning. This maps directly to a sibling tool and defines when-not-to-use this one.

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

sync_application_with_pruneA
Synchronize application and PRUNE cluster resources missing from Git (DESTRUCTIVE).

This always passes prune=true to the ArgoCD API. Resources present in the
cluster but absent from the desired Git state will be DELETED on a live run.

- dry_run=true (default): preview which resources would be pruned; no confirmation needed.
- dry_run=false: requires confirm=true AND confirm_name matching the application name.

Requires MCP_READ_ONLY=false and MCP_DISABLE_DESTRUCTIVE=false.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

The description explicitly warns that resources present in the cluster but absent from Git state will be DELETED on a live run, and that prune=true is always passed regardless of dry_run setting. Since no annotations are provided, the description carries the full burden and does so well — explaining the always-prune behavior and confirmation requirements. It could mention what the response looks like or how to revert a prune, but the core destructive behavior is thoroughly disclosed.

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

Conciseness4/5

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

The description is well-organized with a clear lead sentence, the core destructive behavior stated upfront, and bullet points for dry_run modalities and prerequisites. It's efficient and front-loaded with the critical warning. The only minor inefficiency is some redundancy between the lead sentence and the always-prune explanation.

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

Completeness4/5

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

For a destructive Tier-3 tool with no annotations and 0% schema coverage, the description covers the most critical aspects: the always-prune behavior, confirmation flow, and required environment flags. With an output schema present, return-value documentation isn't strictly needed. It could add what happens on preview output or reversal options, but the essential safety-critical context is present.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description must compensate for all parameter documentation. The description adds meaning for dry_run, confirm, and confirm_name by explaining their interplay (dry_run=false requires both confirm=true and confirm_name match). However, parameters like force, revision, and instance get no additional semantic context beyond the schema's minimal field descriptions, leaving gaps.

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

Purpose5/5

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

The description clearly states it synchronizes application and PRUNE cluster resources missing from Git, explicitly labeling it DESTRUCTIVE. It distinctly differentiates from sibling sync_application by highlighting that prune=true is always passed, making the destructive capability unambiguous and distinguishing its purpose.

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

Usage Guidelines5/5

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

The description explicitly explains the dry_run=true default (preview, no confirmation needed) versus dry_run=false (requires confirm=true AND confirm_name matching). It clearly states prerequisites (MCP_READ_ONLY=false and MCP_DISABLE_DESTRUCTIVE=false). This gives explicit when-to-use guidance including confirmation steps and environment requirements.

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

terminate_syncB

Terminate an ongoing sync operation.

Stops a sync that's currently in progress. Useful when a sync is stuck, taking too long, or was triggered by mistake.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations provided, so description carries the burden. It clarifies this is a mutating/terminating operation that stops an ongoing sync. However, it doesn't disclose what happens to the sync state afterward, whether termination is reversible, or side effects beyond stopping. Does not contradict annotations (none exist), but behavior details are thin.

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

Conciseness4/5

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

Two short sentences, front-loaded with the core purpose. The second sentence adds useful 'when to use' context. No wasted words. Could be slightly more structured but is appropriately terse.

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

Completeness2/5

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

Despite having an output schema, the tool lacks annotation coverage entirely. For a mutating/termination operation, the description should disclose more about side effects, reversibility, or errors. With 0% schema description coverage and no annotations, this falls short for a tool that terminates a running operation—users need to know state consequences.

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

Parameters3/5

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

Schema description coverage is 0% (properties 'name' and 'instance' have no descriptions in the schema), so the description must compensate. However, the description provides no parameter information at all—it never mentions the app name or instance parameter semantics. With a nested params object and zero schema descriptions, this is a clear gap, though the tool only has 1 effective required param.

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

Purpose4/5

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

Description states a clear verb+resource: 'Terminate an ongoing sync operation' and 'Stops a sync that's currently in progress.' It distinguishes from siblings by focusing on termination, which is unique among sibling tools (none others mention stopping an in-progress operation). Clear and specific.

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

Usage Guidelines3/5

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

Description implies when to use ('stuck, taking too long, or triggered by mistake') but doesn't name alternatives like sync_application or refresh_application as exclusions. No explicit 'when not to use' guidance. Context is helpful but lacks clear differentiation instructions against sibling tools.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv0.1.0
    • First observeddelete_application
    • First observeddiagnose_sync_failure
    • First observedget_application
    • First observedget_application_diff
    • First observedget_application_history
    • First observedget_application_logs
    • First observedget_application_status
    • First observedlist_applications
    • First observedlist_clusters
    • First observedlist_projects
    • First observedrefresh_application
    • First observedrollback_application
    • First observedsync_application
    • First observedsync_application_with_prune
    • First observedterminate_sync

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a distinct resource and action combination. Get/status/diff/history/logs/diagnose all serve clearly separate purposes. Sync and delete operations are cleanly separated from their non-prune vs prune variants, and the destructive tools include explicit confirmation requirements that distinguish them from safe operations.

Naming Consistency4/5

The vast majority follow a consistent verb_noun pattern (get_application, list_applications, sync_application, delete_application, rollback_application). Minor deviation: diagnose_sync_failure, refresh_application, and terminate_sync don't carry the 'application' noun prefix, though this is readable and doesn't cause confusion.

Tool Count5/5

Fifteen tools is well within the sweet spot for an operations-focused MCP server. Each tool covers a distinct lifecycle operation—read, list, sync, rollback, delete, diagnose, log retrieval, cluster/project listing—so every tool earns its place without redundancy.

Completeness4/5

The tool surface covers the full application lifecycle well: create/read/update/delete is mostly covered (notably missing application creation/update), plus sync, rollback, refresh, logs, diff preview, history, and failure diagnosis. No audit/events tool is missing; the only notable gap is application creation/update operations, plus cluster/project management is read-only.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers