Skip to content

Commit 1b95974

Browse files
committed
Update README with build/connect instructions, add use cases to design doc
- README: add from-source build + Claude Code/Desktop connection steps - Design doc: add platform admin (DNSPolicy/Route53) and developer (RateLimitPolicy) use cases with diagnostic flows - Remove obsolete files: process-docs.go, update-docs.sh, UPDATE_DOCS.md, run_with_logging.sh, demo gif/mp4
1 parent 17207ea commit 1b95974

File tree

2 files changed

+87
-17
lines changed

2 files changed

+87
-17
lines changed

README.md

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@ A Model Context Protocol (MCP) server for debugging Kuadrant installations. Prov
44

55
## Quick Start
66

7+
### From source
8+
79
```bash
8-
# Add the MCP server (available in all projects)
9-
claude mcp add -s user kuadrant docker -- run -i --rm ghcr.io/kuadrant/kuadrant-mcp-server:latest
10+
# Build
11+
git clone https://github.com/kuadrant/kuadrant-mcp-server && cd kuadrant-mcp-server
12+
go build -o kuadrant-mcp-server
13+
14+
# Add to Claude Code (available in all projects)
15+
claude mcp add -s user kuadrant -- /path/to/kuadrant-mcp-server
1016

1117
# Verify
1218
claude mcp list
@@ -15,37 +21,46 @@ claude mcp list
1521
claude
1622
```
1723

18-
## Installation
24+
### Docker
1925

2026
```bash
21-
# Docker (recommended)
22-
docker pull ghcr.io/kuadrant/kuadrant-mcp-server:latest
23-
24-
# Go
25-
go install github.com/kuadrant/kuadrant-mcp-server@latest
27+
# Add to Claude Code
28+
claude mcp add -s user kuadrant docker -- run -i --rm ghcr.io/kuadrant/kuadrant-mcp-server:latest
2629

27-
# From source
28-
git clone https://github.com/kuadrant/kuadrant-mcp-server && cd kuadrant-mcp-server
29-
go build -o kuadrant-mcp-server
30+
# Verify
31+
claude mcp list
3032
```
3133

3234
## Usage
3335

36+
The server supports three transport modes:
37+
3438
```bash
35-
# stdio (default)
39+
# stdio (default) — used by Claude Code and Claude Desktop
3640
./kuadrant-mcp-server
3741

38-
# SSE transport
42+
# SSE transport — for web-based MCP clients
3943
./kuadrant-mcp-server -transport sse -addr :8080
4044

41-
# HTTP transport
45+
# HTTP transport — StreamableHTTP for modern web clients
4246
./kuadrant-mcp-server -transport http -addr :8080
47+
```
48+
49+
### Claude Desktop Configuration
4350

44-
# Docker
45-
docker run -i --rm ghcr.io/kuadrant/kuadrant-mcp-server:latest
51+
Add to your Claude Desktop `claude_desktop_config.json`:
52+
53+
```json
54+
{
55+
"mcpServers": {
56+
"kuadrant": {
57+
"command": "/path/to/kuadrant-mcp-server"
58+
}
59+
}
60+
}
4661
```
4762

48-
### MCP Client Configuration
63+
Or using Docker:
4964

5065
```json
5166
{

docs/designs/2026-03-20-debugging-mcp-design.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,61 @@ Arguments with no default instruct the LLM to ask the user if not provided.
136136
- **Integration tests**: MCP protocol-level tests — initialize server, call `prompts/list`, invoke a prompt, call `resources/list`, read a resource. Verify JSON-RPC responses.
137137
- **Manual testing**: End-to-end with Claude Code + Kubernetes MCP server against a live cluster.
138138

139+
## Use Cases
140+
141+
### Platform Admin: DNS records not being created for gateways
142+
143+
**Persona:** Platform engineer responsible for Kuadrant installation and infrastructure.
144+
145+
**Scenario:** A DNSPolicy targeting a Gateway is created but no DNS records appear in Route53. The policy may show Accepted but records are missing from the hosted zone.
146+
147+
**Prompt:** `debug-dnspolicy` with `policy-name` argument.
148+
149+
**Diagnostic flow:**
150+
1. Check DNSPolicy .status.conditions (Accepted/Enforced)
151+
2. Verify target Gateway exists and listeners have explicit hostnames
152+
3. Check DNS provider credentials Secret exists and has correct Route53 permissions (route53:ChangeResourceRecordSets, route53:ListHostedZones)
153+
4. List DNSRecord CRs — these are the intermediate resources DNSPolicy creates. Check their .status for provider-specific errors
154+
5. Check kuadrant-operator logs for DNS reconciliation errors
155+
6. Verify Route53 hosted zone covers the listener hostnames
156+
157+
**Common fixes:**
158+
- Credentials Secret missing or in wrong namespace
159+
- IAM permissions insufficient for Route53 operations
160+
- Gateway listeners missing explicit hostnames
161+
- Hosted zone doesn't cover the listener hostnames
162+
- targetRef.group missing from the policy
163+
164+
**Resources used:** `kuadrant://debug/dnspolicy`, `kuadrant://debug/status-conditions`
165+
166+
### Developer: RateLimitPolicy not enforcing rate limits
167+
168+
**Persona:** Application developer creating policies for their services.
169+
170+
**Scenario:** A RateLimitPolicy is created targeting a Gateway or HTTPRoute, but traffic is not being rate limited. Requests that should return 429 are passing through.
171+
172+
**Prompt:** `debug-ratelimitpolicy` with `policy-name` argument.
173+
174+
**Diagnostic flow:**
175+
1. Check RateLimitPolicy .status.conditions (Accepted/Enforced)
176+
2. Verify targetRef points to an existing Gateway or HTTPRoute with correct kind, name, and group
177+
3. Inspect rate limit configuration — rates must have limit (int) and window (duration string)
178+
4. Check for policy conflicts — multiple policies targeting the same resource, defaults vs overrides hierarchy
179+
5. Verify Limitador pods are running and processing the policy (check logs)
180+
6. Test by sending requests exceeding the limit within the window
181+
7. Check Istio/Envoy — verify EnvoyFilter resources exist for the policy
182+
183+
**Common fixes:**
184+
- targetRef.group missing (should be "gateway.networking.k8s.io")
185+
- targetRef points to wrong or non-existent resource
186+
- Policy Accepted but not Enforced — Limitador not running
187+
- Targeting Gateway when per-route limiting is needed (should target HTTPRoute)
188+
- "when" conditions too restrictive — limits never triggered
189+
- Gateway-level overrides taking precedence over route-level policy
190+
- Limitador crashlooping due to config errors or Redis connectivity
191+
192+
**Resources used:** `kuadrant://debug/ratelimitpolicy`, `kuadrant://debug/status-conditions`, `kuadrant://debug/policy-conflicts`
193+
139194
## Open Questions
140195

141196
- None currently

0 commit comments

Comments
 (0)