Warning
This documentation is actively being updated as the project evolves and may not be complete in all areas.
AI Agent Integration¶
Jumpstarter provides an MCP (Model Context Protocol) server that exposes hardware control as structured tools accessible by AI coding agents. This enables natural-language-driven hardware interaction from IDEs and AI assistants.
---
config:
theme: base
themeVariables:
lineColor: '#3d94ff'
primaryBorderColor: '#e5e5e5'
primaryColor: '#f8f8f8'
primaryTextColor: '#000'
secondaryColor: '#f8f8f8'
tertiaryColor: '#fff'
---
flowchart TB
subgraph "Developer"
IDE["IDE / AI Assistant"]
end
subgraph "MCP Server"
JmpMCP["jmp mcp serve"]
end
subgraph "Jumpstarter Infrastructure"
DUTs["Device Under Test"]
end
IDE -- "MCP Protocol" --> JmpMCP
JmpMCP -- "Lease & connect" --> DUTs
Prerequisites¶
Jumpstarter CLI (
jmp) installed and configured with a client identityAn MCP-compatible AI tool (Cursor, Claude Code, Claude Desktop, or any MCP client)
The MCP server package, which is normally provided when you perform a full install
through the jumpstarter-mcp package which provides the jmp mcp serve subcommand on the CLI.
Setup¶
Cursor¶
Add to your Cursor MCP configuration (~/.cursor/mcp.json):
{
"mcpServers": {
"jumpstarter": {
"command": "jmp",
"args": ["mcp", "serve"]
}
}
}
Restart Cursor, then verify the server appears in Settings > MCP. The Jumpstarter tools will be available to the AI agent in Composer.
Claude Code¶
Register the MCP server with a single command:
claude mcp add jumpstarter -- jmp mcp serve
This writes the configuration to ~/.claude.json. Verify with:
claude mcp list
Alternatively, you can add it manually to ~/.claude.json:
{
"mcpServers": {
"jumpstarter": {
"command": "jmp",
"args": ["mcp", "serve"]
}
}
}
Claude Desktop¶
Add to your Claude Desktop configuration:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"jumpstarter": {
"command": "jmp",
"args": ["mcp", "serve"]
}
}
}
Restart Claude Desktop and the Jumpstarter tools will appear in the tools menu.
Other MCP Clients¶
Any MCP-compatible client can use the Jumpstarter server. The server communicates over stdio using the standard MCP protocol. Launch it with:
jmp mcp serve
Available Tools¶
The MCP server exposes the following tools:
Lease & Exporter Management¶
Tool |
Description |
|---|---|
|
List exporters with online status and lease info |
|
List active leases |
|
Create a new lease by selector or exporter name |
|
Release a lease |
Connection Management¶
Tool |
Description |
|---|---|
|
Connect to a device (by lease, selector, or exporter) |
|
Disconnect from a device |
|
List active connections |
Device Interaction¶
Tool |
Description |
|---|---|
|
Execute CLI commands on a connected device |
|
Get shell/Python environment for direct device access |
Discovery & Introspection¶
Tool |
Description |
|---|---|
|
Discover available CLI commands and their arguments |
|
List Python driver objects and their methods |
|
Inspect method signatures, docstrings, and parameters |
Usage Examples¶
Example: Interactive Hardware Exploration¶
Once the MCP server is configured, you can interact with hardware using natural language from your AI assistant:
You: What devices are available on the cluster?
Agent calls
jmp_list_exportersand shows a summary of available hardware.You: Get me a QEMU target and power it on.
Agent calls
jmp_create_lease,jmp_connect, thenjmp_runwith["power", "on"].You: Check what OS is running via SSH.
Agent calls
jmp_runwith["ssh", "--", "cat", "/etc/os-release"]and interprets the output.You: Give me a Python example to automate this.
Agent calls
jmp_get_envand generates a script using theenv()helper.
Example: Claude Code Session¶
$ claude
> /mcp
Connected MCP servers:
- jumpstarter (jmp mcp serve)
> Can you list the hardware available on the jumpstarter cluster?
I'll check what devices are available...
[Uses jmp_list_exporters]
Here's what's available:
- qemu-test-01 (online, no active lease)
- arm-board-01 (online, leased by alice)
- arm-board-02 (online, no active lease)
> Lease arm-board-02 and check if it boots to Linux
[Uses jmp_create_lease, jmp_connect, jmp_run to power on and SSH]
The board is running Fedora 41 (aarch64). Here's the full `uname -a` output...
Example: Cursor Agent Mode¶
In Cursor’s Composer (Agent mode), the Jumpstarter tools are available alongside your code. This enables workflows like:
Ask the agent to flash a new firmware image to a board
Have it verify the board boots successfully via serial console
Run your test suite against the live hardware
Iterate on code fixes with the agent retesting on real hardware
Typical Workflow¶
---
config:
theme: base
themeVariables:
lineColor: '#3d94ff'
primaryBorderColor: '#e5e5e5'
primaryColor: '#f8f8f8'
primaryTextColor: '#000'
secondaryColor: '#f8f8f8'
tertiaryColor: '#fff'
---
sequenceDiagram
participant User
participant Agent as AI Agent
participant MCP as MCP Server
participant Ctrl as Controller
User->>Agent: "Get me an ARM board"
Agent->>MCP: jmp_create_lease(selector="arch=arm64")
MCP->>Ctrl: Request lease
Ctrl-->>MCP: Lease ID
MCP-->>Agent: Lease created
Agent->>MCP: jmp_connect(lease_id)
MCP-->>Agent: Connected
Agent->>MCP: jmp_explore()
MCP-->>Agent: Available commands: power, ssh, serial, storage
User->>Agent: "Power it on and check the OS"
Agent->>MCP: jmp_run(["power", "on"])
Agent->>MCP: jmp_run(["ssh", "--", "cat", "/etc/os-release"])
MCP-->>Agent: OS info
User->>Agent: "Done, release it"
Agent->>MCP: jmp_disconnect()
Agent->>MCP: jmp_delete_lease()
Tips¶
Use
jmp_explorefirst: Each device type exposes different commands. Always explore before assuming what’s available.Set
timeout_secondsfor streaming commands: Commands likeserial pipeblock indefinitely. Use a shorttimeout_seconds(e.g., 10-15) so the command is killed after capturing available output.Use
jmp_driversfor Python access: When you need programmatic control beyond CLI commands, inspect the Python driver tree to discover available methods and their signatures.Connections are persistent: Create once, run many commands. No need to reconnect between commands.
Logging and Debugging¶
The MCP server logs to ~/.jumpstarter/logs/mcp-server.log. Monitor it with:
tail -f ~/.jumpstarter/logs/mcp-server.log
Writing Python with AI Assistance¶
The MCP server is especially useful when writing Python code that interacts with hardware. While connected to a device, the agent can introspect the live connection to discover available drivers, methods, and their signatures – then use that knowledge to help you write correct code.
Ask the agent to explore what’s available on your target:
“I’m connected to an ARM board. What drivers and methods are available?”
The agent calls
jmp_driversandjmp_driver_methodsto inspect the live connection and gives you a summary of power, ssh, serial, storage, etc.
Ask for help writing automation scripts:
“Write me a Python script that power-cycles the board, waits for it to boot, and grabs the kernel version over SSH.”
The agent inspects the driver methods to discover exact signatures and generates a working script using the
env()helper.
Debug a failing interaction:
“My serial expect is timing out. Can you read the serial output and tell me what the board is printing?”
The agent calls
jmp_runwith["serial", "pipe"]and a short timeout to capture what the console is outputting right now.
Discover capabilities you didn’t know about:
“What can I do with the storage driver on this device?”
The agent calls
jmp_driver_methodsfor the storage driver and shows you methods likeflash,write_local_file,read_to_local_file, etc. with their full signatures and docstrings.
Iterate on code with live hardware feedback:
“Run my test script and tell me if the board boots successfully.”
The agent uses
jmp_get_envto get the shell environment, executes your script, and reports back with the actual device output.
See the jumpstarter-mcp package reference for the full list of tools and their parameters.