# send_keys

Source: https://libtmux.org/en/csharp/latest/mcp/tools/send_keys/

> Send input to a pane's program; a shell that receives it runs it with your user's permissions. Send raw keystrokes to a pane and return immediately. Use for driving an interactive program — a key in vim, a menu choice, Ctrl-C. Set literal=false to send named keys such as C-c, Escape or F5. It refuses the named pane in a human-owned mode and, when source input expands, every synchronized input cohort peer. To run a shell command and learn whether it worked, use run_shell_command instead; this reports nothing about what happens next. Tracks what it sends — including edits such as backspace, Ctrl-U or Ctrl-C — so wait_for_text can tell this pane's echo apart from real output for a short time afterward.

MCP is in development

Server behavior and tool contracts may change. Tool availability depends on the server configuration.

Send input to a pane’s program; a shell that receives it runs it with your user’s permissions. Send raw keystrokes to a pane and return immediately. Use for driving an interactive program — a key in vim, a menu choice, Ctrl-C. Set literal=false to send named keys such as C-c, Escape or F5. It refuses the named pane in a human-owned mode and, when source input expands, every synchronized input cohort peer. To run a shell command and learn whether it worked, use [run_shell_command](https://libtmux.org/en/csharp/latest/mcp/tools/run_shell_command/) instead; this reports nothing about what happens next. Tracks what it sends — including edits such as backspace, Ctrl-U or Ctrl-C — so [wait_for_text](https://libtmux.org/en/csharp/latest/mcp/tools/wait_for_text/) can tell this pane’s echo apart from real output for a short time afterward.

[All C# tools](https://libtmux.org/en/csharp/latest/mcp/tools/) · [JSON](https://libtmux.org/en/csharp/latest/mcp/tools/send_keys.json) · [Source](https://github.com/libtmux/libtmux-dotnet/blob/cf34b255c896d19a97e7d7fabea58609c916012d/src/LibTmux.Mcp/Policy/CapabilityModel.cs#L608)

## Arguments

* `enter` optional · boolean

  Press Enter after the keys.

  Default: `false`.

* `keys` required · string

  Text or a tmux key name.

* `literal` optional · boolean

  Treat keys as literal text.

  Default: `true`.

* `paneId` optional · string | null

  A pane id. Omit for this server's own pane, or else the one the first session shows.

  Default: `null`.

* `suppressHistory` optional · boolean

  Keep text out of shell history on a best-effort basis.

  Default: `false`.

## Schemas

The schema defines required fields, nested values, defaults, and validation constraints.

Input schema

```json
{
  "additionalProperties": false,
  "properties": {
    "enter": {
      "default": false,
      "description": "Press Enter after the keys.",
      "type": "boolean"
    },
    "keys": {
      "description": "Text or a tmux key name.",
      "type": "string"
    },
    "literal": {
      "default": true,
      "description": "Treat keys as literal text.",
      "type": "boolean"
    },
    "paneId": {
      "default": null,
      "description": "A pane id. Omit for this server's own pane, or else the one the first session shows.",
      "type": [
        "string",
        "null"
      ]
    },
    "suppressHistory": {
      "default": false,
      "description": "Keep text out of shell history on a best-effort basis.",
      "type": "boolean"
    }
  },
  "required": [
    "keys"
  ],
  "type": "object"
}
```

Output schema

```json
{
  "properties": {
    "changed": {
      "type": "string"
    },
    "paneId": {
      "type": "string"
    },
    "targetPaneIds": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "changed",
    "paneId",
    "targetPaneIds"
  ],
  "type": "object"
}
```

Tool annotations

```json
{
  "destructiveHint": true,
  "idempotentHint": false,
  "openWorldHint": true,
  "readOnlyHint": false,
  "title": "Send keys"
}
```
