Service graph on steroids.
arrca builds a live relationship graph of your Kubernetes cluster — from read-only APIs and the OpenTelemetry traces you already emit. Explore it yourself, or let Claude navigate it for you.
Your cluster, as one queryable graph.
A microservices topology is scattered across two sources — the Kubernetes API and your
telemetry — and neither shows the whole picture. arrca reads both into a single graph of
entities and the relationships between them,
that engineers can actually explore. No kubectl
incantations, no RBAC barriers, no guessing which dashboard holds what.
The structural risks hiding in your services.
Microservice anti-patterns become queries. Ask them yourself over REST, or let Claude walk the graph for you.
CALLED_BY fan-in. get_entity → count CALLED_BY CALLS edges. get_entity → count CALLS CALLED_BY. list_entities → no callers Explore the real topology — no RBAC battle.
New engineers shouldn't need cluster-admin to understand how the system fits together. Every node and edge is aggregated from read-only Kubernetes APIs and telemetry — no secrets, no write access, nothing sensitive. A safe map of production you can hand to anyone on day one.
Walk from a deployment to the endpoints it serves, the databases it queries, the zones it runs in, and the services that depend on it — without ever touching a live resource.
Built for Claude Code, out of the box.
graph-read mcp is a Model Context
Protocol server. Point Claude at it and the model reasons over your live topology — reviewing
a PR, planning a migration, or running an incident.
auth-service?
3 direct
4 transitive
Three small binaries, coordinating through Redis.
graph-k8s
Watches the Kubernetes API and writes structural entities plus containment / management edges. Single writer.
graph-otel
Consumes OTel trace spans and writes relationship entities plus CALLS / QUERIES / PUBLISHES / CONSUMES / EXPOSES edges.
graph-read
Serves the read / query REST API and the MCP server.
- Reads only — arrca never writes to your cluster. graph-k8s uses read-only Kubernetes APIs.
- Trace spans carry
k8s.*attributes so relationships attach to the right container. - graph-otel consumes trace spans directly — no spanmetrics connector or metrics pipeline required.
- Argo Rollouts and KEDA CRDs are modelled natively alongside core workloads and autoscalers — and arrca runs fine on clusters without them.
Two steps to a live graph.
1 Install the chart (bundles Redis)
REGISTRY=<your-registry> ./deploy.sh 2 Fan trace spans to graph-otel
exporters:
# shard spans by trace id so every span of a
# trace reaches the same graph-otel replica
loadbalancing:
routing_key: traceID
resolver:
dns:
hostname: graph-otel-otlp-headless.default.svc.cluster.local
port: 4317
protocol:
otlp:
tls:
insecure: true
service:
pipelines:
traces:
exporters: [loadbalancing] See it on a real system.
A live walkthrough on the OpenTelemetry Astronomy Shop — the graph, the patterns, and Claude navigating it end to end.