pi-controller-mcp
Allows creation, provisioning, scaling, and deletion of K3s clusters on Raspberry Pi nodes.
Provides tools for deploying, inspecting, and deleting Kubernetes pods on the cluster.
Provides tools for discovering, registering, and managing Raspberry Pi nodes, including GPIO pin control and hardware monitoring.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pi-controller-mcpCreate a 3-node K3s cluster called 'homelab'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pi-controller-mcp
MCP (Model Context Protocol) server for managing Raspberry Pi K3s clusters via AI assistants like Claude Code.
Features
šÆ 26 AI Tools for complete cluster lifecycle management
š 7 Resources providing real-time cluster context
š Secure Authentication with JWT and API keys
š”ļø RBAC Integration respecting viewer/operator/admin roles
š GPIO Control for hardware management
š¦ Zero Configuration works out of the box with npx
Related MCP server: SystemPrompt Coding Agent
Quick Start
1. Configure Claude Code
Add to your ~/.config/claude-code/mcp.json (or project .mcp.json):
{
"mcpServers": {
"pi-controller": {
"command": "npx",
"args": ["-y", "pi-controller-mcp"],
"env": {
"PI_CONTROLLER_URL": "https://pi-controller.local:8080",
"PI_CONTROLLER_USERNAME": "admin",
"PI_CONTROLLER_PASSWORD": "your-password"
}
}
}
}2. Start Using with AI
User: "Create a 3-node K3s cluster called 'homelab'"
Claude: I'll help you create a cluster...
[Uses create_cluster tool]
[Uses discover_nodes tool]
[Uses provision_cluster tool]Available Tools
Cluster Management
create_cluster- Create cluster definitionlist_clusters- List all clustersget_cluster_status- Get detailed cluster statusprovision_cluster- Provision K3s on nodesscale_cluster- Scale cluster nodesdelete_cluster- Delete cluster
Node Management
discover_nodes- List discovered Raspberry Pi nodesget_node_info- Get node details and hardware inforegister_node- Manually register a nodeprovision_node- Provision K3s on single nodedeprovision_node- Remove K3s from node
GPIO Control
list_gpio_devices- List all GPIO devicescreate_gpio_device- Register GPIO deviceread_gpio_pin- Read pin valuewrite_gpio_pin- Write to pin (HIGH/LOW)reserve_gpio_pin- Reserve pin for exclusive userelease_gpio_pin- Release reservationget_gpio_readings- Get historical readingsdelete_gpio_device- Remove GPIO device
Deployment
deploy_pod- Deploy Kubernetes podget_pod- Get pod informationdelete_pod- Delete pod
Certificate Authority
initialize_ca- Initialize CAissue_certificate- Issue new certificatelist_certificates- List all certificatesrevoke_certificate- Revoke certificate
Available Resources
Resources provide AI with real-time context about your clusters:
cluster://{cluster_id}/status- Cluster health and metricscluster://{cluster_id}/nodes- Node list with statusnode://{node_id}/info- Hardware specs and capabilitiesnode://{node_id}/metrics- CPU, memory, temperaturenode://{node_id}/gpio- GPIO devices on nodegpio://{gpio_id}/state- Current pin statesystem://health- Overall system health
Configuration
Environment Variables
Variable | Required | Description | Default |
| ā | Pi-controller API URL | - |
| ā ļø* | API key for auth | - |
| ā ļø* | Username for auth | - |
| ā ļø* | Password for auth | - |
| ā | Verify TLS certs |
|
| ā | Path to CA cert | - |
| ā | Request timeout (ms) |
|
| ā | Logging level |
|
*Either API key or username/password required
Authentication Methods
Method 1: API Key (Recommended)
{
"env": {
"PI_CONTROLLER_URL": "https://pi-controller.local:8080",
"PI_CONTROLLER_API_KEY": "your-api-key"
}
}Method 2: Username/Password
{
"env": {
"PI_CONTROLLER_URL": "https://pi-controller.local:8080",
"PI_CONTROLLER_USERNAME": "admin",
"PI_CONTROLLER_PASSWORD": "secure-password"
}
}Examples
Create and Provision Cluster
User: "Create a K3s cluster with 1 master and 2 workers"
AI uses:
1. create_cluster ā Creates cluster definition
2. discover_nodes ā Finds available Pi nodes
3. provision_cluster ā Installs K3s on selected nodes
4. cluster://{id}/status ā Monitors provisioning progressControl GPIO Hardware
User: "Turn on the LED on GPIO pin 18"
AI uses:
1. discover_nodes ā Finds the right node
2. list_gpio_devices ā Locates GPIO device on pin 18
3. write_gpio_pin ā Sets pin value to HIGH (1)
4. gpio://{id}/state ā Confirms new stateDeploy Application
User: "Deploy nginx on the homelab cluster"
AI uses:
1. list_clusters ā Finds homelab cluster
2. deploy_pod ā Creates nginx pod
3. get_pod ā Verifies deploymentDevelopment
Setup
git clone https://github.com/dsyorkd/pi-controller-mcp.git
cd pi-controller-mcp
npm installRun in Development
# Copy environment template
cp .env.example .env
# Edit .env with your pi-controller URL and credentials
nano .env
# Start in watch mode
npm run devBuild
npm run buildTest
# Run all tests
npm test
# Run unit tests only
npm run test:unit
# Run integration tests (requires running pi-controller)
npm run test:integrationArchitecture
pi-controller-mcp/
āāā src/
ā āāā index.ts # MCP server entry point
ā āāā config.ts # Configuration loader
ā āāā client/
ā ā āāā pi-controller-client.ts # REST API client
ā ā āāā auth.ts # Authentication
ā āāā tools/
ā ā āāā cluster.ts # Cluster tools
ā ā āāā node.ts # Node tools
ā ā āāā gpio.ts # GPIO tools
ā ā āāā deployment.ts # Deployment tools
ā ā āāā ca.ts # CA tools
ā āāā resources/
ā ā āāā cluster-status.ts # Cluster resources
ā ā āāā node-info.ts # Node resources
ā ā āāā gpio-state.ts # GPIO resources
ā ā āāā metrics.ts # Metrics resources
ā āāā types/
ā āāā pi-controller.ts # Type definitionsTroubleshooting
Connection Issues
Error: Cannot connect to pi-controller
Solutions:
Verify
PI_CONTROLLER_URLis correctCheck pi-controller is running:
curl ${PI_CONTROLLER_URL}/healthVerify network connectivity
Check TLS certificate if using HTTPS
Authentication Issues
Error: Authentication failed
Solutions:
Verify credentials in
.mcp.jsonor.envCheck user has required RBAC role
For API key: Ensure key is valid and not expired
For username/password: Verify credentials are correct
Permission Issues
Error: Forbidden: insufficient permissions
Solutions:
Tools require different RBAC roles:
Read operations:
viewerroleWrite operations:
operatorroleLifecycle operations:
adminrole
Check user role: See pi-controller documentation
Contributing
Fork the repository
Create feature branch:
git checkout -b feature/amazing-featureCommit changes:
git commit -m 'Add amazing feature'Push to branch:
git push origin feature/amazing-featureOpen Pull Request
See CONTRIBUTING.md for development guidelines.
Related Projects
pi-controller - Main control plane
kubes-aura - Web UI
pi-agent - Node agent (part of pi-controller)
License
MIT License - see LICENSE file for details
Support
š Documentation
š Issue Tracker
š¬ Discussions
Built with ā¤ļø for the Raspberry Pi and AI community
Available Tools
14 toolscreate_clusterC
Create a new K3s cluster definition
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Cluster name (required) | |
| description | No | Cluster description | |
| k3s_version | No | K3s version (e.g., 'v1.28.5+k3s1') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only says 'Create a new K3s cluster definition' without explaining side effects, idempotency, or whether it triggers any infrastructure changes. It does not even clarify if this is a local metadata operation or a remote API call, leaving major behavioral unknowns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no waste, front-loading the core purpose immediately. It is appropriately concise for a simple create operation, though it sacrifices substance for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, no annotations, and multiple related siblings, the description is far too thin. It does not explain what 'definition' means in the context of K3s, what the user should expect after calling it, or whether it is a prerequisite for 'provision_cluster'. This creates a significant completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all three parameters (name, description, k3s_version), so the baseline is 3. The tool description adds no extra parameter semantics beyond what the schema already states, hence no uplift.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('K3s cluster definition'), which clearly indicates the tool's function. However, it does not explicitly differentiate itself from sibling 'provision_cluster', leaving ambiguity about whether this creates a real cluster or just a definition. The word 'definition' provides a subtle hint but could be clearer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'provision_cluster' or 'list_clusters'. The description does not mention prerequisites, typical use cases, or exclusions, so the agent gets no help in selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_clusterA
Delete a cluster (must be deprovisioned first)
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes | Cluster ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions the deprovisioning prerequisite, but does not state whether deletion is irreversible, what consequences occur, or what the response looks like. This is insufficient for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant words. It is well-structured and front-loaded, effectively conveying the core action and a key condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description should provide more context for a destructive tool. It only covers the prerequisite, omitting details about permanence, side effects, permissions, or expected outcomes, making it incomplete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the single parameter (cluster_id) with a minimal description. The tool description adds no further meaning about the parameter, so the schema remains the primary source of information, leading to a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a cluster') with a specific resource, and the prerequisite ('must be deprovisioned first') adds essential context. It is easily distinguished from sibling tools like create_cluster or provision_cluster.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by specifying a required precondition (deprovisioning before deletion). It does not explicitly name alternatives or exclusion cases, but the prerequisite effectively guides when it is appropriate to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_podC
Deploy a Kubernetes pod to a cluster
| Name | Required | Description | Default |
|---|---|---|---|
| pod_spec | Yes | ||
| cluster_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It merely says 'deploy,' which implies a mutating action, but offers no details about side effects, failure modes, blocking behavior, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise but does not add significant value beyond the tool name. It is not verbose, but it is under-specified for a tool with a nested object parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deployment action with no annotations, no output schema, and sparse parameter documentation, the description is incomplete. It does not explain required context like cluster existence, pod spec format, or post-deployment validation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is sparse (two parameters, no descriptions) and schema coverage is 0%. The description does not mention or explain any parameter roles, leaving the agent without information about what cluster_id or pod_spec mean or how to construct them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Deploy'), resource ('a Kubernetes pod'), and destination ('a cluster'). It clearly distinguishes from sibling tools (cluster management, node provisioning) as the only pod-deployment tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool vs. alternatives, prerequisites (e.g., cluster must exist), or typical scenarios. The description only states the action without any contextual direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deprovision_nodeA
Remove K3s from a node and return to discovered state
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | Node ID | |
| ssh_config | No | SSH configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses the primary effect and resulting state, which is useful. But it omits details like whether the operation is destructive to data, whether it requires SSH (though schema hints at it), and if there are any side effects or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence with no redundant wording. It conveys the core action and result efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 2 params and no output schema, the description gives the essential purpose but lacks details about return values, async behavior, or workflow steps. It's adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented. The description adds no extra semantic meaning beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove') and resource ('K3s from a node'), and includes an outcome ('return to discovered state'). This clearly distinguishes it from sibling tools like provision_node or register_node.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: if you want to deprovision a node, this is the tool. However, no explicit when-to-use, when-not-to-use, or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_nodesB
List all discovered Raspberry Pi nodes
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Filter by node role | |
| limit | No | ||
| offset | No | ||
| status | No | Filter by node status | |
| cluster_id | No | Filter by cluster ID | |
| include_gpio | No | Include GPIO devices in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It only states 'List all' and fails to mention that results are paginated via limit/offset, that the include_gpio parameter defaults to false, or that this is a read-only operation. The meaning of 'discovered' is also unclarified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It is as concise as possible while conveying the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 parameters, no annotations, and no output schema, making the description insufficiently complete. It omits any mention of filtering options, pagination, the structure of returned nodes, or the meaning of 'discovered', leaving an agent without enough context to invoke the tool effectively beyond a naive list call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 67% of parameters with descriptions, so the baseline is fair. However, the description adds no parameter semantics beyond the operation name. It does not explain the pagination behavior of limit/offset, which lack textual descriptions in the schema, but the filter parameters (role, status, cluster_id) are adequately described there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (List) and the resource (all discovered Raspberry Pi nodes). It distinguishes from siblings like get_node_info, which targets a single node, and list_clusters, which lists clusters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as get_node_info for specific node details or list_clusters for cluster-level views. It also does not mention available filters or pagination, leaving the agent without decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cluster_statusA
Get detailed status of a cluster including nodes, workloads, and health
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes | Cluster ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a read operation via 'Get' but does not explicitly state it is read-only, lacks side effects, or require any permissions. It also does not disclose behavior on missing clusters or error scenarios. This is a significant gap for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It efficiently conveys the tool's purpose and key result areas.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description adequately conveys what the tool returns ('nodes, workloads, and health'). However, it does not specify the structure of the returned information or set expectations for errors, which prevents a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the only parameter 'cluster_id' with 100% coverage, so the baseline is 3. The description adds no information about the parameter beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' with a clear resource 'detailed status of a cluster' and lists the content areas ('nodes, workloads, and health'). This distinguishes it from sibling tools like list_clusters (which lists clusters) and get_node_info (which targets a single node).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'detailed' implies this should be used when a more in-depth view than list_clusters is needed, but there is no explicit guidance on when to use this tool versus siblings, nor any mention of exclusions. Usage is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_infoB
Get detailed information about a specific node
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | Node ID | |
| include_gpio | No | Include GPIO devices |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, but it only says 'get detailed information' without disclosing whether this is a safe read-only operation, any permission requirements, potential errors (e.g., node not found), or side effects. It also fails to clarify what 'detailed' includes or whether the information is live or cached. The inclusion of an optional include_gpio parameter hints at behavior but is not explained in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the primary action and resource. There is no wasted verbiage, and it is appropriately concise given the simple nature of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the schema covers parameters, there is no output schema, and the description does not explain what fields or data structure the agent can expect in the response. The phrase 'detailed information' is vague and does not enumerate node attributes like status, configuration, or metadata. With no annotations and no return-value description, the agent may be underprepared for the tool's actual output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no extra parameter semantics beyond what the schema already provides (node_id and include_gpio). Since the schema fully documents both parameters, the description does not need to compensate, but it also offers no added clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get detailed information about a specific node' uses a specific verb ('get') and resource ('node'), clearly distinguishing it from sibling tools like provision_node or list_gpio_devices. It unambiguously states the tool's purpose as a read operation for a single node.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and description: use this when you need detailed info about a specific node. However, there is no explicit guidance on when not to use it or alternatives (e.g., discover_nodes for discovery, get_cluster_status for cluster-level info). The description does not mention any contextual prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
initialize_caC
Initialize the Certificate Authority for the cluster
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ||
| organization | Yes | ||
| validity_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must disclose side effects. It only says 'Initialize' without clarifying whether the operation is destructive, idempotent, requires specific permissions, or what happens if a CA already exists. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It communicates the core purpose efficiently and is appropriately concise for the tool's complexity, though it sacrifices detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no annotations and no output schema, the description is insufficient. It omits parameter meanings, potential side effects, required permissions, and any guidance on when this should be called relative to other cluster operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no property descriptions (0% coverage) and the description does not mention parameters at all. Organization, country, and validity_days are not explained, so the description adds no semantic value beyond the parameter names themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Initialize' with a clear resource 'Certificate Authority' and scope 'for the cluster'. It is distinct from all sibling tools, which focus on cluster/node/pod management, so the agent can confidently select this tool for CA setup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool, prerequisites, or how it fits into the cluster lifecycle. It does not mention alternatives or exclusions, leaving the agent without context for deciding when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clustersC
List all K3s clusters
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| offset | No | Offset for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose pagination behavior, ordering, or that this is a read-only operation. The word 'all' is misleading given the pagination parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is appropriately front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too minimal for a tool with pagination parameters and no output schema. It does not explain what is returned, how pagination works, or clarify the 'all' claim. Simple but missing key context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional param information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all K3s clusters' clearly states the verb (list) and resource (K3s clusters). It does not explicitly distinguish from sibling tools like get_cluster_status, but the name and action are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs alternatives. The description only states the action and does not mention context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gpio_devicesB
List all GPIO devices across all nodes
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| node_id | No | Filter by node ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states 'list all GPIO devices across all nodes' without disclosing pagination behavior, performance characteristics, permission requirements, or return format. This is insufficient for a listing tool that likely has pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded and directly addresses the core purpose, earning maximum points for succinctness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and minimal annotations, the description leaves significant gaps: it doesn't specify what fields are returned, how pagination works, or any potential side effects. This is inadequate for a tool with three parameters and no structured output documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only node_id has a description). The tool description does not elaborate on limit/offset semantics, and the phrase 'list all' could obscure the existence of pagination parameters. It adds a hint about node_id ('across all nodes') but nothing more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'list' and resource 'GPIO devices', with scope 'across all nodes', clearly distinguishing it from sibling cluster/node provisioning tools. It is unambiguous about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There are no exclusions, no prerequisites, and no mention of alternative tools for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision_clusterC
Provision a K3s cluster on Raspberry Pi nodes (async operation)
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes | Cluster ID | |
| k3s_config | No | K3s configuration options | |
| ssh_config | Yes | SSH configuration for node access | |
| master_node_id | Yes | Master node ID | |
| worker_node_ids | No | Array of worker node IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It only reveals that the operation is async, which is useful, but it does not mention potential side effects, resource cleanup, required prior states, or how success is communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource, and includes the key note about async behavior. There is no wasted wording, though the extreme brevity limits the informational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex provisioning operation with 5 parameters, no output schema, and no annotations, the description is under-specified. It does not explain how to monitor the async operation, what 'provisioning' entails, dependencies on other tools, or how this interacts with create_cluster or provision_node.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters with basic descriptions, so the baseline is 3. The description adds no parameter-specific context, such as the relationship between master_node_id and worker_node_ids, the role of k3s_config, or how ssh_config is used for authentication.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provisions a K3s cluster on Raspberry Pi nodes, which is a specific verb+resource combination. It distinguishes from sibling tools like create_cluster (likely a metadata operation) and provision_node (single node), though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like create_cluster or provision_node. It mentions async operation but omits prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision_nodeB
Provision K3s on a single node
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Node role (master or worker) | |
| node_id | Yes | Node ID | |
| join_token | No | Cluster join token (required for worker nodes) | |
| ssh_config | No | SSH configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing side effects, prerequisites, and operational details. It only states the action without mentioning SSH requirements, whether the operation is idempotent, what state changes occur, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core purpose. It is appropriately concise for the simple action it names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, nested ssh_config, worker join tokens), the description is too sparse. It lacks information about return values, prerequisites, and how it relates to cluster provisioning, making it incomplete for safe invocation without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already documents each parameter. The description adds no additional meaning beyond what is structured, warranting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's action ('Provision K3s') and scope ('single node'), which differentiates it from the sibling provision_cluster for whole clusters. The verb+resource structure is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like provision_cluster or register_node. It does not mention prerequisites, exclusions, or typical scenarios, leaving the agent to infer usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_nodeC
Manually register a Raspberry Pi node
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Node name | |
| role | No | Node role | |
| cluster_id | No | Cluster ID to assign node to | |
| ip_address | Yes | Node IP address | |
| architecture | Yes | CPU architecture |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing side effects. 'Register' implies a write operation but does not state whether it validates connectivity, requires an existing cluster, or is idempotent. This significant gap leaves the agent uncertain about consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is concise but perhaps overly terse for a tool with five parameters; however, brevity alone does not detract from structural quality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal for a tool with five parameters and many siblings. It does not explain what 'register' entails, prerequisites, return behavior, or how it differs from provision_node. This is insufficient context for reliable tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, including enums for role and architecture, so the baseline is 3. The description itself adds no parameter details beyond the schema, but also doesn't need to since coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Manually register') and the resource ('a Raspberry Pi node'), distinguishing it from automatic discovery tools like discover_nodes. However, it doesn't explicitly distinguish from provision_node, which may have overlapping semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as discover_nodes or provision_node. The word 'Manually' implies a contrast to automated discovery, but no explicit exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scale_clusterC
Scale a cluster by adding or removing worker nodes
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes | Cluster ID | |
| node_count | Yes | Desired total number of worker nodes | |
| ssh_config | No | SSH configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions adding/removing worker nodes, but does not disclose that removing nodes may be destructive, that scaling may be asynchronous, or that SSH configuration is required. The effect on existing workloads is not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with clear wording and no filler. It conveys the core purpose efficiently, earning a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool involves a nested ssh_config object and side effects like adding/removing nodes, but the description does not explain SSH requirements, provisioning behavior, or expected outcomes. With no output schema or annotations, important context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The schema already defines node_count as 'Desired total number of worker nodes' and cluster_id as required. The description adds minimal semantic value beyond the schema and does not clarify ssh_config usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Scale') with a clear resource ('a cluster') and scopes the operation to 'adding or removing worker nodes'. This distinguishes it from sibling tools like create_cluster and delete_cluster, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings such as provision_cluster or deprovision_node. The context is implied by the verb 'scale,' but there is no explicit when-to-use, prerequisites, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
14 tool updates
v0.1.0- First observed
create_cluster - First observed
delete_cluster - First observed
deploy_pod - First observed
deprovision_node - First observed
discover_nodes - First observed
get_cluster_status - First observed
get_node_info - First observed
initialize_ca - First observed
list_clusters - First observed
list_gpio_devices - First observed
provision_cluster - First observed
provision_node - First observed
register_node - First observed
scale_cluster
TDQS
Each tool targets a distinct resource and action: cluster definitions vs provisioning vs status, node discovery vs registration vs provisioning, and unique utilities like GPIO listing and CA initialization. No two tools appear to do the same thing.
All tools follow a consistent snake_case verb_noun pattern (e.g., create_cluster, list_clusters, deprovision_node). This uniform structure makes the toolset predictable and easy to navigate.
14 tools is well within the ideal range for a domain-specific controller. Each tool covers a necessary aspect of Raspberry Pi K3s cluster management, from node lifecycle to cluster operations.
The cluster and node lifecycles are well covered with create/provision/scale/delete and discover/register/provision/deprovision. Minor gaps exist in pod management (only deploy_pod, no get/delete/logs) and GPIO operations (list only), but the core workflows are complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with Kubernetes/Minikube clusters through natural language, allowing AI agents like Codename Goose to manage Kubernetes resources via the Model Context Protocol.2MIT
- AlicenseNot gradedqualityFmaintenanceAn MCP server that orchestrates AI coding assistants (Claude Code CLI and Gemini CLI) to perform complex programming tasks autonomously, allowing remote control of your local development environment from anywhere.24140MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to interact with Kubernetes clusters by translating natural language into kubectl and Helm operations. It allows users to query, manage, and diagnose Kubernetes resources and cluster states through a seamless integration.20Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets AI assistants safely inspect and operate on Kubernetes clusters through natural conversation.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dsyorkd/pi-controller-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server