{
  "tools": [
    "call_read_tools_batch",
    "capture_pane",
    "capture_since",
    "clear_pane_scrollback",
    "create_session",
    "create_window",
    "find_pane_by_position",
    "get_pane_info",
    "get_server_info",
    "get_session_info",
    "get_tmux_variables",
    "get_window_info",
    "kill_pane",
    "kill_session",
    "kill_window",
    "list_panes",
    "list_sessions",
    "list_windows",
    "move_window",
    "paste_text",
    "rename_session",
    "rename_window",
    "resize_pane",
    "resize_window",
    "respawn_pane",
    "run_shell_command",
    "search_panes",
    "select_layout",
    "select_pane",
    "select_window",
    "send_keys",
    "send_keys_batch",
    "set_history_limit",
    "set_mouse_enabled",
    "set_pane_title",
    "set_synchronize_panes",
    "show_environment",
    "show_hooks",
    "show_option",
    "signal_channel",
    "snapshot_pane",
    "split_window",
    "swap_pane",
    "wait_for_channel",
    "wait_for_text"
  ],
  "registrations": [
    {
      "name": "call_read_tools_batch",
      "wireName": "call_read_tools_batch",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 1145
      },
      "description": "Call a serial batch of at most sixteen enabled inspect tools. One approval for this batch covers every enabled nested name; inner tools do not receive separate client approval. The complete JSON-RPC response line, including its request ID and newline, is capped at 1,000,000 bytes; truncated payloads and omitted bytes are explicit. Read pane output; accepts no client-supplied executable input. Returned content may be sensitive or untrusted.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$defs": {
          "OnError": {
            "enum": [
              "stop",
              "continue"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "on_error": {
            "$ref": "#/$defs/OnError",
            "default": "stop",
            "description": "`stop`, the default, ends at the first failed call; `continue` makes\nthe rest."
          },
          "operations": {
            "description": "The inspect calls to make, in order.",
            "items": {
              "oneOf": [
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "end": {
                          "description": "End at this line. Omit for the bottom of the screen.",
                          "format": "int32",
                          "type": [
                            "integer",
                            "null"
                          ]
                        },
                        "history": {
                          "default": false,
                          "description": "Read the whole history rather than the visible screen.",
                          "type": "boolean"
                        },
                        "last_command": {
                          "default": false,
                          "description": "Return only the last command's output, when the shell marks its\nprompts.\n\nAnswers far less than the history, because it starts where the last\ncommand's output began. When the pane's shell does not mark its\nprompts -- fish does, bash and zsh do not -- this reports\n`marks: \"absent\"` and returns the visible screen instead.",
                          "type": "boolean"
                        },
                        "pane": {
                          "description": "The `%`-prefixed pane id.",
                          "type": "string"
                        },
                        "start": {
                          "description": "Start at this line. Zero is the top of the screen, negative is\nscrollback. Omit for the top of the screen, or of the scrollback with\n`history`.",
                          "format": "int32",
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "pane"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "capture_pane",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "cursor": {
                          "description": "The cursor from the previous call. Omit to start watching.",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "pane": {
                          "description": "The `%`-prefixed pane to read.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "pane"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "capture_since",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "corner": {
                          "description": "`top-left`, `top-right`, `bottom-left`, or `bottom-right`.",
                          "type": "string"
                        },
                        "window": {
                          "description": "The `@`-prefixed window id.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "window",
                        "corner"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "find_pane_by_position",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "pane": {
                          "description": "The `%`-prefixed pane id, as `list_panes` reports it.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "pane"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "get_pane_info",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {},
                      "type": "object"
                    },
                    "tool": {
                      "const": "get_server_info",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "session": {
                          "description": "The session, by `$`-prefixed id as `list_sessions` reports it, or by\nname.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "session"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "get_session_info",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "names": {
                          "description": "tmux format variable names, such as `pane_current_path`.",
                          "items": {
                            "pattern": "^[A-Za-z][A-Za-z0-9_]*$",
                            "type": "string"
                          },
                          "maxItems": 32,
                          "minItems": 1,
                          "type": "array"
                        },
                        "pane": {
                          "description": "The `%`-prefixed pane to read them against. Omit to let tmux pick\nits current pane.",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "names"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "get_tmux_variables",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "window": {
                          "description": "The `@`-prefixed window id, as `list_windows` reports it.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "window"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "get_window_info",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {},
                      "type": "object"
                    },
                    "tool": {
                      "const": "list_panes",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {},
                      "type": "object"
                    },
                    "tool": {
                      "const": "list_sessions",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {},
                      "type": "object"
                    },
                    "tool": {
                      "const": "list_windows",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "history": {
                          "default": false,
                          "description": "Search scrollback as well as the visible screen.",
                          "type": "boolean"
                        },
                        "match_case": {
                          "default": false,
                          "description": "Match case. Off by default.",
                          "type": "boolean"
                        },
                        "pattern": {
                          "description": "The text to look for.",
                          "maxLength": 4096,
                          "type": "string"
                        },
                        "regex": {
                          "default": false,
                          "description": "Read the pattern as a regular expression rather than literal text.",
                          "type": "boolean"
                        },
                        "session": {
                          "description": "Only search panes in this session, by `$`-prefixed id or name. Omit\nfor every session.",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "window": {
                          "description": "Only search panes in this window, by `@`-prefixed id. Omit for every\nwindow.",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "pattern"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "search_panes",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "session": {
                          "description": "The session whose environment to read, by `$`-prefixed id or name.\n\nOmit for the server's own.",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    },
                    "tool": {
                      "const": "show_environment",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "session": {
                          "description": "The session whose hooks to read, by `$`-prefixed id or name. Omit for\nthe server's own.",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    },
                    "tool": {
                      "const": "show_hooks",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "name": {
                          "description": "The option name, such as `history-limit` or a user option like `@theme`.",
                          "type": "string"
                        },
                        "scope": {
                          "anyOf": [
                            {
                              "enum": [
                                "server",
                                "global-session",
                                "global-window",
                                "session",
                                "window",
                                "pane"
                              ],
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Which tmux object the option belongs to.\n\nOne of `server`, `global-session`, `global-window`, `session`,\n`window`, or `pane`. Defaults to `global-session`, which is what\nsetting an option without a target means in tmux."
                        },
                        "target": {
                          "description": "The `$`, `@` or `%`-prefixed id, for the scopes that need one. Omit\nfor the others.",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "name"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "show_option",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                },
                {
                  "additionalProperties": false,
                  "properties": {
                    "arguments": {
                      "$schema": "https://json-schema.org/draft/2020-12/schema",
                      "additionalProperties": false,
                      "description": "That tool's arguments.",
                      "properties": {
                        "history": {
                          "default": false,
                          "description": "Include scrollback rather than only the visible screen.",
                          "type": "boolean"
                        },
                        "max_lines": {
                          "description": "The most content lines to return, oldest dropped first.\n\nDefaults to the whole visible screen. The end of a pane is what says\nwhat just happened, so a limit keeps the end.",
                          "minimum": 0,
                          "type": [
                            "integer",
                            "null"
                          ]
                        },
                        "pane": {
                          "description": "The `%`-prefixed pane id.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "pane"
                      ],
                      "type": "object"
                    },
                    "tool": {
                      "const": "snapshot_pane",
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              ]
            },
            "maxItems": 16,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "operations"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "BatchItem": {
            "properties": {
              "error": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ErrorData"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "index": {
                "minimum": 0,
                "type": "integer"
              },
              "result": true,
              "resultTruncated": {
                "type": "boolean"
              },
              "success": {
                "type": "boolean"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "index",
              "tool",
              "success",
              "resultTruncated"
            ],
            "type": "object"
          },
          "ErrorCode": {
            "description": "Standard JSON-RPC error codes used throughout the MCP protocol.\n\nThese codes follow the JSON-RPC 2.0 specification and provide\nstandardized error reporting across all MCP implementations.",
            "format": "int32",
            "type": "integer"
          },
          "ErrorData": {
            "description": "Error information for JSON-RPC error responses.\n\nThis structure follows the JSON-RPC 2.0 specification for error reporting,\nproviding a standardized way to communicate errors between clients and servers.",
            "properties": {
              "code": {
                "$ref": "#/$defs/ErrorCode",
                "description": "The error type that occurred (using standard JSON-RPC error codes)"
              },
              "data": {
                "description": "Additional information about the error. The value of this member is defined by the\nsender (e.g. detailed error information, nested errors etc.)."
              },
              "message": {
                "description": "A short description of the error. The message SHOULD be limited to a concise single sentence.",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "OnError": {
            "enum": [
              "stop",
              "continue"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "failed": {
            "minimum": 0,
            "type": "integer"
          },
          "onError": {
            "$ref": "#/$defs/OnError"
          },
          "results": {
            "items": {
              "$ref": "#/$defs/BatchItem"
            },
            "type": "array"
          },
          "stoppedAt": {
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "succeeded": {
            "minimum": 0,
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          },
          "truncatedBytes": {
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "results",
          "succeeded",
          "failed",
          "truncated",
          "truncatedBytes",
          "onError"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Call Read Tools Batch"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [
            "capture_pane",
            "capture_since",
            "find_pane_by_position",
            "get_pane_info",
            "get_server_info",
            "get_session_info",
            "get_tmux_variables",
            "get_window_info",
            "list_panes",
            "list_sessions",
            "list_windows",
            "search_panes",
            "show_environment",
            "show_hooks",
            "show_option",
            "snapshot_pane"
          ],
          "outputClasses": [
            "tmux-metadata",
            "terminal-content",
            "process-environment",
            "configured-command"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "capture_pane",
      "wireName": "capture_pane",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 196
      },
      "description": "Read a pane's contents. Reads the visible screen by default; set history to reach output that has scrolled off, or give a start and end line. Set last_command to get only what the last command printed, which is usually what you want and is far shorter -- it needs tmux 3.7 and a shell that marks its prompts, and says so when it cannot. Read pane output; accepts no client-supplied executable input. Returned content may be sensitive or untrusted.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "end": {
            "description": "End at this line. Omit for the bottom of the screen.",
            "format": "int32",
            "type": [
              "integer",
              "null"
            ]
          },
          "history": {
            "default": false,
            "description": "Read the whole history rather than the visible screen.",
            "type": "boolean"
          },
          "last_command": {
            "default": false,
            "description": "Return only the last command's output, when the shell marks its\nprompts.\n\nAnswers far less than the history, because it starts where the last\ncommand's output began. When the pane's shell does not mark its\nprompts -- fish does, bash and zsh do not -- this reports\n`marks: \"absent\"` and returns the visible screen instead.",
            "type": "boolean"
          },
          "pane": {
            "description": "The `%`-prefixed pane id.",
            "type": "string"
          },
          "start": {
            "description": "Start at this line. Zero is the top of the screen, negative is\nscrollback. Omit for the top of the screen, or of the scrollback with\n`history`.",
            "format": "int32",
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Marks": {
            "description": "Whether tmux knew where the last command's output began.\n\nReported rather than inferred: an answer that fell back to the whole\nscreen looks exactly like a command that printed a great deal.",
            "oneOf": [
              {
                "const": "present",
                "description": "The prompt marks were there, so the text is one command's output.",
                "type": "string"
              },
              {
                "const": "absent",
                "description": "tmux has the marks but this pane has none, because its shell does not\nemit OSC 133. fish does; bash and zsh need shell integration. The\nvisible screen came back instead -- not the history, which would\nanswer a request for one command with everything the pane ever wrote.",
                "type": "string"
              },
              {
                "const": "unsupported",
                "description": "This tmux predates `capture-pane -F`, which arrived in 3.7. The\nvisible screen came back instead.",
                "type": "string"
              },
              {
                "const": "not_asked",
                "description": "The caller did not ask for the last command, so nothing was looked up.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "lines": {
            "description": "How many lines that is.",
            "minimum": 0,
            "type": "integer"
          },
          "marks": {
            "$ref": "#/$defs/Marks",
            "description": "Whether the text is one command's output, and why it is not."
          },
          "pane": {
            "description": "The pane that was read.",
            "type": "string"
          },
          "text": {
            "description": "The text, with lines separated by newlines.",
            "type": "string"
          }
        },
        "required": [
          "pane",
          "text",
          "lines",
          "marks"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Read Pane Contents"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "terminal-content"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "capture_since",
      "wireName": "capture_since",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/observe.rs",
        "line": 434
      },
      "description": "Read what a pane wrote since the previous call. The first call, with no cursor, starts watching and returns a cursor; later calls pass it back and receive only what is new, as the raw output stream, not the rendered screen: a line redrawn in place repeats; capture_pane shows the screen. Use this to follow a pane over several turns without re-reading the whole screen. The answer says missed=true if the cursor no longer names retained output, including when the pane outran the buffer, its live tail was evicted, or the server restarted. Starting a tail owns a retained observer until the tail is evicted or the server stops. Read pane output; accepts no client-supplied executable input. Returned content may be sensitive or untrusted.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "description": "The cursor from the previous call. Omit to start watching.",
            "type": [
              "string",
              "null"
            ]
          },
          "pane": {
            "description": "The `%`-prefixed pane to read.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "closed": {
            "description": "Whether the pane has stopped writing for good.",
            "type": "boolean"
          },
          "cursor": {
            "description": "The cursor to pass back next time.",
            "type": "string"
          },
          "first": {
            "description": "Whether this is the first answer, which reports the visible screen\nrather than what is new.",
            "type": "boolean"
          },
          "missed": {
            "description": "Whether output between the previous cursor and this text was lost.",
            "type": "boolean"
          },
          "pane": {
            "description": "The pane that was read.",
            "type": "string"
          },
          "text": {
            "description": "The text, with escape sequences removed.\n\nAfter the first answer this is the raw output stream, not the rendered\nscreen: a line redrawn in place repeats. `capture_pane` shows the\nscreen.",
            "type": "string"
          }
        },
        "required": [
          "pane",
          "text",
          "cursor",
          "missed",
          "closed",
          "first"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Read New Pane Output"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "terminal-content"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "clear_pane_scrollback",
      "wireName": "clear_pane_scrollback",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 584
      },
      "description": "Discard a pane's scrollback, so the next capture_pane returns only what happens next. Use this before running something whose output you want to read cleanly: it is far cheaper than reading past the old output every time. The visible screen is left alone. Delete tmux state; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "pane": {
            "description": "The `%`-prefixed pane id, as `list_panes` reports it.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "pane": {
            "description": "The pane that changed.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Clear Pane History"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "delete"
          ],
          "toolset": "teardown"
        }
      }
    },
    {
      "name": "create_session",
      "wireName": "create_session",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 249
      },
      "description": "Create a new detached tmux session. Start a pane's configured process; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "The name for the new session. It must not already exist.",
            "type": "string"
          },
          "start_directory": {
            "description": "The first window's working directory. Omit for the directory this MCP\nserver started in.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "attached": {
            "description": "Whether any client is attached.",
            "type": "boolean"
          },
          "id": {
            "description": "The `$`-prefixed tmux identity.",
            "type": "string"
          },
          "name": {
            "description": "The session name, absent when tmux reported none.",
            "type": "string"
          },
          "windows": {
            "description": "How many windows the session holds.",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "windows",
          "attached"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Create Session"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "name": "double-hash-once",
            "start_directory": "double-hash-once"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "configured-process",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "create_window",
      "wireName": "create_window",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 927
      },
      "description": "Create a window running its configured process. Start a pane's configured process; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "The window name. Omit to let tmux name it after its running command.",
            "type": [
              "string",
              "null"
            ]
          },
          "session": {
            "description": "The session to create the window in, by `$`-prefixed id or name.",
            "type": "string"
          },
          "start_directory": {
            "description": "The window's working directory. Omit for the directory this MCP\nserver started in.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "session"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the session's active window.",
            "type": "boolean"
          },
          "id": {
            "description": "The `@`-prefixed tmux identity.",
            "type": "string"
          },
          "index": {
            "description": "The window's index within that session.",
            "format": "int32",
            "type": "integer"
          },
          "linked": {
            "description": "Whether more than one session links this window.",
            "type": "boolean"
          },
          "name": {
            "description": "The window name.",
            "type": "string"
          },
          "panes": {
            "description": "How many panes the window holds.",
            "minimum": 0,
            "type": "integer"
          },
          "session_id": {
            "description": "The session this window was reached through.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "session_id",
          "index",
          "name",
          "panes",
          "active",
          "linked"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Create Window"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "name": "double-hash-once",
            "start_directory": "double-hash-once"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "configured-process",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "find_pane_by_position",
      "wireName": "find_pane_by_position",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 609
      },
      "description": "Find the pane touching a named window corner. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "corner": {
            "description": "`top-left`, `top-right`, `bottom-left`, or `bottom-right`.",
            "type": "string"
          },
          "window": {
            "description": "The `@`-prefixed window id.",
            "type": "string"
          }
        },
        "required": [
          "window",
          "corner"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the window's active pane.",
            "type": "boolean"
          },
          "caller": {
            "$ref": "#/$defs/Relation",
            "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
          },
          "command": {
            "description": "The command currently running.",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "The `%`-prefixed tmux identity.",
            "type": "string"
          },
          "path": {
            "description": "The pane's working directory.",
            "type": [
              "string",
              "null"
            ]
          },
          "window_id": {
            "description": "The window that contains the pane.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "window_id",
          "active",
          "caller"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Find Pane By Position"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "get_pane_info",
      "wireName": "get_pane_info",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 593
      },
      "description": "Return metadata for one pane. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "pane": {
            "description": "The `%`-prefixed pane id, as `list_panes` reports it.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the window's active pane.",
            "type": "boolean"
          },
          "caller": {
            "$ref": "#/$defs/Relation",
            "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
          },
          "command": {
            "description": "The command currently running.",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "The `%`-prefixed tmux identity.",
            "type": "string"
          },
          "path": {
            "description": "The pane's working directory.",
            "type": [
              "string",
              "null"
            ]
          },
          "window_id": {
            "description": "The window that contains the pane.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "window_id",
          "active",
          "caller"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Get Pane Info"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "get_server_info",
      "wireName": "get_server_info",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 149
      },
      "description": "Report every session with its windows and panes, in one call. Prefer this over calling the three listing tools separately: it costs tmux four commands rather than one per object. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Branch": {
            "description": "One session with everything under it.",
            "properties": {
              "attached": {
                "description": "Whether any client is attached.",
                "type": "boolean"
              },
              "id": {
                "description": "The `$`-prefixed tmux identity.",
                "type": "string"
              },
              "name": {
                "description": "The session name.",
                "type": "string"
              },
              "windows": {
                "description": "The windows it holds.",
                "items": {
                  "$ref": "#/$defs/BranchWindow"
                },
                "type": "array"
              }
            },
            "required": [
              "id",
              "name",
              "attached",
              "windows"
            ],
            "type": "object"
          },
          "BranchPane": {
            "description": "One pane inside a described window.",
            "properties": {
              "active": {
                "description": "Whether this is the window's active pane.",
                "type": "boolean"
              },
              "command": {
                "description": "The command currently running.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "description": "The `%`-prefixed tmux identity.",
                "type": "string"
              }
            },
            "required": [
              "id",
              "active"
            ],
            "type": "object"
          },
          "BranchWindow": {
            "description": "One window inside a described session.",
            "properties": {
              "active": {
                "description": "Whether this is the session's active window.",
                "type": "boolean"
              },
              "id": {
                "description": "The `@`-prefixed tmux identity.",
                "type": "string"
              },
              "index": {
                "description": "The window's index within its session.",
                "format": "int32",
                "type": "integer"
              },
              "linked": {
                "description": "Whether more than one session links this window.",
                "type": "boolean"
              },
              "name": {
                "description": "The window name.",
                "type": "string"
              },
              "panes": {
                "description": "The panes it holds.",
                "items": {
                  "$ref": "#/$defs/BranchPane"
                },
                "type": "array"
              }
            },
            "required": [
              "id",
              "index",
              "name",
              "active",
              "linked",
              "panes"
            ],
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "sessions": {
            "description": "Every session, with its windows and their panes.",
            "items": {
              "$ref": "#/$defs/Branch"
            },
            "type": "array"
          }
        },
        "required": [
          "sessions"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Describe Server"
      },
      "meta": {
        "anthropic/alwaysLoad": true,
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "get_session_info",
      "wireName": "get_session_info",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 555
      },
      "description": "Return metadata for one session. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "session": {
            "description": "The session, by `$`-prefixed id as `list_sessions` reports it, or by\nname.",
            "type": "string"
          }
        },
        "required": [
          "session"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "attached": {
            "description": "Whether any client is attached.",
            "type": "boolean"
          },
          "id": {
            "description": "The `$`-prefixed tmux identity.",
            "type": "string"
          },
          "name": {
            "description": "The session name, absent when tmux reported none.",
            "type": "string"
          },
          "windows": {
            "description": "How many windows the session holds.",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "windows",
          "attached"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Get Session Info"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "get_tmux_variables",
      "wireName": "get_tmux_variables",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 652
      },
      "description": "Read a bounded set of tmux variables against one pane. tmux reads a name it does not know as a format from its environment, so a name the server or session environment holds is refused unless the operator listed it in LIBTMUX_ENVIRONMENT_VALUES at startup. Read configured tmux commands; accepts no client-supplied executable input. Returned values may contain executable configuration.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "names": {
            "description": "tmux format variable names, such as `pane_current_path`.",
            "items": {
              "pattern": "^[A-Za-z][A-Za-z0-9_]*$",
              "type": "string"
            },
            "maxItems": 32,
            "minItems": 1,
            "type": "array"
          },
          "pane": {
            "description": "The `%`-prefixed pane to read them against. Omit to let tmux pick\nits current pane.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "names"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "values": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          }
        },
        "required": [
          "values"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Get tmux Variables"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "names": "validated-variable-name"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "configured-command"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "get_window_info",
      "wireName": "get_window_info",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 579
      },
      "description": "Return metadata for one window. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "window": {
            "description": "The `@`-prefixed window id, as `list_windows` reports it.",
            "type": "string"
          }
        },
        "required": [
          "window"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the session's active window.",
            "type": "boolean"
          },
          "id": {
            "description": "The `@`-prefixed tmux identity.",
            "type": "string"
          },
          "index": {
            "description": "The window's index within that session.",
            "format": "int32",
            "type": "integer"
          },
          "linked": {
            "description": "Whether more than one session links this window.",
            "type": "boolean"
          },
          "name": {
            "description": "The window name.",
            "type": "string"
          },
          "panes": {
            "description": "How many panes the window holds.",
            "minimum": 0,
            "type": "integer"
          },
          "session_id": {
            "description": "The session this window was reached through.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "session_id",
          "index",
          "name",
          "panes",
          "active",
          "linked"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Get Window Info"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "kill_pane",
      "wireName": "kill_pane",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 227
      },
      "description": "Kill a pane. Killing a window's last pane closes the window. Delete tmux state; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "pane": {
            "description": "The `%`-prefixed pane id, as `list_panes` reports it.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "id": {
            "description": "The id of what was destroyed.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Kill Pane"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "delete"
          ],
          "toolset": "teardown"
        }
      }
    },
    {
      "name": "kill_session",
      "wireName": "kill_session",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 299
      },
      "description": "Kill a tmux session and everything in it. Delete tmux state; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "session": {
            "description": "The session, by `$`-prefixed id as `list_sessions` reports it, or by\nname.",
            "type": "string"
          }
        },
        "required": [
          "session"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "id": {
            "description": "The id of what was destroyed.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Kill Session"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "delete"
          ],
          "toolset": "teardown"
        }
      }
    },
    {
      "name": "kill_window",
      "wireName": "kill_window",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 207
      },
      "description": "Kill a window, closing it in every session that links it. Delete tmux state; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "window": {
            "description": "The `@`-prefixed window id, as `list_windows` reports it.",
            "type": "string"
          }
        },
        "required": [
          "window"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "id": {
            "description": "The id of what was destroyed.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Kill Window"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "delete"
          ],
          "toolset": "teardown"
        }
      }
    },
    {
      "name": "list_panes",
      "wireName": "list_panes",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 137
      },
      "description": "List every pane on the server. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "PaneView": {
            "description": "One pane, as the protocol sees it.",
            "properties": {
              "active": {
                "description": "Whether this is the window's active pane.",
                "type": "boolean"
              },
              "caller": {
                "$ref": "#/$defs/Relation",
                "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
              },
              "command": {
                "description": "The command currently running.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "description": "The `%`-prefixed tmux identity.",
                "type": "string"
              },
              "path": {
                "description": "The pane's working directory.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "window_id": {
                "description": "The window that contains the pane.",
                "type": "string"
              }
            },
            "required": [
              "id",
              "window_id",
              "active",
              "caller"
            ],
            "type": "object"
          },
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "panes": {
            "description": "The panes, in tmux's own order.",
            "items": {
              "$ref": "#/$defs/PaneView"
            },
            "type": "array"
          }
        },
        "required": [
          "panes"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "List Panes"
      },
      "meta": {
        "anthropic/alwaysLoad": true,
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "list_sessions",
      "wireName": "list_sessions",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 110
      },
      "description": "List every tmux session on the server. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "SessionView": {
            "description": "One session, as the protocol sees it.",
            "properties": {
              "attached": {
                "description": "Whether any client is attached.",
                "type": "boolean"
              },
              "id": {
                "description": "The `$`-prefixed tmux identity.",
                "type": "string"
              },
              "name": {
                "description": "The session name, absent when tmux reported none.",
                "type": "string"
              },
              "windows": {
                "description": "How many windows the session holds.",
                "minimum": 0,
                "type": "integer"
              }
            },
            "required": [
              "id",
              "name",
              "windows",
              "attached"
            ],
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "sessions": {
            "description": "The sessions, in tmux's own order.",
            "items": {
              "$ref": "#/$defs/SessionView"
            },
            "type": "array"
          }
        },
        "required": [
          "sessions"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "List Sessions"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "list_windows",
      "wireName": "list_windows",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 125
      },
      "description": "List every window on the server. A window linked into several sessions appears once per link, so an id can repeat with a different session_id. Inspect tmux metadata; accepts no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "WindowView": {
            "description": "One window, as the protocol sees it.",
            "properties": {
              "active": {
                "description": "Whether this is the session's active window.",
                "type": "boolean"
              },
              "id": {
                "description": "The `@`-prefixed tmux identity.",
                "type": "string"
              },
              "index": {
                "description": "The window's index within that session.",
                "format": "int32",
                "type": "integer"
              },
              "linked": {
                "description": "Whether more than one session links this window.",
                "type": "boolean"
              },
              "name": {
                "description": "The window name.",
                "type": "string"
              },
              "panes": {
                "description": "How many panes the window holds.",
                "minimum": 0,
                "type": "integer"
              },
              "session_id": {
                "description": "The session this window was reached through.",
                "type": "string"
              }
            },
            "required": [
              "id",
              "session_id",
              "index",
              "name",
              "panes",
              "active",
              "linked"
            ],
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "windows": {
            "description": "The windows, in tmux's own order.",
            "items": {
              "$ref": "#/$defs/WindowView"
            },
            "type": "array"
          }
        },
        "required": [
          "windows"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "List Windows"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "move_window",
      "wireName": "move_window",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 791
      },
      "description": "Move one window to a session and index. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "destination_index": {
            "description": "The window index there. tmux refuses one already in use.",
            "format": "int32",
            "type": "integer"
          },
          "destination_session": {
            "description": "The session to move the window into, by `$`-prefixed id or name.",
            "type": "string"
          },
          "window": {
            "description": "The `@`-prefixed window id to move.",
            "type": "string"
          }
        },
        "required": [
          "window",
          "destination_session",
          "destination_index"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the session's active window.",
            "type": "boolean"
          },
          "id": {
            "description": "The `@`-prefixed tmux identity.",
            "type": "string"
          },
          "index": {
            "description": "The window's index within that session.",
            "format": "int32",
            "type": "integer"
          },
          "linked": {
            "description": "Whether more than one session links this window.",
            "type": "boolean"
          },
          "name": {
            "description": "The window name.",
            "type": "string"
          },
          "panes": {
            "description": "How many panes the window holds.",
            "minimum": 0,
            "type": "integer"
          },
          "session_id": {
            "description": "The session this window was reached through.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "session_id",
          "index",
          "name",
          "panes",
          "active",
          "linked"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Move Window"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "paste_text",
      "wireName": "paste_text",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 608
      },
      "description": "Put text into a pane through a tmux paste buffer instead of typing it key by key. Use this for anything long or awkward: send_keys types the text, so a shell reading it can react to each character, and a bracketed-paste aware program treats a paste as one block. Optional Enter is appended to that same block. Empty text without Enter is a guarded buffer-free no-op. Paste targets only the named pane, even when synchronized input is enabled. A dead, input-disabled, mode-owned, terminal-attended, or inherited-caller target is refused before setup and again immediately before paste. The private buffer is deleted after setup, refusal, and paste outcomes; observations can still race with tmux. A submitted paste is remembered briefly so wait_for_text can discount its own echo. Send input to a pane's program; a shell that receives it runs it with your user's permissions.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "enter": {
            "default": false,
            "description": "Whether to append Enter to the same paste block.",
            "type": "boolean"
          },
          "pane": {
            "description": "The `%`-prefixed pane to paste into.",
            "type": "string"
          },
          "text": {
            "description": "The text to deliver.",
            "type": "string"
          }
        },
        "required": [
          "pane",
          "text"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "bytes": {
            "description": "How many bytes came from `text`, excluding optional Enter.",
            "minimum": 0,
            "type": "integer"
          },
          "pane": {
            "description": "The pane it went into.",
            "type": "string"
          }
        },
        "required": [
          "pane",
          "bytes"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Paste Text Into Pane"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "pane-input",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "rename_session",
      "wireName": "rename_session",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 713
      },
      "description": "Rename one session. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "The new name. tmux refuses one another session has.",
            "type": "string"
          },
          "session": {
            "description": "The session to rename, by `$`-prefixed id or name.",
            "type": "string"
          }
        },
        "required": [
          "session",
          "name"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "attached": {
            "description": "Whether any client is attached.",
            "type": "boolean"
          },
          "id": {
            "description": "The `$`-prefixed tmux identity.",
            "type": "string"
          },
          "name": {
            "description": "The session name, absent when tmux reported none.",
            "type": "string"
          },
          "windows": {
            "description": "How many windows the session holds.",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "windows",
          "attached"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Rename Session"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "name": "double-hash-once"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "rename_window",
      "wireName": "rename_window",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 745
      },
      "description": "Rename one window. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "The new name. tmux then stops renaming the window automatically.",
            "type": "string"
          },
          "window": {
            "description": "The `@`-prefixed window id.",
            "type": "string"
          }
        },
        "required": [
          "window",
          "name"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the session's active window.",
            "type": "boolean"
          },
          "id": {
            "description": "The `@`-prefixed tmux identity.",
            "type": "string"
          },
          "index": {
            "description": "The window's index within that session.",
            "format": "int32",
            "type": "integer"
          },
          "linked": {
            "description": "Whether more than one session links this window.",
            "type": "boolean"
          },
          "name": {
            "description": "The window name.",
            "type": "string"
          },
          "panes": {
            "description": "How many panes the window holds.",
            "minimum": 0,
            "type": "integer"
          },
          "session_id": {
            "description": "The session this window was reached through.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "session_id",
          "index",
          "name",
          "panes",
          "active",
          "linked"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Rename Window"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "name": "double-hash-once"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "resize_pane",
      "wireName": "resize_pane",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 319
      },
      "description": "Move one edge of a pane by a number of rows or columns. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$defs": {
          "ResizeDirectionSchema": {
            "enum": [
              "up",
              "down",
              "left",
              "right"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "cells": {
            "description": "How many rows or columns to move it by.",
            "minimum": 0,
            "type": "integer"
          },
          "direction": {
            "$ref": "#/$defs/ResizeDirectionSchema",
            "description": "Which edge to move: `up`, `down`, `left`, or `right`."
          },
          "pane": {
            "description": "The `%`-prefixed pane id.",
            "type": "string"
          }
        },
        "required": [
          "pane",
          "direction",
          "cells"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "height": {
            "description": "How tall it is now, in rows.",
            "minimum": 0,
            "type": "integer"
          },
          "pane": {
            "description": "The pane that was resized.",
            "type": "string"
          },
          "width": {
            "description": "How wide it is now, in columns.",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "pane",
          "width",
          "height"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Resize Pane"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "resize_window",
      "wireName": "resize_window",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 768
      },
      "description": "Resize one window to exact cell dimensions. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "height": {
            "description": "Height in rows.",
            "minimum": 0,
            "type": "integer"
          },
          "width": {
            "description": "Width in columns.",
            "minimum": 0,
            "type": "integer"
          },
          "window": {
            "description": "The `@`-prefixed window id.",
            "type": "string"
          }
        },
        "required": [
          "window",
          "width",
          "height"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the session's active window.",
            "type": "boolean"
          },
          "id": {
            "description": "The `@`-prefixed tmux identity.",
            "type": "string"
          },
          "index": {
            "description": "The window's index within that session.",
            "format": "int32",
            "type": "integer"
          },
          "linked": {
            "description": "Whether more than one session links this window.",
            "type": "boolean"
          },
          "name": {
            "description": "The window name.",
            "type": "string"
          },
          "panes": {
            "description": "How many panes the window holds.",
            "minimum": 0,
            "type": "integer"
          },
          "session_id": {
            "description": "The session this window was reached through.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "session_id",
          "index",
          "name",
          "panes",
          "active",
          "linked"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Resize Window"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "respawn_pane",
      "wireName": "respawn_pane",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 1020
      },
      "description": "Restart a pane's configured process with no command payload. Start a pane's configured process; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "kill_first": {
            "default": false,
            "description": "Kill a running process first. Defaults to `false`, which respawns\nonly a dead pane.",
            "type": "boolean"
          },
          "pane": {
            "description": "The `%`-prefixed pane id.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the window's active pane.",
            "type": "boolean"
          },
          "caller": {
            "$ref": "#/$defs/Relation",
            "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
          },
          "command": {
            "description": "The command currently running.",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "The `%`-prefixed tmux identity.",
            "type": "string"
          },
          "path": {
            "description": "The pane's working directory.",
            "type": [
              "string",
              "null"
            ]
          },
          "window_id": {
            "description": "The window that contains the pane.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "window_id",
          "active",
          "caller"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Respawn Pane"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "configured-process",
          "tmuxEffects": [
            "change",
            "delete"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "run_shell_command",
      "wireName": "run_shell_command",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/observe.rs",
        "line": 208
      },
      "description": "Run a shell command in a pane, wait for it to finish, and report its exit status with everything it wrote. This is the tool for \"run this and tell me if it worked\". Output is the pane's raw output stream, not the rendered screen: nothing is missed, the shell prompt is not included, and a line redrawn in place repeats; capture_pane shows the screen. The command runs in a subshell, so cd and export do not persist and invalid syntax completes with a nonzero status. Valid inherited Bash and zsh ERR and DEBUG traps remain visible to the command while parent-shell traps and options remain unchanged. It requires one configured input recipient and observes its mode, liveness, input-off state, attended-client state, cohort, inherited-caller relation, known POSIX shell, and resolved route before watcher setup and again before dispatch. A process-wide endpoint-and-pane reservation blocks other MCP pane input until the completion marker or pane closure is proved. The resolved tmux executable and socket path must contain no ASCII terminal-control bytes. The reservation serializes this MCP's input, but tmux observations can still race with dispatch. The pane shell, tmux server, and configuration must be trusted. Reaching the deadline, cancelling, or an uncertain dispatch stops this request while its watcher keeps the reservation until completion is proved. To stop the command, send_keys with keys [\"C-c\"] alone passes the reservation, and the command reports completion when it ends; respawn_pane with kill_first replaces a program that ignores C-c and C-\\. Run a shell command in a pane with your user's permissions.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "command": {
            "description": "The command for the pane's trusted POSIX-compatible shell.\n\nShell reserved words and special builtins must retain their standard\nmeanings. The command runs inside a subshell, so several lines are fine\nand a bare `exit` does not end the pane's own shell. Invalid syntax is\ncontained and completes with the shell's nonzero status. Valid inherited\nBash and zsh `ERR` and `DEBUG` traps remain visible to the command while\nthe pane's parent-shell traps and options remain unchanged.",
            "type": "string"
          },
          "pane": {
            "description": "The `%`-prefixed pane to run in.",
            "type": "string"
          },
          "seconds": {
            "description": "How long to allow, in seconds. Defaults to 30, capped at 600.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "suppress_history": {
            "default": false,
            "description": "Whether to keep the command out of the shell's history.",
            "type": "boolean"
          }
        },
        "required": [
          "pane",
          "command"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "RunOutcome": {
            "description": "How a run finished.\n\nSplit from the wait outcomes rather than shared with them: a run cannot\nmatch a pattern and a wait cannot report a missing shell, and a vocabulary\ncarrying both would have an agent checking for answers that never come.",
            "oneOf": [
              {
                "const": "completed",
                "description": "The command ran to completion and reported its status.",
                "type": "string"
              },
              {
                "const": "deadline",
                "description": "The time the caller allowed ran out.\n\nThis ends the waiting, not the command. The pane stays reserved for it\nuntil it ends, so other pane input is refused; `send_keys` with keys\n`[\"C-c\"]` alone interrupts it.",
                "type": "string"
              },
              {
                "const": "pane_closed",
                "description": "The pane stopped writing for good.",
                "type": "string"
              },
              {
                "const": "cancelled",
                "description": "The client withdrew the request while the run was still going.",
                "type": "string"
              },
              {
                "const": "no_shell",
                "description": "The pane never acknowledged the command.\n\nThe keys were sent but the opening sentinel never came back. That is\nwhat a pane looks like when it is not at a shell prompt: sitting in an\neditor or a REPL, or still running something an earlier call left\nbehind. The text was typed into whatever is there.\n\nThe evidence is absence, so a deadline too short for the pane's shell\nto have echoed anything yet looks the same. Read it as \"nothing came\nback in the time allowed\" and check the pane with `snapshot_pane`\nbefore concluding it is stuck.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "bytes": {
            "description": "How many bytes that was, before any truncation.",
            "minimum": 0,
            "type": "integer"
          },
          "exit_status": {
            "description": "The command's exit status, when it completed.\n\nAbsent when the run did not complete, and when the command was killed\nby a signal rather than exiting.",
            "format": "int32",
            "type": [
              "integer",
              "null"
            ]
          },
          "outcome": {
            "$ref": "#/$defs/RunOutcome",
            "description": "How the run finished."
          },
          "output": {
            "description": "Everything the command wrote, stdout and stderr interleaved in the\norder the program wrote them.\n\nThis is the raw output stream with escape sequences removed, not the\nrendered screen: a line redrawn in place, such as a progress bar,\nrepeats. `capture_pane` shows the screen.",
            "type": "string"
          },
          "pane": {
            "description": "The pane the command ran in.",
            "type": "string"
          },
          "truncated": {
            "description": "Whether the output was truncated from the front.",
            "type": "boolean"
          }
        },
        "required": [
          "pane",
          "outcome",
          "output",
          "bytes",
          "truncated"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Run Command In Pane"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "terminal-content"
          ],
          "processReach": "pane-command",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "search_panes",
      "wireName": "search_panes",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 344
      },
      "description": "Search what panes are displaying with Rust's linear-time regex engine. Accept at most 4,096 pattern bytes; search at most 64 panes, 8,192 lines, and 1 MiB; spend at most 250 ms matching and five seconds capturing. Report the pane and line of every match. Use this to find where something is -- which pane has the failing test, which one printed the error -- instead of capturing panes one at a time. Searches the visible screen by default; set history to include scrollback. Read pane output; accepts no client-supplied executable input. Returned content may be sensitive or untrusted.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "history": {
            "default": false,
            "description": "Search scrollback as well as the visible screen.",
            "type": "boolean"
          },
          "match_case": {
            "default": false,
            "description": "Match case. Off by default.",
            "type": "boolean"
          },
          "pattern": {
            "description": "The text to look for.",
            "maxLength": 4096,
            "type": "string"
          },
          "regex": {
            "default": false,
            "description": "Read the pattern as a regular expression rather than literal text.",
            "type": "boolean"
          },
          "session": {
            "description": "Only search panes in this session, by `$`-prefixed id or name. Omit\nfor every session.",
            "type": [
              "string",
              "null"
            ]
          },
          "window": {
            "description": "Only search panes in this window, by `@`-prefixed id. Omit for every\nwindow.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "pattern"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "MatchView": {
            "description": "One line of one pane that matched a search.",
            "properties": {
              "line": {
                "description": "Which line of the capture matched, counting from the top.",
                "minimum": 0,
                "type": "integer"
              },
              "pane": {
                "description": "The pane the line was found in.",
                "type": "string"
              },
              "text": {
                "description": "The line itself.",
                "type": "string"
              },
              "window_id": {
                "description": "The window that pane belongs to.",
                "type": "string"
              }
            },
            "required": [
              "pane",
              "window_id",
              "line",
              "text"
            ],
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "capped": {
            "description": "Whether the match ceiling was reached, so there may be more.",
            "type": "boolean"
          },
          "matches": {
            "description": "Every matching line, in the order the panes were read.",
            "items": {
              "$ref": "#/$defs/MatchView"
            },
            "type": "array"
          },
          "panes_searched": {
            "description": "How many panes were read to answer this.",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "matches",
          "panes_searched",
          "capped"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Search Pane Contents"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "terminal-content"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "select_layout",
      "wireName": "select_layout",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 551
      },
      "description": "Rearrange a window's panes using a saved tmux layout or a named layout and its unique abbreviation. Names follow the running daemon's version; mirrored main layouts require tmux 3.5. Invalid syntax is refused before window lookup. Return the saved layout tmux actually applied. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "layout": {
            "description": "A saved tmux layout, or a named layout and its unique abbreviation.\n\nThe names are `even-horizontal`, `even-vertical`, `main-horizontal`,\n`main-vertical` and `tiled`. The running daemon determines which names\nand abbreviations are supported; mirrored main layouts require tmux 3.5.",
            "type": "string"
          },
          "window": {
            "description": "The `@`-prefixed window to arrange.",
            "type": "string"
          }
        },
        "required": [
          "window",
          "layout"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "layout": {
            "description": "The layout it now has, in tmux's own syntax.",
            "type": "string"
          },
          "window": {
            "description": "The window that was arranged.",
            "type": "string"
          }
        },
        "required": [
          "window",
          "layout"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Arrange Window Panes"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "select_pane",
      "wireName": "select_pane",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 388
      },
      "description": "Select a pane, making it its window's active pane. Give a direction to move relative to it instead: up, down, left, and right follow the layout, last returns to the previously active pane, and next and previous step through the window in order. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$defs": {
          "SelectPaneDirectionSchema": {
            "enum": [
              "up",
              "down",
              "left",
              "right",
              "last",
              "next",
              "previous"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "direction": {
            "anyOf": [
              {
                "$ref": "#/$defs/SelectPaneDirectionSchema"
              },
              {
                "type": "null"
              }
            ],
            "description": "Move relative to that pane instead of selecting it.\n\n`up`, `down`, `left`, and `right` follow the layout, so `up` selects\nwhatever pane is drawn above. `last` returns to the previously active\npane, and `next` and `previous` step through the window's panes in\norder. Omit to select the named pane itself."
          },
          "pane": {
            "description": "The `%`-prefixed pane to select, or to move relative to.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the window's active pane.",
            "type": "boolean"
          },
          "caller": {
            "$ref": "#/$defs/Relation",
            "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
          },
          "command": {
            "description": "The command currently running.",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "The `%`-prefixed tmux identity.",
            "type": "string"
          },
          "path": {
            "description": "The pane's working directory.",
            "type": [
              "string",
              "null"
            ]
          },
          "window_id": {
            "description": "The window that contains the pane.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "window_id",
          "active",
          "caller"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Select Pane"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "select_window",
      "wireName": "select_window",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 475
      },
      "description": "Select a window, making it its session's active window. Give a direction to move relative to it instead: next and previous step through the session in index order, and last returns to the previously active window. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$defs": {
          "SelectWindowDirectionSchema": {
            "enum": [
              "next",
              "previous",
              "last"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "direction": {
            "anyOf": [
              {
                "$ref": "#/$defs/SelectWindowDirectionSchema"
              },
              {
                "type": "null"
              }
            ],
            "description": "Move relative to that window instead of selecting it.\n\n`next` and `previous` step through the session in index order, and\n`last` returns to the previously active window. Omit to select the\nnamed window itself."
          },
          "window": {
            "description": "The `@`-prefixed window to select, or to move relative to.",
            "type": "string"
          }
        },
        "required": [
          "window"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "WindowView": {
            "description": "One window, as the protocol sees it.",
            "properties": {
              "active": {
                "description": "Whether this is the session's active window.",
                "type": "boolean"
              },
              "id": {
                "description": "The `@`-prefixed tmux identity.",
                "type": "string"
              },
              "index": {
                "description": "The window's index within that session.",
                "format": "int32",
                "type": "integer"
              },
              "linked": {
                "description": "Whether more than one session links this window.",
                "type": "boolean"
              },
              "name": {
                "description": "The window name.",
                "type": "string"
              },
              "panes": {
                "description": "How many panes the window holds.",
                "minimum": 0,
                "type": "integer"
              },
              "session_id": {
                "description": "The session this window was reached through.",
                "type": "string"
              }
            },
            "required": [
              "id",
              "session_id",
              "index",
              "name",
              "panes",
              "active",
              "linked"
            ],
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "windows": {
            "description": "The windows, in tmux's own order.",
            "items": {
              "$ref": "#/$defs/WindowView"
            },
            "type": "array"
          }
        },
        "required": [
          "windows"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Select Window"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "send_keys",
      "wireName": "send_keys",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 356
      },
      "description": "Type text into a pane, press named keys in it, or both. `text` is sent literally, so C-c in it types those three characters. Use `keys` for anything without a character of its own -- C-c to interrupt a running command, Escape, Up, C-d -- which are tmux key names and are interpreted. Text, keys, and optional Enter keep that order in one tmux dispatch. Before input, the configured synchronized-pane cohort is observed; a dead, input-disabled, mode-owned, terminal-attended, or inherited-caller member refuses the whole call, and so does an active run_shell_command, except for keys C-c or C-\\ sent alone, which interrupt it. Returned pane IDs describe configured membership, not confirmed delivery. The observation can race with tmux processing the input. A submitted line is remembered briefly so wait_for_text can discount its own echo; an unrecognized key stops that for the pane's current line rather than mask it inaccurately. Send input to a pane's program; a shell that receives it runs it with your user's permissions.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "enter": {
            "default": false,
            "description": "Whether to press Enter afterwards.",
            "type": "boolean"
          },
          "keys": {
            "description": "tmux key names to press, in order, after any text.\n\nThese are interpreted rather than typed, which is the only way to send\na key that has no character: `C-c` to interrupt, `Escape`, `Up`,\n`C-d`. Sending `C-c` as `text` would type those three characters.\nOmit to press none.",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "pane": {
            "description": "The `%`-prefixed pane id.",
            "type": "string"
          },
          "text": {
            "description": "Text typed literally into the pane. Key names are not interpreted. Omit\nto type none.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "pane": {
            "description": "The pane the caller targeted.",
            "type": "string"
          },
          "panes": {
            "description": "The effective configured recipient IDs observed before dispatch.\n\nMembership does not confirm delivery and may change after observation.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "pane",
          "panes"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Send Keys To Pane"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "pane-input",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "send_keys_batch",
      "wireName": "send_keys_batch",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 1078
      },
      "description": "Send an ordered batch of input operations to panes. Each executed row repeats send_keys' effective synchronized-cohort, dead-pane, input-off, pane-mode, attended-client, and inherited-caller preflight, then crosses one tmux dispatch. These observations can race with tmux processing the input. Send input to a pane's program; a shell that receives it runs it with your user's permissions.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$defs": {
          "OnError": {
            "enum": [
              "stop",
              "continue"
            ],
            "type": "string"
          },
          "SendOperation": {
            "additionalProperties": false,
            "properties": {
              "enter": {
                "default": false,
                "description": "Whether to press Enter afterwards.",
                "type": "boolean"
              },
              "keys": {
                "description": "tmux key names to press, in order, after any text, such as `C-c`. Omit\nto press none.",
                "items": {
                  "type": "string"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "pane": {
                "description": "The `%`-prefixed pane id.",
                "type": "string"
              },
              "text": {
                "description": "Text typed literally. Key names are not interpreted. Omit to type\nnone.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "pane"
            ],
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "on_error": {
            "$ref": "#/$defs/OnError",
            "default": "stop",
            "description": "`stop`, the default, ends at the first refused row; `continue` sends\nthe rest."
          },
          "operations": {
            "description": "The rows to send, in order, 1 to 64.",
            "items": {
              "$ref": "#/$defs/SendOperation"
            },
            "type": "array"
          }
        },
        "required": [
          "operations"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "BatchItem": {
            "properties": {
              "error": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ErrorData"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "index": {
                "minimum": 0,
                "type": "integer"
              },
              "result": true,
              "resultTruncated": {
                "type": "boolean"
              },
              "success": {
                "type": "boolean"
              },
              "tool": {
                "type": "string"
              }
            },
            "required": [
              "index",
              "tool",
              "success",
              "resultTruncated"
            ],
            "type": "object"
          },
          "ErrorCode": {
            "description": "Standard JSON-RPC error codes used throughout the MCP protocol.\n\nThese codes follow the JSON-RPC 2.0 specification and provide\nstandardized error reporting across all MCP implementations.",
            "format": "int32",
            "type": "integer"
          },
          "ErrorData": {
            "description": "Error information for JSON-RPC error responses.\n\nThis structure follows the JSON-RPC 2.0 specification for error reporting,\nproviding a standardized way to communicate errors between clients and servers.",
            "properties": {
              "code": {
                "$ref": "#/$defs/ErrorCode",
                "description": "The error type that occurred (using standard JSON-RPC error codes)"
              },
              "data": {
                "description": "Additional information about the error. The value of this member is defined by the\nsender (e.g. detailed error information, nested errors etc.)."
              },
              "message": {
                "description": "A short description of the error. The message SHOULD be limited to a concise single sentence.",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "OnError": {
            "enum": [
              "stop",
              "continue"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "failed": {
            "minimum": 0,
            "type": "integer"
          },
          "onError": {
            "$ref": "#/$defs/OnError"
          },
          "results": {
            "items": {
              "$ref": "#/$defs/BatchItem"
            },
            "type": "array"
          },
          "stoppedAt": {
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "succeeded": {
            "minimum": 0,
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          },
          "truncatedBytes": {
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "results",
          "succeeded",
          "failed",
          "truncated",
          "truncatedBytes",
          "onError"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Send Keys Batch"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "pane-input",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "set_history_limit",
      "wireName": "set_history_limit",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 895
      },
      "description": "Set the scrollback history limit for a session or its global default. From tmux 3.7 existing panes take it too, and lowering it discards their scrollback past the new limit. Delete tmux state; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Lines of scrollback to keep per pane.",
            "minimum": 0,
            "type": "integer"
          },
          "session": {
            "description": "The session to change, by `$`-prefixed id or name. Omit to change the\nglobal default.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "limit"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "name": {
            "type": "string"
          },
          "target": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "value"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Set History Limit"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change",
            "delete"
          ],
          "toolset": "teardown"
        }
      }
    },
    {
      "name": "set_mouse_enabled",
      "wireName": "set_mouse_enabled",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 864
      },
      "description": "Set mouse handling for a session or the global session default. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "description": "`true` turns mouse handling on; `false` turns it off.",
            "type": "boolean"
          },
          "session": {
            "description": "The session to change, by `$`-prefixed id or name. Omit to change the\nglobal default.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "name": {
            "type": "string"
          },
          "target": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "value"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Set Mouse Enabled"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "set_pane_title",
      "wireName": "set_pane_title",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 841
      },
      "description": "Set one pane's title. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "pane": {
            "description": "The `%`-prefixed pane id.",
            "type": "string"
          },
          "title": {
            "description": "The new title, stored as given.",
            "type": "string"
          }
        },
        "required": [
          "pane",
          "title"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the window's active pane.",
            "type": "boolean"
          },
          "caller": {
            "$ref": "#/$defs/Relation",
            "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
          },
          "command": {
            "description": "The command currently running.",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "The `%`-prefixed tmux identity.",
            "type": "string"
          },
          "path": {
            "description": "The pane's working directory.",
            "type": [
              "string",
              "null"
            ]
          },
          "window_id": {
            "description": "The window that contains the pane.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "window_id",
          "active",
          "caller"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Set Pane Title"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "title": "double-hash-once"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "set_synchronize_panes",
      "wireName": "set_synchronize_panes",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 1045
      },
      "description": "Set the window default for synchronized pane input. Individual pane overrides still determine the effective configured cohort, so enabling this can amplify what one send_keys call reaches. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "description": "`true` turns synchronized input on; `false` turns it off.",
            "type": "boolean"
          },
          "window": {
            "description": "The `@`-prefixed window id.",
            "type": "string"
          }
        },
        "required": [
          "window",
          "enabled"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "name": {
            "type": "string"
          },
          "target": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "value"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Set Synchronize Panes"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": true,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "show_environment",
      "wireName": "show_environment",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 510
      },
      "description": "List the variables tmux hands to processes it starts, for the server or for one session, and whether each is set or marked for removal. Values are withheld: a tmux server inherits the environment of the shell that started it, tokens and keys included. A value is returned only for a name the operator listed in LIBTMUX_ENVIRONMENT_VALUES at startup, and is then returned in clear. This is not the environment of anything already running: a pane started before a change keeps what it was given. Read the tmux environment; accepts no client-supplied executable input. Values are withheld unless the operator allowed the name.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "session": {
            "description": "The session whose environment to read, by `$`-prefixed id or name.\n\nOmit for the server's own.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "EnvironmentEntry": {
            "description": "One tmux environment entry.",
            "properties": {
              "name": {
                "description": "The variable name.",
                "type": "string"
              },
              "state": {
                "$ref": "#/$defs/EnvironmentState",
                "description": "Whether the name holds a value or is marked for removal."
              },
              "value": {
                "description": "The value, only for a set variable whose name the operator allowed in\n`LIBTMUX_ENVIRONMENT_VALUES` at startup.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "withheld": {
                "description": "True for a set variable whose value was not returned because the\noperator did not allow its name.",
                "type": "boolean"
              }
            },
            "required": [
              "name",
              "state",
              "withheld"
            ],
            "type": "object"
          },
          "EnvironmentState": {
            "description": "What tmux holds under one environment name.",
            "oneOf": [
              {
                "const": "set",
                "description": "tmux holds a value and hands it to processes it starts.",
                "type": "string"
              },
              {
                "const": "removed",
                "description": "tmux removes the name from the environment of processes it starts.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "entries": {
            "description": "The entries, in tmux's own order.",
            "items": {
              "$ref": "#/$defs/EnvironmentEntry"
            },
            "type": "array"
          },
          "session": {
            "description": "The session the environment belongs to, or absent for the server's.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "entries"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Show tmux Environment"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "process-environment"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "show_hooks",
      "wireName": "show_hooks",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 560
      },
      "description": "List the hooks tmux runs when something happens on the server, such as a pane exiting. This tool does not set hooks. Hooks set through another path remain in their server or session until unset; configuration files persist them across server restarts. Reach for this when tmux does something no tool here asked for. Read configured tmux commands; accepts no client-supplied executable input. Returned values may contain executable configuration.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "session": {
            "description": "The session whose hooks to read, by `$`-prefixed id or name. Omit for\nthe server's own.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Hook": {
            "description": "One tmux hook.",
            "properties": {
              "command": {
                "description": "The command tmux runs.",
                "type": "string"
              },
              "index": {
                "description": "Its index, when the hook is an array.",
                "minimum": 0,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "name": {
                "description": "The hook name, such as `pane-exited`.",
                "type": "string"
              }
            },
            "required": [
              "name",
              "command"
            ],
            "type": "object"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "hooks": {
            "description": "The hooks, in tmux's own order.",
            "items": {
              "$ref": "#/$defs/Hook"
            },
            "type": "array"
          }
        },
        "required": [
          "hooks"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Show tmux Hooks"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "configured-command"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "show_option",
      "wireName": "show_option",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 457
      },
      "description": "Read a tmux option, such as history-limit or a user option like @theme. Name the scope the option lives in; global-session is what tmux uses when a command names no target. Read configured tmux commands; accepts no client-supplied executable input. Returned values may contain executable configuration.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$defs": {
          "OptionScopeSchema": {
            "enum": [
              "server",
              "global-session",
              "global-window",
              "session",
              "window",
              "pane"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "The option name, such as `history-limit` or a user option like `@theme`.",
            "type": "string"
          },
          "scope": {
            "anyOf": [
              {
                "$ref": "#/$defs/OptionScopeSchema"
              },
              {
                "type": "null"
              }
            ],
            "description": "Which tmux object the option belongs to.\n\nOne of `server`, `global-session`, `global-window`, `session`,\n`window`, or `pane`. Defaults to `global-session`, which is what\nsetting an option without a target means in tmux."
          },
          "target": {
            "description": "The `$`, `@` or `%`-prefixed id, for the scopes that need one. Omit\nfor the others.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "name": {
            "description": "The option name.",
            "type": "string"
          },
          "value": {
            "description": "Its value, absent when it has never been set at that scope.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read tmux Option"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "name": "double-hash-once"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "configured-command"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "signal_channel",
      "wireName": "signal_channel",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/control.rs",
        "line": 733
      },
      "description": "Signal a tmux wait-for channel, releasing every current waiter. With no waiter, one signal is latched; signalling the same channel again clears that latch. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "channel": {
            "description": "The channel name, which is any string both sides agree on.",
            "type": "string"
          },
          "seconds": {
            "description": "How long to wait, in seconds. Defaults to 30, capped at 600.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "channel"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "channel": {
            "description": "The channel that was signalled.",
            "type": "string"
          }
        },
        "required": [
          "channel"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Signal Channel"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "snapshot_pane",
      "wireName": "snapshot_pane",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/inspect.rs",
        "line": 257
      },
      "description": "Read pane content with cursor position, mode state, and scroll position in one reply. The state query and capture are separate, so the result is not atomic. Prefer this over capture_pane when you need to reason about where the pane is rather than only what it says -- a cursor at column zero on a fresh line is a shell waiting, and a pane in a mode may route keys to tmux instead of the workload. Read pane output; accepts no client-supplied executable input. Returned content may be sensitive or untrusted.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "history": {
            "default": false,
            "description": "Include scrollback rather than only the visible screen.",
            "type": "boolean"
          },
          "max_lines": {
            "description": "The most content lines to return, oldest dropped first.\n\nDefaults to the whole visible screen. The end of a pane is what says\nwhat just happened, so a limit keeps the end.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "pane": {
            "description": "The `%`-prefixed pane id.",
            "type": "string"
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "PaneView": {
            "description": "One pane, as the protocol sees it.",
            "properties": {
              "active": {
                "description": "Whether this is the window's active pane.",
                "type": "boolean"
              },
              "caller": {
                "$ref": "#/$defs/Relation",
                "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
              },
              "command": {
                "description": "The command currently running.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "description": "The `%`-prefixed tmux identity.",
                "type": "string"
              },
              "path": {
                "description": "The pane's working directory.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "window_id": {
                "description": "The window that contains the pane.",
                "type": "string"
              }
            },
            "required": [
              "id",
              "window_id",
              "active",
              "caller"
            ],
            "type": "object"
          },
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "content": {
            "description": "What the pane is showing.",
            "type": "string"
          },
          "cursor_x": {
            "description": "Where the cursor sits, counting from the left.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "cursor_y": {
            "description": "Where the cursor sits, counting from the top.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "dead": {
            "description": "Whether the process in it has ended.",
            "type": "boolean"
          },
          "dropped": {
            "description": "How many older lines were dropped to honour `max_lines`.",
            "minimum": 0,
            "type": "integer"
          },
          "height": {
            "description": "How tall it is, in rows.",
            "minimum": 0,
            "type": "integer"
          },
          "in_mode": {
            "description": "Whether the pane is in a mode, where keys navigate rather than type.",
            "type": "boolean"
          },
          "lines": {
            "description": "How many lines of it are reported.",
            "minimum": 0,
            "type": "integer"
          },
          "mode": {
            "description": "Which mode, when it is in one.",
            "type": [
              "string",
              "null"
            ]
          },
          "pane": {
            "$ref": "#/$defs/PaneView",
            "description": "The pane itself."
          },
          "scroll_position": {
            "description": "How far it is scrolled back, when it is in copy mode.",
            "format": "int32",
            "type": [
              "integer",
              "null"
            ]
          },
          "width": {
            "description": "How wide it is, in columns.",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "pane",
          "width",
          "height",
          "in_mode",
          "dead",
          "content",
          "lines",
          "dropped"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Snapshot Pane State"
      },
      "meta": {
        "anthropic/alwaysLoad": true,
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "terminal-content"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    },
    {
      "name": "split_window",
      "wireName": "split_window",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 964
      },
      "description": "Split a window and start the configured process with no command payload. Start a pane's configured process; accepts no command payload.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$defs": {
          "SplitDirectionSchema": {
            "enum": [
              "above",
              "below",
              "left",
              "right"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "direction": {
            "anyOf": [
              {
                "$ref": "#/$defs/SplitDirectionSchema"
              },
              {
                "type": "null"
              }
            ],
            "description": "Where the new pane goes relative to `pane`. Defaults to `below`."
          },
          "pane": {
            "description": "The `%`-prefixed pane to split.",
            "type": "string"
          },
          "percent": {
            "description": "The new pane's share of the split, 1 to 100. Defaults to half.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "start_directory": {
            "description": "The new pane's working directory. Omit for the directory this MCP\nserver started in, not `pane`'s current directory.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the window's active pane.",
            "type": "boolean"
          },
          "caller": {
            "$ref": "#/$defs/Relation",
            "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
          },
          "command": {
            "description": "The command currently running.",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "The `%`-prefixed tmux identity.",
            "type": "string"
          },
          "path": {
            "description": "The pane's working directory.",
            "type": [
              "string",
              "null"
            ]
          },
          "window_id": {
            "description": "The window that contains the pane.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "window_id",
          "active",
          "caller"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Split Window"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {
            "start_directory": "double-hash-once"
          },
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "configured-process",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "execute"
        }
      }
    },
    {
      "name": "swap_pane",
      "wireName": "swap_pane",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/contract.rs",
        "line": 817
      },
      "description": "Swap the positions of two panes. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "source_pane": {
            "description": "The `%`-prefixed pane id to move; the result describes it.",
            "type": "string"
          },
          "target_pane": {
            "description": "The `%`-prefixed pane id it trades places with.",
            "type": "string"
          }
        },
        "required": [
          "source_pane",
          "target_pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "Relation": {
            "description": "How a pane relates to the process answering the request.\n\nThree values rather than a boolean, because \"not the caller's pane\" and\n\"there is no caller\" are different answers and an agent acts differently on\neach.",
            "oneOf": [
              {
                "const": "unknown",
                "description": "This process is not running inside tmux, so no pane is its own.",
                "type": "string"
              },
              {
                "const": "self",
                "description": "Confirmed: the same tmux server, and the same pane.",
                "type": "string"
              },
              {
                "const": "other",
                "description": "Some other pane, or a pane this crate cannot prove is the caller's.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Whether this is the window's active pane.",
            "type": "boolean"
          },
          "caller": {
            "$ref": "#/$defs/Relation",
            "description": "Whether this is the pane the MCP server itself runs in.\n\n`self` only on a confirmed match of both socket and pane id; `other`\nfor every pane that is not, including one this crate cannot prove\neither way; `unknown` when the server is not running inside tmux, so\nthe question has no answer."
          },
          "command": {
            "description": "The command currently running.",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "The `%`-prefixed tmux identity.",
            "type": "string"
          },
          "path": {
            "description": "The pane's working directory.",
            "type": [
              "string",
              "null"
            ]
          },
          "window_id": {
            "description": "The window that contains the pane.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "window_id",
          "active",
          "caller"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Swap Panes"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "wait_for_channel",
      "wireName": "wait_for_channel",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/observe.rs",
        "line": 490
      },
      "description": "Block until something signals a tmux wait-for channel. A pending signal is consumed. Pair this with a shell command that ends in `tmux wait-for -S <channel>` to synchronise with work this server did not start. Change tmux state; no client-supplied executable input.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "channel": {
            "description": "The channel name, which is any string both sides agree on.",
            "type": "string"
          },
          "seconds": {
            "description": "How long to wait, in seconds. Defaults to 30, capped at 600.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "channel"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "ChannelWaitOutcomeSchema": {
            "enum": [
              "signalled",
              "deadline"
            ],
            "type": "string"
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "channel": {
            "description": "The channel that was waited on.",
            "type": "string"
          },
          "outcome": {
            "$ref": "#/$defs/ChannelWaitOutcomeSchema",
            "description": "`signalled` or `deadline`."
          }
        },
        "required": [
          "channel",
          "outcome"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Wait For Channel"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "change"
          ],
          "toolset": "manage"
        }
      }
    },
    {
      "name": "wait_for_text",
      "wireName": "wait_for_text",
      "source": {
        "repo": "libtmux/libtmux-rs",
        "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
        "file": "crates/tmux-mcp/src/tools/observe.rs",
        "line": 344
      },
      "description": "Wait until a pane writes matching text. Reads the pane's live output stream, so text that scrolls past between checks is still seen. The returned text is that raw stream, not the rendered screen: a line redrawn in place repeats; capture_pane shows the screen. Prefer run_shell_command for commands you are sending yourself: it reports an exit status instead of guessing from output. Use this for output you did not author, such as a server logging that it is ready. A line this server itself types and submits -- with send_keys, paste_text, or run_shell_command's own dispatch -- is discounted from a match for a short time afterward, so waiting for text you just sent does not match its own echo; output that happens to repeat the same words still does. A submitted line that wrapped across terminal rows when it was typed is not discounted. A pattern still on the row being typed into, not yet submitted, reports outcome pending instead of matched, and one already on a completed row before this call attached reports present_at_entry. Waiting owns an observer client until the wait ends. Each list accepts at most 32 patterns, each at most 4,096 bytes, using Rust's linear-time regex engine. Read pane output; accepts no client-supplied executable input. Returned content may be sensitive or untrusted.",
      "schemaStatus": "runtime",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "match_case": {
            "default": false,
            "description": "Match case. Off by default.",
            "type": "boolean"
          },
          "pane": {
            "description": "The `%`-prefixed pane to watch.",
            "type": "string"
          },
          "patterns": {
            "description": "Text that ends the wait successfully. Omit to wait for any output.",
            "items": {
              "type": "string"
            },
            "maxItems": 32,
            "type": [
              "array",
              "null"
            ]
          },
          "regex": {
            "default": false,
            "description": "Read both lists as regular expressions rather than literal text.",
            "type": "boolean"
          },
          "seconds": {
            "description": "How long to wait, in seconds. Defaults to 30, capped at 600.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "stop": {
            "description": "Text that ends the wait as a failure, reported as `stopped`. Omit for\nnone.\n\nGive the failure markers you already know — `error:`, `Traceback` — and\na failed run returns at once instead of at the deadline.",
            "items": {
              "type": "string"
            },
            "maxItems": 32,
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "pane"
        ],
        "type": "object"
      },
      "outputSchema": {
        "$defs": {
          "WaitOutcome": {
            "description": "How a wait for text finished.",
            "oneOf": [
              {
                "const": "present_at_entry",
                "description": "A wanted pattern was already in the pane's output before this began\nwatching, on a row above the one still being typed into, and is not\na line this server itself submitted moments earlier.\n\nA wait only sees what a pane writes after it starts, so this is never\nfolded into [`Self::Matched`]: the same pattern printed moments\nearlier -- an earlier command's own output, say -- can already be\nsitting there, and a caller that treated that as a fresh match would\nact on something that happened before this call, not because of it.\nA line this server typed and submitted with `send_keys` is discounted\nrather than reported here or as [`Self::Matched`], for a short time\nafter it was submitted.",
                "type": "string"
              },
              {
                "const": "pending",
                "description": "A wanted pattern's only occurrence is the row still being typed\ninto: text this server (or a person sharing the pane) sent and has\nnot submitted, not anything that has run.\n\nSubmit it, then wait again: the next wait sees the command's own\noutput on a row above a new one still being typed into, which is\n[`Self::PresentAtEntry`] or [`Self::Matched`] depending on when it\narrived, never this -- and never the submitted line's own echo,\nwhich stays discounted for a short time after.",
                "type": "string"
              },
              {
                "const": "matched",
                "description": "A pattern matched, in output that arrived after the wait attached.",
                "type": "string"
              },
              {
                "const": "stopped",
                "description": "A stop pattern matched, so the wait ended early.",
                "type": "string"
              },
              {
                "const": "deadline",
                "description": "The time the caller allowed ran out.",
                "type": "string"
              },
              {
                "const": "pane_closed",
                "description": "The pane stopped writing for good.",
                "type": "string"
              },
              {
                "const": "cancelled",
                "description": "The client withdrew the request while the wait was still running.",
                "type": "string"
              }
            ]
          }
        },
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "bytes": {
            "description": "How many bytes arrived, before filtering or truncation.",
            "minimum": 0,
            "type": "integer"
          },
          "matched_index": {
            "description": "Which pattern matched, indexed into the list it came from.",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "matched_pattern": {
            "description": "The pattern that matched, as it was given.",
            "type": [
              "string",
              "null"
            ]
          },
          "outcome": {
            "$ref": "#/$defs/WaitOutcome",
            "description": "How the wait finished."
          },
          "pane": {
            "description": "The pane that was watched.",
            "type": "string"
          },
          "text": {
            "description": "What the pane wrote, with escape sequences removed.\n\nThis is the raw output stream, not the rendered screen: a line redrawn\nin place, such as a line editor's echo, repeats. `capture_pane` shows\nthe screen.",
            "type": "string"
          }
        },
        "required": [
          "pane",
          "outcome",
          "text",
          "bytes"
        ],
        "type": "object"
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Wait For Pane Text"
      },
      "meta": {
        "com.git-pull.libtmux-mcp/capability": {
          "amplifiesFutureInput": false,
          "inputLiteralization": {},
          "mayExposeSecrets": true,
          "mayReturnUntrustedContent": true,
          "nestedAuthority": [],
          "outputClasses": [
            "tmux-metadata",
            "terminal-content"
          ],
          "processReach": "none",
          "tmuxEffects": [
            "observe"
          ],
          "toolset": "inspect"
        }
      }
    }
  ],
  "wirePrefix": "",
  "selectable": true,
  "source": "crates/tmux-mcp/src/tools",
  "repo": "libtmux/libtmux-rs",
  "revision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
  "extractedRevision": "a6fc2a65674177b92b17fa380757155d2ba150fd",
  "selection": {
    "LIBTMUX_TOOLSETS": "inspect,manage,execute,teardown"
  },
  "protocol": {
    "capabilities": {
      "resources": {},
      "tools": {}
    },
    "prompts": [],
    "protocolVersion": "2025-11-25",
    "resources": [
      {
        "description": "The startup-frozen effective tool surface and each tool's direct authority.",
        "mimeType": "application/json",
        "name": "capabilities",
        "uri": "tmux://capabilities"
      }
    ],
    "resourceTemplates": [],
    "serverInfo": {
      "name": "rmcp",
      "version": "3.1.2"
    }
  }
}
