Agentic¶
Jumpstarter exposes hardware control as structured MCP tools, enabling AI coding agents to interact with devices using natural language from IDEs and AI assistants.
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¶
Setup¶
Cursor¶
Add to your Cursor MCP configuration (~/.cursor/mcp.json):
{
"mcpServers": {
"jumpstarter": {
"command": "jmp",
"args": ["mcp", "serve"]
}
}
}
Claude Code¶
claude mcp add jumpstarter -- jmp 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"]
}
}
}
Other Clients¶
Any MCP-compatible client can use the Jumpstarter server. It communicates over stdio:
jmp mcp serve
For the full list of available tools and their parameters, see the MCP package reference.
Usage Examples¶
Interactive Hardware Exploration¶
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"].
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...
Cursor Agent Mode¶
In Cursor’s Composer (Agent mode), the Jumpstarter tools are available alongside your code:
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¶
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 commandsSet
timeout_secondsfor streaming commands - commands likeserial pipeblock indefinitelyUse
jmp_driversfor Python access - inspect the driver tree to discover methods and signaturesConnections are persistent - create once, run many commands
Logging¶
The MCP server logs to ~/.jumpstarter/logs/mcp-server.log:
tail -f ~/.jumpstarter/logs/mcp-server.log