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

  • Jumpstarter CLI (jmp) installed and configured with a client identity

  • An MCP-compatible AI tool (Cursor, Claude Code, Claude Desktop, or any MCP client)

  • The jumpstarter-mcp package (included in a full install)

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.json

  • Windows: %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_exporters and shows a summary of available hardware.

You: Get me a QEMU target and power it on.

Agent calls jmp_create_lease, jmp_connect, then jmp_run with ["power", "on"].

You: Check what OS is running via SSH.

Agent calls jmp_run with ["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:

  1. Ask the agent to flash a new firmware image to a board

  2. Have it verify the board boots successfully via serial console

  3. Run your test suite against the live hardware

  4. 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_explore first - each device type exposes different commands

  • Set timeout_seconds for streaming commands - commands like serial pipe block indefinitely

  • Use jmp_drivers for Python access - inspect the driver tree to discover methods and signatures

  • Connections 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