{"id":29948648,"url":"https://github.com/kuadrant/kuadrant-mcp-server","last_synced_at":"2025-08-03T08:33:51.929Z","repository":{"id":304966781,"uuid":"1020738214","full_name":"Kuadrant/kuadrant-mcp-server","owner":"Kuadrant","description":"MCP server with tools for interacting with Kuadrant resources","archived":false,"fork":false,"pushed_at":"2025-07-17T15:42:52.000Z","size":2340,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-27T04:43:52.613Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kuadrant.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-16T10:15:25.000Z","updated_at":"2025-07-23T15:32:37.000Z","dependencies_parsed_at":"2025-07-17T17:32:06.731Z","dependency_job_id":"fc17928d-64f4-4dac-8607-d118196120f6","html_url":"https://github.com/Kuadrant/kuadrant-mcp-server","commit_stats":null,"previous_names":["jasonmadigan/kuadrant-mcp-server","kuadrant/kuadrant-mcp-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Kuadrant/kuadrant-mcp-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuadrant%2Fkuadrant-mcp-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuadrant%2Fkuadrant-mcp-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuadrant%2Fkuadrant-mcp-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuadrant%2Fkuadrant-mcp-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kuadrant","download_url":"https://codeload.github.com/Kuadrant/kuadrant-mcp-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuadrant%2Fkuadrant-mcp-server/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268515106,"owners_count":24262561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-03T02:00:12.545Z","response_time":2577,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-03T08:33:46.535Z","updated_at":"2025-08-03T08:33:51.912Z","avatar_url":"https://github.com/Kuadrant.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kuadrant MCP Server\n\nA Model Context Protocol (MCP) server that generates Kuadrant policy manifests in YAML format. Designed to work alongside Kubernetes MCP servers like [mcp-server-kubernetes](https://github.com/Flux159/mcp-server-kubernetes) for applying resources to clusters.\n\n## Demo\n\n![Kuadrant MCP Server Demo](kuadrant-mcp-server-demo.gif)\n\n## Quick Start (Claude Code CLI)\n\n```bash\n# Add the MCP server using Docker (available in all projects)\nclaude mcp add kuadrant docker run -i --rm ghcr.io/jasonmadigan/kuadrant-mcp-server:latest -s user\n\n# Verify installation\nclaude mcp list\n\n# Start using\nclaude  # Start new session, type /mcp to see available servers\n```\n\n## Overview\n\nThis MCP server generates Kuadrant-specific Kubernetes manifests:\n- Gateway resources with Kuadrant annotations\n- HTTPRoute configurations\n- Kuadrant policies (DNS, TLS, RateLimit, Auth)\n\nAll manifests are generated in YAML format, matching the actual Kuadrant CRD specifications.\n\n## Installation\n\n### Using Go\n```bash\ngo install github.com/jasonmadigan/kuadrant-mcp-server@latest\n```\n\n### Using Docker\n\nThe server is available as a Docker image from GitHub Container Registry:\n\n```bash\ndocker pull ghcr.io/jasonmadigan/kuadrant-mcp-server:latest\n```\n\n### Building from Source\n```bash\ngit clone https://github.com/jasonmadigan/kuadrant-mcp-server\ncd kuadrant-mcp-server\ndocker build -t kuadrant-mcp-server:latest .\n```\n\n## Usage\n\n### Transport Options\n\nThe server supports multiple transport protocols:\n\n1. **stdio** (default) - Standard input/output for CLI integration\n2. **sse** - Server-Sent Events for web-based clients\n3. **http** - Streamable HTTP for modern web applications\n\n### Standalone\n\n#### Using stdio transport (default)\n```bash\nkuadrant-mcp-server\n```\n\n#### Using SSE transport\n```bash\nkuadrant-mcp-server -transport sse -addr :8080\n```\n\n#### Using StreamableHTTP transport\n```bash\nkuadrant-mcp-server -transport http -addr :8080\n```\n\n### With Docker\n\nUsing the pre-built image from GitHub Container Registry:\n\n#### stdio transport (default)\n```bash\ndocker run -i --rm ghcr.io/jasonmadigan/kuadrant-mcp-server:latest\n```\n\n#### SSE transport\n```bash\ndocker run -i --rm -p 8080:8080 ghcr.io/jasonmadigan/kuadrant-mcp-server:latest -transport sse -addr :8080\n```\n\n#### StreamableHTTP transport\n```bash\ndocker run -i --rm -p 8080:8080 ghcr.io/jasonmadigan/kuadrant-mcp-server:latest -transport http -addr :8080\n```\n\n### With Docker Compose\n```bash\ndocker-compose up\n```\n\n### MCP Client Configuration\n\n#### For stdio transport (Claude Desktop, CLI tools)\n\nUsing the pre-built Docker image:\n```json\n{\n  \"mcpServers\": {\n    \"kuadrant\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"ghcr.io/jasonmadigan/kuadrant-mcp-server:latest\"]\n    }\n  }\n}\n```\n\nOr if running the binary directly:\n```json\n{\n  \"mcpServers\": {\n    \"kuadrant\": {\n      \"command\": \"/path/to/kuadrant-mcp-server\"\n    }\n  }\n}\n```\n\n#### For HTTP transports (web applications)\n```json\n{\n  \"mcpServers\": {\n    \"kuadrant-mcp\": {\n      \"url\": \"http://localhost:8080\",\n      \"transport\": \"streamablehttp\"  // or \"sse\" for SSE transport\n    }\n  }\n}\n```\n\n## Available Resources\n\nThe MCP server provides comprehensive documentation and examples through resources:\n\n### Documentation Resources\n- `kuadrant://docs/gateway-api` - Gateway API overview and Kuadrant integration\n- `kuadrant://docs/dnspolicy` - Complete DNSPolicy reference with examples\n- `kuadrant://docs/ratelimitpolicy` - RateLimitPolicy patterns and advanced usage\n- `kuadrant://docs/authpolicy` - AuthPolicy authentication and authorization methods\n- `kuadrant://docs/tlspolicy` - TLSPolicy certificate management guide\n\n### Example Resources\n- `kuadrant://examples/basic-setup` - Simple API with rate limiting and API key auth\n- `kuadrant://examples/production-setup` - Full production setup with TLS, DNS, JWT auth\n\n### Troubleshooting\n- `kuadrant://troubleshooting` - Common issues, debugging techniques, and solutions\n\nAccess these resources in Claude by asking questions like:\n- \"Show me the Kuadrant rate limiting documentation\"\n- \"How do I set up production TLS with Kuadrant?\"\n- \"Help me troubleshoot my AuthPolicy not working\"\n\n**Note**: Claude may not always use resources automatically. To ensure resource usage:\n- Be specific about wanting documentation or examples\n- Reference Kuadrant policies by name (e.g., \"RateLimitPolicy\", \"AuthPolicy\")\n- Ask for \"complete examples\" or \"troubleshooting guide\"\n\n## Available Tools\n\n### `create_gateway`\nGenerate a Gateway manifest with Kuadrant annotations.\n\n**Arguments:**\n- `name` (required): Gateway name\n- `namespace` (required): Namespace\n- `gatewayClassName`: Gateway class (default: \"istio\")\n- `listeners`: Array of listener configurations\n- `kuadrantEnabled`: Enable Kuadrant annotations (default: true)\n\n**Example Output:**\n```yaml\napiVersion: gateway.networking.k8s.io/v1\nkind: Gateway\nmetadata:\n  annotations:\n    kuadrant.io/policy: enabled\n  name: prod-gateway\n  namespace: production\nspec:\n  gatewayClassName: istio\n  listeners:\n  - name: https\n    port: 443\n    protocol: HTTPS\n    hostname: \"*.example.com\"\n```\n\n### `create_httproute`\nGenerate an HTTPRoute manifest.\n\n**Arguments:**\n- `name` (required): Route name\n- `namespace` (required): Namespace\n- `parentRefs` (required): Parent gateway references\n- `hostnames`: List of hostnames\n- `rules`: Routing rules\n\n**Example Output:**\n```yaml\napiVersion: gateway.networking.k8s.io/v1\nkind: HTTPRoute\nmetadata:\n  name: api-route\n  namespace: production\nspec:\n  parentRefs:\n  - name: prod-gateway\n  hostnames:\n  - api.example.com\n  rules:\n  - matches:\n    - path:\n        type: PathPrefix\n        value: /api\n    backendRefs:\n    - name: api-service\n      port: 8080\n```\n\n### `create_dnspolicy`\nGenerate a Kuadrant DNSPolicy manifest.\n\n**Arguments:**\n- `name` (required): Policy name\n- `namespace` (required): Namespace\n- `targetRef` (required): Target resource reference\n- `providerRefs` (required): DNS provider references\n- `loadBalancing`: Load balancing configuration\n- `healthCheck`: Health check configuration\n\n**Example Output:**\n```yaml\napiVersion: kuadrant.io/v1\nkind: DNSPolicy\nmetadata:\n  name: prod-dns\n  namespace: production\nspec:\n  targetRef:\n    group: gateway.networking.k8s.io\n    kind: Gateway\n    name: prod-gateway\n  providerRefs:\n  - name: aws-dns-credentials\n  loadBalancing:\n    defaultGeo: true\n    weight: 100\n    geo: US\n  healthCheck:\n    path: /health\n    failureThreshold: 3\n    interval: 5min\n```\n\n### `create_tlspolicy`\nGenerate a Kuadrant TLSPolicy manifest (v1alpha1).\n\n**Arguments:**\n- `name` (required): Policy name\n- `namespace` (required): Namespace\n- `targetRef` (required): Target resource reference\n- `issuerRef` (required): Certificate issuer reference\n- `commonName`: Certificate common name\n- `duration`: Certificate duration\n- `renewBefore`: Renew before expiry\n\n**Example Output:**\n```yaml\napiVersion: kuadrant.io/v1alpha1\nkind: TLSPolicy\nmetadata:\n  name: prod-tls\n  namespace: production\nspec:\n  targetRef:\n    group: gateway.networking.k8s.io\n    kind: Gateway\n    name: prod-gateway\n  issuerRef:\n    group: cert-manager.io\n    kind: ClusterIssuer\n    name: letsencrypt-prod\n  commonName: \"*.example.com\"\n  duration: 90d\n  renewBefore: 15d\n```\n\n### `create_ratelimitpolicy`\nGenerate a Kuadrant RateLimitPolicy manifest.\n\n**Arguments:**\n- `name` (required): Policy name\n- `namespace` (required): Namespace\n- `targetRef` (required): Target resource reference\n- `limits`: Rate limit configurations (each limit must have a `rates` array with `limit` and `window` fields)\n- `defaults`: Default rate limits\n- `overrides`: Override rate limits\n\n**Important:** Rate limits must use the format:\n```json\n{\n  \"limit-name\": {\n    \"rates\": [\n      {\n        \"limit\": 100,\n        \"window\": \"60s\"  // Use time units: s, m, h (e.g., \"10s\", \"5m\", \"1h\")\n      }\n    ]\n  }\n}\n```\n\n**Example Output:**\n```yaml\napiVersion: kuadrant.io/v1\nkind: RateLimitPolicy\nmetadata:\n  name: api-limit\n  namespace: production\nspec:\n  targetRef:\n    group: gateway.networking.k8s.io\n    kind: HTTPRoute\n    name: api-route\n  limits:\n    \"global\":\n      rates:\n      - limit: 5\n        window: 10s\n    \"per-user\":\n      rates:\n      - limit: 2\n        window: 10s\n      when:\n      - predicate: \"auth.identity.userid == 'bob'\"\n```\n\n### `create_authpolicy`\nGenerate a Kuadrant AuthPolicy manifest.\n\n**Arguments:**\n- `name` (required): Policy name\n- `namespace` (required): Namespace\n- `targetRef` (required): Target resource reference\n- `rules`: Authentication and authorization rules\n- `defaults`: Default auth rules\n- `overrides`: Override auth rules\n\n**Example Output:**\n```yaml\napiVersion: kuadrant.io/v1\nkind: AuthPolicy\nmetadata:\n  name: api-auth\n  namespace: production\nspec:\n  targetRef:\n    group: gateway.networking.k8s.io\n    kind: HTTPRoute\n    name: api-route\n  rules:\n    authentication:\n      jwt-auth:\n        jwt:\n          issuerUrl: https://auth.example.com\n    authorization:\n      api-users:\n        opa:\n          rego: |\n            allow = true {\n              input.auth.identity.groups[_] == \"api-users\"\n            }\n```\n\n## Kubernetes Integration\n\nFor a complete Kubernetes workflow, you can combine this server with the Kubernetes MCP server.\n\n### Installing Kubernetes MCP Server\n\n```bash\n# Install globally\nnpm install -g @flux159/mcp-server-kubernetes\n\n# Or use directly with npx\nnpx @flux159/mcp-server-kubernetes\n```\n\nThe Kubernetes MCP server will:\n- Automatically use your `~/.kube/config`\n- Connect to your current kubectl context\n- Provide tools for managing Kubernetes resources\n\n### Configuration\n\n#### Claude Desktop\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\nUsing Docker (recommended):\n```json\n{\n  \"mcpServers\": {\n    \"kuadrant\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"ghcr.io/jasonmadigan/kuadrant-mcp-server:latest\"]\n    },\n    \"kubernetes\": {\n      \"command\": \"npx\",\n      \"args\": [\"@flux159/mcp-server-kubernetes\"]\n    }\n  }\n}\n```\n\nOr using the binary directly:\n```json\n{\n  \"mcpServers\": {\n    \"kuadrant\": {\n      \"command\": \"/path/to/kuadrant-mcp-server\"\n    },\n    \"kubernetes\": {\n      \"command\": \"npx\",\n      \"args\": [\"@flux159/mcp-server-kubernetes\"]\n    }\n  }\n}\n```\n\n#### Claude Code CLI\n\n```bash\n# Add Kuadrant server\nclaude mcp add kuadrant /path/to/kuadrant-mcp-server -s user\n\n# Add Kubernetes server\nclaude mcp add kubernetes npx @flux159/mcp-server-kubernetes -s user\n```\n\n### Safe Mode\n\nTo prevent destructive operations, run the Kubernetes server in safe mode:\n\n```bash\n# In Claude Desktop config:\n{\n  \"mcpServers\": {\n    \"kubernetes\": {\n      \"command\": \"npx\",\n      \"args\": [\"@flux159/mcp-server-kubernetes\"],\n      \"env\": {\n        \"ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS\": \"true\"\n      }\n    }\n  }\n}\n\n# Or with Claude Code CLI:\nALLOW_ONLY_NON_DESTRUCTIVE_TOOLS=true npx @flux159/mcp-server-kubernetes\n```\n\n### Example Workflow\n\nWith both servers configured, you can:\n\n1. **Generate and Deploy**:\n   ```\n   Create a production gateway using Kuadrant and deploy it to my Kubernetes cluster\n   ```\n\n2. **Create Complete Setup**:\n   ```\n   Create a Gateway with TLS and rate limiting policies, then apply them all to the production namespace in my Kubernetes cluster\n   ```\n\n3. **Check Status**:\n   ```\n   Show me all Gateways and their associated Kuadrant policies in my Kubernetes cluster\n   ```\n\n### Real Example\n\n```\nUser: Create a production API gateway with HTTPS and rate limiting, then deploy it\n```\n\nAssistant will:\n1. Use kuadrant MCP to generate Gateway manifest\n2. Use kuadrant MCP to generate RateLimitPolicy\n3. Use kubernetes MCP to apply both manifests\n4. Use kubernetes MCP to verify deployment status\n\n## Complete Example Workflow\n\nHere's a complete example setting up a Gateway with all policies:\n\n1. **Generate Gateway**\n```yaml\n# Generated output:\napiVersion: gateway.networking.k8s.io/v1\nkind: HTTPRoute\nmetadata:\n  name: api-route\n  namespace: production\nspec:\n  parentRefs:\n  - name: api-gateway\n  hostnames:\n  - api.example.com\n  rules:\n  - matches:\n    - path:\n        type: PathPrefix\n        value: /v1\n    backendRefs:\n    - name: api-v1\n      port: 8080\n```\n\n3. **Generate DNSPolicy**\n```yaml\n# Generated output:\napiVersion: kuadrant.io/v1\nkind: DNSPolicy\nmetadata:\n  name: api-dns\n  namespace: production\nspec:\n  targetRef:\n    group: gateway.networking.k8s.io\n    kind: Gateway\n    name: api-gateway\n  providerRefs:\n  - name: route53-credentials\n```\n\n4. **Generate RateLimitPolicy**\n```yaml\n# Generated output:\napiVersion: kuadrant.io/v1\nkind: RateLimitPolicy\nmetadata:\n  name: api-ratelimit\n  namespace: production\nspec:\n  targetRef:\n    group: gateway.networking.k8s.io\n    kind: HTTPRoute\n    name: api-route\n  limits:\n    \"global\":\n      rates:\n      - limit: 10\n        window: 60s\n```\n\n5. **Generate AuthPolicy**\n```yaml\n# Generated output:\napiVersion: kuadrant.io/v1\nkind: AuthPolicy\nmetadata:\n  name: api-auth\n  namespace: production\nspec:\n  targetRef:\n    group: gateway.networking.k8s.io\n    kind: HTTPRoute\n    name: api-route\n  rules:\n    authentication:\n      jwt:\n        jwt:\n          issuerUrl: https://auth.example.com/realms/api\n```\n\n## API Version Reference\n\n- Gateway/HTTPRoute: `gateway.networking.k8s.io/v1`\n- DNSPolicy: `kuadrant.io/v1`\n- TLSPolicy: `kuadrant.io/v1alpha1`\n- RateLimitPolicy: `kuadrant.io/v1`\n- AuthPolicy: `kuadrant.io/v1`\n\n## Building from Source\n\n```bash\ngit clone https://github.com/jasonmadigan/kuadrant-mcp-server\ncd kuadrant-mcp-server\ngo build -o kuadrant-mcp-server\n```\n\n\n## Claude Code CLI Setup\n\nTo use this server with Claude Code CLI:\n\n### Option 1: Using Docker (Recommended)\n\n```bash\n# Add using Docker image\nclaude mcp add kuadrant docker run -i --rm ghcr.io/jasonmadigan/kuadrant-mcp-server:latest -s user\n\n# Verify installation\nclaude mcp list\n\n# Start using\nclaude  # Start new session, type /mcp to see available servers\n```\n\n### Option 2: Using Local Binary\n\n1. **Build the server**\n   ```bash\n   go build -o kuadrant-mcp-server\n   ```\n\n2. **Add to Claude Code**\n   ```bash\n   claude mcp add kuadrant /path/to/kuadrant-mcp-server\n   ```\n\n   For example:\n   ```bash\n   claude mcp add kuadrant /Users/yourusername/kuadrant-mcp-server/kuadrant-mcp-server\n   ```\n\n3. **Verify installation**\n   ```bash\n   claude mcp list\n   ```\n\n4. **Test in Claude**\n   Start a new Claude session and type:\n   ```\n   /mcp\n   ```\n   \n   You should see \"kuadrant\" listed. Then try:\n   ```\n   Create a Gateway manifest named 'test-gateway' in namespace 'default'\n   ```\n\n### Troubleshooting\n\nIf `/mcp` shows \"No MCP servers configured\":\n- Make sure you're in the same directory where you ran `claude mcp add` (for project/local scope)\n- The MCP configuration scopes are:\n  - `local`: Private to you in the current project (default)\n  - `user`: Available to you in all projects\n  - `project`: Shared with all users in the current project\n- Try adding with the full absolute path\n- Check the server is executable: `chmod +x kuadrant-mcp-server`\n- Start a new Claude session after adding the server\n\n### Enable Logging (Optional)\n\nTo see when Claude uses your MCP server:\n\n1. Use the logging wrapper script:\n   ```bash\n   chmod +x run_with_logging.sh\n   claude mcp remove kuadrant -s local\n   claude mcp add kuadrant /path/to/kuadrant-mcp-server/run_with_logging.sh\n   ```\n\n2. Monitor the logs:\n   ```bash\n   tail -f /tmp/kuadrant-mcp.log\n   ```\n\n### Testing Your Installation\n\nAfter setting up the MCP server, test it with these commands in Claude:\n\n1. **Verify MCP tools are available** in Claude:\n   ```\n   /mcp\n   ```\n   \n   You should see \"kuadrant\" listed. Then check what tools it provides:\n   ```\n   What tools does the kuadrant MCP server provide?\n   ```\n\n2. **Monitor the logs** (in a separate terminal):\n   ```bash\n   tail -f /tmp/kuadrant-mcp.log\n   ```\n\n3. **Test with natural language commands** in Claude:\n\n   ```\n   # Gateway creation\n   Create a Kuadrant Gateway named 'api-gateway' in the 'gateway-system' namespace with HTTPS enabled and apply this in my Kubernetes cluster with the kubernetes tool\n\n   # HTTPRoute creation  \n   Create an HTTPRoute named 'api-routes' in namespace 'gateway-system' that routes traffic from gateway 'api-gateway' to service 'api-backend' on port 8080 and apply this in my Kubernetes cluster with the kubernetes tool\n\n   # Rate limiting\n   Create a RateLimitPolicy that limits requests to 100 per minute for the HTTPRoute 'api-routes' in namespace 'gateway-system' and apply this in my Kubernetes cluster with the kubernetes tool\n\n   # Per-user rate limiting\n   Create a RateLimitPolicy for HTTPRoute 'api-routes' that allows 5 requests per 10 seconds for user 'alice' and 2 requests per 10 seconds for user 'bob' and apply this in my Kubernetes cluster with the kubernetes tool\n\n   # Authentication\n   Create an AuthPolicy for HTTPRoute 'api-routes' that requires JWT authentication from issuer 'https://auth.example.com' and apply this in my Kubernetes cluster with the kubernetes tool\n\n   # DNS management\n   Create a DNSPolicy for gateway 'api-gateway' using AWS Route53 credentials 'route53-creds' with multi-region load balancing and apply this in my Kubernetes cluster with the kubernetes tool\n\n   # TLS certificates\n   Create a TLSPolicy for gateway 'api-gateway' using Let's Encrypt to get a wildcard certificate for '*.example.com' and apply this in my Kubernetes cluster  with the kubernetes tool\n   ```\n\n   **With Kubernetes integration:**\n   ```\n   Create a production API gateway with rate limiting of 50 requests per minute and deploy it to my Kubernetes cluster with the kubernetes tool\n\n   Generate a complete Kuadrant setup with Gateway, HTTPRoute, rate limiting, and JWT auth for my API, then apply it to the 'gateway-system' namespace in my Kubernetes cluster with the kubernetes tool\n   ```\n\n4. **Common real-world scenarios**:\n\n   **E-commerce API protection:**\n   ```\n   I need to protect my e-commerce API. Create a Gateway with rate limiting that allows regular users 100 requests per minute but gives premium users 1000 requests per minute and apply this in my Kubernetes cluster\n   ```\n\n   **Multi-tenant SaaS platform:**\n   ```\n   Set up a Gateway for my SaaS platform with different rate limits per tenant: \n   - Free tier: 10 requests per minute\n   - Pro tier: 100 requests per minute\n   - Enterprise: unlimited\n   Then apply this configuration to my Kubernetes cluster\n   ```\n\n   **Public API with authentication:**\n   ```\n   Create a public API gateway that requires API key authentication and limits each API key to 50 requests per second and deploy it to my Kubernetes cluster\n   ```\n\n   **Complete production setup:**\n   ```\n   Set up a production-ready API gateway with:\n   - HTTPS using Let's Encrypt certificates\n   - JWT authentication from Auth0\n   - Rate limiting of 1000 requests per hour per user\n   - DNS managed by Route53\n   Then deploy everything to my Kubernetes cluster\n   ```\n\n5. **What you should see in the logs**:\n   ```\n   [KUADRANT MCP] Starting server with transport=stdio\n   [KUADRANT MCP] create_gateway called with name=api-gateway, namespace=production\n   [KUADRANT MCP] create_httproute called with name=api-route, namespace=production\n   [KUADRANT MCP] create_ratelimitpolicy called with name=api-route, namespace=production\n   ```\n\nIf you don't see logs:\n- Type `/mcp` in Claude - verify \"kuadrant\" is listed\n- Make sure you started a new Claude session after adding the server\n- Try being more explicit: \"Use the kuadrant MCP server to create a Gateway\"\n\n### Common Issues\n\n**RateLimitPolicy format errors:**\n\nIf you get errors like \"unknown field spec.limits.xxx.rates[0].duration\", make sure your rate limits use the correct format:\n\n✅ **Correct:**\n```yaml\nrates:\n- limit: 100\n  window: 60s    # or \"1m\", \"5m\", \"1h\", etc.\n```\n\n❌ **Incorrect:**\n```yaml\nrates:\n- limit: 100\n  duration: 60\n  unit: second\n```\n\n\n## MCP Configuration\n\nTo use this server with an MCP client (like Claude Desktop), add it to your MCP configuration:\n\nUsing the pre-built Docker image:\n```json\n{\n  \"mcpServers\": {\n    \"kuadrant\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"ghcr.io/jasonmadigan/kuadrant-mcp-server:latest\"]\n    }\n  }\n}\n```\n\nOr if running the binary locally:\n```json\n{\n  \"mcpServers\": {\n    \"kuadrant\": {\n      \"command\": \"/path/to/kuadrant-mcp-server\"\n    }\n  }\n}\n```\n\n## License\n\nApache 2.0","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuadrant%2Fkuadrant-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkuadrant%2Fkuadrant-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuadrant%2Fkuadrant-mcp-server/lists"}