Pi Controller Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Pi Controller Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP (Model Context Protocol) server for managing Raspberry Pi K3s clusters via AI assistants like 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"
}
}
}
}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]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 clusterdiscover_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 nodelist_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 devicedeploy_pod - Deploy Kubernetes podget_pod - Get pod informationdelete_pod - Delete podinitialize_ca - Initialize CAissue_certificate - Issue new certificatelist_certificates - List all certificatesrevoke_certificate - Revoke certificateResources 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| Variable | Required | Description | Default |
|---|---|---|---|
PI_CONTROLLER_URL | ✅ | Pi-controller API URL | - |
PI_CONTROLLER_API_KEY | ⚠️* | API key for auth | - |
PI_CONTROLLER_USERNAME | ⚠️* | Username for auth | - |
PI_CONTROLLER_PASSWORD | ⚠️* | Password for auth | - |
PI_CONTROLLER_TLS_VERIFY | ❌ | Verify TLS certs | true |
PI_CONTROLLER_TLS_CA_CERT | ❌ | Path to CA cert | - |
PI_CONTROLLER_TIMEOUT | ❌ | Request timeout (ms) | 30000 |
LOG_LEVEL | ❌ | Logging level | info |
*Either API key or username/password required
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"
}
}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 progressUser: "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 stateUser: "Deploy nginx on the homelab cluster"
AI uses:
1. list_clusters → Finds homelab cluster
2. deploy_pod → Creates nginx pod
3. get_pod → Verifies deploymentgit clone https://github.com/dsyorkd/pi-controller-mcp.git
cd pi-controller-mcp
npm install# Copy environment template
cp .env.example .env
# Edit .env with your pi-controller URL and credentials
nano .env
# Start in watch mode
npm run devnpm run build# Run all tests
npm test
# Run unit tests only
npm run test:unit
# Run integration tests (requires running pi-controller)
npm run test:integrationpi-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 definitionsError: Cannot connect to pi-controller
Solutions:
PI_CONTROLLER_URL is correctcurl ${PI_CONTROLLER_URL}/healthError: Authentication failed
Solutions:
.mcp.json or .envError: Forbidden: insufficient permissions
Solutions:
viewer roleoperator roleadmin rolegit checkout -b feature/amazing-featuregit commit -m 'Add amazing feature'git push origin feature/amazing-featureSee CONTRIBUTING.md for development guidelines.
MIT License - see LICENSE file for details
Built with ❤️ for the Raspberry Pi and AI community
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.