Linkerd2 MCP
About
Linkerd2 MCP is a Model Context Protocol (MCP) server that enables you to interact with your Linkerd2 service mesh using natural language or API calls. It builds on Linkerd and Linkerd-viz to provide high‑level mesh introspection and safe policy mutation via a gRPC interface.
Details
- Author
- eli-nomasec
- Downloads
- 272
- Categories
- Other
Jump to
- gRPC MCP API for mesh introspection and policy mutation
- Lightweight, fault‑tolerant control plane for Linkerd service meshes
- In‑memory mesh model backed by Redis for snapshots and deltas
- Applies authorization policy updates directly to the mesh
- Built with the help of AI agents (active development)
- Helm chart for easy deployment on Kubernetes
Build the collector and MCP server binaries with go build -o bin/collector ./cmd/collector and go build -o bin/mcp-server ./cmd/mcp-server. Deploy on a local kind cluster using the provided Helm chart, then port‑forward the service and test the gRPC API with grpcurl. For example, grpcurl -plaintext localhost:10900 mcp.v1.MeshContext/GetMeshGraph retrieves the mesh graph, and grpcurl -plaintext -d '{"namespace":"default","name":"allow-foo","json_spec":"{\"foo\": \"bar\"}"}' localhost:10900 mcp.v1.MeshContext/ApplyAuthorizationPolicy applies an authorization policy.
Linkerd2 MCP
> ⚠️ This project is a Work In Progress (WIP) and is still under active development. Features and APIs may change at any time.
>
> ℹ️ The vast majority of this project has been built with the help of AI agents.
This project aims to expose a Model Context Protocol (MCP) server, enabling you to "talk" to your Linkerd2 service mesh. By building on top of Linkerd and Linkerd-viz, it provides an API for fetching high-level aggregated mesh data and for making changes—such as applying authorization policy updates—directly to your mesh.
A lightweight, fault-tolerant control plane for Linkerd-powered service meshes, exposing a gRPC MCP API for mesh introspection and safe policy mutation.
Project Structure
cmd/
mcp-server/ → main.go (MCP API server)
collector/ → main.go (Collector)
proto/ → *.proto + buf.yaml (gRPC contracts)
internal/
graph/ → in-memory mesh model
redis/ → Redis helpers (snapshot, delta, election)
docs/ → project docs
helm/ → chart/
Makefile → convenience commands
Getting Started
Prerequisites
- Go 1.22+
- Docker or Podman
- kubectl 1.30+
- kind (for local k8s)
- Linkerd CLI 2.15+
- Prometheus (comes with Linkerd viz)
- Buf CLI 1.29+
- Helm 3.14+
Build
go build -o bin/collector ./cmd/collector
go build -o bin/mcp-server ./cmd/mcp-server
Running End-to-End (local kind cluster)
1. Start a kind cluster and install Linkerd + Prometheus:
kind create cluster --name mcp-dev
linkerd install | kubectl apply -f -
linkerd viz install | kubectl apply -f -
linkerd check
2. Deploy Redis (Valkey) and the MCP stack (see helm/ for chart):
helm install mcp ./helm --namespace mcp --create-namespace --set redis.enabled=true
3. Port-forward MCP server and test the gRPC API:
kubectl -n mcp port-forward svc/mcp 10900:10900
grpcurl -plaintext localhost:10900 mcp.v1.MeshContext/GetMeshGraph
4. Apply a policy mutation via gRPC:
grpcurl -plaintext -d '{"namespace":"default","name":"allow-foo","json_spec":"{\"foo\": \"bar\"}"}' localhost:10900 mcp.v1.MeshContext/ApplyAuthorizationPolicy
5. Verify AuthorizationPolicy CRs in the cluster:
kubectl get authorizationpolicies.policy.linkerd.io -A
Development Workflow
- Edit proto contracts in proto/, run buf lint
- Implement business logic in cmd/ and internal/
- Use kind and helm for local testing
- Run unit tests: go test ./...
- See docs/progress.md for current status and next steps
Roadmap
- Integration testing and error handling
- Helm chart, CI/CD, documentation
- E2E tests and further enhancements
License
Apache 2.0
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



