Skip to main content
Glama

NanoKVM MCP Server

Python 3.10+ License: MIT

An MCP (Model Context Protocol) server for controlling Sipeed NanoKVM devices. This enables AI assistants like Claude to remotely control hardware via keyboard, mouse, power buttons, and screen capture.

What is NanoKVM?

NanoKVM is an open-source, affordable IP-KVM device based on RISC-V. It allows remote access to computers at the BIOS level—perfect for managing servers, embedded systems, or any headless machine.

Related MCP server: mcp-redfish

What is MCP?

Model Context Protocol is an open standard for connecting AI assistants to external tools and data sources. This server exposes NanoKVM functionality as MCP tools that Claude and other AI assistants can use.

Features

Category

Capabilities

Power Control

Power on/off, reset, force shutdown via ATX header

Keyboard

Type text, send key combinations (Ctrl+C, Alt+F4, etc.)

Mouse/Touch

Click, move, scroll, tap at absolute screen coordinates

Screenshots

Capture display as JPEG from MJPEG video stream

ISO Mounting

Mount/unmount ISO images for remote OS installation

Monitoring

Power LED status, HDD activity, HDMI state, resolution

Installation

From Source

git clone https://github.com/scgreenhalgh/nanokvm-mcp.git
cd nanokvm-mcp
pip install -e .

Dependencies

  • Python 3.10+

  • mcp - Model Context Protocol SDK

  • httpx - Async HTTP client

  • websockets - WebSocket client for real-time HID

  • pycryptodome - AES encryption for authentication

  • pillow - Image processing for screenshots

Configuration

Environment Variables

Variable

Required

Default

Description

NANOKVM_HOST

Yes

-

NanoKVM IP address or hostname

NANOKVM_USER

No

admin

Web UI username

NANOKVM_PASS

No

admin

Web UI password

NANOKVM_SCREEN_WIDTH

No

1920

Target screen width in pixels

NANOKVM_SCREEN_HEIGHT

No

1080

Target screen height in pixels

NANOKVM_HTTPS

No

false

Use HTTPS instead of HTTP

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "nanokvm": {
      "command": "python",
      "args": ["-m", "nanokvm_mcp.server"],
      "env": {
        "NANOKVM_HOST": "192.168.1.100",
        "NANOKVM_USER": "admin",
        "NANOKVM_PASS": "admin",
        "NANOKVM_SCREEN_WIDTH": "1920",
        "NANOKVM_SCREEN_HEIGHT": "1080"
      }
    }
  }
}

Claude Code

Add to your Claude Code MCP configuration:

{
  "mcpServers": {
    "nanokvm": {
      "command": "python",
      "args": ["-m", "nanokvm_mcp.server"],
      "env": {
        "NANOKVM_HOST": "192.168.1.100"
      }
    }
  }
}

Available MCP Tools

Power Control

Tool

Parameters

Description

nanokvm_power

action: power, power_long, reset

Control power button or reset

nanokvm_led_status

-

Get power and HDD LED states

Actions:

  • power - Short press (800ms) - normal power on/off

  • power_long - Long press (5000ms) - force power off

  • reset - Press reset button

Display

Tool

Parameters

Description

nanokvm_hdmi_status

-

Get HDMI connection state and resolution

nanokvm_hdmi_reset

-

Reset HDMI connection

nanokvm_screenshot

-

Capture display as base64 JPEG

Keyboard Input

Tool

Parameters

Description

nanokvm_send_text

text, language

Type text (max 1024 chars)

nanokvm_send_key

key, ctrl, shift, alt, meta

Send single key with modifiers

Supported Keys:

  • Letters: a-z

  • Numbers: 0-9

  • Function keys: f1-f12

  • Navigation: up, down, left, right, home, end, pageup, pagedown

  • Control: enter, escape, tab, backspace, delete, insert, space

Mouse/Touch Input

Tool

Parameters

Description

nanokvm_tap

x, y

Tap at screen coordinates

nanokvm_click

button, x, y

Click button, optionally at position

nanokvm_move

x, y

Move cursor to position

nanokvm_scroll

amount

Scroll wheel (positive=down)

Coordinate System:

  • Origin (0, 0) is top-left corner

  • Coordinates are in screen pixels based on SCREEN_WIDTH and SCREEN_HEIGHT

  • Internally mapped to NanoKVM's 1-32767 absolute coordinate range

Storage

Tool

Parameters

Description

nanokvm_list_images

-

List available ISO images

nanokvm_mount_iso

file, as_cdrom

Mount ISO image

nanokvm_unmount_iso

-

Unmount current ISO

nanokvm_mounted_image

-

Get mounted image info

System

Tool

Parameters

Description

nanokvm_reset_hid

-

Reset keyboard/mouse devices

nanokvm_info

-

Get NanoKVM device info

nanokvm_hardware

-

Get hardware information

Usage Examples

Once configured, ask Claude to:

Request

Tool Used

"Is the server powered on?"

nanokvm_led_status

"Power on the machine"

nanokvm_power

"Reset the server"

nanokvm_power with action="reset"

"Force shutdown"

nanokvm_power with action="power_long"

"Type 'root' and press enter"

nanokvm_send_text + nanokvm_send_key

"Press Ctrl+Alt+Delete"

nanokvm_send_key with modifiers

"Take a screenshot"

nanokvm_screenshot

"Click at position 500, 300"

nanokvm_click

"Mount the Ubuntu ISO"

nanokvm_mount_iso

Programmatic Usage

You can also use the client library directly:

import asyncio
from nanokvm_mcp import NanoKVMClient

async def main():
    # Initialize client
    client = NanoKVMClient(
        host="192.168.1.100",
        username="admin",
        password="admin",
        screen_width=1920,
        screen_height=1080,
    )

    try:
        # Check power status
        status = await client.get_led_status()
        print(f"Power LED: {status['pwr']}, HDD LED: {status['hdd']}")

        # Get HDMI info
        hdmi = await client.get_hdmi_status()
        print(f"Resolution: {hdmi['width']}x{hdmi['height']}")

        # Type some text
        await client.paste_text("Hello, World!")

        # Send Enter key
        await client.send_key("enter")

        # Take a screenshot
        screenshot = await client.screenshot()
        with open("screenshot.jpg", "wb") as f:
            f.write(screenshot)

        # Click at coordinates
        await client.tap(500, 300)

        # Power cycle
        await client.reset()

    finally:
        await client.close()

asyncio.run(main())

API Reference

See API_REFERENCE.md for complete documentation of the NanoKVM REST API and WebSocket protocol, including:

  • Authentication (AES-256-CBC encryption)

  • All REST endpoints with request/response formats

  • WebSocket HID protocol for keyboard and mouse

  • USB HID keycodes reference

  • Direct SSH HID access via /dev/hidg*

How It Works

Architecture

┌─────────────────┐     HTTP/WS      ┌─────────────────┐
│   MCP Client    │◄────────────────►│    NanoKVM      │
│  (Claude, etc.) │                  │                 │
└────────┬────────┘                  │  ┌───────────┐  │
         │                           │  │ REST API  │  │
    MCP Protocol                     │  └───────────┘  │
         │                           │  ┌───────────┐  │
┌────────▼────────┐                  │  │ WebSocket │  │
│  nanokvm-mcp    │                  │  │   /api/ws │  │
│     Server      │                  │  └───────────┘  │
│                 │                  │  ┌───────────┐  │
│ • Power control │                  │  │   MJPEG   │  │
│ • HID input     │                  │  │  Stream   │  │
│ • Screenshots   │                  │  └───────────┘  │
└─────────────────┘                  └─────────────────┘

Communication Methods

Feature

Method

Endpoint

Authentication

REST

POST /api/auth/login

Power control

REST

POST /api/vm/gpio

Text input

REST

POST /api/hid/paste

Key/Mouse events

WebSocket

/api/ws

Screenshots

REST

GET /api/stream/mjpeg (parsed)

ISO mounting

REST

POST /api/storage/image/mount

Development

Setup

# Clone repository
git clone https://github.com/scgreenhalgh/nanokvm-mcp.git
cd nanokvm-mcp

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

Project Structure

nanokvm-mcp/
├── nanokvm_mcp/
│   ├── __init__.py      # Package exports
│   ├── server.py        # FastMCP server with tool definitions
│   ├── client.py        # NanoKVM API client (REST + WebSocket)
│   ├── auth.py          # AES password encryption
│   └── hid.py           # USB HID keycodes and helpers
├── pyproject.toml       # Package configuration
├── README.md            # This file
└── API_REFERENCE.md     # Complete API documentation

Troubleshooting

Connection Refused

  1. Verify NanoKVM is reachable: ping <NANOKVM_HOST>

  2. Check web UI is accessible: http://<NANOKVM_HOST>

  3. Verify credentials are correct

Authentication Failed

  1. Default credentials are admin/admin

  2. Check if password was changed in NanoKVM web UI

  3. Authentication can be disabled in /etc/kvm/server.yaml

HID Input Not Working

  1. Try nanokvm_reset_hid tool

  2. Check "Reset HID" in NanoKVM web UI

  3. Verify USB cable connection to target machine

  4. Check /dev/hidg* devices exist on NanoKVM via SSH

Screenshot Timeout

  1. Ensure HDMI is connected and signal detected

  2. Check nanokvm_hdmi_status for connection state

  3. Try nanokvm_hdmi_reset to reinitialize

License

MIT

Available Tools

19 tools
nanokvm_clickB
Click a mouse button, optionally at a specific position.

Args:
    button: Mouse button - "left", "right", or "middle"
    x: Optional X coordinate to move to before clicking
    y: Optional Y coordinate to move to before clicking
ParametersJSON Schema
NameRequiredDescriptionDefault
buttonNoleft
xNo
yNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions clicking and optional movement, but lacks critical behavioral details: whether this requires specific permissions (e.g., admin access), if it's safe or destructive (e.g., could trigger unintended actions), rate limits, or what the output contains. For a tool interacting with a KVM system, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, followed by a brief, bullet-like parameter explanation. Every sentence earns its place without redundancy, making it highly efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no annotations, but has an output schema), the description is minimally adequate. It covers the basic action and parameters but lacks behavioral context (e.g., safety, permissions) and doesn't leverage the output schema to explain return values. For a KVM interaction tool, more completeness is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'button' is a mouse button with specific values, and 'x'/'y' are optional coordinates for movement before clicking. This clarifies the purpose of each parameter, compensating well for the schema's lack of descriptions, though it doesn't detail coordinate systems or units.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Click a mouse button, optionally at a specific position.' This specifies the verb ('click') and resource ('mouse button'), and distinguishes it from siblings like 'nanokvm_move' or 'nanokvm_scroll'. However, it doesn't explicitly differentiate from 'nanokvm_tap' (which might be similar), keeping it from a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions optional coordinates but doesn't specify scenarios (e.g., use for GUI interactions, avoid for keyboard-only tasks) or compare to siblings like 'nanokvm_tap' or 'nanokvm_send_key'. Without such context, the agent lacks clear usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_hardwareB
Get NanoKVM hardware information.

Returns:
    Dictionary with hardware details
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns a dictionary with hardware details, which is basic output information. However, it lacks details on permissions, rate limits, error handling, or whether it's a read-only operation. For a tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with two sentences: one for the purpose and one for the return value. It is front-loaded with the main action. However, the second sentence could be more informative, slightly reducing efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, 100% schema coverage, and no output schema, the description is minimally adequate. It explains the purpose and return format, but lacks behavioral context like error handling or usage scenarios. For a simple read operation, it meets basic needs but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description does not add parameter information, which is appropriate. A baseline of 4 is applied as it compensates adequately for the lack of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get NanoKVM hardware information' specifies both the verb ('Get') and resource ('NanoKVM hardware information'). It distinguishes from siblings like nanokvm_info (likely general info) and nanokvm_hdmi_status (specific HDMI status), though not explicitly. However, it lacks explicit sibling differentiation, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention context, prerequisites, or exclusions, such as when to choose nanokvm_hardware over nanokvm_info or nanokvm_hdmi_status. This leaves the agent without explicit usage instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_hdmi_resetA

Reset the HDMI connection. Useful if video is not displaying correctly.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the action ('Reset') but doesn't disclose behavioral traits like whether this requires specific permissions, if it's reversible, potential side effects (e.g., temporary video loss), or rate limits. For a tool that likely involves hardware interaction, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with two sentences: the first states the purpose, and the second provides usage context. Every word earns its place, and it's front-loaded with the core action. No unnecessary details or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, an output schema exists, and annotations are absent, the description is minimally adequate. It explains what the tool does and when to use it, but lacks details on behavioral aspects like safety or effects. The output schema likely covers return values, so that gap is mitigated, but overall completeness is basic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the absence of inputs. The description doesn't need to add parameter information, and it appropriately doesn't mention any. A baseline of 4 is applied since no parameters exist, and the description doesn't create confusion about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Reset the HDMI connection') and the resource ('HDMI connection'), making the purpose immediately understandable. It distinguishes from siblings like 'nanokvm_hdmi_status' by focusing on resetting rather than checking status. However, it doesn't specify what exactly gets reset (e.g., signal, port, device), keeping it from a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('Useful if video is not displaying correctly'), which helps the agent understand appropriate scenarios. It doesn't explicitly mention when NOT to use it or name specific alternatives among siblings, but the context is sufficient for basic decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_hdmi_statusA
Get HDMI connection status and resolution.

Returns:
    Dictionary with HDMI state including:
    - connected: Whether HDMI signal is detected
    - width: Video width in pixels
    - height: Video height in pixels
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the return format (a dictionary with specific fields like connected, width, height), which is helpful. However, it doesn't cover potential errors (e.g., if the device is offline), latency, or side effects (e.g., whether this query impacts system performance). For a read-only tool, this is adequate but lacks depth in operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and well-structured: the first sentence states the purpose, followed by a clear breakdown of the return values. Every sentence adds value without any fluff or repetition, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is reasonably complete for a status-checking operation. It explains what the tool does and what it returns. However, without annotations or output schema, it could benefit from mentioning error conditions or dependencies (e.g., requires the device to be powered on), leaving some contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description correctly omits parameter details, focusing instead on the output. This aligns perfectly with the schema, earning a high score as it avoids redundancy and maintains clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get HDMI connection status and resolution') and identifies the exact resource (HDMI connection). It distinguishes itself from sibling tools like nanokvm_hdmi_reset (which resets) or nanokvm_screenshot (which captures images), making the purpose unambiguous and well-differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., device power state), exclusions, or comparisons to siblings like nanokvm_hardware (which might include broader hardware info) or nanokvm_info (which could provide general system status). Without such context, the agent lacks direction on optimal usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_infoB
Get NanoKVM device information.

Returns:
    Dictionary with device info including IP, firmware version, etc.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns a dictionary with device info, but doesn't cover critical aspects like whether it's a read-only operation, potential side effects, error conditions, or performance considerations. This is a significant gap for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with two sentences: one stating the purpose and one describing the return value. It's front-loaded with the main action. However, the second sentence could be slightly more structured (e.g., as a bullet point), and there's minor room for improvement in flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, no annotations, and no output schema, the description is minimally adequate. It explains what the tool does and the return type, but lacks details on output structure, error handling, or behavioral traits. For a simple info-retrieval tool, this is passable but leaves gaps in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add any parameter details, which is appropriate. It gets a baseline score of 4 because it doesn't need to compensate for any schema gaps, but it doesn't reach 5 as it doesn't explicitly state 'no parameters required' or similar clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get NanoKVM device information.' This is a specific verb ('Get') and resource ('NanoKVM device information'), making it understandable. However, it doesn't explicitly differentiate from sibling tools like 'nanokvm_hardware' or 'nanokvm_hdmi_status', which might also provide device-related information, so it doesn't reach a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any context, prerequisites, or exclusions, such as whether it's for general info versus specific hardware details from other tools. This leaves the agent with no usage instructions beyond the basic purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_led_statusA
Get the power and HDD LED status of the target machine.

Returns:
    Dictionary with 'pwr' and 'hdd' boolean values indicating LED states.
    - pwr: True if power LED is on (machine is powered)
    - hdd: True if HDD LED is on (disk activity)
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well by disclosing key behavioral traits: it's a read-only operation (implied by 'Get'), returns a dictionary with specific boolean fields, and explains what each LED indicates. It doesn't mention rate limits or errors, but covers essential behavior clearly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, followed by a concise breakdown of the return values. Every sentence adds essential information without redundancy, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no annotations, no output schema), the description is nearly complete: it explains the purpose, behavior, and output format. A minor gap is the lack of error handling or edge case details, but it adequately covers the core functionality for this low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on output semantics, adding value by explaining the return structure and meaning of 'pwr' and 'hdd' fields, which compensates for the lack of an output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get') and resource ('power and HDD LED status of the target machine'), distinguishing it from siblings like power control or screenshot tools. It precisely defines what the tool does without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for monitoring LED states, but does not explicitly state when to use this tool versus alternatives (e.g., other status tools like 'nanokvm_hdmi_status' or 'nanokvm_info'). It provides basic context but lacks explicit guidance on exclusions or comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_list_imagesA
List available ISO images on the NanoKVM device.

Returns:
    List of available images with file paths and metadata
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists images and returns metadata, which is adequate for a read-only operation, but it doesn't cover aspects like error handling, rate limits, authentication needs, or whether it's a safe operation. The description adds basic context but lacks depth for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and well-structured, with two sentences that efficiently convey the purpose and return value without any wasted words. It's front-loaded with the main action, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is reasonably complete. It explains what the tool does and what it returns, which is adequate for a listing operation. The output schema handles return values, so the description doesn't need to detail them further. However, it could improve by addressing sibling tool differentiation or behavioral nuances.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so the schema fully documents the lack of inputs. The description doesn't need to add parameter details, and it appropriately avoids discussing parameters, earning a baseline score. It could be a 5 if it explicitly noted 'no parameters required,' but the current clarity is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('List') and resource ('available ISO images on the NanoKVM device'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'nanokvm_mounted_image' or 'nanokvm_mount_iso', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't mention how it differs from 'nanokvm_mounted_image' (which likely shows currently mounted images) or when to prefer this over other listing or query tools. This lack of contextual usage information limits its helpfulness.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_mounted_imageA
Get information about the currently mounted ISO image.

Returns:
    Dictionary with mounted image info, or None if nothing mounted
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns a dictionary with mounted image info or None if nothing is mounted, which clarifies the output behavior. However, it doesn't mention potential errors (e.g., network issues), performance characteristics, or side effects, leaving gaps in behavioral understanding for a tool that interacts with hardware.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and well-structured: two sentences that directly state the purpose and return behavior without any fluff. Every word earns its place, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, output schema exists), the description is reasonably complete. It explains what the tool does and the return format, and the output schema will handle return value details. However, it lacks context about when to use it versus siblings, which slightly reduces completeness for an agent navigating multiple tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to explain parameters, so it appropriately focuses on the tool's function and return value. A baseline of 4 is justified since no parameter information is required, and the description adds value by explaining the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get information about the currently mounted ISO image.' It specifies the verb ('Get information') and resource ('currently mounted ISO image'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'nanokvm_list_images' or 'nanokvm_unmount_iso', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether an ISO must be mounted first), compare it to 'nanokvm_list_images' (which lists available images), or specify scenarios where this tool is appropriate. This lack of contextual guidance limits its utility for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_mount_isoA
Mount an ISO image for the target machine.

The target machine will see this as an attached CD-ROM or USB disk.

Args:
    file: Path to ISO file on the NanoKVM device
    as_cdrom: Mount as CD-ROM (True) or USB disk (False)
ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
as_cdromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool performs a mounting action (implying a state change/mutation) and describes the effect on the target machine, but lacks details on permissions, side effects, error conditions, or rate limits. The description adds some behavioral context but is incomplete for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the core purpose, the second adds important behavioral context, and the 'Args' section efficiently documents parameters. Every sentence earns its place with no wasted words, and the structure is logical and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is an output schema (which handles return values), no annotations, and 2 parameters with 0% schema coverage, the description does well by explaining the tool's purpose, effect, and parameters. However, as a mutation tool with no annotations, it could benefit from more behavioral details (e.g., prerequisites, errors) to be fully complete, though the output schema mitigates some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explicitly documents both parameters ('file' and 'as_cdrom') with clear semantics: 'file' is the 'Path to ISO file on the NanoKVM device', and 'as_cdrom' specifies whether to 'Mount as CD-ROM (True) or USB disk (False)'. This adds essential meaning beyond the bare schema, fully covering both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Mount an ISO image') and target resource ('for the target machine'), distinguishing it from sibling tools like 'nanokvm_unmount_iso' (which performs the opposite action) and 'nanokvm_list_images' (which only lists images). The verb 'mount' is precise and the resource 'ISO image' is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining that the mounted ISO will appear as 'an attached CD-ROM or USB disk' to the target machine, which helps understand when to use this tool for virtual media attachment. However, it does not explicitly state when not to use it or name alternatives (e.g., when to use 'nanokvm_unmount_iso' instead), though the sibling tool names imply a complementary relationship.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_moveA
Move mouse cursor to absolute screen position.

Args:
    x: X coordinate (0 = left edge)
    y: Y coordinate (0 = top edge)
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the action ('Move mouse cursor') but does not disclose behavioral traits such as whether this requires specific permissions, if it affects other system states, or what the expected response format is. The description is minimal and lacks crucial operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the main purpose followed by parameter details. It uses two sentences efficiently, with no wasted words, though it could be slightly more structured (e.g., bullet points for parameters).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 simple parameters) and the presence of an output schema (which handles return values), the description is somewhat complete but lacks depth. It covers the basic action and parameters but misses behavioral context like error conditions or system dependencies, making it adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% schema description coverage. It explains that 'x' and 'y' are coordinates for absolute screen positioning, with 'x: X coordinate (0 = left edge)' and 'y: Y coordinate (0 = top edge)', clarifying the coordinate system and edge references not present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Move') and resource ('mouse cursor'), and distinguishes it from siblings like 'nanokvm_click' or 'nanokvm_tap' by specifying absolute positioning rather than clicking or tapping actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for moving the mouse cursor to specific coordinates, but does not explicitly state when to use this tool versus alternatives like 'nanokvm_click' (for clicking) or 'nanokvm_scroll' (for scrolling). It provides basic context but lacks explicit exclusions or comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_powerA
Control the target machine's power.

Args:
    action: Power action to perform
        - "power": Short press power button (800ms) - normal on/off
        - "power_long": Long press power button (5000ms) - force off
        - "reset": Press reset button (DEPRECATED for Pi 5 - use power_cycle)

Note: Raspberry Pi 5 has NO hardware reset button. The "reset" action
will not work on Pi 5. Use nanokvm_power_cycle() instead.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionNopower

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It effectively discloses behavioral traits: it describes what each action does (e.g., short press vs. long press durations), notes hardware limitations (Pi 5 has no reset button), and warns about deprecated usage. This adds valuable context beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the purpose, followed by a structured breakdown of the 'action' parameter with bullet points and critical notes. Every sentence earns its place by providing essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 1 parameter with no schema descriptions, no annotations, and an output schema present, the description is largely complete. It explains the parameter thoroughly and covers key behavioral aspects. A minor gap is the lack of explicit mention of what the tool returns, though the output schema may handle that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It fully explains the single parameter 'action' with detailed semantics: defines each enum value, specifies button press durations, clarifies normal vs. force off behaviors, and warns about deprecation and hardware compatibility. This adds significant meaning beyond the bare enum in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Control the target machine's power.' This specifies the verb ('control') and resource ('target machine's power'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'nanokvm_power_cycle' beyond the note about Pi 5 compatibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use specific actions (e.g., 'power' for normal on/off, 'power_long' for force off) and when not to use 'reset' on Raspberry Pi 5, suggesting 'nanokvm_power_cycle' as an alternative. It lacks explicit guidance on when to choose this tool over other power-related siblings in broader scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_power_cycleA
Power cycle the target machine (force off, wait, power on).

This is the recommended way to "reset" a Raspberry Pi 5 since
it has no hardware reset button. The sequence is:
1. Force power off (5 second button hold)
2. Wait for specified duration
3. Power on (short button press)

Args:
    off_duration_ms: Time to wait after power off before powering on (ms).
                    Default 3000ms (3 seconds) ensures clean power cycle.
                    Use longer values (5000+) if you have slow storage.

Returns:
    Status message indicating power cycle completion
ParametersJSON Schema
NameRequiredDescriptionDefault
off_duration_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by explaining the behavioral sequence (force off, wait, power on), timing details, and the forceful nature of the operation. It doesn't mention authentication needs, rate limits, or error conditions, but provides substantial operational context for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with a clear purpose statement, numbered sequence of operations, and well-organized parameter/return sections. Every sentence adds value, with no wasted words, and information is appropriately front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations but with output schema, the description provides complete context: clear purpose, detailed behavioral sequence, parameter semantics with practical guidance, and return value indication. The output schema handles return format details, so the description appropriately focuses on operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage (schema only shows parameter name and type), the description adds significant value by explaining the parameter's purpose ('Time to wait after power off before powering on'), default value rationale ('ensures clean power cycle'), and practical guidance ('Use longer values if you have slow storage'). This fully compensates for the schema's lack of semantic information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('power cycle the target machine') with detailed steps (force off, wait, power on) and distinguishes this tool from siblings by explaining it's the recommended reset method for Raspberry Pi 5 due to lack of hardware reset button. This goes beyond just restating the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('recommended way to "reset" a Raspberry Pi 5 since it has no hardware reset button') and offers parameter-specific usage advice ('Use longer values (5000+) if you have slow storage'), creating clear context for appropriate tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_reset_hidA

Reset the HID (keyboard/mouse) devices.

Use this if keyboard or mouse input stops working.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a reset action but doesn't disclose behavioral traits like whether it requires specific permissions, if it's destructive to ongoing operations, potential side effects, or rate limits. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the purpose and followed by usage guidance, with zero wasted words. Every sentence adds value, making it highly efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a reset operation with no parameters) and the presence of an output schema (which handles return values), the description is adequate but incomplete. It lacks details on behavioral aspects like safety or effects, which are important for a reset tool, leaving room for improvement despite the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter information is needed. The description appropriately doesn't add param details, but since it's a zero-param tool, it compensates well by focusing on usage context, earning a high score for semantic clarity in this context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Reset') and resource ('HID (keyboard/mouse) devices'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'nanokvm_hdmi_reset' or 'nanokvm_power_cycle', which might also address input issues, so it falls short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool ('if keyboard or mouse input stops working'), which helps guide usage effectively. However, it doesn't specify when not to use it or mention alternatives among siblings, such as 'nanokvm_power_cycle' for broader resets, so it's not fully comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_screenshotA
Capture a screenshot from the target machine's display.

Returns the screenshot as a JPEG image that can be displayed or analyzed.
By default, 4K images are resized to 1080p to keep the response size
manageable.

Args:
    max_width: Maximum width in pixels (default 1920, use 0 for no limit)
    max_height: Maximum height in pixels (default 1080, use 0 for no limit)
    quality: JPEG quality 1-100 (default 80)

Returns:
    JPEG image of the current display
ParametersJSON Schema
NameRequiredDescriptionDefault
max_widthNo
max_heightNo
qualityNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well by disclosing key behavioral traits: it returns a JPEG image, resizes 4K images to 1080p by default to manage response size, and specifies default parameter values. However, it lacks details on potential errors, rate limits, or authentication needs, which are common for such tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose, followed by return details, default behavior, and parameter explanations in a structured format (Args and Returns sections). Every sentence adds value without redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is largely complete: it covers purpose, behavior, parameters, and returns. However, it lacks information on error conditions or performance implications (e.g., latency), which could be useful for an agent invoking this tool in varied contexts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% schema description coverage. It explains each parameter's purpose (e.g., max_width/max_height for pixel limits, quality for JPEG quality), provides default values, and clarifies special cases (use 0 for no limit). This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Capture') and resource ('screenshot from the target machine's display'), distinguishing it from sibling tools like nanokvm_click or nanokvm_move which involve interaction rather than capture. It explicitly mentions the output format (JPEG image) and the default resizing behavior for 4K images.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating it captures a screenshot for display or analysis, but does not explicitly guide when to use this tool versus alternatives like nanokvm_hdmi_status for display status or nanokvm_list_images for stored images. No exclusions or prerequisites are mentioned, leaving usage context somewhat vague.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_scrollB
Scroll the mouse wheel.

Args:
    amount: Scroll amount. Positive = scroll down, negative = scroll up.
ParametersJSON Schema
NameRequiredDescriptionDefault
amountYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the action ('scroll the mouse wheel') but lacks behavioral details such as whether this requires specific permissions, if it's rate-limited, what happens on error, or the response format. The description is minimal and doesn't disclose important traits beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded, with the core action stated first followed by parameter details. Every sentence earns its place by providing essential information without any waste, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter) and the presence of an output schema (which handles return values), the description is adequate but minimal. It covers the basic action and parameter semantics but lacks usage context and behavioral transparency, leaving gaps for an agent to fully understand when and how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% schema description coverage. It explains the 'amount' parameter as 'Scroll amount' and clarifies directionality ('Positive = scroll down, negative = scroll up'), which is crucial for correct usage. This compensates well for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('scroll') and resource ('mouse wheel'), making the purpose immediately understandable. It distinguishes from siblings like 'nanokvm_move' (which likely moves the cursor) and 'nanokvm_click' (which clicks), though it doesn't explicitly mention these distinctions. The purpose is specific but lacks explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention context such as interacting with a remote KVM interface, prerequisites, or exclusions. Without this, an agent might struggle to choose between this and other input tools like 'nanokvm_tap' or 'nanokvm_send_key'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_send_keyA
Send a single key press to the target machine.

Args:
    key: Key to press. Can be:
        - Named keys: enter, escape, tab, backspace, delete, space
        - Function keys: f1, f2, ..., f12
        - Arrow keys: up, down, left, right
        - Navigation: home, end, pageup, pagedown, insert
        - Single characters: a, b, 1, 2, etc.
    ctrl: Hold Ctrl modifier
    shift: Hold Shift modifier
    alt: Hold Alt modifier
    meta: Hold Meta/Windows/Command modifier
ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
ctrlNo
shiftNo
altNo
metaNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only covers basic functionality. It doesn't disclose important behavioral aspects like whether this requires the target machine to be powered on, what happens if the key press fails, whether there are rate limits, or what the output contains. The description is minimal beyond stating the core action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and economical. The first sentence states the core purpose, followed by a clearly labeled 'Args:' section with bullet-point explanations for each parameter. Every sentence earns its place with no wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there's an output schema (which handles return values) and no annotations, the description does an adequate job for a simple action tool. However, for a tool that interacts with a remote machine, it should ideally mention prerequisites (e.g., machine must be powered on) and potential failure modes. The parameter documentation is excellent, but behavioral context is lacking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description provides comprehensive semantic information for all 5 parameters. It explains the 'key' parameter with detailed examples of valid values (named keys, function keys, arrows, navigation, single characters) and clarifies that the four boolean parameters (ctrl, shift, alt, meta) are modifier keys that can be held during the key press. This adds substantial value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('send a single key press') and target ('to the target machine'), distinguishing it from sibling tools like nanokvm_send_text (for text input) or nanokvm_click (for mouse actions). The verb+resource combination is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for keyboard input to a remote machine, but doesn't explicitly state when to use this versus alternatives like nanokvm_send_text (for multi-character input) or nanokvm_tap (for mouse clicks). No guidance is provided about prerequisites, error conditions, or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_send_textA
Type text on the target machine via keyboard emulation.

Uses the NanoKVM paste API which is faster than individual key presses.
Maximum 1024 characters per call.

Args:
    text: The text to type (max 1024 characters)
    language: Keyboard layout - "" for US QWERTY, "de" for German
ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
languageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the paste API mechanism, character limit constraint (1024 max), and keyboard layout support. However, it doesn't mention error conditions, performance characteristics beyond 'faster,' or what happens with invalid inputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and front-loaded: the first sentence states the core purpose, followed by implementation details, constraints, and parameter explanations. Every sentence earns its place with no wasted words, making it highly efficient for an AI agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (keyboard emulation with constraints), no annotations, and the presence of an output schema (which handles return values), the description is nearly complete. It covers purpose, usage guidelines, behavioral traits, and parameter semantics well. The only minor gap is lack of explicit error handling or edge case information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the schema's lack of parameter documentation. It successfully adds meaning for both parameters: 'text' is explained as 'The text to type' with character limit context, and 'language' is explained with specific examples ('"" for US QWERTY, "de" for German'). This provides essential semantic context beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Type text on the target machine via keyboard emulation') and resource ('target machine'), distinguishing it from siblings like nanokvm_send_key (individual key presses) and nanokvm_click (mouse actions). It explicitly mentions the faster paste API, providing clear differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('faster than individual key presses') and provides clear alternatives by naming the sibling tool nanokvm_send_key. It also specifies usage constraints ('Maximum 1024 characters per call'), giving clear guidance on when this tool is appropriate versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_tapA
Tap at a specific screen position (touchscreen/mouse emulation).

Coordinates are in screen pixels based on NANOKVM_SCREEN_WIDTH and
NANOKVM_SCREEN_HEIGHT environment variables.

Args:
    x: X coordinate (0 = left edge, screen_width = right edge)
    y: Y coordinate (0 = top edge, screen_height = bottom edge)
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that this is an emulation action (touchscreen/mouse) and mentions coordinate dependencies on environment variables, but it lacks details on permissions, side effects, rate limits, or what the output schema might return, leaving behavioral gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the purpose, followed by coordinate context and parameter details. Every sentence earns its place with no wasted words, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (coordinate-based emulation with 2 parameters), no annotations, and an output schema present, the description is mostly complete. It covers purpose, parameter semantics, and coordinate system, but could benefit from more behavioral context (e.g., effects, error cases) since annotations are absent, though the output schema may mitigate this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description fully compensates by explaining both parameters (x and y) with clear semantics: coordinates in screen pixels based on environment variables, including edge definitions (0 = left/top, screen_width/height = right/bottom). This adds essential meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Tap at a specific screen position') and the resource ('touchscreen/mouse emulation'), distinguishing it from siblings like nanokvm_click, nanokvm_move, or nanokvm_send_key by focusing on coordinate-based tapping rather than clicking, moving, or keyboard input.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (for tapping at specific screen coordinates in a KVM environment), but it does not explicitly mention when not to use it or name alternatives like nanokvm_click for different interaction types, though the distinction is implied by the tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nanokvm_unmount_isoB

Unmount the currently mounted ISO image.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the action without disclosing behavioral traits like whether this requires specific permissions, if it's destructive (likely yes, but not stated), error conditions, or side effects. It's minimal and misses key operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero waste—it directly states the tool's action without fluff. It's appropriately sized and front-loaded, making it highly efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, has output schema), the description is minimally adequate but incomplete. It lacks context on behavior, error handling, and usage guidelines, which are important even for simple tools. The output schema helps, but the description should do more to compensate for missing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a high baseline score for not adding unnecessary information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Unmount') and the target resource ('currently mounted ISO image'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'nanokvm_mount_iso' or 'nanokvm_mounted_image' beyond the obvious verb difference, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, prerequisites (e.g., must have an ISO mounted first), or what happens if no ISO is mounted. It lacks explicit context for usage, leaving the agent to infer from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool has a distinct purpose with clear boundaries. For example, nanokvm_click, nanokvm_move, and nanokvm_tap handle different mouse/touch actions, while nanokvm_power and nanokvm_power_cycle manage power operations with specific use cases. No tools appear to overlap or cause confusion in selection.

Naming Consistency5/5

All tools follow a consistent snake_case naming convention with a 'nanokvm_' prefix and descriptive verb_noun combinations, such as nanokvm_click, nanokvm_hardware, and nanokvm_mount_iso. This uniformity makes the tool set predictable and easy to navigate.

Tool Count5/5

With 19 tools, the server provides comprehensive coverage for NanoKVM device management, including input emulation, power control, media handling, and status monitoring. The count is well-scoped for the domain, offering necessary functionality without being excessive.

Completeness5/5

The tool set covers all essential aspects of NanoKVM operations: hardware and status queries (e.g., nanokvm_info, nanokvm_hdmi_status), input control (e.g., nanokvm_click, nanokvm_send_text), power management (e.g., nanokvm_power, nanokvm_power_cycle), and ISO image handling (e.g., nanokvm_mount_iso, nanokvm_unmount_iso). No obvious gaps exist for the server's purpose.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to monitor and control server hardware (power, thermal, storage, firmware, event logs) via Redfish BMC API on Dell iDRAC, HPE iLO, Lenovo XCC, Supermicro BMC, and others.
    17
    2
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that enables AI to see and control a physical computer via a JetKVM device for screen viewing, mouse/keyboard input, media mounting, and power management.
    4
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A safety-first Model Context Protocol server for controlling a single PiKVM device, enabling keyboard, mouse, and power operations with strong security and audit.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/scgreenhalgh/nanokvm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server