Skip to main content
Glama

tmux_capture_pane

Capture visible content or history from a tmux pane to read command output or check pane state. Specify session, window, pane, and line range for precise extraction.

Instructions

Capture the visible content or history of a tmux pane.

Args:

  • session (string, required): Name of the session

  • window (string or number, optional): Window index or name

  • pane (number, optional): Pane index

  • start_line (number, optional): Start line (negative = history, 0 = top of visible)

  • end_line (number, optional): End line (use - for bottom of visible pane)

  • escape_sequences (boolean, optional): Include escape sequences (default: false)

This tool is useful for reading command output or checking the state of a pane.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sessionYesName of the session
windowNoWindow index or name
paneNoPane index
start_lineNoStart line (negative = history)
end_lineNoEnd line
escape_sequencesNoInclude escape sequences

Implementation Reference

  • The handler function that executes the tmux_capture_pane tool. It constructs the tmux capture-pane command with optional parameters for lines and escape sequences, runs it, truncates output if too long, and returns the pane content.
    },
    async ({ session, window, pane, start_line, end_line, escape_sequences }) => {
      try {
        const target = formatTarget(session, window, pane);
        let cmd = `capture-pane -t "${target}" -p`;
        if (start_line !== undefined) {
          cmd += ` -S ${start_line}`;
        }
        if (end_line !== undefined) {
          cmd += ` -E ${end_line}`;
        }
        if (escape_sequences) {
          cmd += " -e";
        }
        const output = await runTmux(cmd);
        const { text, truncated } = truncateIfNeeded(output);
    
        return {
          content: [{ type: "text", text }],
          structuredContent: { target, content: text, truncated },
        };
      } catch (error) {
        return {
          content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
          isError: true,
        };
      }
    }
  • Zod input schema defining parameters for the tmux_capture_pane tool: session (required), optional window, pane, start_line, end_line, escape_sequences.
    inputSchema: z
      .object({
        session: z.string().min(1).describe("Name of the session"),
        window: z.union([z.string(), z.number()]).optional().describe("Window index or name"),
        pane: z.number().int().min(0).optional().describe("Pane index"),
        start_line: z.number().int().optional().describe("Start line (negative = history)"),
        end_line: z.number().int().optional().describe("End line"),
        escape_sequences: z.boolean().default(false).describe("Include escape sequences"),
      })
      .strict(),
  • src/index.ts:633-692 (registration)
    Registers the tmux_capture_pane tool using server.registerTool, including title, description, inputSchema, annotations, and the handler function.
    server.registerTool(
      "tmux_capture_pane",
      {
        title: "Capture tmux Pane Content",
        description: `Capture the visible content or history of a tmux pane.
    
    Args:
      - session (string, required): Name of the session
      - window (string or number, optional): Window index or name
      - pane (number, optional): Pane index
      - start_line (number, optional): Start line (negative = history, 0 = top of visible)
      - end_line (number, optional): End line (use - for bottom of visible pane)
      - escape_sequences (boolean, optional): Include escape sequences (default: false)
    
    This tool is useful for reading command output or checking the state of a pane.`,
        inputSchema: z
          .object({
            session: z.string().min(1).describe("Name of the session"),
            window: z.union([z.string(), z.number()]).optional().describe("Window index or name"),
            pane: z.number().int().min(0).optional().describe("Pane index"),
            start_line: z.number().int().optional().describe("Start line (negative = history)"),
            end_line: z.number().int().optional().describe("End line"),
            escape_sequences: z.boolean().default(false).describe("Include escape sequences"),
          })
          .strict(),
        annotations: {
          readOnlyHint: true,
          destructiveHint: false,
          idempotentHint: true,
          openWorldHint: false,
        },
      },
      async ({ session, window, pane, start_line, end_line, escape_sequences }) => {
        try {
          const target = formatTarget(session, window, pane);
          let cmd = `capture-pane -t "${target}" -p`;
          if (start_line !== undefined) {
            cmd += ` -S ${start_line}`;
          }
          if (end_line !== undefined) {
            cmd += ` -E ${end_line}`;
          }
          if (escape_sequences) {
            cmd += " -e";
          }
          const output = await runTmux(cmd);
          const { text, truncated } = truncateIfNeeded(output);
    
          return {
            content: [{ type: "text", text }],
            structuredContent: { target, content: text, truncated },
          };
        } catch (error) {
          return {
            content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
            isError: true,
          };
        }
      }
    );

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/audibleblink/tmux-mcp-server'

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