iTerm2 MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@iTerm2 MCP Serverlist all my terminal panes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
iTerm2 MCP Server
An MCP (Model Context Protocol) server that allows AI assistants like Claude to read the contents of iTerm2 terminal panes. This enables AI assistants to see what's happening in your other terminal windows and tabs.
Features
List all panes: See all open iTerm2 windows, tabs, and panes with their working directories and running jobs
Read pane contents: Get the screen buffer text from any pane
Current pane detection: Automatically detects which pane the server is running in
Status checking: Verify that iTerm2 Python API is properly configured
Related MCP server: Enhanced iTerm MCP Server
Prerequisites
macOS with iTerm2 installed
Node.js >= 18.0.0
Python 3 with the
iterm2package:pip install iterm2iTerm2 Python API enabled:
Open iTerm2 > Settings (Cmd+,)
Go to General > Magic
Check Enable Python API
Restart iTerm2
Installation
Using npx (recommended)
npx iterm2-mcp-serverGlobal installation
npm install -g iterm2-mcp-server
iterm2-mcp-serverConfiguration
Claude Desktop
Add to your Claude Desktop configuration file (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"iterm2": {
"command": "npx",
"args": ["iterm2-mcp-server"]
}
}
}Claude Code
Add the MCP server using the CLI:
claude mcp add --scope user iterm2 -- npx github:sumchattering/iterm2-mcp-serverThis installs it globally so it's available in all your projects. You can verify it's working:
claude mcp listYou should see: iterm2: npx github:sumchattering/iterm2-mcp-server - ✓ Connected
Available Tools
iterm2_list_panes
List all iTerm2 windows, tabs, and panes with their shorthand IDs, names, working directories, and running jobs.
iterm2_read_pane
Read the screen buffer contents of a specific pane.
Parameters:
session_id(required): The pane ID using shorthand liket3p1(tab 3, pane 1) orw1t3p1
iterm2_send_text
Send text or commands to an iTerm2 pane as if typed by the user.
Parameters:
session_id(required): The pane ID (e.g.,t3p1)text(required): The text or command to sendnewline(optional, default: true): Whether to press Enter after the text
iterm2_send_control_character
Send control characters like Ctrl+C, Ctrl+D, Ctrl+Z, or Ctrl+L to an iTerm2 pane.
Parameters:
session_id(required): The pane ID (e.g.,t3p1)control(required):c(Ctrl+C),d(Ctrl+D),z(Ctrl+Z),l(Ctrl+L)
iterm2_split_pane
Split an iTerm2 pane horizontally or vertically, creating a new pane.
Parameters:
session_id(required): The pane ID to split (e.g.,t3p1)vertical(optional, default: false): If true, split vertically (side by side)
iterm2_current_pane
Get information about the current iTerm2 pane where Claude Code is running.
iterm2_status
Check if iTerm2 Python API is properly configured and ready to use.
iterm2_enable_api
Enable the iTerm2 Python API in preferences. Note: iTerm2 must be restarted after enabling.
Pane IDs
Panes are identified using shorthand IDs that match iTerm2's UI (1-based indexing):
t3p1- Tab 3, Pane 1 (assumes Window 1)t3p2- Tab 3, Pane 2w1t3p1- Window 1, Tab 3, Pane 1 (explicit window)w2t1p1- Window 2, Tab 1, Pane 1
Use iterm2_list_panes to see all available panes and their IDs.
Using with Claude Code
Once installed, Claude Code can see and interact with your terminal panes. Here are effective ways to use it:
Asking about panes
"What's in tab 3?" - Claude will read the contents of tab 3
"What's running in the pane next to you?" - Claude can identify adjacent panes
"Show me all my terminal tabs" - Lists all panes with their shorthand IDs
"What's the output of my server?" - Claude can find and read server output
Running commands in other panes
"Run
npm testin t3p1" - Sends command to specific pane"Stop the process in tab 4" - Sends Ctrl+C to interrupt
"Clear the terminal in t2p1" - Sends Ctrl+L
Working with multiple panes
"Split my terminal and run the dev server in the new pane"
"What errors are showing in my other terminals?"
"Compare the output in tab 2 and tab 3"
Tips for effective queries
Be specific about location: "tab 3" or "t3p1" is clearer than "the other terminal"
Reference the pane list: Ask Claude to list panes first if you're unsure of the layout
Use relative references: "the pane next to you" or "the tab on the left" work too
Troubleshooting
"Connection failed" error
Make sure iTerm2 is running
Verify Python API is enabled: iTerm2 > Settings > General > Magic > Enable Python API
Restart iTerm2 after enabling the API (Cmd+Q, then reopen)
"iterm2 module not installed"
Install the Python package:
pip install iterm2"Not running in an iTerm2 session"
The MCP server needs to be started from within an iTerm2 terminal for current pane detection to work.
How It Works
This MCP server uses the iTerm2 Python API to communicate with iTerm2 via a WebSocket connection. The server:
Receives tool calls from the AI assistant via MCP
Executes Python scripts that use the
iterm2libraryReturns formatted results back to the assistant
Development
# Clone the repository
git clone https://github.com/sumchattering/iterm2-mcp-server.git
cd iterm2-mcp-server
# Install dependencies
npm install
# Build
npm run build
# Run locally
npm startLicense
MIT License - see LICENSE for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Future Improvements
The following features are being considered for future releases. Feedback welcome!
Create tab/window:
iterm2_create_tabanditerm2_create_windowtoolsClose pane:
iterm2_close_panetool to close panes programmaticallyFocus pane:
iterm2_focus_paneto bring a specific pane to the foregroundWait for prompt:
iterm2_wait_for_promptto wait until a command finishes executingSet pane title: Ability to set custom titles for panes
Performance optimization: Persistent Python process instead of spawning per request
Available Tools
9 toolsiterm2_current_paneB
Get information about the current iTerm2 pane where the MCP server is running
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states this is a read/informational operation but doesn't disclose what specific information the tool returns (dimensions, title, etc.), whether the pane is guaranteed to exist, or what happens if the server isn't in a pane. The lack of an output schema means the description should clarify what 'information' means here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is perfectly sized for a zero-parameter tool. Every word earns its place, and the specificity about 'where the MCP server is running' is valuable context in compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter informational tool, this is mostly complete. The main gap is not specifying what 'information' is returned—the description neither lists example output nor references an output schema (which doesn't exist). This leaves the agent guessing about whether it gets dimensions, title, session name, or other attributes. A brief note on return content would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters, the schema coverage is trivially 100%. The description correctly explains what the tool refers to ('the current iTerm2 pane where the MCP server is running'), disambiguating which pane is meant. No parameter documentation is needed since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets information about the current iTerm2 pane where the MCP server is running. The verb 'Get' with the specific resource 'current iTerm2 pane' is clear and specific. It distinguishes from siblings like iterm2_side_pane and iterm2_list_panes since it specifically targets the 'current' pane where the server runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (querying the current pane's info) but doesn't explicitly contrast with alternatives like iterm2_list_panes for enumerating all panes. It relies on sibling names being self-explanatory rather than explicitly stating when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_enable_apiA
Enable the iTerm2 Python API in preferences. Note: iTerm2 must be restarted after enabling.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that a restart is required after enabling, which is useful behavioral context. However, it doesn't disclose whether this changes preferences persistently, whether it requires the tool to be idempotent, or what happens if already enabled. For a configuration/mutation tool with zero annotations, more disclosure would be valuable, but the restart note does add meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first states the purpose, the second adds a critical behavioral caveat. No filler or redundancy. Very efficient for what it communicates.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter configuration tool with no output schema, the description covers the core action and a key side effect (restart required). However, it could be more complete regarding what 'enabling the API' unlocks, why a user would want this, whether it's reversible, or what error conditions might arise. Given zero siblings conceptually overlap, the completeness is adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema coverage is 100% (trivially, since there are no params). With no parameters, there is nothing for the description to add semantically. The baseline for 0 params is 4, and the description correctly adds no param noise. This is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action clearly: 'Enable the iTerm2 Python API in preferences.' It has a specific verb (enable) + resource (iTerm2 Python API) + location (in preferences). It doesn't explicitly distinguish from the sibling tools, but the siblings are all about pane control or status, so the purpose is reasonably distinct in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides setup context by noting 'Note: iTerm2 must be restarted after enabling.' However, it doesn't state when to use this tool versus alternatives or any prerequisites like whether iTerm2 is already running or whether this is a one-time setup step. The restart note gives some context for expected behavior after invocation but no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_list_panesA
List all iTerm2 windows, tabs, and panes with their shorthand IDs (like t5p2), names, working directories, and running jobs. Shows which pane you are in. Use these shorthand IDs with other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It describes the informational/read-only nature implicitly by stating it 'lists' and 'shows' content, but doesn't explicitly state it's non-destructive or describe any limitations (e.g., requires iTerm2 running, requires API enabled). The read-only trait is implied rather than disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact at two sentences and front-loads the primary purpose. The second sentence about 'shows which pane you are in' and 'use with other tools' adds practical value without padding. Minor inefficiency: the second sentence's two clauses could be slightly more structured, but overall it's tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, informational listing tool, the description covers the returned data (IDs, names, directories, jobs) and usage context (IDs consumed by other tools). It doesn't mention prerequisites like API enablement (a sibling tool iterm2_enable_api suggests this may be needed), but the description is largely sufficient for this simple tool type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is effectively complete (no properties to document). The description adds value by explaining what the returned data contains and how to use the IDs, which addresses informational needs since there's no output schema. Baseline 4 for 0 params is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('List all iTerm2 windows, tabs, and panes') and clearly specifies what data is returned: shorthand IDs, names, working directories, and running jobs. It also explicitly notes which pane the user is currently in, adding useful scoping detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for how to use the tool ('Shows which pane you are in' and 'Use these shorthand IDs with other tools'), implicitly distinguishing it from sibling tools that send input, split panes, or read output. However, it doesn't explicitly state when not to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_read_paneC
Read the screen buffer contents of a specific iTerm2 pane. Returns the visible text in the terminal.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | The pane ID - use shorthand like 't5p2' (tab 5, pane 2) or 'w1t5p2' (window 1, tab 5, pane 2). Numbers are 1-based to match iTerm2's UI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states the tool reads the screen buffer and returns visible text, which implies a read-only operation, but doesn't clarify details like whether this captures scrollback or only the currently visible viewport, whether the text is cleared/stale, or if there are timing implications for reading live terminal output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero waste. States the action and what's returned. Could arguably be a single sentence, but the brevity is appropriate for such a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers the basic purpose. However, it doesn't clarify the return format (is it raw text, lines, structured?), whether scrollback is included, or how this differs from iterm2_status for reading pane content. Given the tool's simplicity, this is adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already clearly documents session_id with examples of shorthand formats. The description doesn't add meaning beyond the schema, but since coverage is complete, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Read the screen buffer contents of a specific iTerm2 pane.' This distinguishes from siblings like iterm2_send_text (which writes) and iterm2_list_panes (which enumerates). It's specific about what it does but doesn't elaborate on output format beyond saying visible text is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like iterm2_current_pane or iterm2_status. It's implied that this is for reading terminal output, but there's no explicit when/when-not guidance or mention of alternatives for different reading scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_send_control_characterA
Send control characters like Ctrl+C, Ctrl+D, Ctrl+Z, or Ctrl+L to an iTerm2 pane. Useful for interrupting processes or clearing the screen.
| Name | Required | Description | Default |
|---|---|---|---|
| control | Yes | The control character to send: 'c' for Ctrl+C (interrupt/SIGINT), 'd' for Ctrl+D (EOF/logout), 'z' for Ctrl+Z (suspend/SIGTSTP), 'l' for Ctrl+L (clear screen). | |
| session_id | Yes | The pane ID - use shorthand like 't5p2' (tab 5, pane 2) or 'w1t5p2'. Numbers are 1-based. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for safety disclosure. Sending Ctrl+C/D/Z are potentially disruptive (interrupting, suspending, EOF/logout) — the description does at least flag that these actions interrupt processes. But it doesn't note that Ctrl+D can log out/log off, that these are one-way (no undo), or the irreversible nature of some effects. Reveals the core effect but lacks deeper safety context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero waste. States the tool name's content and provides a concrete use case example. Well front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param tool with 100% schema coverage and no output schema, the description plus schema cover the essential needs. The behavior (sending control characters) is straightforward and complete. It could mention what happens on success/failure but this is a simple fire-and-forget action, so current coverage is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description itself adds little beyond schema. The enum values and their meanings are fully spelled out in the parameter descriptions (e.g., 'c' for interrupt/SIGINT). The description simply repeats 'Ctrl+C, Ctrl+D, Ctrl+Z, or Ctrl+L' from the schema with no additional format/usage nuance. Baseline 3 is appropriate since schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it sends control characters (Ctrl+C/D/Z/L) to an iTerm2 pane and gives purpose ('interrupting processes or clearing the screen'). Verb+resource+scope are specific. It doesn't explicitly distinguish from sibling send_text, but the 'control character' focus is reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description gives concrete use cases ('interrupting processes or clearing the screen') that imply when it applies. However, it doesn't explicitly contrast with iterm2_send_text (which sends regular text) or state when NOT to use it. Usage is implied, not explicitly differentiated against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_send_textA
Send text/commands to an iTerm2 pane as if typed by the user. Can optionally press Enter after the text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text or command to send to the pane. | |
| newline | No | Whether to press Enter after the text (default: true). Set to false to type text without executing. | |
| session_id | Yes | The pane ID - use shorthand like 't5p2' (tab 5, pane 2) or 'w1t5p2'. Numbers are 1-based. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does state the 'as if typed by the user' behavior and the newline default (via the false-setting option in the description), which adds useful behavioral context. However, it doesn't disclose what happens with special characters, whether the pane must be active/focused, error behavior, or whether the command targets the currently visible pane.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. Front-loaded with the core purpose, followed by the one behavioral qualifier (Enter). Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a straightforward send-text operation with no output schema and a 100%-covered 3-param schema, so the description is reasonably complete. However, for an interactive terminal mutation tool with no annotations, it could benefit from noting prerequisites (e.g., API enablement via iterm2_enable_api sibling) or clarifying behavior when the pane isn't visible/focused, which are plausible failure modes for a real-world agent calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all three parameters. The description adds value by explaining the newline default behavior ('press Enter after the text, default true') and the effect of setting newline=false ('type text without executing'), which goes beyond what the raw schema states. This is meaningful added semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (send text/commands), the target resource (an iTerm2 pane), and the 'as if typed by the user' behavioral qualifier, plus the optional Enter behavior. It distinguishes reasonably from siblings like iterm2_send_control_character (which sends special keys) and iterm2_read_pane (which reads), though it doesn't explicitly name these alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('send text/commands') but provides no explicit when-to-use guidance or when-not-to-use exclusions relative to siblings. For example, it doesn't clarify when to prefer this over iterm2_send_control_character or iterm2_current_pane. The use case is fairly evident for an interactive terminal tool, so implied usage is acceptable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_side_paneA
Get the side pane in the current tab. Returns the pane to the right of the current pane, or the left if current is rightmost. Useful for interacting with an adjacent terminal pane.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the directional fallback behavior (left if current is rightmost) which is useful. However, it doesn't describe what 'current pane' means precisely, whether it returns an identifier or a pane object, or any failure behavior (e.g., what happens with no side pane).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. States the action, the return semantics, and the use case all in compact form. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists and no annotations are given, so the description must cover behavior fully. It explains the directional logic and use case, but lacks detail about the return value format, how it identifies the pane, and interactions with tools like iterm2_send_text or iterm2_split_pane. Adequate but with notable gaps given the zero annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes 0 parameters with 100% schema coverage (empty schema is fully documented). Since there are no parameters to explain, the description has no burden here. Baseline 4 for zero-parameter tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb+resource (Get the side pane) with explicit directional behavior stated. Distinguishes from siblings like iterm2_current_pane and iterm2_list_panes by specifying adjacency logic (right side, or left if rightmost).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States usefulness for 'interacting with an adjacent terminal pane' which implies when to use it, but doesn't explicitly mention alternatives (e.g., iterm2_list_panes for a broader view, iterm2_read_pane for content). No when-not-to-use guidance given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_split_paneA
Split an iTerm2 pane horizontally or vertically, creating a new pane. Returns the session ID of the newly created pane.
| Name | Required | Description | Default |
|---|---|---|---|
| vertical | No | If true, split vertically (side by side). If false (default), split horizontally (top/bottom). | |
| session_id | Yes | The pane ID - use shorthand like 't5p2' (tab 5, pane 2) or 'w1t5p2'. Numbers are 1-based. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that a new pane is created (mutating action) and states the return value (session ID), which is helpful. However, it doesn't mention whether the original pane remains active, how to determine the new dimensions, or any prerequisites (e.g., iTerm2 must be running).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single efficient sentence that states purpose, behavior, and return value with no wasted words. It front-loads the core action and mentions the result. Could potentially note caveats but is appropriately concise for the simplicity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward two-parameter split operation with full schema coverage, the description covers the essentials: purpose, behavior, and return value. The lack of output schema means the description appropriately notes the session ID return. Gaps include no mention of error scenarios (invalid session ID) or whether splitting is synchronous. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The schema already explains the vertical boolean semantics and the session_id shorthand format thoroughly. The description adds the session ID return value context, which contributes meaning beyond the schema. Description does not need to duplicate what the schema already covers well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource+action: splits an iTerm2 pane horizontally or vertically, creating a new pane. It also states the return value (session ID). It distinguishes from siblings like iterm2_send_text and iterm2_list_panes, though it doesn't explicitly differentiate from iterm2_side_pane which sounds similar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you need to split a pane), but provides no explicit exclusions or alternatives. There's a sibling named iterm2_side_pane which could be confusingly similar, but the description does not clarify when to choose one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iterm2_statusA
Check if iTerm2 Python API is properly configured and ready to use
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided and no output schema, the description carries the full burden of behavioral disclosure. It states the tool 'Check[s]' status, implying it's a non-destructive read operation, but it doesn't disclose what the return value looks like (e.g., boolean, status message, error type). For a diagnostic tool, the return format is meaningful and unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, zero waste, well-suited for a zero-parameter diagnostic tool. Could arguably add a brief note about the return value, but for its purpose the description is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no params, no output schema, no annotations), so the description is fairly complete. However, for a status/health-check tool, understanding what 'ready' means and what the response indicates would help the agent decide follow-up actions. The absence of any return-format guidance leaves a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters and 100% schema coverage (empty schema fully describes the input). With no parameters, the description doesn't need to explain parameter meaning. A baseline 4 is appropriate since there's nothing to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: checking if the iTerm2 Python API is configured and ready. The verb 'Check' plus the resource 'iTerm2 Python API' is specific. It's a diagnostic/status tool, distinct from sibling tools which all perform terminal operations (send text, split pane, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is a prerequisite check before using other iterm2 tools, but does not explicitly state when to use it or when not to. The sibling tools suggest it should be used before operations like iterm2_send_text, but the description doesn't name alternatives or provide exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
iterm2_current_pane - First observed
iterm2_enable_api - First observed
iterm2_list_panes - First observed
iterm2_read_pane - First observed
iterm2_send_control_character - First observed
iterm2_send_text - First observed
iterm2_side_pane - First observed
iterm2_split_pane - First observed
iterm2_status
TDQS
Each tool has a clearly distinct purpose: listing, reading, sending text, sending control characters, splitting panes, checking status, enabling API, getting current/side panes. While iterm2_side_pane and iterm2_current_pane both relate to pane location, their functions (getting adjacent pane vs. current pane info) are distinct enough not to cause confusion. No two tools appear to do the same thing.
All tools follow the iterm2_ prefix with verb_noun naming (send_text, send_control_character, split_pane, list_panes, read_pane, current_pane, side_pane, status, enable_api). There are minor deviations like iterm2_status and iterm2_enable_api where the noun is less explicit, but the pattern is largely consistent and predictable.
9 tools is well within the ideal 3-15 range for an MCP server focused on terminal pane control. Each tool serves a clear need for interacting with iTerm2 panes: discovery, inspection, and manipulation, without excessive bloat or redundancy.
The tool surface covers the core iTerm2 interaction workflows: setup (enable_api, status), discovery (list_panes, current_pane, side_pane), inspection (read_pane), and control (send_text, send_control_character, split_pane). Minor gaps include the absence of tools to close/resize/select panes or navigate between tabs/windows, but the core lifecycle of viewing, writing to, and creating panes is well covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Develop, manage, and debug Railway projects, services, and deployments from within agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage local tmux sessions, including creating and controlling sessions, windows, and panes, sending commands, and capturing terminal output.1617Do What The F*ck You Want To Public
- AlicenseNot gradedqualityDmaintenanceProvides advanced iTerm2 terminal automation using Python API integration, enabling AI assistants to create and manage terminal sessions, split panes, execute commands, broadcast to multiple panes, and monitor terminal state in real-time.204MIT
- AlicenseAqualityDmaintenanceAllows AI assistants to create, manage, and interact with tmux sessions, windows, and panes programmatically.19MIT
- AlicenseNot gradedqualityCmaintenanceControls iTerm2 terminal sessions with multi-pane support, allowing parallel command execution, session management, and role-based access for AI orchestration.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/sumchattering/iterm2-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server