CloudLab MCP Server
# CloudLab MCP Server
An MCP (Model Context Protocol) server for managing CloudLab/Emulab experiments. This allows AI assistants like Claude to interact with your CloudLab experiments directly.
## Features
- **Create experiments** - Create new experiments from profiles
- **List experiments** - View all your CloudLab experiments
- **Get experiment details** - See detailed status including node states
- **Reboot nodes** - Reboot individual nodes or all nodes in an experiment
- **Reload/reimage nodes** - Reload a node with its disk image
- **Power cycle nodes** - Hard reboot for unresponsive nodes
- **Extend experiments** - Request time extensions
- **Terminate experiments** - Clean up when done
## Prerequisites
- Node.js 18+
- A CloudLab account with API access
- A valid CloudLab JWT token
## Installation
```bash
npm install
npm run build
```
## Configuration
### Getting your CloudLab JWT Token
1. Log in to [CloudLab](https://www.cloudlab.us/)
2. Go to your user profile
3. Navigate to "Download Credentials" or generate an API token
4. Save the token as `cloudlab.jwt`
### Token Location
The server looks for your JWT token in these locations (in order):
1. Path specified in `CLOUDLAB_TOKEN_PATH` environment variable
2. `cloudlab.jwt` in the project directory
3. `~/Downloads/cloudlab.jwt`
**Important:** Never commit your JWT token to version control!
## Usage with Claude Desktop
Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"cloudlab": {
"command": "node",
"args": ["/path/to/cloudlab-mcp/dist/index.js"]
}
}
}
```
## Available Tools
| Tool | Description |
|------|-------------|
| `create_experiment` | Create a new experiment from a profile |
| `list_experiments` | List all your experiments |
| `get_experiment` | Get detailed status of an experiment |
| `reboot_node` | Reboot a specific node |
| `reboot_all_nodes` | Reboot all nodes in an experiment |
| `reload_node` | Reload/reimage a node |
| `powercycle_node` | Power cycle a node (hard reboot) |
| `extend_experiment` | Extend experiment expiration |
| `terminate_experiment` | Terminate an experiment |
## Environment Variables
| Variable | Description |
|----------|-------------|
| `CLOUDLAB_TOKEN_PATH` | Custom path to your JWT token file |
| `CLOUDLAB_API_URL` | Override the API endpoint (default: `https://www.emulab.net:43794`) |
## License
MIT
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose with no ambiguity. The tools cover different actions on experiments (create, get, list, extend, terminate) and nodes (powercycle, reboot, reload), with clear boundaries between them. An agent can easily tell them apart based on their specific functions.
All tools follow a consistent verb_noun naming pattern throughout. The verbs are clear and descriptive (e.g., create_experiment, reboot_node), and the nouns consistently specify the target resource (experiment or node). There are no deviations in style or convention.
With 9 tools, the count is well-scoped for managing CloudLab experiments and nodes. Each tool earns its place by covering essential operations like lifecycle management (create, terminate), status retrieval (get, list), and node control (reboot, reload). This is neither too sparse nor overwhelming for the domain.
The tool set provides strong coverage for the CloudLab domain, including CRUD-like operations for experiments (create, get, list, terminate) and comprehensive node management (reboot, powercycle, reload). A minor gap is the lack of tools for modifying experiment configurations or profiles after creation, but agents can work around this by recreating experiments if needed.