Skip to main content
Glama
raspberry-pi-connect-mcp

raspberry-pi-connect-mcp

send_keys

Send raw keystrokes to a Raspberry Pi shell to control interactive terminal programs, interpret escape sequences, and return the current screen.

Instructions

Send raw keystrokes to a device shell (for interactive programs). Supports escapes: "\n" Enter, "\x03" Ctrl-C, "\x04" Ctrl-D, "\t" Tab, "\x1b" Esc, "\x1b[A" Up. Returns the current screen.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "device": "<device>",
      "keys": "<keys>"
    },
    "name": "send_keys"
  }
}

Input Schema

NameRequiredDescriptionDefault
keysYesKeys to send; JSON-style escapes are interpreted
deviceYesDevice name (or unique substring of it) or device UUID, as shown by list_devices

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full disclosure burden. It does useful work by stating that it returns the current screen (so the agent knows the observable result) and by documenting the supported escape sequences, but it says nothing about whether an active session is required, whether the call blocks waiting for output, or what happens on timeout or a dead shell.

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?

Two sentences, front-loaded with purpose, then escape syntax, then return value. Nothing is wasted and the ordering matches how an agent reads: what it does, how to format input, what comes back.

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?

For a two-parameter tool with no annotations and no output schema, the description covers purpose, input escapes, and the return value, which is most of what is needed. The remaining gap is session semantics — the siblings imply a session model, yet nothing says whether keystrokes attach to an existing shell or how failures surface.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3; the schema already explains both parameters. The escape table (\n, \x03, \x04, \t, \x1b, \x1b[A) does add concrete meaning beyond the schema's terse "JSON-style escapes are interpreted," but it is illustrative rather than exhaustive of the input format.

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?

"Send raw keystrokes to a device shell" pairs a specific verb with a specific resource, and the parenthetical "(for interactive programs)" separates it in intent from a command-execution sibling. It stops short of naming an explicit alternative, so an agent still has to infer that run_command is the non-interactive counterpart.

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 phrase "for interactive programs" gives an implied condition for choosing this tool, but there is no explicit when-not guidance, no named alternative for non-interactive execution, and no prerequisite such as needing an existing session. The agent must infer the rest from sibling names.

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