About Argo Watcher MCP
Argo Watcher MCP is an MCP server published by shini4i in the Developer Tools category: a proof of concept implementation of MCP server for argo-watcher.
The repository has 1 stars and 0 forks, with the last commit a month ago. Recent commit activity is the strongest signal that reported issues will get attention.
Install
git clone https://github.com/shini4i/argo-watcher-mcpThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (4)
get_deploy_lockAre deployments currently frozen?
Parameters not published.
get_deploymentsWhat was deployed, when, by whom, with which image tags, and whether it succeeded, failed, or was a rollback.
Parameters not published.
get_reachabilityCan argo-watcher reach ArgoCD and its state backend?
Parameters not published.
get_server_infoWhich argo-watcher version is running, and how is it configured?
Parameters not published.
Ask AI
Ask AI about Argo Watcher MCP
Powered by Claude · Grounded in docs
Security checks
Static checks derived from the repository 5 days ago. Heuristics on the source, not an audit.
- ✓README presentThe repository ships documentation.
- ✓License declaredUsable under a stated license.
- ✓Tests presentA test suite exists in the repository.
- ✓Dependencies pinnedA lockfile pins dependency versions.
- ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
- !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.
Releases
README
Argo Watcher MCP Server
A simple service that exposes an argo-watcher instance as a set of tools via the Model Context Protocol (MCP), allowing AI agents and other clients to query deployment history.
[!IMPORTANT] This project is currently a Proof of Concept (PoC). It was built to explore the integration between Argo Watcher and the Model Context Protocol (MCP). As such, it may be subject to significant changes or be abandoned in the future. Please use it with this understanding.
Features
- Exposes argo-watcher's read-only API as MCP tools: what was deployed, when, by whom, and whether it succeeded.
- Also surfaces the deploy lock, dependency reachability, and instance config.
- Runs over stdio or HTTP (streamable SSE) via the official MCP Go SDK.
- Multi-platform distroless container image.
[!NOTE] Read-only by design: this server cannot create deployments or change the deploy lock.
Tools
| Tool | Answers | Upstream endpoint |
|---|---|---|
get_deployments |
What was deployed, when, by whom, with which image tags, and whether it succeeded, failed, or was a rollback. | GET /api/v1/tasks |
get_deploy_lock |
Are deployments currently frozen? | GET /api/v1/deploy-lock |
get_reachability |
Can argo-watcher reach ArgoCD and its state backend? | GET /api/v1/reachability |
get_server_info |
Which argo-watcher version is running, and how is it configured? | GET /api/v1/version, GET /api/v1/config |
Parameters and constraints live in each tool's MCP schema. Two things it does not tell you:
get_deploymentsreturns 50 rows by default and 1000 at most, so checktotalandtruncatedbefore counting. An empty result can also mean argo-watcher's database is unreachable;get_reachabilitydistinguishes the two.get_server_infoforwards an allowlist of config fields, reducesoidc,webhookandmattermostto theirenabledflag, and stripsuser:password@from URL-valued fields — argo-watcher does not redactARGO_URL_ALIASorDOCKER_IMAGES_PROXYitself.
Required argo-watcher version
Older versions silently ignore unknown query parameters, so a filter can appear to apply when it did not.
| Feature | Minimum argo-watcher |
|---|---|
total, get_deploy_lock |
v0.10.0 |
status filter |
v0.10.2 |
is_rollback / rollback_target_id |
v0.11.0 |
limit / offset |
v0.12.0 |
get_reachability |
v0.13.0 |
/readyz (this server's own readiness check) |
unreleased |
v0.13.0+ is recommended; v0.14.0 is the current stable upstream release.
This server's readiness check requires argo-watcher's /livez and /readyz,
which arrive with the probe split
and are unreleased. Against v0.14.0 and older it reports 503 with
no probe payload, so give this server an upstream that serves them before
wiring a readiness probe to it. Every MCP tool works against v0.13.0+ regardless.
Prerequisites
- Go 1.26+ (for local builds and development).
- Docker 24+ (optional, for containerized deployment).
- Task 3.x (optional, to use the provided Taskfile).
- A running instance of argo-watcher.
Quickstart
-
Ensure argo-watcher is running
The MCP server reads deployment data from an existing argo-watcher instance. You can bootstrap one quickly using the official docker-compose file.
# In the argo-watcher repository docker compose up -
Configure the MCP server
Export the required environment variables:
export ARGO_WATCHER_URL="http://localhost:8001" # adjust to your deployment export HTTP_LISTEN_ADDR=":8000" -
Run the server locally
task runThe process exposes:
- Choose the transport via the
TRANSPORT_MODEenvironment variable (stdioorhttp). - In
stdiomode the server communicates over stdin/stdout; inhttpmode it serves a streamable endpoint onHTTP_LISTEN_ADDR(default:8000).
- Choose the transport via the
-
(Optional) Run via Docker
GOOS=linux GOARCH=amd64 go build -o linux/amd64/argo-watcher-mcp ./cmd/server docker build --build-arg TARGETPLATFORM=linux/amd64 -t argo-watcher-mcp . docker run --rm -p 8000:8000 \ -e ARGO_WATCHER_URL="http://host.docker.internal:8001" \ argo-watcher-mcpFor the real multi-platform images, use
goreleaser release --snapshot --clean.
Configuration
| Variable | Default | Description |
|---|---|---|
ARGO_WATCHER_URL |
none (required) | Base URL of the upstream argo-watcher service. |
HTTP_LISTEN_ADDR |
:8000 |
Address for the HTTP/SSE transport. |
TRANSPORT_MODE |
stdio |
Selects transport: stdio for CLI usage or http for SSE over HTTP. |
REQUEST_TIMEOUT |
15s |
HTTP timeout for downstream argo-watcher requests. Does not apply to the probe endpoints, which are bounded separately — see Health endpoints. |
OTEL_ENABLED |
true |
Enables OpenTelemetry instrumentation; set to false to disable all telemetry exports. |
OTEL_SERVICE_NAME |
inherits APP_NAME |
Overrides the OpenTelemetry service.name resource attribute reported by the server. |
OTEL_EXPORTER_OTLP_ENDPOINT |
none | Optional OTLP gRPC endpoint (host:port) used for exporting metrics and traces. |
OTEL_EXPORTER_OTLP_INSECURE |
false |
Set to true to allow plaintext OTLP connections when the collector does not use TLS. |
APP_NAME |
argo-watcher-mcp |
Metadata surfaced via MCP implementation info. |
APP_VERSION |
build-stamped (local otherwise) |
Version surfaced via MCP implementation info. Releases link it in; set this only to override. |
Health endpoints
The HTTP transport serves two unauthenticated probe endpoints:
| Endpoint | Reports | Use as |
|---|---|---|
/healthz |
This process is serving; checks nothing else | Liveness probe |
/readyz |
This process is serving and argo-watcher answers | Readiness probe |
/readyz deliberately stays 200 when argo-watcher answers but reports itself
unready — its state backend is down, or it is shutting down. Every replica of this
server shares one argo-watcher, so failing readiness there would withdraw all of
them at once and take get_reachability, the tool that names the cause, out of
reach with them. That verdict is reported in the body instead:
{"status":"ready","argo_watcher":"not_ready","argo_watcher_reason":"state backend unreachable"}
Alert on get_reachability or on argo-watcher's own metrics for that condition.
/readyz returns 503 only when argo-watcher's process does not answer at all —
including against an upstream too old to serve /livez, per
Required argo-watcher version.
Each upstream probe is bounded at 2s rather than by REQUEST_TIMEOUT, so this
endpoint answers inside a normal probe deadline even when argo-watcher's readiness
handler hangs on its state backend.
Telemetry & Metrics
When telemetry is enabled, the HTTP transport exposes Prometheus metrics at /metrics. Key series:
argo_watcher_mcp_requests_total{result="success|invalid|failed"}– MCP tool call counter partitioned by result label; filter byresultto obtain invalid or failed counts.argo_watcher_reachable– gauge reporting downstream reachability (1when argo-watcher answered,0otherwise). It tracks reachability, not health: an argo-watcher whose readiness probe reports it unready still reads1.- Standard Go runtime (
go_*) and process metrics are registered on the Prometheus endpoint to aid capacity monitoring.
Development
Common tasks are exposed via the included Taskfile:
task test– run unit tests.task build– compile the server binary intobin/argo-watcher-mcp.task fmt– format the Go sources.task tidy– tidy module dependencies.task vet– executego vet ./....task run– start the server locally using the default transport mode (stdiounlessTRANSPORT_MODEis set).
Module and build caches live inside .cache/ and are ignored by git.
Releases are produced with GoReleaser and publish multi-architecture container images (linux/amd64 and linux/arm64) to GHCR when tags matching v*.*.* are pushed.
Contributing
As this is a PoC, formal contributions are not the primary focus. However, if you find a bug or have a suggestion, feel free to open an issue.
README fetched from the repository 5 days ago. The original is authoritative.