Skip to main content
Glama
ferrislucas

iTerm MCP Server

by ferrislucas

send_control_character

Send control characters (e.g., Control-C or telnet escape) to the active iTerm terminal for managing processes or executing commands directly within the terminal session.

Instructions

Sends a control character to the active iTerm terminal (e.g., Control-C, or special sequences like ']' for telnet escape)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
letterYesThe letter corresponding to the control character (e.g., 'C' for Control-C, ']' for telnet escape)

Implementation Reference

  • Core implementation of the send_control_character tool: maps input letter to control code (with special cases for ']' and 'ESC'), constructs iTerm2 AppleScript, and executes it using osascript to send the character.
    async send(letter: string): Promise<void> {
      let controlCode: number;
      
      // Handle special cases for telnet escape sequences
      if (letter.toUpperCase() === ']') {
        // ASCII 29 (GS - Group Separator) - the telnet escape character
        controlCode = 29;
      } 
      // Add other special cases here as needed
      else if (letter.toUpperCase() === 'ESCAPE' || letter.toUpperCase() === 'ESC') {
        // ASCII 27 (ESC - Escape)
        controlCode = 27;
      }
      else {
        // Validate input for standard control characters
        letter = letter.toUpperCase();
        if (!/^[A-Z]$/.test(letter)) {
          throw new Error('Invalid control character letter');
        }
        
        // Convert to standard control code (A=1, B=2, etc.)
        controlCode = letter.charCodeAt(0) - 64;
      }
    
      // AppleScript to send the control character
      const ascript = `
        tell application "iTerm2"
          tell front window
            tell current session of current tab
              -- Send the control character
              write text (ASCII character ${controlCode})
            end tell
          end tell
        end tell
      `;
    
      try {
        await this.executeCommand(`osascript -e '${ascript}'`);
      } catch (error: unknown) {
        throw new Error(`Failed to send control character: ${(error as Error).message}`);
      }
    }
  • Input schema for the tool, defining 'letter' as required string parameter.
    inputSchema: {
      type: "object",
      properties: {
        letter: {
          type: "string",
          description: "The letter corresponding to the control character (e.g., 'C' for Control-C, ']' for telnet escape)"
        },
      },
      required: ["letter"]
    }
  • src/index.ts:57-69 (registration)
    Registration of the tool in the MCP server's ListTools response, including name, description, and input schema.
      name: "send_control_character",
      description: "Sends a control character to the active iTerm terminal (e.g., Control-C, or special sequences like ']' for telnet escape)",
      inputSchema: {
        type: "object",
        properties: {
          letter: {
            type: "string",
            description: "The letter corresponding to the control character (e.g., 'C' for Control-C, ']' for telnet escape)"
          },
        },
        required: ["letter"]
      }
    }
  • MCP CallTool request handler dispatch for send_control_character: instantiates the class and calls send() with the letter argument, returns confirmation message.
    case "send_control_character": {
      const ttyControl = new SendControlCharacter();
      const letter = String(request.params.arguments?.letter);
      await ttyControl.send(letter);
      
      return {
        content: [{
          type: "text",
          text: `Sent control character: Control-${letter.toUpperCase()}`
        }]
      };
    }
Install Server

Other Tools

Related Tools

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/ferrislucas/iterm-mcp'

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