Skip to main content
Glama
README.md
# Ghostty MCP Server

A Model Context Protocol (MCP) server for [Ghostty](https://ghostty.org), the fast, native, feature-rich terminal emulator. This server enables AI assistants like Claude to interact with and control Ghostty through a standardized interface.

## Features

- **Configuration Management**: Get and set Ghostty configuration values
- **Theme Control**: Switch between themes and manage light/dark modes
- **Keybinding Management**: Add, modify, or remove custom keybindings
- **Command Execution**: Run commands directly in Ghostty
- **Window Management**: Create, split, and manage Ghostty windows
- **Live Reload**: Reload configuration without restarting
- **Discovery**: List available themes, keybindings, and configurations

## Installation

1. Clone this repository:
```bash
git clone https://github.com/yourusername/ghostty-mcp.git
cd ghostty-mcp
```

2. Install dependencies:
```bash
npm install
```

3. Build the project:
```bash
npm run build
```

## Configuration

### Claude Desktop Configuration

Add the following to your Claude Desktop configuration file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Linux**: `~/.config/claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "ghostty": {
      "command": "node",
      "args": ["/path/to/ghostty-mcp/dist/index.js"],
      "env": {}
    }
  }
}
```

Replace `/path/to/ghostty-mcp` with the actual path to your cloned repository.

## Available Tools

### `ghostty_config`
Get or set Ghostty configuration values.

**Parameters:**
- `key` (string, required): Configuration key (e.g., "font-size", "theme", "window-decoration")
- `value` (string, optional): Configuration value. If not provided, returns current value

**Examples:**
```
// Get current font size
ghostty_config(key: "font-size")

// Set font size to 14
ghostty_config(key: "font-size", value: "14")
```

### `ghostty_theme`
Change Ghostty theme.

**Parameters:**
- `theme` (string, required): Theme name to apply
- `mode` (string, optional): Theme mode - "light", "dark", or "auto"

**Examples:**
```
// Apply dracula theme
ghostty_theme(theme: "dracula")

// Set github_light for light mode
ghostty_theme(theme: "github_light", mode: "light")
```

### `ghostty_keybind`
Manage Ghostty keybindings.

**Parameters:**
- `action` (string, required): Action to bind (e.g., "copy", "paste", "new_tab")
- `key` (string, required): Key combination (e.g., "cmd+c", "ctrl+shift+t")
- `remove` (boolean, optional): If true, removes the keybinding

**Examples:**
```
// Add keybinding for new tab
ghostty_keybind(action: "new_tab", key: "cmd+t")

// Remove keybinding
ghostty_keybind(action: "new_tab", remove: true)
```

### `ghostty_command`
Execute commands in Ghostty.

**Parameters:**
- `command` (string, required): Command to execute
- `wait` (boolean, optional): Whether to wait for command completion

**Examples:**
```
// Run a command
ghostty_command(command: "ls -la")

// Run and wait for completion
ghostty_command(command: "npm install", wait: true)
```

### `ghostty_window`
Manage Ghostty windows and splits.

**Parameters:**
- `action` (string, required): One of:
  - "new": Create new window
  - "close": Close current window
  - "split-horizontal": Split horizontally
  - "split-vertical": Split vertically
  - "focus-next": Focus next pane
  - "focus-previous": Focus previous pane
- `config` (object, optional): Additional window configuration

**Examples:**
```
// Create new window
ghostty_window(action: "new")

// Split vertically
ghostty_window(action: "split-vertical")
```

### `ghostty_reload`
Reload Ghostty configuration.

**Parameters:**
- `scope` (string, optional): What to reload - "config", "theme", or "all" (default: "all")

**Examples:**
```
// Reload all configuration
ghostty_reload()

// Reload only theme
ghostty_reload(scope: "theme")
```

### `ghostty_list`
List available themes, keybindings, or configuration.

**Parameters:**
- `type` (string, required): What to list - "themes", "keybindings", or "config"
- `filter` (string, optional): Optional filter for results

**Examples:**
```
// List all themes
ghostty_list(type: "themes")

// List keybindings containing "tab"
ghostty_list(type: "keybindings", filter: "tab")
```

## Development

### Running in Development Mode

```bash
npm run dev
```

### Building

```bash
npm run build
```

### Testing with MCP Inspector

You can test this server using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector):

```bash
npx @modelcontextprotocol/inspector node dist/index.js
```

## Requirements

- Node.js 18 or later
- Ghostty terminal emulator installed
- Access to Ghostty CLI commands

## Platform Support

This MCP server supports:
- macOS
- Linux
- Windows (with appropriate path adjustments)

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

MIT License - see LICENSE file for details

## Acknowledgments

- [Ghostty](https://ghostty.org) by Mitchell Hashimoto
- [Model Context Protocol](https://modelcontextprotocol.io) by Anthropic

TDQS

B3.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct aspect of Ghostty (commands, config, keybindings, listing, reload, theme, windows) with no overlap.

Naming Consistency5/5

All tools follow a consistent ghostty_<verb/noun> snake_case pattern, making them predictable.

Tool Count5/5

7 tools is a well-scoped set covering the major management areas of Ghostty without being excessive.

Completeness4/5

Covers core operations like command execution, configuration, keybindings, theming, and window management, though advanced features like fonts or profiles are absent.

Maintenance

ActivityInactive
ResponsivenessNo issues