mcp-read-only-argocd
by lukleh
README.md
# MCP Read-Only Argo CD Server
[](https://github.com/lukleh/mcp-read-only-argocd/actions/workflows/test.yml)
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
A secure MCP (Model Context Protocol) server that provides read-only access to Argo CD instances using browser session cookies.
> Default layout:
> - Config: `~/.config/lukleh/mcp-read-only-argocd/connections.yaml`
> - Credentials: stored in `connections.yaml`
> - Cache: `~/.cache/lukleh/mcp-read-only-argocd/`
## Features
- Read-only by design: only read operations are exposed
- Session cookie authentication: uses your existing `argocd.token` browser session
- Multi-instance support: connect to multiple Argo CD instances at once
- Automatic cookie rotation: refreshed session cookies are persisted to `connections.yaml`
- Stale token recovery: a 401 response triggers a one-time Chrome cookie refresh and retry
- Package-native runtime paths: no repository checkout required for normal use
## Why Session Cookies?
Unlike token-based setups, this server can reuse your existing browser session:
- no extra API token management
- uses your existing SSO/OIDC login
- matches the permissions you already have in the UI
## Prerequisites
- Python 3.11 or higher
- [uv](https://github.com/astral-sh/uv)
- an Argo CD browser session cookie
- an MCP client such as Claude Code or Codex
## Quick Start
### 1. Install the Server
```bash
# Run the published package without cloning the repository
uvx mcp-read-only-argocd@latest --write-sample-config
# Or install it once and reuse the command directly
uv tool install mcp-read-only-argocd
mcp-read-only-argocd --write-sample-config
```
When using `uvx`, prefer `mcp-read-only-argocd@latest` in user-facing docs and
MCP client configs. This avoids reusing a stale cached tool environment after a
new release is published.
The command above writes a starter config to `~/.config/lukleh/mcp-read-only-argocd/connections.yaml`.
### 2. Confirm Runtime Paths
```bash
uvx mcp-read-only-argocd@latest --print-paths
```
### 3. Edit the Connections File
Edit `~/.config/lukleh/mcp-read-only-argocd/connections.yaml`:
```yaml
- connection_name: staging
url: https://argocd.example.com
description: Staging Argo CD
session_token: your-session-token
- connection_name: production
url: https://argocd-prod.example.com
description: Production Argo CD
session_token: your-other-session-token
```
### 4. Get Your `argocd.token` Session Cookie
1. Log in to your Argo CD web UI
2. Open browser developer tools
3. Go to Application/Storage -> Cookies
4. Copy the value of the `argocd.token` cookie
### 5. Store the Session Cookie
Put the cookie value in the `session_token` field for each connection in
`~/.config/lukleh/mcp-read-only-argocd/connections.yaml`. The server detects
changes to `connections.yaml` before tool calls, so editing this file does not
require an MCP restart.
If Argo CD rejects the active token with a 401 response, the server tries once to
load a fresh `argocd.token` from Chrome Profile 1 for the matching connection
domain. When that token differs from the active token, the failed request is
retried once. If the retry succeeds, the fresh token is written back to
`connections.yaml`.
### 6. Configure Your MCP Client
**Claude Code**
```bash
claude mcp add mcp-read-only-argocd \
--scope user \
-- uvx mcp-read-only-argocd@latest
```
**Codex**
```bash
codex mcp add mcp-read-only-argocd \
-- uvx mcp-read-only-argocd@latest
```
### 7. Restart and Test
Restart your MCP client and try a simple query such as:
```text
List all applications in the staging Argo CD instance.
```
## Configuration
`connections.yaml` supports a list of Argo CD connections:
```yaml
- connection_name: staging
url: https://argocd.example.com
description: Staging Argo CD instance
session_token: your-session-token
timeout: 30
verify_ssl: true
```
Fields:
- `connection_name`: unique identifier used in tool calls and token refreshes
- `url`: Argo CD base URL
- `description`: optional human-readable description
- `session_token`: Argo CD `argocd.token` browser cookie
- `timeout`: optional request timeout in seconds
- `verify_ssl`: optional SSL verification toggle
Runtime path override environment variables:
- `MCP_READ_ONLY_ARGOCD_CONFIG_DIR`
- `MCP_READ_ONLY_ARGOCD_CACHE_DIR`
## Command Line Testing
```bash
# Show the resolved runtime paths
uvx mcp-read-only-argocd@latest --print-paths
# Write or refresh the default connections.yaml
uvx mcp-read-only-argocd@latest --write-sample-config
uvx mcp-read-only-argocd@latest --write-sample-config --overwrite
# Run the server with the default home-directory config
uvx mcp-read-only-argocd@latest
# Or point at a different runtime root
uvx mcp-read-only-argocd@latest --config-dir /path/to/config-dir
```
## MCP Tools
### Core
- `list_connections`
- `get_version`
- `get_settings`
### Applications
- `list_applications`
- `get_application`
- `get_application_resource_tree`
- `get_application_managed_resources`
- `get_application_logs`
### Projects
- `list_projects`
- `get_project`
### Clusters
- `list_clusters`
- `get_cluster`
### Repositories
- `list_repositories`
- `get_repository`
## Local Development
If you want to work on the repository itself:
```bash
git clone https://github.com/lukleh/mcp-read-only-argocd.git
cd mcp-read-only-argocd
uv sync --extra dev
uv run pytest -q
uv run mcp-read-only-argocd --print-paths
uv run python smoke_test.py --print-paths
```
The checked-in sample file remains available at [connections.yaml.sample](connections.yaml.sample) for documentation and review, but package users should prefer `--write-sample-config`.
## License
MIT
TDQS
A3.8/5.0
Scored across 14 tools
Disambiguation5/5
Each tool targets a distinct Argo CD resource or aspect (e.g., application details, logs, managed resources). There is no overlap in purpose, and descriptions clearly differentiate them.
Naming Consistency5/5
All tools follow the verb_noun pattern with snake_case (e.g., get_application, list_applications). Naming is consistent and predictable throughout.
Tool Count5/5
With 14 tools covering the main read-only operations for Argo CD (applications, clusters, projects, repositories, settings), the count is well-scoped and each tool earns its place.
Completeness5/5
The tool set provides comprehensive read-only coverage: listing and getting details for all major resources, plus application logs, managed resources, and resource tree. No obvious gaps for a read-only interface.
Maintenance
ActivitySlowing
ResponsivenessNo issues