Skip to main content
Glama

ArgoCD MCP Server

An MCP (Model Context Protocol) server that integrates with the ArgoCD API, enabling AI assistants and large language models to manage ArgoCD applications and resources through natural language interactions.

Version Python Type Checking

Features

  • Authentication & Session Management:

    • User info retrieval from ArgoCD API

    • Token-based authentication with ArgoCD

    • Server settings and configuration access

    • Plugin information retrieval

    • Version information retrieval

  • Application Management:

    • List and filter applications by project, name, namespace

    • Get detailed application information

    • Create, update, and delete applications

    • Sync applications with configurable options

  • Robust API Client:

    • URL normalization and intelligent endpoint handling

    • Comprehensive error handling and detailed error messages

    • Configurable timeouts and SSL verification

    • Token security protection and masking

  • Developer Experience:

    • Full static type checking with mypy

    • Detailed documentation and examples

    • Environment-based configuration

Related MCP server: argocd-mcp

Quick Start

Setup

# Clone the repository
git clone https://github.com/severity1/argocd-mcp.git
cd argocd-mcp

# Create virtual environment and activate it
uv venv
source .venv/bin/activate

# Install dependencies
uv pip install -e .

Starting the Server

The server is configured via environment variables. Here are the available configuration options:

Environment Variable

Description

Default Value

ARGOCD_TOKEN

ArgoCD API token

None

ARGOCD_API_URL

ArgoCD API endpoint

https://argocd.example.com/api/v1

ARGOCD_VERIFY_SSL

Verify SSL certificates

true

You can start the server in several ways:

# Using MCP dev tools (provides debugging tools)
export ARGOCD_TOKEN=YOUR_ARGOCD_TOKEN
mcp dev server.py

# Using MCP run command
export ARGOCD_TOKEN=YOUR_ARGOCD_TOKEN
mcp run server.py

# Standard method
export ARGOCD_TOKEN=YOUR_ARGOCD_TOKEN
uv run server.py

# Setting multiple environment variables
export ARGOCD_TOKEN=YOUR_ARGOCD_TOKEN
export ARGOCD_API_URL=https://your-argocd-server.com:9000/api/v1
export ARGOCD_VERIFY_SSL=false  # Disable SSL verification for self-signed certs
uv run server.py

# Using a .env file
echo "ARGOCD_TOKEN=YOUR_ARGOCD_TOKEN
ARGOCD_API_URL=https://your-argocd-server.com:9000/api/v1
ARGOCD_VERIFY_SSL=false" > .env
uv run server.py

# Run in background
export ARGOCD_TOKEN=YOUR_ARGOCD_TOKEN
uv run server.py > server.log 2>&1 & echo $! > server.pid

When the token is provided via environment variable, Claude can use it without you having to specify it in every command.

Connecting with Claude

Using Claude Code CLI

# Add the MCP server
claude mcp add argocd-mcp "uv run $(pwd)/server.py"

# With token
claude mcp add argocd-mcp -e ARGOCD_TOKEN=YOUR_ARGOCD_TOKEN -- "uv run $(pwd)/server.py"

# Verify it was added
claude mcp list

# For debugging, you can use MCP Inspector with 'mcp dev' command

Using Claude Desktop

Create a claude_desktop_config.json configuration file:

{
  "mcpServers": {
    "argocd-mcp": {
      "command": "/path/to/uv",
      "args": [
        "--directory",
        "/path/to/argocd-mcp",
        "run",
        "server.py"
      ],
      "env": {
        "ARGOCD_TOKEN": "your_argocd_token",
        "ARGOCD_API_URL": "https://your-argocd-server.com/api/v1",
        "ARGOCD_VERIFY_SSL": "true"
      }
    }
  }
}

Replace the paths and configuration values with your actual values:

  • Use the full path to the uv executable (find it with which uv on macOS/Linux or where uv on Windows)

  • Set the correct directory path to your argocd-mcp installation

  • Add your ArgoCD API token

  • Configure other environment variables as needed

This configuration tells Claude Desktop how to start the MCP server automatically with your specific environment settings.

Available Tools

Session Tools

  • get_user_info: Get the current user's info via api/v1/session/userinfo

Settings Tools

  • get_settings: Get ArgoCD server settings including UI, OIDC, and other configurations

  • get_plugins: Get information about configured ArgoCD plugins

Version Tools

  • get_version: Get version information of the API server

Application Management Tools

  • list_applications: Get all applications with filtering options

  • get_application_details: Get detailed information about a specific application

  • create_application: Create a new application

  • update_application: Update an existing application

  • delete_application: Delete an application

  • sync_application: Trigger a sync operation on an application

Example Conversations

Checking User Information

User: What's my user information in ArgoCD?

Claude: Let me retrieve your user information.

⏺ argocd-mcp:get_user_info (MCP)
  ⎿  {"loggedIn": true, "username": "devops-user", "iss": "argocd"}

You are logged in as 'devops-user'.

Getting ArgoCD Version

User: What version of ArgoCD is running on the server?

Claude: Let me check the ArgoCD version information.

⏺ argocd-mcp:get_version (MCP)
  ⎿  {
        "Version": "v2.9.3+5eaf684",
        "BuildDate": "2023-09-15T14:25:11Z",
        "GitCommit": "5eaf68452",
        "GitTreeState": "clean",
        "GoVersion": "go1.20.7",
        "Compiler": "gc",
        "Platform": "linux/amd64",
        "KustomizeVersion": "v5.1.1",
        "HelmVersion": "v3.12.3",
        "KubectlVersion": "v1.27.4",
        "JsonnetVersion": "v0.20.0"
      }

You're running ArgoCD v2.9.3, built on September 15, 2023. It's running on Linux (amd64) with Go 1.20.7, and includes Kustomize v5.1.1 and Helm v3.12.3.

Getting ArgoCD Settings

User: Show me the ArgoCD server settings

Claude: Let me retrieve the ArgoCD server settings for you.

⏺ argocd-mcp:get_settings (MCP)
  ⎿  {
        "clusterSettings": {
          "appLabelKey": "argocd.argoproj.io/instance",
          "controllerNamespace": "argocd",
          "execEnabled": true,
          "statusBadgeEnabled": true,
          "uiBannerContent": "This is a development instance of ArgoCD",
          "url": "https://argocd.example.com"
        }
      }

Here are the key settings for your ArgoCD server:
- URL: https://argocd.example.com
- Controller namespace: argocd
- Exec enabled: Yes
- Status badge enabled: Yes
- UI Banner: "This is a development instance of ArgoCD"

Managing Applications

User: What applications do I have in the "production" project?

Claude: Let me list your applications in the production project.

⏺ argocd-mcp:list_applications (MCP)
  ⎿  {
        "items": [
          {
            "metadata": {
              "name": "frontend-app",
            },
            "status": {
              "sync": {"status": "Synced"},
              "health": {"status": "Healthy"},
            }
          },
          {
            "metadata": {
              "name": "api-service",
            },
            "status": {
              "sync": {"status": "OutOfSync"},
              "health": {"status": "Healthy"},
            }
          },
          {
            "metadata": {
              "name": "database",
            },
            "status": {
              "sync": {"status": "Synced"},
              "health": {"status": "Degraded"},
            }
          }
        ]
      }

You have 3 applications in the production project:
- frontend-app (Synced, Healthy)
- api-service (OutOfSync, Healthy)
- database (Synced, Degraded)
User: Sync the api-service application

Claude: I'll sync the api-service application for you.

⏺ argocd-mcp:sync_application (MCP)
  ⎿  {
        "resourcesResult": {
          "updated": ["Deployment/api-service"],
          "hooks": []
        },
        "status": "Syncing"
      }

Application sync initiated successfully. The sync operation is now in progress.

Development

Requirements

  • Python 3.12+

  • MCP (includes FastMCP and development tools)

  • uv package manager (recommended) or pip

  • ArgoCD API token

Type Checking

This project uses mypy for static type checking to enhance code quality and catch type-related bugs early:

# Install mypy
uv pip install mypy

# Run type checking
uv run -m mypy .

Type checking configuration is available in both pyproject.toml and mypy.ini. The configuration enforces strict typing rules including:

  • Disallowing untyped definitions

  • Warning on returning Any types

  • Checking completeness of function definitions

  • Namespace packages support

  • Module-specific configurations

Project Structure

The code is organized into a modular structure:

argocd-mcp/
├── api/              # API client and communication
│   ├── __init__.py
│   └── client.py     # HTTP client for ArgoCD API
├── models/           # Data models
│   ├── __init__.py
│   └── applications.py # Application data structures
├── tools/            # MCP tools implementation
│   ├── __init__.py
│   ├── session.py    # Session tools (user info)
│   ├── applications.py # Application management tools
│   ├── settings.py   # Server settings tools
│   └── version.py    # Version information tools
├── utils/            # Utility functions
│   ├── __init__.py
├── server.py         # Main server entry point
├── pyproject.toml    # Project configuration and dependencies
└── mypy.ini          # Mypy type checking configuration

Extending the Server

To add new features:

  1. Add new tools to the appropriate module in the tools directory

  2. Register new tools in server.py

  3. Follow the existing patterns for parameter validation and error handling

  4. Update documentation in README.md

  5. Add tests for new functionality

Troubleshooting

If you encounter issues:

  1. Check server logs (info logging is enabled by default)

  2. Note that Processing request of type CallToolRequest is informational, not an error

  3. If using mcp dev server.py, the MCP Inspector will automatically open at http://localhost:5173 for debugging

  4. Use the server logs to debug API calls and responses

  5. For SSL certificate issues with self-signed certificates:

# Disable SSL verification
export ARGOCD_VERIFY_SSL=false
uv run server.py
  1. Check if all required environment variables are properly set:

# Show all current ArgoCD environment variables
env | grep ARGOCD

Contributing

Contributions are welcome! Please open an issue or pull request if you'd like to contribute to this project.

When contributing, please follow these guidelines:

  • Ensure all code includes proper type hints

  • Run mypy type checking before submitting PRs

  • Add tests for new functionality

  • Update documentation for any new features or changes

Available Tools

10 tools
create_applicationA
Create a new application in ArgoCD

Args:
    name: The name of the application (required)
    project: The project name (required)
    repo_url: The Git repository URL (required)
    path: Path within the repository (required)
    dest_server: Destination K8s API server URL (required)
    dest_namespace: Destination namespace (required)
    revision: Git revision (default: HEAD)
    automated_sync: Enable automated sync (default: False)
    prune: Auto-prune resources (default: False)
    self_heal: Enable self-healing (default: False)
    namespace: Application namespace
    validate: Whether to validate the application before creation
    upsert: Whether to update the application if it already exists

Returns:
    The created application details

Inputs: dest_namespace (required), dest_server (required), name (required), path (required), +9 more.

delete_applicationB
Delete an application from ArgoCD

Args:
    name: The name of the application to delete (required)
    cascade: Whether to delete application resources as well (default: True)
    propagation_policy: The propagation policy ("foreground", "background", or "orphan")
    namespace: The application namespace (optional)

Returns:
    Success message or error details

Inputs: name (required), cascade, namespace, propagation_policy.

get_application_detailsB
Get details for a specific application

Args:
    name: The application name (required)
    project: The project name (optional filter)
    refresh: Forces application reconciliation if set to 'hard' or 'normal'
    namespace: Filter by application namespace

Returns:
    Application details

Inputs: name (required), namespace, project, refresh.

get_pluginsB
Get returns Argo CD plugins using api/v1/settings/plugins

This endpoint returns information about available plugins in ArgoCD.

Returns:
    List of available plugins

Inputs: no named parameters.

get_settingsB
Get returns Argo CD settings using api/v1/settings

This endpoint returns the ArgoCD server settings including
configuration related to OIDC, Dex, UI customization, and plugins.

Returns:
    ArgoCD server settings

Inputs: no named parameters.

get_user_infoB
Get the current user's info via session/userinfo

This endpoint returns information about the currently logged-in user,
including permissions and groups.

Returns:
    User information from ArgoCD

Inputs: no named parameters.

get_versionB
Version returns version information of the API server using api/version

This endpoint returns version details of the ArgoCD API server including
Git commit, version, build date, compiler information, and more.

Returns:
    Version information of the ArgoCD API server

Inputs: no named parameters.

list_applicationsB
List applications in ArgoCD with filtering options

Args:
    project: Filter applications by project name
    name: Filter applications by name
    repo: Filter applications by repository URL
    namespace: Filter applications by namespace
    refresh: Forces application reconciliation if set to 'hard' or 'normal'

Returns:
    List of applications with pagination information

Inputs: name, namespace, project, refresh, +1 more.

sync_applicationB
Sync an application in ArgoCD

Args:
    name: The name of the application to sync (required)
    revision: Git revision to sync to (optional)
    prune: Whether to prune resources (default: False)
    dry_run: Whether to perform a dry run (default: False)
    strategy: Sync strategy ("apply" or "hook")
    resources: List of resources to sync (optional)
    namespace: The application namespace (optional)

Returns:
    Sync result details

Inputs: name (required), dry_run, namespace, prune, +3 more.

update_applicationB
Update an existing application in ArgoCD

Args:
    name: The application name to update (required)
    project: New project name (optional)
    repo_url: New Git repository URL (optional)
    path: New path within the repository (optional)
    dest_server: New destination K8s API server URL (optional)
    dest_namespace: New destination namespace (optional)
    revision: New Git revision (optional)
    automated_sync: Enable/disable automated sync (optional)
    prune: Enable/disable auto-pruning resources (optional)
    self_heal: Enable/disable self-healing (optional)
    validate: Whether to validate the application

Returns:
    The updated application details

Inputs: name (required), automated_sync, dest_namespace, dest_server, +7 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose with no ambiguity. Application management tools (create, delete, get, list, sync, update) target specific actions on applications, while other tools (get_plugins, get_settings, get_user_info, get_version) retrieve distinct types of metadata. The descriptions reinforce these boundaries, making tool selection straightforward.

    Naming Consistency5/5

    All tools follow a consistent verb_noun naming pattern throughout. Application tools use create_application, delete_application, get_application_details, list_applications, sync_application, update_application, while metadata tools use get_plugins, get_settings, get_user_info, get_version. This uniformity enhances readability and predictability.

    Tool Count5/5

    With 10 tools, the count is well-scoped for an ArgoCD server. It provides comprehensive application lifecycle coverage (CRUD + sync) and essential metadata retrieval without being overwhelming. Each tool earns its place, supporting common workflows like deployment management and system inspection.

    Completeness5/5

    The tool surface offers complete coverage for ArgoCD's core domain. It includes full CRUD operations for applications (create, get, list, update, delete), sync functionality for deployments, and metadata tools for plugins, settings, user info, and version. There are no obvious gaps, enabling agents to handle typical ArgoCD tasks effectively.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that enables interaction with Kubernetes/Minikube clusters through natural language, allowing AI agents like Codename Goose to manage Kubernetes resources via the Model Context Protocol.
      2
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI assistants to interact with Argo CD applications, managing clusters, applications, and resources through natural language.
      Apache 2.0