An open API service indexing awesome lists of open source software.

https://github.com/linode/mcp-cluster-api


https://github.com/linode/mcp-cluster-api

Last synced: 20 days ago
JSON representation

Awesome Lists containing this project

README

          

# capi-mcp

**capi-mcp** is a tool that integrates [CAPI](https://cluster-api.sigs.k8s.io/) (Cluster API) resources with the [Model Context Protocol (MCP)](https://mcp.so/), enabling programmatic and prompt-based management of Kubernetes clusters and machines.

### What is MCP?
**MCP (Model Context Protocol)** is an open protocol for describing, invoking, and managing tools and prompts in a standardized way. It enables interoperability between tools, agents, and UIs.

### What is CAPI?
**CAPI (Cluster API)** is a Kubernetes project to manage Kubernetes clusters declaratively using Kubernetes-style APIs. It provides a consistent way to create, update, and manage clusters and their infrastructure.

## Prerequisites

- [Go](https://golang.org/doc/install) (v1.20+ recommended)
- [Make](https://www.gnu.org/software/make/)
- [npm](https://nodejs.org/)
- [kubectl](https://kubernetes.io/docs/tasks/tools/)
- Access to a Kubernetes cluster and a valid `kubeconfig.yaml`

## Installation & Build

Clone the repository and build the binary:

```sh
make build
```

## Linting

Run linting (installs golangci-lint if not present):

```sh
make lint
```

## Running & Testing

**Transport support**: `capi-mcp` supports only stdio transport.

To run the MCP inspector with your built binary:

```sh
npx @modelcontextprotocol/inspector -e KUBECONFIG=kubeconfig.yaml bin/capi-mcp
```

Replace `kubeconfig.yaml` with your actual kubeconfig file.

## Usage with Claude and VSCode

### Using with Claude Desktop

To use this MCP server with Claude Desktop, you need to configure it in Claude's settings:

1. **Build the binary** (if not already done):
```sh
make build
```

2. **Locate Claude's configuration file**:
- On macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- On Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- On Linux: `~/.config/Claude/claude_desktop_config.json`

3. **Add the MCP server configuration**:
```json
{
"mcpServers": {
"capi-mcp": {
"command": "/absolute/path/to/capi-mcp/bin/capi-mcp",
"env": {
"KUBECONFIG": "/absolute/path/to/your/kubeconfig.yaml"
}
}
}
}
```

4. **Restart Claude Desktop** to load the new configuration.

5. **Verify the connection**: In a new conversation with Claude, you should see that the CAPI MCP server is connected and running through developer settings.
image

### Using with VSCode

#### Via Claude Extension

If you're using Claude through a VSCode extension that supports MCP:

1. **Install the Claude extension** from the VSCode marketplace.

2. **Configure the MCP server** in your VSCode settings or the extension's configuration file:
```json
{
"claude.mcpServers": {
"capi-mcp": {
"command": "/absolute/path/to/capi-mcp/bin/capi-mcp",
"env": {
"KUBECONFIG": "/absolute/path/to/your/kubeconfig.yaml"
}
}
}
}
```

3. **Restart VSCode** to apply the configuration.

#### Via VSCode Toolsets

You can also integrate this MCP server with VSCode toolsets for enhanced development workflows:

1. **Create a toolset configuration** in your workspace:
- Open the Command Palette (`Cmd/Ctrl + Shift + P`)
- Run "Toolsets: Configure Toolsets"
- Add a new toolset configuration

2. **Configure the CAPI MCP toolset**:
```json
{
"name": "CAPI MCP Server",
"description": "Cluster API management via MCP",
"tools": [
{
"name": "capi-mcp",
"command": "/absolute/path/to/capi-mcp/bin/capi-mcp",
"env": {
"KUBECONFIG": "/absolute/path/to/your/kubeconfig.yaml"
},
"protocol": "mcp"
}
]
}
```

3. **Use the toolset**:
- Access via the Toolsets panel in the sidebar
- Invoke tools directly from the Command Palette
- Integrate with other VSCode AI features and extensions

This allows you to use CAPI management tools directly within your VSCode development environment alongside other development toolsets.

### Available Tools and Prompts

Once connected, you can use Claude to:

**Tools:**
- `list_clusters` - List all CAPI clusters in your Kubernetes environment
- `get_cluster` - Get detailed information about a specific cluster
- `get_cluster_kubeconfig` - Generate and retrieve a kubeconfig for accessing a CAPI cluster
- `check_upgrade_eligibility` - Verify if a cluster can be safely upgraded to a target Kubernetes version
- `list_machines` - List all machines (nodes) across clusters
- `get_machine` - Get detailed information about a specific machine
- `get_kube_resource` - Get any Kubernetes resource by name, kind, and API version
- `rollout_controlplane` - Rollout a restart of control plane (triggers rolling update - **non-read-only**)
- `get_control_plane_status` - Get status of control plane components for a CAPI cluster

**Prompts:**
- `debug_capi_cluster` - Get step-by-step debugging guidance for cluster issues
- `debug_capi_machine` - Get step-by-step debugging guidance for machine issues
- `restart_control_plane` - Get step-by-step instructions for restarting a cluster's control plane

### Example Usage

Ask Claude / Copilot questions like:
- "Show me all my CAPI clusters"
- "What's the status of my cluster named 'production'?"
- "List all machines in the cluster 'staging'"
- "Get me the kubeconfig for my cluster 'dev-cluster' in namespace 'default'"
- "Check if my cluster can be upgraded to Kubernetes v1.32.0"
- "Help me debug my cluster using the debug_capi_cluster prompt"
- "Get the status of control plane components for my cluster"
- "Get the deployment named 'my-app' in the default namespace using kind 'Deployment' and apiVersion 'apps/v1'"

**Note**: Make sure your `kubeconfig.yaml` file has the necessary permissions to access CAPI resources in your Kubernetes cluster. Some tools like `rollout_controlplane` are write operations and require appropriate RBAC permissions.