Model Context Protocol (MCP) server for interacting with Argo Workflows. This server enables Claude Desktop and Claude Code to manage and monitor Argo Workflows directly.
- List and monitor workflows
- Manage workflow templates
- Handle cron workflows
- Query workflow status and logs
- Execute workflow operations with configurable permissions
# Build the application
./gradlew installDist
# Run tests
./gradlew testAdd this to your Claude Desktop MCP configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
claude mcp add --transport stdio argo-workflows \
-- docker run -i --rm \
-e ARGO_BASE_URL=http://host.docker.internal:2746 \
-e ARGO_NAMESPACE=default \
-e MCP_ALLOW_MUTATIONS=true \
-e MCP_AUDIT_FILE=/app/logs/mcp-audit.log \
-v "$HOME/.kube/config:/home/mcp/.kube/config:ro" \
-v "$HOME/.argo-mcp-logs:/app/logs" \
ghcr.io/heapy/argo-workflows-mcp:mainAfter running the command restart Claude Desktop so it reloads the MCP list.
{
"mcpServers": {
"argo-workflows": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "ARGO_BASE_URL=http://host.docker.internal:2746",
"-e", "ARGO_NAMESPACE=default",
"-e", "MCP_ALLOW_MUTATIONS=true",
"-e", "MCP_AUDIT_FILE=/app/logs/mcp-audit.log",
"-v", "/Users/your-user/.kube/config:/home/mcp/.kube/config:ro",
"-v", "/Users/your-user/.argo-mcp-logs:/app/logs",
"ghcr.io/heapy/argo-workflows-mcp:main"
]
}
}
}Add this to your Claude Code MCP configuration file:
Location: ~/.config/claude-code/mcp_config.json
{
"mcpServers": {
"argo-workflows": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "ARGO_BASE_URL=http://host.docker.internal:2746",
"-e", "ARGO_NAMESPACE=default",
"-e", "MCP_ALLOW_MUTATIONS=true",
"-e", "MCP_AUDIT_FILE=/app/logs/mcp-audit.log",
"-v", "/Users/your-user/.kube/config:/home/mcp/.kube/config:ro",
"-v", "/Users/your-user/.argo-mcp-logs:/app/logs",
"ghcr.io/heapy/argo-workflows-mcp:main"
]
}
}
}Images are published to GitHub Container Registry by CI:
ghcr.io/heapy/argo-workflows-mcp:main— latest build frommainghcr.io/heapy/argo-workflows-mcp:<git-sha>— immutable build per commit
docker run -it --rm \
-e ARGO_BASE_URL=https://your-argo-server:2746 \
-e ARGO_NAMESPACE=default \
-e ARGO_TOKEN=$(cat ~/secrets/argo-token) \
-e MCP_AUDIT_FILE=/app/logs/mcp-audit.log \
-v /Users/your-user/.kube/config:/home/mcp/.kube/config:ro \
-v /Users/your-user/.argo-mcp-logs:/app/logs \
ghcr.io/heapy/argo-workflows-mcp:main# Build the application first
./gradlew installDist
# Build Docker image
docker build -t argo-workflows-mcp:latest .
# Run with docker-compose
docker-compose up
# Or run directly
docker run -it --rm \
-e ARGO_BASE_URL=http://your-argo-server:2746 \
-e ARGO_NAMESPACE=default \
-e ARGO_TOKEN=your-token \
-e MCP_AUDIT_FILE=/app/logs/mcp-audit.log \
-v $(pwd)/logs:/app/logs \
argo-workflows-mcp:latestIf the TLS certificate is issued for another host (for example localhost while you access the server via host.docker.internal), set ARGO_TLS_SERVER_NAME to the certificate hostname so the client presents the correct SNI value.
MCP_SERVER_NAME- Server name (default:argo-workflows-mcp)MCP_SERVER_VERSION- Server version (default:0.1.0)
ARGO_BASE_URL- Argo Workflows API URL (default:http://localhost:2746)ARGO_NAMESPACE- Default Kubernetes namespace (default:default)ARGO_TOKEN- Bearer token for authenticationARGO_USERNAME- Username for basic authARGO_PASSWORD- Password for basic authARGO_INSECURE_SKIP_TLS_VERIFY- Skip TLS verification (default:false)ARGO_TLS_SERVER_NAME- Override TLS server name / SNI value when establishing TLS connectionsARGO_REQUEST_TIMEOUT_SECONDS- Request timeout (default:30)
KUBECONFIG- Path to kubeconfig fileKUBE_CONTEXT- Kubernetes context to use
MCP_ALLOW_DESTRUCTIVE- Allow destructive operations like delete (default:false)MCP_ALLOW_MUTATIONS- Allow mutations like create/update (default:false)MCP_REQUIRE_CONFIRMATION- Require confirmation for sensitive operations (default:true)MCP_NAMESPACES_ALLOW- Comma-separated list of allowed namespaces (default:*)MCP_NAMESPACES_DENY- Comma-separated list of denied namespaces (default: empty)
MCP_AUDIT_ENABLED- Enable audit logging (default:true)MCP_AUDIT_FILE- Audit log file path (default:./mcp-audit.log)MCP_LOG_LEVEL- Log level: debug, info, warn, error (default:info)
- By default, the server runs in read-only mode
- Set
MCP_ALLOW_MUTATIONS=trueto enable create/update operations - Set
MCP_ALLOW_DESTRUCTIVE=trueto enable delete operations - Use
MCP_NAMESPACES_ALLOWto restrict access to specific namespaces - All operations are logged when
MCP_AUDIT_ENABLED=true
This project uses:
- Kotlin with coroutines
- Gradle 9.2.0
- Java 25
- MCP Kotlin SDK
- Generated Argo Workflows client from OpenAPI spec
See AGENTS.md for development guidelines.