Skip to main content
Glama

Warp Command Runner

Licence Swift Stars M-Pineapple/warp-command-runner MCP server

Give any chat AI a real terminal. You ask in Warp, Claude Desktop, ChatGPT desktop, or any other MCP host. The model types the command into your Warp tab, captures the output, and tells you what happened. Forty tools: command execution, project setups, file watching, SSH, clipboard, environment intelligence. macOS, Swift, open source.

This is for people who don't live in Cursor or Claude Code. If you already chat with Grok, ChatGPT, Claude, or Gemini from a desktop app (especially Warp's agent panel), add this MCP and that chat can read your files and run commands on your machine.

Built for Warp Terminal. The five most powerful tools route commands visibly into your active Warp tab. Register the same binary with as many MCP hosts as you want — the server speaks standard MCP over stdio and does not care which model is calling.

Can any cloud AI use this? Any local MCP host can, over stdio. Phone apps and websites need remote MCP: you run --http and publish HTTPS with a tunnel you own. Guide: docs/REMOTE.md. Matrix: docs/COMPATIBILITY.md.

What's new in v8.0.2

Release 8.0.2 builds with swift-sdk 0.12.1 (no local patch) and ships a committed Package.resolved so a fresh clone resolves the same versions. Remote --http pairing from 8.0.1 still applies: a one-time code shown on the Mac authorizes a new client. Remote-mode users should update and delete ~/.warp-command-runner/oauth-store.json to re-pair. Details: docs/REMOTE.md.

The data folder is ~/.warp-command-runner unless you set WCR_HOME (see Data directory).

Related MCP server: Unterm

Quick start

You need macOS 13 or later, Swift 6.0+ (Xcode 16+), and a local MCP host such as Warp Agent or Claude Desktop.

git clone --branch v8.0.4 --depth 1 https://github.com/M-Pineapple/warp-command-runner.git
cd warp-command-runner
./build.sh

./build.sh resolves packages, applies the required swift-sdk patch, builds the release binary, and wraps it in .build/release/warp-command-runner.app.

Point your host at the binary inside that bundle. For Warp Agent, merge this into ~/.warp/.mcp.json and replace the path with yours:

{
  "mcpServers": {
    "warp-command-runner": {
      "command": "/absolute/path/to/warp-command-runner/.build/release/warp-command-runner.app/Contents/MacOS/warp-command-runner",
      "args": []
    }
  }
}

Restart the host. Ask it to run swift --version. That uses execute_pipeline and needs no Accessibility grants.

Data directory

Config, command history, templates, and SSH profiles live in ~/.warp-command-runner. Set WCR_HOME to use a different folder. The value must be an absolute path or start with ~/. Relative values are ignored. macOS ignores a process-level HOME= for FileManager.homeDirectoryForCurrentUser, so WCR_HOME is the supported override. The folder is created with owner-only permissions (0700). ConfigManager uses the same resolution.

{
  "mcpServers": {
    "warp-command-runner": {
      "command": "/absolute/path/to/warp-command-runner/.build/release/warp-command-runner.app/Contents/MacOS/warp-command-runner",
      "args": [],
      "env": {
        "WCR_HOME": "~/wcr-test"
      }
    }
  }
}

When WCR_HOME is set to a valid path, the server does not copy ~/.claude-command-runner into that folder.

An unsigned build is enough for the 34 non-keystroke tools. The five Warp-routing tools need a signed .app in /Applications/. Host snippets, signing, and the Sequoia recipe are under Installation. Phone and website hosts need --http plus your own HTTPS tunnel. See docs/REMOTE.md.

What's new in v8.0.0 — remote MCP

Opt-in Streamable HTTP so Grok, ChatGPT, and Claude can call this Mac from a phone or a website. You create the public HTTPS URL (your Cloudflare tunnel, your Tailscale Funnel, or your reverse proxy). This project does not host a relay.

  • warp-command-runner --http listens on 127.0.0.1 only (default port 8741)

  • OAuth 2.1 with PKCE and Dynamic Client Registration

  • Warp-routing (keystroke) tools stay off for remote callers; use execute_pipeline

  • --remote-doctor and --install-agent for a login LaunchAgent

Local stdio is unchanged. Details: docs/REMOTE.md.

What's new in v7.0.0 — rebrand

Formerly Claude Command Runner. Same engine, host-agnostic name:

  • Product, binary, bundle ID, and config dir renamed to Warp Command Runner (warp-command-runner, ~/.warp-command-runner)

  • Existing ~/.claude-command-runner data is copied on first launch (the old folder is left in place)

  • MCP serverInfo name is Warp Command Runner so every host lists it that way

  • Config snippets for Warp, Claude Desktop, ChatGPT desktop, Cursor, VS Code, and a generic stdio host

  • Honest compatibility doc: stdio MCP works everywhere a local host exists. Remote MCP is opt-in in v8 (docs/REMOTE.md).

v6.x history (Warp deeplinks, OSC 777, dual-consumer Warp Agent, 40 tools) is unchanged — see CHANGELOG.md.

Overview

Warp Command Runner is an MCP server. One binary, any MCP client:

  • Execute terminal commands from a conversation

  • Chain commands with pipelines and failure modes

  • Stream output for long builds

  • Save and reuse command templates with variables

  • Auto-capture output with intelligent timing

  • Track command history

  • Read/write the macOS clipboard

  • Probe environment context (git, venv, Docker, Node)

  • Parse command output into structured JSON

  • Manage workspace profiles (optionally as Warp launch configs)

  • Open Warp tabs via warp:// deeplinks and send commands to the active tab

  • Watch files and trigger commands on changes

  • Execute commands on remote hosts via SSH

  • Surface status into Warp as OSC 777 warp://cli-agent events

  • Optional shell shim: preexec / command-finished events over a Unix socket

🧭 Which app should I register this with?

The protocol is MCP. The value depends on whether the host is local and whether Warp is your terminal. Details in docs/COMPATIBILITY.md.

Host

Config

Recommended?

Warp Agent (Grok, Claude, GPT, Gemini — whatever Warp is set to)

~/.warp/.mcp.json

Yes — best fit. See docs/WARP_AGENT.md

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json

Yes

ChatGPT desktop (Connectors / Developer Mode)

host MCP settings; snippet in config/chatgpt-mcp.json

Yes, if your plan exposes local MCP

VS Code / Continue / Cline / Windsurf

their MCP settings; see config/

Optional

Cursor

~/.cursor/mcp.json

Optional — Cursor already has a terminal

Claude Code

~/.claude.json

Niche — it already has Bash

Browser / phone chats (chatgpt.com, grok.com, claude.ai)

custom connector URL

Optional — needs v8 --http plus your HTTPS tunnel. docs/REMOTE.md

Quick decision tree

  • You use Warp and chat with Grok / ChatGPT / Claude / Gemini inside Warp? → Register in ~/.warp/.mcp.json. That's the whole product.

  • You use Claude Desktop (or ChatGPT desktop) and want commands visible in Warp? → Register there too. Same binary.

  • You use Cursor or Claude Code and want everything in one pane? → You probably don't need this.

  • You only use a website or phone chatbot? → Stdio cannot reach that tab. Enable remote MCP (docs/REMOTE.md) or use a desktop MCP host.

Five of the 40 tools (execute_command, execute_with_auto_retrieve, execute_with_streaming, run_template, send_to_session) are the Warp-routing ones. The rest are ordinary server-side utilities (clipboard, SSH, snapshots, …) that work from any host.

🎯 Key Features

Command Pipelines

Chain multiple commands with intelligent failure handling:

{
  "steps": [
    {"name": "Build", "command": "swift build", "on_fail": "stop"},
    {"name": "Test", "command": "swift test", "on_fail": "continue"},
    {"name": "Package", "command": "swift build -c release", "on_fail": "stop"}
  ]
}

Failure modes:

  • stop – Halt pipeline on failure

  • continue – Log error and proceed to next step

  • warn – Show warning and continue

Output Streaming

Real-time output for long-running commands:

{
  "command": "swift build -c release",
  "update_interval": 3,
  "max_duration": 180
}

Perfect for:

  • Long compilation processes

  • Test suites

  • Any command that previously "hung" waiting for output

Command Templates

Save reusable patterns with variable substitution:

// Save a template
{
  "name": "swift-release",
  "template": "cd {{project}} && swift build -c release",
  "category": "Swift Development",
  "description": "Build Swift project in release mode"
}

// Run with variables
{
  "name": "swift-release",
  "variables": {"project": "~/GitHub/MyApp"}
}

Templates are stored in ~/.warp-command-runner/templates.json and persist across sessions.

Smart Auto-Retrieve

The execute_with_auto_retrieve command intelligently detects command types and adjusts wait times:

  • Quick commands (echo, pwd): 2-6 seconds

  • Moderate commands (git, npm): up to 20 seconds

  • Build commands (swift build, make): up to 77 seconds

  • Test commands: up to 40 seconds

📊 Why Warp Terminal?

Warp Terminal is the primary integration target. Other terminals work for the basics — Warp uniquely unlocks deeplinks, OSC 777, the native agent panel, and launch configs:

Feature

Warp

Terminal.app

iTerm2

warp:// deeplinks for tab/window

✅

❌

❌

Native MCP agent panel — chat with Grok, ChatGPT, Claude, Gemini in the terminal

✅ (~/.warp/.mcp.json)

❌

❌

OSC 777 cli-agent event channel for status surfacing

✅

❌

❌

Workspace profile → recognized launch config

✅ (~/.warp/launch_configurations/)

❌

❌

AppleScript-driven new tab + keystroke send

✅

✅

✅

Modern UI/UX

✅

⚠️

⚠️

Output capture (/tmp/<id>.json polling) and the tools that don't touch the terminal (clipboard, SSH, file watch, env snapshots, etc.) work identically across all terminals.

Download Warp from warp.dev. It is free, and the Warp-specific surfaces above need it.

Installation

Prerequisites

  • macOS 13.0 or later

  • Swift 6.0+ (Xcode 16+)

  • At least one local MCP host (Warp Agent, Claude Desktop, ChatGPT desktop, VS Code, …) — not a browser chat tab

  • A supported terminal (Warp strongly recommended)

Quick Install

  1. Clone and build:

git clone https://github.com/M-Pineapple/warp-command-runner.git
cd warp-command-runner

# For the 5 keystroke-routing tools (execute_command, etc.) to work, the build
# must be SIGNED with your code-signing identity. build.sh auto-detects a single
# Apple Development / Developer ID identity; to be explicit (or if you have
# several), export it first — find yours with:
#   security find-identity -v -p codesigning
export WCR_CODESIGN_IDENTITY="<your-cert-sha1>"   # optional if auto-detect finds one; persist in ~/.zshrc
./build.sh

Only need the 34 non-keystroke tools (incl. execute_pipeline)? An unsigned build is fine — skip the export.

./build.sh writes two things: the app bundle .build/release/warp-command-runner.app (use this) and the bare binary .build/release/warp-command-runner. It does not install anything into /Applications/. To use the /Applications/ paths in the snippets below, copy the bundle there yourself:

cp -R .build/release/warp-command-runner.app "/Applications/Warp Command Runner.app"

Or skip the copy and point your host at $(pwd)/.build/release/warp-command-runner.app/Contents/MacOS/warp-command-runner (the 5 keystroke-routing tools need the bundle in /Applications/; see the Sequoia recipe below).

  1. Pick your MCP host(s) — you can register the same binary in several. Point at the binary inside the .app bundle (macOS Sequoia+ needs the Info.plist for TCC prompts on the 5 keystroke-routing tools):

    A — Warp Agent (~/.warp/.mcp.json) — Grok, ChatGPT, Claude, Gemini, whichever Warp is set to:

    {
      "mcpServers": {
        "warp-command-runner": {
          "command": "/Applications/Warp Command Runner.app/Contents/MacOS/warp-command-runner",
          "args": []
        }
      }
    }

    See docs/WARP_AGENT.md.

    B — Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json) — same JSON shape as Warp Agent.

    C — Cursor (~/.cursor/mcp.json) — the /Applications/... path contains spaces, so keep it as one quoted JSON string:

    {
      "mcpServers": {
        "warp-command-runner": {
          "command": "/Applications/Warp Command Runner.app/Contents/MacOS/warp-command-runner",
          "args": []
        }
      }
    }

    If Cursor reports spawn /Applications/Warp ENOENT, it split the path on spaces. Run helper/install-cursor-wrapper.sh and point command at ~/.local/bin/warp-command-runner instead. See config/cursor-mcp.json.

    ChatGPT desktop, VS Code, Continue: copy a snippet from config/ or docs/COMPATIBILITY.md.

    After ./build.sh you can also point at $(pwd)/.build/release/warp-command-runner.app/Contents/MacOS/warp-command-runner before copying the bundle to /Applications/.

    Upgrading from v6.0.0–6.0.2? Edit your existing config file and append .app/Contents/MacOS/warp-command-runner to the path. The legacy bare-binary path still works for the 34 non-keystroke tools, but execute_command / execute_with_auto_retrieve / execute_with_streaming / run_template / send_to_session will silently fail without the bundle path.

  2. Grant Accessibility permission (only required for send_to_session keystroke injection in v6.0; tab/window opening uses deeplinks and does not require it):

    • Open System Settings → Privacy & Security → Accessibility

    • Click + and navigate to warp-command-runner/.build/release/

    • Press Cmd+Shift+. to reveal the hidden .build folder

    • Select the warp-command-runner binary and toggle it on

Important: macOS tracks permissions by binary identity. After every rebuild (./build.sh), you must remove the old entry and re-add the new binary in Accessibility settings.

  1. Restart your MCP host(s) (Warp, Claude Desktop, ChatGPT desktop, …).

  2. (Optional) Install the shell shim for cleaner block-boundary capture:

    helper/install-shim.sh

    See helper/shell-shim.zsh / helper/shell-shim.bash for the implementation. Uninstall with helper/uninstall-shim.sh.

Linux and containers

The server is built for macOS, but the stdio server also builds and runs on Linux, so registries such as Glama can start it in a container to check it:

docker build -t warp-command-runner .
docker run -i --rm warp-command-runner

On Linux it lists the same 40 tools. The ten that drive Warp or other macOS apps (execute_command, execute_with_auto_retrieve, execute_with_streaming, run_template, send_to_session, open_terminal_tab, focus_warp_session, copy_to_clipboard, read_from_clipboard, add_file_watch) return a "needs macOS" error. execute_pipeline, execute_and_parse, ssh_execute and the history, template and analysis tools work. Remote mode (--http, --install-agent) is macOS only.

Upgrading from a previous version

If you already have a signed install working (TCC permissions granted), upgrading is:

cd warp-command-runner
git pull

# Rebuild with the SAME signing identity you used originally. Without it, build.sh
# falls back to an ad-hoc-signed bundle, macOS sees a new identity, and your
# keystroke (TCC) grants stop applying → error 1002 on execute_command.
# (build.sh auto-detects a single identity; export to be explicit.)
export WCR_CODESIGN_IDENTITY="<your-cert-sha1>"   # persist in ~/.zshrc so you don't forget
./build.sh

# Confirm it signed with your cert (NOT adhoc) BEFORE replacing your good bundle:
codesign -dvv .build/release/warp-command-runner.app 2>&1 | grep -E "Authority=Apple|Signature=adhoc"

# Replace the deployed bundle (rm first — cp -R onto an existing .app nests it):
rm -rf "/Applications/Warp Command Runner.app"
cp -R .build/release/warp-command-runner.app "/Applications/Warp Command Runner.app"

Then restart your MCP host. If you upgraded from v6 and kept the same signing certificate, existing TCC grants on com.m-pineapple.claude-command-runner do not transfer to com.m-pineapple.warp-command-runner — re-grant Accessibility / Input Monitoring / Full Disk Access / Automation for the new bundle once. After that, same-cert rebuilds keep the grants.

If you use remote --http mode, delete ~/.warp-command-runner/oauth-store.json after installing 8.0.1 and connect again so the new pairing code is required.

🛡️ macOS Sequoia full setup recipe (the 7 ordered steps)

If execute_command / execute_with_auto_retrieve / execute_with_streaming / run_template / send_to_session fail with osascript is not allowed to send keystrokes (1002) even though you've toggled every panel in System Settings, follow this in order — skipping any step leaves a silent denial somewhere in the chain. The other 34 tools work without any of this; execute_pipeline is a fully-functional substitute if you want to skip the whole TCC saga entirely.

This is the empirically-verified recipe from a real 6-hour debugging session. v6.0.3+ ships the bundle infrastructure that makes this possible; v6.0.4 is this documentation pass.

The denial pattern. macOS Sequoia's TCC and sandbox have layered, non-obvious requirements for CLI binaries that drive osascript → System Events → keystroke. The error message is misleading — the actual block usually isn't keystroke permission; it's an earlier preflight check that silently aborts the chain. The five gates, in the order macOS evaluates them:

Gate

TCC service

What grants it

1. Bundle promptability

(n/a — policy)

Bundle in /Applications/, not .build/release/

2. Bundle identity stable

(n/a — codesign)

Signed with a stable cert (cdhash doesn't drift across rebuilds)

3. Sandbox FDA preflight

kTCCServiceSystemPolicyAllFiles

Full Disk Access grant on the bundle

4. AppleEvents

kTCCServiceAppleEvents

Automation → System Events ☑

5. Keystroke synthesis

kTCCServiceListenEvent / kTCCServicePostEvent

Input Monitoring + Accessibility

Step 1 — Have an Apple Development cert (or self-signed Code Signing cert)

If you have a paid Apple Developer account, you already have one (check via security find-identity -v -p codesigning). If not, create a self-signed one:

  1. Keychain Access → menu Certificate Assistant → Create a Certificate…

  2. Name: warp-command-runner, Identity Type: Self Signed Root, Certificate Type: Code Signing

  3. Click Create → Continue through warnings → Done

Export the cert identifier for build.sh to find:

# Get the SHA-1 hash (more reliable than the cert name)
security find-identity -v -p codesigning
# Then in your shell rc (~/.zshrc, ~/.config/fish/config.fish, etc.):
export WCR_CODESIGN_IDENTITY="<the-sha1-hash-from-above>"

Step 2 — Build (creates the signed .app bundle)

./build.sh

build.sh invokes scripts/make-app-bundle.sh, which wraps the CLI in .build/release/warp-command-runner.app/ with a proper Info.plist (CFBundleIdentifier com.m-pineapple.warp-command-runner, the three required NSXxxUsageDescription strings, LSUIElement=true). If WCR_CODESIGN_IDENTITY is set, the bundle is signed with that cert as a unit — stable cdhash across rebuilds.

Verify:

codesign --display --verbose=4 .build/release/warp-command-runner.app | grep -E 'Identifier|TeamIdentifier|CDHash'
codesign --verify --deep --strict .build/release/warp-command-runner.app  # should succeed silently

Step 3 — Install the bundle into /Applications/ (CRITICAL)

macOS refuses to prompt for TCC permissions on bundles in .build/release/ or other dev directories. The bundle must live in /Applications/. Copy it:

cp -R .build/release/warp-command-runner.app "/Applications/Warp Command Runner.app"

Verify the signature survived the copy:

codesign --verify --deep --strict "/Applications/Warp Command Runner.app"

Step 4 — Point your MCP config at the /Applications/ path

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "warp-command-runner": {
      "command": "/Applications/Warp Command Runner.app/Contents/MacOS/warp-command-runner",
      "args": []
    }
  }
}

Mirror in ~/.warp/.mcp.json if you use the Warp Agent path.

Step 5 — Reset stale TCC entries for the bundle ID

If you've been struggling with TCC denials previously, your TCC.db likely has stale Denied entries from earlier rebuilds with different cdhashes. Wipe them for the bundle:

for svc in AppleEvents ListenEvent PostEvent Accessibility; do
    tccutil reset "$svc" com.m-pineapple.warp-command-runner
done

Each line should print "Successfully reset". If you see "no entries", that's also fine — means TCC had nothing recorded yet.

Step 6 — Grant the three TCC permissions (Full Disk Access is the surprise one)

In System Settings → Privacy & Security, add /Applications/Warp Command Runner.app to each of:

  1. Full Disk Access — unexpected but mandatory. macOS sandbox does a preflight check for kTCCServiceSystemPolicyAllFiles before allowing osascript to spawn for keystroke chains. Without FDA on the bundle, the sandbox denies before TCC's AppleEvents check ever fires, and you get the misleading "send keystrokes" error.

  2. Input Monitoring — for kTCCServiceListenEvent / kTCCServicePostEvent (synthetic keystroke generation).

  3. Accessibility — for the keystroke AppleEvent action itself.

Each grant requires Touch ID / admin password to confirm. Bundle name appears as "Warp Command Runner" in the panels.

Step 7 — Restart Claude Desktop, trigger once, grant the Automation prompt

⌘Q Claude Desktop, reopen. On your first execute_command, macOS may show one more prompt — Automation → "Warp Command Runner wants to control System Events" — click Allow. After that, it's permanent. Future rebuilds don't reset anything (the cert keeps cdhash stable; the bundle keeps the identity stable).


Diagnostic: what does TCC see right now?

If something doesn't work after the recipe, the only reliable way to figure out which gate is failing is the TCC log:

log show --predicate 'process == "tccd"' --last 30s --info --debug \
    | grep -E 'AUTHREQ_CTX|AUTHREQ_RESULT|m-pineapple|promptPolicy|Service Policy'

Trigger an execute_command first, then immediately run the above. Read it for:

  • service="kTCCServiceXxx" — which permission category is being checked

  • promptPolicy = 0 → macOS refuses to even prompt; usually a location problem (bundle not in /Applications/)

  • promptPolicy = 2 + Denied (Service Policy) → you're missing the permission for the named service

  • AttributionChain: responsible={identifier=com.m-pineapple.warp-command-runner, ...} → good, TCC is identifying us correctly

If you really can't get it working

execute_pipeline is a fully-functional substitute for execute_command:

// instead of execute_command: {"command": "git status"}
// use:
{"steps": [{"command": "git status"}]}

Pure subprocess, no AppleScript, no TCC layer, captures output cleanly, works on any macOS version regardless of permissions. The visible side-effect (command appearing in your Warp tab) is the only thing you lose — for most agent workflows that's not what you actually need anyway.


Usage

Available Tools (40)

On --http sessions the five Warp-routing tools are refused unless remote.allowKeystrokeTools is true. Use execute_pipeline. See docs/REMOTE.md.

Core Execution

Tool

Description

Use Case

execute_command

Execute with manual output retrieval

Simple commands

execute_with_auto_retrieve

Execute with intelligent auto-retrieval

Most common usage ⭐

execute_pipeline

Chain commands with conditional logic

Build workflows, CI/CD

execute_with_streaming

Real-time output streaming

Long builds, test suites

save_template

Save reusable command pattern

Create shortcuts

run_template

Execute saved template with variables

Run saved patterns

list_templates

View all saved templates

Manage templates

delete_template

Remove a saved template by name

Manage templates

get_command_output

Manually retrieve command output

Debugging

preview_command

Preview without executing

Safety check

suggest_command

Suggest commands (pass working_directory for git/Swift/Node-aware ideas)

Discovery

list_recent_commands

View command history

Analytics

self_check

System health diagnostics

Troubleshooting

Clipboard (v5.0)

Tool

Description

Use Case

copy_to_clipboard

Write text to macOS clipboard

Share output

read_from_clipboard

Read current clipboard content

Paste context

Notifications (v5.0)

Tool

Description

Use Case

set_notification_preference

Toggle macOS notifications

Personalisation

Environment Intelligence (v5.0)

Tool

Description

Use Case

get_environment_context

Probe git, venv, Node, Docker state

Context awareness

execute_and_parse

Execute and parse output to structured JSON

Smart output

capture_environment

Snapshot your real shell environment (sources your login profile)

Before/after comparison

diff_environment

Compare two environment snapshots

Change detection

Workspace Profiles (v5.0)

Tool

Description

Use Case

save_workspace_profile

Save project context as named profile

Project switching

load_workspace_profile

Restore a saved project context. Required: name (from save_workspace_profile / list_workspace_profiles)

Resume work

list_workspace_profiles

View all saved profiles

Organisation

delete_workspace_profile

Remove a workspace profile

Cleanup

Multi-Terminal Sessions (v5.0)

Tool

Description

Use Case

open_terminal_tab

Open a new named terminal tab (Warp: via warp://action/new_tab deeplink in v6.0)

Long-running processes

send_to_session

Send command to a specific tab (AppleScript keystroke; tab-targeting limited on Warp)

Targeted execution

list_sessions

View active terminal sessions

Session overview

close_session

Close a named session

Cleanup

cleanup_sessions

Bulk-remove stale sessions; optionally close their tabs

Hygiene

Interactive Command Detection (v5.0)

Tool

Description

Use Case

check_interactive

Classify a command for TTY/stdin requirements before running it

Avoid hangs from vim, ssh, psql, REPLs

File Watching (v5.0)

Tool

Description

Use Case

add_file_watch

Watch directory and trigger command on changes

Auto-rebuild, auto-test

remove_file_watch

Stop watching a directory. Required: watcher_id (the ID: value returned by add_file_watch)

Cleanup

list_file_watches

View active watchers

Overview

SSH Remote Execution (v5.0)

Tool

Description

Use Case

ssh_execute

Run a command on a remote host via SSH. Required: command, plus either username (and host) or a saved profile

Remote ops

save_ssh_profile

Save SSH connection profile

Quick connect

list_ssh_profiles

View saved SSH profiles

Overview

delete_ssh_profile

Remove an SSH profile

Cleanup

Tool

Description

Use Case

focus_warp_session

Dispatch warp://session/<uuid> to focus a Warp pane (UUID must be one Warp recognises — typically from the optional shell shim's events)

Resume work in a specific pane

emit_warp_event

Build a printf invocation that emits an OSC 777 warp://cli-agent JSON event into Warp's UI. Required: event_type (session_start / prompt_submit / tool_complete / stop / permission_request / idle_prompt). The returned printf must be run inside a Warp pane (e.g. via execute_command) to take effect

Status notifications

shell_shim_status

Report optional shell-shim socket state and recent events

Verify shim is wired up

Example Workflows

Simple Command:

You: "Check my Swift version"
Assistant: [execute_with_auto_retrieve: swift --version]
Assistant: "You're running Swift 6.0.2"

Build Pipeline:

You: "Build, test, and package my app"
Assistant: [execute_pipeline with build → test → package steps]
Assistant: "Pipeline complete! Build: ✅ Test: ✅ Package: ✅"

Streaming Long Build:

You: "Build this large project"
Assistant: [execute_with_streaming: swift build -c release]
Assistant: "Building... [live updates every 3 seconds]"
Assistant: "Build completed in 45 seconds!"

Using Templates:

You: "Save a template for deploying to staging"
Assistant: [save_template: name="deploy-staging", template="cd {{project}} && ./deploy.sh staging"]

You: "Deploy MyApp to staging"
Assistant: [run_template: name="deploy-staging", variables={project: "MyApp"}]

Environment Context (v5.0):

You: "What's my current dev environment?"
Assistant: [get_environment_context]
Assistant: "You're on branch feature/auth, Python venv active, Node 20.11, 3 Docker containers running."

Workspace Profiles (v5.0):

You: "Save this as my API project profile"
Assistant: [save_workspace_profile: name="api-project", directory="~/Projects/api", ...]

You: "Switch to the API project"
Assistant: [load_workspace_profile: name="api-project"]

File Watching (v5.0):

You: "Rebuild whenever a Swift file changes"
Assistant: [add_file_watch: path="./Sources", pattern="*.swift", command="swift build"]
Assistant: "Watching ./Sources for *.swift changes. Will run swift build on each change."

SSH Remote Execution (v5.0):

You: "Check disk space on the staging server"
Assistant: [ssh_execute: host="staging.example.com", username="deploy", command="df -h"]
Assistant: "Here's the disk usage on staging..."

Configuration

The configuration file is located at ~/.warp-command-runner/config.json:

{
  "terminal": {
    "preferred": "auto",
    "fallbackOrder": ["Warp", "WarpPreview", "iTerm", "Terminal"]
  },
  "security": {
    "blockedCommands": ["rm -rf /", "format"],
    "maxCommandLength": 1000
  },
  "history": {
    "enabled": true,
    "maxEntries": 10000
  },
  "notifications": {
    "enabled": true,
    "soundEnabled": true,
    "showOnSuccess": false,
    "showOnFailure": true,
    "minimumDuration": 10
  },
  "fileWatching": {
    "maxWatchers": 5,
    "defaultDebounce": 2.0,
    "autoExpireMinutes": 60
  },
  "ssh": {
    "defaultTimeout": 30,
    "allowPasswordAuth": false
  },
  "interactiveDetection": {
    "enabled": true,
    "customPatterns": []
  }
}

Templates are stored separately at ~/.warp-command-runner/templates.json. Workspace profiles are stored at ~/.warp-command-runner/profiles.json. SSH profiles are stored at ~/.warp-command-runner/ssh_profiles.json.

🤔 Frequently Asked Questions

Q: Can Grok, ChatGPT, or Gemini use this — not just Claude?

A: Yes, if you chat inside a local MCP host. Warp's agent panel is the usual path: set Warp's model to Grok (or GPT, Claude, Gemini) and register this server in ~/.warp/.mcp.json. ChatGPT desktop and Claude Desktop work the same way. Browser tabs on grok.com / chatgpt.com / claude.ai cannot launch a local process. Full matrix: docs/COMPATIBILITY.md.

Q: What's new in v8.0.2?

A: swift-sdk 0.12.1 with a committed Package.resolved, so ./build.sh on a fresh clone no longer needs a local SDK patch. Pairing from 8.0.1 is unchanged.

Q: What's new in v8.0.1?

A: Remote --http mode now requires a one-time pairing code shown on the Mac to authorize a new client. Update, then delete ~/.warp-command-runner/oauth-store.json and connect again. See docs/REMOTE.md.

Q: What's new in v8.0.0?

A: Opt-in remote MCP. warp-command-runner --http serves Streamable HTTP on loopback with OAuth 2.1. You publish HTTPS with your own tunnel. Phone and website connectors can then call this Mac. Keystroke tools stay off remotely. See docs/REMOTE.md.

Q: What's new in v7.0.0?

A: Rebrand from Claude Command Runner to Warp Command Runner. Same 40 tools and stdio MCP protocol; names, bundle ID, and ~/.warp-command-runner paths updated. v6 config is copied on first launch.

Q: Cursor says spawn /Applications/Warp ENOENT?

A: Keep the path as one quoted JSON string: "/Applications/Warp Command Runner.app/Contents/MacOS/warp-command-runner". Do not rename the .app. If Cursor still splits on spaces, run helper/install-cursor-wrapper.sh and point ~/.cursor/mcp.json at ~/.local/bin/warp-command-runner. See config/cursor-mcp.json.

Q: What's new in v6.0.0?

A: Re-pivot to Warp after Warp went open source. Dual-consumer architecture (register the same binary in ~/.warp/.mcp.json to use it from Warp's native agent panel, in addition to Claude Desktop). warp:// deeplinks replace AppleScript menu-clicking for tab/window operations. New OSC 777 emitter (emit_warp_event) surfaces structured events into Warp's UI. New optional shell shim emits clean preexec/command-finished events to the MCP. Workspace profiles can now also emit Warp-native launch configs. ~460 LOC of dead code removed. Tool count goes from a previously-undercounted 36 (the v5 README claimed 30) up to 39. See CHANGELOG.md and docs/WARP_AGENT.md for the full story.

Q: What was new in v5.0.0?

A: Ten new feature categories bringing the tool count from 12 to 36 (the v5 README under-counted as 30; the dispatch table actually registered 36). Highlights: clipboard integration, macOS notifications, environment intelligence, structured output parsing, workspace profiles, multi-terminal sessions, file watchers, SSH remote execution.

Q: When should I use pipelines vs regular commands?

A: Use pipelines when you need:

  • Multiple sequential commands

  • Conditional logic (stop on build failure, continue on test failure)

  • A summary of all steps with timing

  • CI/CD-style workflows

Q: Why does my command "hang" with execute_with_auto_retrieve?

A: For very long commands, use execute_with_streaming instead. It provides real-time output updates and handles commands that run for minutes. This was the main motivation for adding streaming in v4.0.

Q: How do I use templates with multiple variables?

A: Define variables in your template with {{variable_name}} syntax:

{
  "template": "cd {{project}} && git checkout {{branch}} && swift build -c {{config}}"
}

Then provide all variables when running:

{
  "variables": {"project": "~/MyApp", "branch": "main", "config": "release"}
}

Q: Where are my templates stored?

A: In ~/.warp-command-runner/templates.json. They persist across sessions and MCP host restarts.

Q: How long will auto-retrieve wait for my command?

A: It depends on the command type:

  • Simple commands: 6 seconds

  • Git/npm commands: 20 seconds

  • Build commands: 77 seconds

  • Unknown commands: 30 seconds

For longer commands, use execute_with_streaming instead.

Q: Can I use this with Terminal.app or iTerm2?

A: Yes, basic command execution works with any terminal. Automatic output capture and Warp-specific features (deeplinks, OSC 777, agent panel) need Warp. Download it from warp.dev.

Q: Is it secure to let an AI run commands?

A: Commands are sent directly to your terminal and execute automatically — there is no manual "press Enter" step. Configure blocked commands in ~/.warp-command-runner/config.json. The blocked-commands list catches common mistakes; it is not a security boundary, because a determined caller can rephrase or encode a command. Only attach this MCP to a host you trust. Do not expose it as a public HTTP server.

Q: What happens if a pipeline step fails?

A: Depends on the on_fail setting:

  • stop – Pipeline halts immediately, remaining steps are skipped

  • continue – Error is logged, pipeline continues to next step

  • warn – Warning is shown, pipeline continues

Q: Can I nest pipelines or run templates inside pipelines?

A: Not directly. You can create templates that contain multiple commands separated by && or ;, or compose by calling run_template and execute_pipeline from the same conversation.

Q: Where is my command history stored?

A: In an SQLite database at ~/.warp-command-runner/warp_commands.db. It tracks all commands, outputs, exit codes, and execution times.

🛠️ Troubleshooting

macOS Permission Error: "osascript is not allowed to send keystrokes" (Error 1002)

This error affects the 5 AppleScript-keystroke-routed tools (execute_command, execute_with_auto_retrieve, execute_with_streaming, run_template, send_to_session). The other 34 tools — including execute_pipeline — are unaffected.

Don't waste hours toggling System Settings panels. This is a layered problem with macOS Sequoia's TCC + sandbox enforcement, and partial fixes leave silent denials in deeper layers. The canonical fix is the 🛡️ macOS Sequoia full setup recipe above (in the Installation section) — seven ordered steps including: build the .app bundle, install into /Applications/ (not .build/), tccutil reset for the bundle ID, and grant THREE TCC permissions including the surprise one (Full Disk Access on the bundle — sandbox preflights this before allowing the keystroke chain). Follow it top to bottom; skipping any step leaves a hidden denial.

Quick triage — am I hitting this?

Run this immediately after a failed execute_command:

log show --predicate 'process == "tccd"' --last 20s --info --debug | grep -E 'm-pineapple|promptPolicy|Service Policy'

You'll see one of:

  • promptPolicy = 0 → bundle isn't in /Applications/ (or no bundle at all). Fix: Steps 2-3 of the recipe.

  • promptPolicy = 2 + Denied (Service Policy) for kTCCServiceSystemPolicyAllFiles → missing Full Disk Access on the bundle. Fix: Step 6 of the recipe.

  • AttributionChain: responsible={identifier=warp-command-runner, ...} (no m-pineapple) → you're not running from the bundle, you're running the bare binary. Fix: re-run ./build.sh and update your MCP config to the .app path (Steps 2-4 of the recipe).

Workaround if you don't want to bother with the recipe:

// Use execute_pipeline instead of execute_command:
{"steps": [{"command": "git status"}]}

Pure subprocess, no AppleScript, zero TCC. Works on any macOS regardless of permissions. The 34 non-keystroke tools all work too.

Bundle ID Reference: com.m-pineapple.warp-command-runner (this project), com.anthropic.claudefordesktop (Claude Desktop).


macOS Accessibility Permission Issues

The MCP binary requires Accessibility permission only for the AppleScript keystroke path used by send_to_session (typing into a specific Warp tab) and the legacy non-Warp paths in execute_command for iTerm/Terminal/Alacritty. Most v6.0 tools work without Accessibility: subprocess-based execution, warp:// deeplinks for tab opening, clipboard, SSH, env snapshots, file watch, profiles, and all 24 server-side tools.

Symptoms (when it does matter):

  • Error message: osascript is not allowed assistive access. (-1719)

  • send_to_session fails; clipboard, SSH, env-context, deeplink-based open_terminal_tab all work fine

Solution:

  1. Open System Settings → Privacy & Security → Accessibility

  2. Click the + button and navigate to your warp-command-runner binary:

    /path/to/warp-command-runner/.build/release/warp-command-runner
  3. The .build folder is hidden by default — press Cmd+Shift+. in Finder to reveal it

  4. Toggle the permission on for the binary

Important: macOS tracks Accessibility permissions by binary identity. After every swift build, the binary changes and you must re-add it to the Accessibility list. This only affects keystroke-injection paths — most tools are unaffected.


MCP Not Responding

  1. Check the client logs (Claude Desktop or Warp). The default server is a child of the client over stdio. Remote MCP (--http) listens on 127.0.0.1 only — see docs/REMOTE.md.

  2. Restart the client (Claude Desktop and/or Warp).

  3. Rebuild with ./build.sh. (And re-add the binary to Accessibility if send_to_session is failing.)

Commands Not Appearing in Terminal

  1. Ensure Warp/WarpPreview is running

  2. Check Claude Desktop logs for errors

  3. Verify your MCP configuration path

Streaming Not Updating

  1. Check that the command is actually running (not waiting for input)

  2. Increase update_interval if updates are too frequent

  3. Check /tmp/wcr_stream_*.log for output files

Pipeline Steps Skipped Unexpectedly

  1. Check the on_fail setting – stop will skip remaining steps

  2. Verify each command works individually first

  3. Check exit codes in the pipeline summary

Templates Not Saving

  1. Ensure ~/.warp-command-runner/ directory exists

  2. Check write permissions on templates.json

  3. Verify JSON syntax in template definition

Auto-Retrieve Not Working

  1. Ensure you're using execute_with_auto_retrieve (not execute_command)

  2. Check if command output file exists: ls /tmp/wcr_output_*.json

  3. For long commands, use execute_with_streaming instead

Database Issues

If commands execute but aren't saved to the database:

  1. Check database integrity:

    sqlite3 ~/.warp-command-runner/warp_commands.db "PRAGMA integrity_check;"
  2. If corrupted, backup and remove:

    mv ~/.warp-command-runner/warp_commands.db ~/.warp-command-runner/warp_commands.db.backup
    # Restart the MCP host — a new database is created automatically

Architecture

  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐
  │ Warp Agent   │  │ Claude Desk. │  │ ChatGPT /    │
  │ (Grok, GPT,  │  │              │  │ Cursor / VS  │
  │  Claude, …)  │  │              │  │ Code / …     │
  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘
         │ stdio MCP       │ stdio MCP       │ stdio MCP
         └─────────────────┴─────────────────┘
                           ▼
         ┌─────────────────────────────────┐
         │  warp-command-runner v7.0       │
         │  Swift MCP server · 40 tools    │
         └─────────┬───────────┬───────────┘
                   │           │
                   ▼           ▼
         ┌──────────────┐  ┌─────────────────────┐
         │ Warp Terminal│  │ Optional shell shim │
         │ warp://      │  │ /tmp/wcr-shell-shim-│
         │ OSC 777      │  │   <uid>.sock        │
         └──────────────┘  └─────────────────────┘

Any local MCP host, one server. Tab/window operations use Warp's warp:// URL scheme; status events use OSC 777; typing into a tab still uses AppleScript keystrokes (Warp has no API for that). Phone and website chats need --http plus your own HTTPS tunnel — see docs/REMOTE.md.

Contributing

We love contributions! Here's how:

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

Development Setup

git clone https://github.com/M-Pineapple/warp-command-runner.git
cd warp-command-runner
swift package resolve
swift build

💖 Support This Project

If Warp Command Runner has helped enhance your development workflow or saved you time with intelligent command execution, consider supporting its development:

Your support helps me:

  • Maintain and improve Warp Command Runner with new features

  • Keep the project open-source and free for everyone

  • Dedicate more time to addressing user requests and bug fixes

  • Explore new terminal integrations and command intelligence

Thank you for considering supporting my work! 🙏

More MCP servers by M-Pineapple

License

MIT License – see LICENSE file for details


Built with ❤️, originally by 🍍 as Claude Command Runner. v7 rebrands the same MCP for any host.

If this helps, star the repo and try Warp.

Available Tools

40 tools
add_file_watchC

Set up a file system watcher that triggers a command when files change

NameRequiredDescriptionDefault
pathYesDirectory path to watch
commandYesCommand to run when files change
patternNoGlob pattern to filter (e.g. '*.swift', '*.ts')
debounce_secondsNoDebounce interval in seconds (default: 2.0)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description bears the full behavioral burden. It correctly implies a persistent, side-effecting background process that runs arbitrary commands, but omits lifecycle details: whether the watcher survives restarts, whether it needs cleanup via remove_file_watch, and whether anything is returned to identify the watcher later.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-formed sentence with the core action and trigger condition front-loaded and no filler. Nothing in it could be cut without losing the stated behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool spawns a long-lived process that executes arbitrary commands, which is meaningful complexity, yet there are no annotations and no output schema. The description leaves the watcher's lifecycle, return value, and relationship to remove_file_watch/list_file_watches unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of the four properties documented in the schema itself, so the baseline of 3 applies. The description adds no meaning beyond the schema (e.g., glob semantics, debounce behavior, path constraints).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set up a file system watcher') plus its effect ('triggers a command when files change'), so an agent understands exactly what it creates. It does not name its sibling alternatives (remove_file_watch, list_file_watches), so differentiation is only implied by the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to guidance. The description never says what to do instead if the agent only wants a one-off command run (execute_command) or how this differs from the watch-management siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_environmentB

Capture a snapshot of the current shell environment variables with a named label

NameRequiredDescriptionDefault
nameYesLabel for this snapshot (e.g. 'before-install', 'clean-state')

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden. It doesn't say whether snapshots persist, whether reusing a name overwrites or errors, whether secret-bearing variables are included, or what the call returns — all material for a capture-and-store operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight, front-loaded sentence with no filler — verb and resource appear immediately. It is arguably under-specified rather than padded, but as a structural matter it is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one required parameter, no annotations and no output schema, the description covers enough to invoke the tool correctly. It could say more about persistence and return value, which keeps it below a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is fully documented with usage examples, so the schema does the work. The phrase 'with a named label' adds nothing beyond the existing 'name' description; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'capture a snapshot of the current shell environment variables', with the added qualifier 'with a named label'. This distinguishes it in spirit from read-only siblings like get_environment_context and diff_environment, but the description never names those alternatives, so differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus get_environment_context, diff_environment, or save_workspace_profile, all of which plausibly overlap with state capture. The only hint of intent lives in the schema example labels ('before-install', 'clean-state'), not in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_interactiveA

Check if a command is interactive (requires TTY/stdin) before executing it. Returns safety level: safe, cautious, interactive, or blocked with suggestions for non-interactive alternatives

NameRequiredDescriptionDefault
commandYesThe command to analyse for interactivity

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full safety-profile burden. It discloses four return levels and mentions suggestions, but does not state whether the command is actually executed, whether analysis is static or live, or whether there are side effects or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences front-load the purpose and result categories. There is no extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter check tool with no output schema, the description gives the key return categories and mentions non-interactive suggestions. It omits definitions of the safety levels and any execution or analysis caveat.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter and the schema documents it fully at 100% coverage. The description does not add syntax or format details about the command beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and resource ('a command') and states the condition being tested (interactive/TTY). It does not explicitly name sibling alternatives, though 'before executing it' implies the relationship to execute_command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'before executing it' establishes clear timing for when to use the tool. It does not provide exclusions, prerequisites, or named alternatives such as preview_command or suggest_command.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cleanup_sessionsA

Remove stale terminal sessions that have been inactive. Use periodically to clean up accumulated tabs. Sessions inactive longer than inactive_minutes (default: 30) are removed. Set close_tabs to true to also close the terminal tabs.

NameRequiredDescriptionDefault
close_tabsNoIf true, also closes the terminal tabs for stale sessions (default: true)
inactive_minutesNoMinutes of inactivity before a session is considered stale (default: 30)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that sessions are removed and that close_tabs also closes terminal tabs, but it does not state whether removal is irreversible, whether active sessions are protected, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose, followed by usage and parameter behavior. It is efficient and readable, though it repeats default values already present in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema or annotation coverage, but the description supplies the essential operational context: stale threshold, optional tab closing, and periodic cleanup. It could mention what is returned or whether removals are recoverable, but it is largely sufficient for a two-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented. The description restates the default threshold and the close_tabs behavior, but adds no meaning beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: remove stale terminal sessions that have been inactive. It distinguishes this from general session closing via the 'stale' and 'accumulated tabs' framing, though it does not explicitly name sibling tools like close_session or list_sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: 'Use periodically to clean up accumulated tabs.' This tells the agent when the tool is appropriate, but it does not name alternatives or exclusions, such as when to prefer close_session for individual sessions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_sessionA

Close a named terminal session and optionally close its tab. Use to clean up sessions that are no longer needed. Pass close_tab: true to also close the terminal tab.

NameRequiredDescriptionDefault
close_tabNoIf true, also closes the terminal tab (default: false)
session_nameYesName of the session to close

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that the session closes and that a tab may close, but it omits whether running processes are terminated, whether closure is irreversible, and what happens if the session does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler, front-loaded with the action and use case. Every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A simple two-parameter tool with rich schema but no annotations or output schema. The description covers the main operation and optional tab behavior, though it could say more about destructive effects and relation to bulk cleanup siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already fully documented. The description reinforces the close_tab usage but adds no format or edge-case semantics beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('close') and resource ('named terminal session'), and clarifies the optional tab closure. It is clear, but it does not explicitly distinguish itself from sibling cleanup_sessions or list_sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it to clean up sessions that are no longer needed, giving clear context. It does not state when-not conditions or mention alternatives such as cleanup_sessions, so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_to_clipboardA

Copy text to the macOS system clipboard

NameRequiredDescriptionDefault
textYesThe text to copy to clipboard

TDQS

A3.7/5.0
Behavior3/5

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 does disclose the platform ('macOS') and that the target is the system clipboard (a global side effect), but it does not say that existing clipboard contents are overwritten or whether the operation can fail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence that is fully front-loaded with verb and resource, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with a fully documented schema and no output schema, the definition is sufficient to call it, but it omits the overwrite behavior and success/failure semantics that a mutating system-level tool would ideally state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single 'text' parameter whose schema description is complete (100% coverage), so the description correctly adds no further parameter detail. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Copy') and resource ('text to the macOS system clipboard'), and the directionality ('to') makes the contrast with the sibling read_from_clipboard unambiguous. Nothing about the intent is left ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the name and description; there is no explicit statement of when to use this versus alternatives or of any preconditions. For such a simple, self-evident tool this is minimally adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_ssh_profileC

Delete a saved SSH connection profile

NameRequiredDescriptionDefault
nameYesName of the SSH profile to delete

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It does not disclose that deletion is irreversible, whether confirmation is required, what happens if the name does not exist, or the response shape. "Delete" implies mutation but nothing more is conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It is appropriately sized for the tool, though brevity here reflects under-specification rather than tight writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-annotated mutation tool with no output schema, the description omits essential facts: reversibility, error conditions, and any confirmation behavior. The parameter itself is well documented, but the operational picture is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter with 100% schema description coverage, so the schema already explains that it is the name of the profile to delete. The description adds no matching or formatting semantics beyond that, which is the expected baseline when schema coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (delete) and resource (saved SSH connection profile), which is unambiguous. It does not explicitly name or distinguish itself from the adjacent siblings save_ssh_profile or list_ssh_profiles, so it falls short of the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus save_ssh_profile/list_ssh_profiles, no prerequisites, and no stated behavior for a missing profile. The agent is left to infer usage entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_templateB

Delete a saved command template by name

NameRequiredDescriptionDefault
nameYesName of the template to delete

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and says nothing about the operation being irreversible, whether it fails when the name doesn't exist, or whether deletion affects saved workspace profiles referencing it. Only 'by name' hints at the lookup key.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the verb and resource front-loaded and zero filler. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the purpose is fully conveyed, but as a destructive mutation with no annotations the description should say deletion is permanent and what happens on a missing name. That gap keeps it at minimum-viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the single 'name' parameter is already documented in the schema, so the schema does the heavy lifting. The description's 'by name' merely restates the identifier, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (a saved command template), which cleanly separates it from siblings like save_template, list_templates, and run_template. It does not name those siblings explicitly, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus run_template or save_template, and no prerequisites or cautions are given. The agent must infer that this is the destructive counterpart to save_template.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_workspace_profileC

Delete a saved workspace profile

NameRequiredDescriptionDefault
nameYesName of the profile to delete

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. 'Delete' implies a mutation, but nothing is said about permanence/irreversibility, whether confirmation is needed, or what happens if the name doesn't exist — the key behavioral facts for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with zero filler, appropriately sized for a single-parameter tool. It is front-loaded but simply too thin to earn a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully covers the lone parameter, so the structural side is complete. However, for a destructive tool with no annotations and no output schema, the absence of any note on irreversibility or error behavior leaves a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single required string parameter already documented as 'Name of the profile to delete'. The description adds no meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Delete a saved workspace profile'), which is unambiguous on its own. It is distinguishable from siblings such as save_workspace_profile and load_workspace_profile by the verb, though the description never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this rather than list_workspace_profiles or overwriting a profile via save_workspace_profile, and no note that the name must already exist. The agent is given no prerequisites or preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diff_environmentB

Compare two environment snapshots and show additions, removals, and changes

NameRequiredDescriptionDefault
toYesName of the 'after' snapshot
fromYesName of the 'before' snapshot

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It indicates that the tool compares snapshots and reports additions/removals/changes, which implies a read-only comparison, but it does not state whether snapshots must already exist, what happens if one is missing, or any permission/auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single efficient sentence with the core action and return categories front-loaded. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter comparison tool with complete schema coverage, the description is functionally adequate. However, it leaves out practical context such as where snapshot names come from and behavior when a named snapshot does not exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented as the 'before' and 'after' snapshot names. The description reinforces that two snapshots are compared but adds no syntax or naming-format guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Compare two environment snapshots' and names the categories of result ('additions, removals, and changes'). It is clear what the tool does, though it does not explicitly distinguish itself from related siblings like capture_environment or get_environment_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says what the tool does but gives no guidance on when to use it versus alternatives, such as when to capture a snapshot first or when to use get_environment_context instead. There are no exclusions or prerequisite conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emit_warp_eventA

Build a printf invocation that emits an OSC 777 warp://cli-agent JSON event into Warp's notification UI. The returned printf must be executed inside a Warp pane (e.g. via execute_command) to take effect — our MCP stdout is the JSON-RPC channel and cannot directly write to Warp's PTY.

NameRequiredDescriptionDefault
payloadNoJSON-encoded object string for the event payload (default: '{}')
event_typeYesOne of: session_start, prompt_submit, tool_complete, stop, permission_request, idle_prompt
session_idNoOptional session_id to attach to the event

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load, and it discloses the single most non-obvious trait: this tool does not emit anything itself, it returns a printf string that a separate execution step must run. It does not cover validation of event_type/payload, error behavior, or the exact shape of the returned string, so it falls short of fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the critical constraint (the returned printf must be executed in a pane) is front-loaded right after the purpose statement rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter builder with no output schema and no annotations, the essential two-step workflow is explained and the return value is characterized ('the returned printf'). Minor gaps remain: the precise return format (e.g. whether it is bare printf text or wrapped in prose) and how invalid event_type or malformed payload JSON are handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 — event_type enumerations and the payload default are already documented in the schema. The description adds no per-parameter meaning, such as what each event_type signifies to Warp's UI or the required structure of the payload JSON.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Build a printf invocation') with a specific resource ('OSC 777 warp://cli-agent JSON event into Warp's notification UI'), which is far more precise than the name alone suggests. It also implicitly separates itself from execute_command by framing itself as a builder whose artifact must be executed elsewhere.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear operational context: the result must be run inside a Warp pane (e.g. via execute_command) because MCP stdout is the JSON-RPC channel. That tells the agent exactly how to consume the output, though it never states when this tool is preferable to alternatives such as set_notification_preference or send_to_session, nor any exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_and_parseB

Execute a command and return structured parsed output (supports git status, git log, docker ps, test results, ls -la, and JSON)

NameRequiredDescriptionDefault
parserNoForce a specific parser: git_status, git_log, docker_ps, test_results, ls, json, auto (default: auto)
commandYesThe command to execute and parse
working_directoryNoOptional working directory

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses supported parser targets but says nothing about that this runs arbitrary shell commands, side effects, permission or confirmation requirements, timeouts, or what happens when output doesn't match a parser (only 'auto' is hinted at via the schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero filler; the parenthetical list is dense but useful. Slightly under-specified rather than over-long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description never describes the shape of the 'structured parsed output' or error returns, which is the tool's central promise. For a command-execution tool with no annotations, more behavioral context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, including the parser enum values. The description adds only the notion of parser selection, which the schema already covers, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Execute a command') and adds a distinguishing outcome ('return structured parsed output') plus the supported command families. An agent can separate it from plain execute_command by the parsing behavior, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The list of supported outputs implies when this tool is the right choice, but there is no explicit statement of when to prefer execute_command, execute_with_streaming, or preview_command instead, and no exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_commandA

Executes a terminal command and captures its output. Preferred for quick commands (ls, git status, cat, echo, etc.) that don't need a visible terminal tab. Use open_terminal_tab only for long-running processes.

NameRequiredDescriptionDefault
commandYesThe command to execute
working_directoryNoOptional working directory for command execution

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden. It usefully discloses that output is captured rather than shown in a tab, but omits whether the call blocks until completion, timeouts, output size/truncation limits, and any risk/permission profile for arbitrary shell execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; the core behavior leads and the alternative/scope guidance follows immediately. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an unannotated tool that runs arbitrary shell commands with no output schema, the description should cover execution semantics (blocking vs async, timeouts, truncation) and the risk profile. It covers intent and one alternative but leaves these behavioral gaps open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are self-describing, so the baseline is 3. The description adds no detail on command syntax, shell used, or how working_directory defaults, so it adds nothing beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Executes a terminal command and captures its output') and gives concrete example commands, which is clear. However, the many sibling variants (execute_with_streaming, execute_with_auto_retrieve, execute_pipeline, preview_command) are never differentiated, so an agent still cannot fully disambiguate the execute_* family from this text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says this is 'preferred for quick commands' and directs long-running processes to open_terminal_tab, giving a real when-to-use/when-not pair. The gap is that it says nothing about when to prefer execute_with_streaming, execute_with_auto_retrieve, or preview_command, which are closer alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_pipelineB

Execute a pipeline of commands with conditional logic (stop/continue/warn on failure)

NameRequiredDescriptionDefault
stepsYesArray of step objects with 'command', 'on_fail' (stop/continue/warn), optional 'name' and 'working_directory'

TDQS

B3.2/5.0
Behavior2/5

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 each step has on_fail behavior, but says nothing about execution environment, side effects, permissions, partial failure outcomes, ordering semantics, or what the tool returns after execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. The core behavior and failure-handling modes are stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an execution tool with no annotations, no output schema, and nested step semantics, the description is too thin. It does not explain execution safety, result reporting, failure semantics per step, or environment behavior that an agent needs before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema itself documents the steps array and its on_fail/name/working_directory fields. The description reinforces the conditional-logic concept but adds no syntax or format details beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Execute a pipeline of commands') and adds the distinguishing trait of conditional logic with stop/continue/warn failure handling. It is clearly not just a single command, though it does not explicitly name the sibling alternatives it differs from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentioning conditional logic implies this is for multi-step flows where failure behavior matters, but the description never states when to choose this over execute_command, run_template, or preview_command. Usage is only inferable from the pipeline framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_with_auto_retrieveA

Executes a command and automatically waits for and returns its output. Preferred for quick commands that don't need a visible terminal tab. Use open_terminal_tab only for long-running processes like builds or servers.

NameRequiredDescriptionDefault
commandYesThe command to execute
working_directoryNoOptional working directory for command execution

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose that execution blocks and that output is auto-retrieved. It says nothing about timeouts, exit-code or error behavior, output truncation, or side effects of arbitrary command execution. Genuinely useful context, but significant gaps remain for a shell-execution tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero waste: the core behavior and the synchronous-output promise come first, then the routing rule against the alternative. Nothing is redundant or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, fully schema-documented command runner with no output schema, the description covers what it does, how it returns results, and when to prefer it. The missing pieces — timeout behavior and error/exit-code reporting — are modest but real for a command executor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (command, working_directory) are documented in the schema itself. The description adds no information about command syntax, shell used, or working-directory defaults, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and behavior: executes a command, waits for it, and returns its output. The blocking/auto-retrieve semantic is a genuine differentiator. However, it does not distinguish itself from close siblings like execute_command, execute_with_streaming, or execute_and_parse, which an agent would also plausibly reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear selection rule — 'preferred for quick commands that don't need a visible terminal tab' — and explicitly names open_terminal_tab as the alternative for long-running processes. It stops short of addressing the arguably more confusable siblings (execute_command, execute_with_streaming), leaving that comparison to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_with_streamingB

Execute a command with real-time output streaming - ideal for long-running builds

NameRequiredDescriptionDefault
commandYesThe command to execute
max_durationNoMaximum execution time in seconds (default: 120)
update_intervalNoSeconds between output updates (default: 2)
working_directoryNoOptional working directory

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it delivers little: it says output streams in real time but not whether the call blocks until completion, what happens to partial output when max_duration is hit, whether the command runs in a shell, or what safety/permission posture applies to arbitrary command execution. Only the streaming trait is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the core capability first and the use case second; nothing is wasted. It is, however, terse to the point of under-specification for a tool that runs arbitrary commands.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Four parameters, no annotations, and no output schema, yet the description says nothing about what comes back — output format, whether exit status/errors are included, or how streamed chunks are surfaced. For a command-execution tool with zero structured support for behavior or returns, this leaves material gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including defaults for max_duration and update_interval, so the schema already does the work. The description adds nothing about parameter interplay (e.g., how update_interval interacts with streaming granularity), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Execute a command') plus the distinguishing capability ('real-time output streaming'). It implicitly separates itself from execute_command and get_command_output via the streaming qualifier, but never names the sibling it differs from, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'ideal for long-running builds' hints at the usage context, but there are no explicit when-not conditions and no alternatives named despite many siblings (execute_command, execute_with_auto_retrieve, get_command_output) that an agent must choose between. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

focus_warp_sessionA

Focus an existing Warp pane by its session UUID via warp://session/. The UUID must be one Warp itself recognises (typically obtained from the optional shell shim's OSC 777 session_start event). Locally-minted UUIDs returned by open_terminal_tab are NOT valid here.

NameRequiredDescriptionDefault
warp_uuidYesWarp's own session UUID for the target pane

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses the prerequisite UUID source and an important invalid-input case, but does not explain what focusing does to the active pane, what happens when the UUID is not found, or whether Warp 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action, followed by valid UUID sourcing and the invalid alternative. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter focus tool with no output schema and no annotations, the description covers the action, valid input source, and a key invalid-input warning. It could be more complete by stating the effect on pane focus or failure behavior, but it is sufficient to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by specifying that the UUID must be Warp-recognised and typically comes from the shell shim, while locally-minted UUIDs from open_terminal_tab are invalid.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Focus an existing Warp pane by its session UUID.' It also explicitly distinguishes the valid UUID source from the locally-minted UUIDs returned by open_terminal_tab, so an agent can tell this apart from related session tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage conditions: the UUID must be one Warp itself recognises, typically from the shell shim's OSC 777 event, and locally-minted UUIDs from open_terminal_tab are not valid. It does not explicitly contrast this with siblings like send_to_session, but the exclusion of open_terminal_tab UUIDs is strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_command_outputC

Retrieve the output of a previously executed command

NameRequiredDescriptionDefault
command_idNoThe command ID to retrieve output for (use 'last' for most recent)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: not whether retrieval is idempotent or consumes the output, not what happens for an unknown or expired command_id, and not whether output is truncated. Only the read-oriented nature is implied by 'Retrieve'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is not padded, though it is terse enough that the missing detail reads as under-specification rather than deliberate economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-optional-parameter read tool this is close to adequate, but with no annotations and no output schema the description should say what is returned (raw text vs structured, truncation) and how errors surface for an invalid or 'last' with no history. Those gaps keep it from being complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the command_id description already documents the 'last' sentinel, so the description adds no parameter meaning beyond the schema. Baseline 3 is appropriate when the schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (output of a previously executed command), which clearly places it in the post-execution retrieval lane rather than the execute_* family. It stops short of naming a sibling such as execute_with_auto_retrieve or list_recent_commands, so the boundary is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this instead of execute_with_auto_retrieve, execute_with_streaming, or list_recent_commands. Nothing says whether prior output expires, whether retrieval is required after a plain execute_command, or what happens if no command has run.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_environment_contextB

Get current terminal environment context including git branch, active venv, node version, docker status, and working directory

NameRequiredDescriptionDefault
working_directoryNoOptional directory to check context for (defaults to current)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the behavioral burden. It usefully discloses what the current context includes (git branch, venv, node version, docker status, working directory), but does not explicitly state that it is read-only, whether it can be slow when checking docker, or what the return structure looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single front-loaded sentence that states the action and lists the relevant context fields without filler. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one optional parameter, no output schema, and no annotations, the description does a good job listing the returned context components. It could be more complete by stating the return shape or explicitly confirming the read-only nature, but the core information needed to call the tool is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single optional parameter 'working_directory' is fully documented in the schema as defaulting to the current directory. The description adds no parameter-level detail beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get current terminal environment context') and enumerates the exact context fields returned. It is clear what the tool does, though it does not explicitly differentiate itself from nearby tools like capture_environment or diff_environment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage by saying it retrieves current context, but gives no explicit guidance on when to use this tool versus capture_environment, diff_environment, or other environment-related siblings. There are no exclusions, prerequisites, or alternative-selection cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_file_watchesB

List all active file system watchers

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It implies a safe read via 'List' and filters to 'active' watchers, which is useful. However, it says nothing about the return shape (what a watcher record contains), ordering, or whether inactive/removed watches could ever appear, leaving gaps for a no-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. Appropriately sized for a trivial listing tool, though it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 0-param, no-annotation, no-output-schema tool, the description is nearly complete but omits what a returned watcher looks like (path, ID, events). An agent can call it correctly but cannot anticipate the output structure from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters (schema coverage 100%), so there is no parameter semantics to explain; the baseline for a 0-param tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('active file system watchers'), which clearly distinguishes it from the sibling mutation tools add_file_watch and remove_file_watch. It stops short of naming those alternatives explicitly, but the read-only listing purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to call this versus add_file_watch/remove_file_watch, nor any mention of prerequisites. The word 'active' hints at scope (excluding inactive watches), but that is left implicit rather than stated as a usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recent_commandsB

List recent commands from history with status, duration, and exit codes

NameRequiredDescriptionDefault
limitNoNumber of commands to return (1-50, default: 10)
searchNoSearch in command text
statusNoFilter by status: 'all', 'success', 'failed' (default: all)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses only that history is read and what fields appear (status, duration, exit codes); it says nothing about ordering (most-recent-first?), whether the list is scoped to the current session/workspace, retention depth of history, or read-only safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every clause (verb, scope, returned fields) earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three fully documented optional parameters and no output schema, the description covers the essentials and helpfully names the returned fields. It still leaves meaningful gaps for a history tool: sort order, scope of history, and how 'recent' is bounded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (limit with its 1-50/default-10 range, search, status) are already documented. The description adds nothing beyond echoing the returned fields, and notably does not clarify that 'limit' is typed as a string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('recent commands from history') plus the returned fields, which clearly separates it from execution siblings like execute_command or get_command_output. It stops short of naming a sibling explicitly, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'From history' implies this retrieves already-executed commands rather than running new ones, which is an implicit disambiguation against execute_command. However, there is no explicit when-to-use guidance, no mention of when to prefer get_command_output for a single command's full output, and no stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsA

List all active terminal sessions. Check this before opening new tabs to avoid creating duplicates. Reuse existing sessions with send_to_session whenever possible.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure; it implies a safe read via 'List' and states the scope ('all active'), which is useful. However, it does not describe what a session record contains (IDs, names, state), which matters because those identifiers are needed to call send_to_session, and there is no output schema to fill the gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: what it does, when to call it, and what to do next. The core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool the description covers purpose and workflow routing well. The only real gap is the absence of any hint about the returned session fields, which matters given no output schema and a downstream dependency on session identifiers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. It correctly implies no filtering or targeting is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all active terminal sessions') with a clear scope qualifier ('active'). It is immediately distinguishable from siblings like open_terminal_tab and send_to_session, which are named or implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly prescribes when to call it ('Check this before opening new tabs to avoid creating duplicates') and names the alternative workflow ('Reuse existing sessions with send_to_session whenever possible'). Both the trigger and the follow-up action are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ssh_profilesA

List all saved SSH connection profiles

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden; "List" implies a read-only operation and "all saved" defines scope. However, it does not disclose whether sensitive SSH details are returned, whether credentials are redacted, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single front-loaded sentence with no wasted wording. It is appropriately sized for a zero-parameter list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient to understand the basic operation, but with no output schema it does not describe the returned profile fields or whether secrets are included. For a simple list tool this is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. There are no parameter semantics for the description to clarify beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "List all saved SSH connection profiles." It clearly separates this read-only profile enumeration from siblings such as save_ssh_profile, delete_ssh_profile, and ssh_execute.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives no explicit guidance on when to use this tool versus alternatives like list_workspace_profiles or ssh_execute. The usage is only implied by the name and the word "saved."

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesB

List all saved command templates

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. Beyond the word 'List' implying a read operation, it says nothing about ordering, scope (global vs workspace), or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no wasted words, and the verb/resource are front-loaded. It is appropriately sized for a zero-parameter tool, though it could add one clarifying phrase about scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter listing tool, the description is minimally adequate. However, without annotations or an output schema, it leaves open whether templates are listed globally or per workspace and what format they are returned in.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is already complete and there is no parameter semantics to explain. The description does not need to compensate for any schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('all saved command templates'), making the operation clear. It does not distinguish itself from nearby siblings such as list_recent_commands or run_template, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. Siblings like list_recent_commands and save_template create potential confusion that the description never addresses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspace_profilesB

List all saved workspace profiles

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. "List all saved" weakly implies a read-only, unfiltered enumeration, but it says nothing about ordering, whether empty results are possible, or what a "profile" contains — significant gaps for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is arguably too terse, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should hint at the shape of returned profile objects or at least whether names/IDs are included. For a trivial zero-param list tool this is a minor gap, but it is still a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to clarify; baseline 4 applies. The schema is empty and fully self-consistent with the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("List all saved workspace profiles"), so the agent knows exactly what it returns. It does not differentiate itself from sibling lifecycle tools like save_workspace_profile, load_workspace_profile, or delete_workspace_profile, though the names make the distinction fairly obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus load_workspace_profile or save_workspace_profile, and no stated preconditions. The agent must infer that this is a discovery step before loading a profile.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_workspace_profileB

Load a saved workspace profile to restore project context

NameRequiredDescriptionDefault
nameYesName of the profile to load

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It does not explain what state is restored, whether it overwrites the current workspace context, what happens if the named profile does not exist, or whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is efficient, though its brevity contributes to the behavioral gaps noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with complete schema coverage and no output schema, the description identifies the action and likely purpose. However, because there are no annotations and the tool appears to alter workspace state, the description is incomplete regarding side effects and failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter with 100% schema description coverage, so the schema already defines 'name' clearly. The description adds no extra parameter semantics beyond the schema, which is acceptable given the complete schema but not enriching.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Load a saved workspace profile') and adds an outcome ('restore project context'). It is clear but does not explicitly differentiate itself from siblings such as list_workspace_profiles, save_workspace_profile, or delete_workspace_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'restore project context' implies when the tool is useful, but there is no explicit guidance on when to choose this over listing profiles or creating a new workspace. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_terminal_tabA

Open a new named terminal tab. ONLY use for long-running commands that need their own visible tab (builds, installs, servers, cloning repos). For quick commands, prefer execute_command or execute_with_auto_retrieve instead. If a session already exists, use send_to_session to reuse it.

NameRequiredDescriptionDefault
nameYesName/label for this terminal session
terminalNoOptional terminal to use (e.g. Warp, iTerm2, Terminal, Alacritty); defaults to the configured/preferred terminal
working_directoryNoOptional initial working directory

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does disclose the important side effect: this creates a *visible* tab, and an existing session should be reused rather than duplicated. It does not address what happens with duplicate names, whether the call blocks until the tab is ready, or how the tab is cleaned up (left to the sibling close_session).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action and the hard constraint ('ONLY use for long-running commands'), then alternatives. No redundant restatement of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, three-parameter tool with a fully documented schema and no output schema, the description covers purpose, constraints, and alternatives well. The only gap is what the agent gets back (session name/id or a handle to pass to send_to_session), which would help close the loop with the reuse sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (name, terminal, working_directory) are already documented in the input schema. The description only implies the 'name' parameter via 'named terminal tab' and adds no format, uniqueness, or default-terminal detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Open a new named terminal tab') and immediately differentiates this tool from the many execute_* siblings by scoping it to long-running, visible-tab work. An agent can distinguish it from execute_command and send_to_session without consulting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states explicit when-to-use criteria (builds, installs, servers, cloning repos), explicit when-not (quick commands), and names two concrete alternatives (execute_command, execute_with_auto_retrieve) plus a reuse path (send_to_session). This is about as complete as routing guidance gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_commandB

Preview a command without executing it

NameRequiredDescriptionDefault
commandYesThe command to preview

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it does disclose the single most important behavioral trait (no execution side effects). However, it never explains what a 'preview' actually contains (shell expansion, validation, risk analysis) or whether it touches the environment, which is critical for a command tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the key safety qualifier front-loaded after the verb. Efficient, though arguably too terse given the ambiguity of 'preview'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema, so the description must define the return value and side-effect profile; instead it leaves ambiguous whether preview parses, expands, or validates the command. An agent cannot predict the result it will get.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema already documents 'command' fully. The description adds nothing about format, quoting, or multi-command input; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Preview') and resource ('a command') and adds the distinguishing qualifier 'without executing it', which separates it from the many execute_* siblings. It stops short of naming a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without executing it' implies a pre-flight/dry-run use case versus execute_command, but usage is only implied; there is no explicit when-to-use, when-not-to-use, or named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_from_clipboardA

Read the current contents of the macOS system clipboard

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Read' implies a non-mutating operation and the macOS scoping hints at platform requirements, but there is no disclosure of permission/accessibility requirements, behavior in headless or SSH contexts, or what happens when the clipboard is empty or holds non-text data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every word earns its place and the resource and platform are stated up front.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial zero-param read, the description covers what it does but not what comes back. With no output schema, the agent cannot tell whether the result is plain text, an image, or an empty/null value, nor how failure is signaled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage there is nothing to document, so the baseline of 4 applies. The description adds no parameter-level detail because none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) plus the exact resource (macOS system clipboard), which is unambiguous. It does not name the sibling copy_to_clipboard as its inverse, but the pairing is self-evident from the names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent infers it should call this when it needs clipboard contents and use copy_to_clipboard to write. There is no explicit when-to-use statement, no exclusion, and no mention of prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_file_watchB

Remove an active file system watcher

NameRequiredDescriptionDefault
watcher_idYesID of the watcher to remove

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden. It does not state whether removal is immediate/irreversible, whether it errors on an unknown or already-removed watcher_id, or whether in-flight events are dropped — all material facts for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is lean to the point of under-specification, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with zero annotations and no output schema, the description omits irreversibility, error behavior, and how to obtain a valid watcher_id. An agent has to guess at the failure modes before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is documented as 'ID of the watcher to remove'. The description adds no format, source, or validation detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') and resource ('an active file system watcher'), which cleanly distinguishes it from add_file_watch and list_file_watches by name. It stops short of explicit sibling routing, but the operation itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the deletion verb, but the description never says when to use this versus list_file_watches to discover a valid ID, nor what happens if the watcher is already gone. No exclusion or prerequisite guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_templateC

Execute a saved command template with variable substitution

NameRequiredDescriptionDefault
nameYesName of the template to run
variablesNoObject with variable names and their values

TDQS

C2.9/5.0
Behavior2/5

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 implies a side-effecting execution but never states whether the command's output is returned inline or must be fetched via get_command_output, what happens if the template name is unknown, or whether missing variables error out. These are the traits an agent needs before invoking it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. It is efficiently sized, though its brevity is part of why behavioral and usage context are absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a command-execution tool with no annotations and no output schema, the description omits return behavior, error conditions, and how the result relates to get_command_output. It is not complete enough for an agent to call this confidently in a side-effecting context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, setting the baseline at 3. The phrase 'with variable substitution' adds a little meaning about how the variables object is applied, but does not specify format or substitution syntax beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Execute a saved command template', plus the key mechanic of variable substitution. However, it does not differentiate from the sibling execute_command, leaving the agent to guess which one reads a stored template versus running a raw command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance, and no alternatives named despite many overlapping siblings (execute_command, preview_command, list_templates, save_template). The agent must infer that a template must already be saved and that list_templates is how to find the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_ssh_profileC

Save an SSH connection profile for quick reuse

NameRequiredDescriptionDefault
hostYesRemote hostname or IP
nameYesProfile name
portNoSSH port (default: 22)
usernameYesSSH username
identity_fileNoPath to SSH private key

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does not meet it: it never says whether saving a profile with an existing name overwrites or errors, where the profile is persisted, or whether the private key path is validated or the key itself stored. For a mutation tool with zero annotation coverage, this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the core action front-loaded and no filler. It is efficient, though its brevity is part of what leaves the behavioral questions unanswered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter mutation tool with no annotations and no output schema, the description should cover collision behavior, persistence scope, and typical follow-up (ssh_execute). None of that is present, so an agent cannot predict what a successful or failed save looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (name, host, username, port, identity_file) are documented in the schema, establishing the baseline of 3. The description adds nothing about defaults, accepted formats, or the significance of optional fields such as identity_file.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Save an SSH connection profile") plus a purpose ("quick reuse"), which is clearly distinct from ssh_execute and list_ssh_profiles. It does not explicitly name those siblings or state the boundary (persisting a profile vs. running a connection), so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this instead of ssh_execute, save_workspace_profile, or list_ssh_profiles, and no prerequisites or preconditions. An agent must infer from the name alone that this is the persistence step before running ssh_execute.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_templateB

Save a command template with variables for reuse

NameRequiredDescriptionDefault
nameYesUnique name for the template
categoryNoOptional category for organization
templateYesCommand template with {{variable}} placeholders
descriptionNoOptional description of what the template does

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not explain what happens if the template name already exists, whether the save overwrites or fails, where templates are persisted, or what the tool returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It states the action, the resource, and the purpose immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity save operation with fully documented parameters and no output schema, the core purpose is covered. However, with no annotations, it leaves important mutation behavior such as duplicate-name handling and persistence scope unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented. The description adds only the general idea that templates contain variables, while the schema supplies the concrete {{variable}} syntax and field meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Save a command template with variables for reuse.' It clearly distinguishes saving from sibling actions like run_template, list_templates, and preview_command, though it does not name any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for reuse' implies when this tool is useful, but there is no explicit guidance on when to choose it over alternatives such as run_template or list_templates, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_workspace_profileB

Save current project context as a named workspace profile (directory, commands, env vars, terminal preference). Optionally also writes a Warp-native launch config to ~/.warp/launch_configurations/ so the profile appears in Warp's launch UI.

NameRequiredDescriptionDefault
nameYesProfile name (e.g. 'my-swift-project')
directoryYesWorking directory for this profile
default_commandsNoArray of commonly used commands for this project
environment_varsNoEnvironment variables to set when loading this profile
terminal_preferenceNoPreferred terminal for this project (Warp, iTerm, Terminal)
include_warp_launch_configNoWhen true, also write the profile as a Warp launch config under ~/.warp/launch_configurations/<name>.yaml. Default: false. Env vars are not emitted into the launch config (Warp schema does not support them at top level).

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden, and it does disclose the notable side effect: an optional file written to ~/.warp/launch_configurations/ that surfaces the profile in Warp's launch UI. It does not say where profiles themselves are persisted, whether saving a name that already exists overwrites or errors, or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and followed by the optional side effect. No filler, though the second sentence is somewhat compressed and would read better split.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description must cover behavior: it covers the Warp config write but leaves open profile storage location, overwrite semantics, and return value. Adequate for the happy path but incomplete for an agent needing to know the consequences of reusing a name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The parenthetical list of captured fields mirrors the schema properties rather than adding semantics, and the env-var exclusion note for the Warp config is already stated in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Save current project context as a named workspace profile', with the captured fields enumerated in parentheses. It is distinguishable from load/delete_workspace_profile by the verb, though it never contrasts itself with the similar-sounding save_template or save_ssh_profile siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied ('save current project context', optional Warp launch config) but there is no explicit when-to-use guidance, no mention of when to prefer save_template instead, and no stated preconditions such as an active project context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

self_checkB

Run health check on configuration, database, terminal, and recent error rates

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and it does disclose scope (four subsystems checked), which implies a read-only diagnostic. However it never confirms it is non-mutating, says nothing about latency or whether it touches live sessions, and gives no sense of what a failure result looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and enumerating the checks. Nothing is padded and nothing important is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (zero params, no nested objects), and the description covers what is checked. But with no output schema and no annotations, an agent still can't tell what the result contains or how to act on it, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing to document and the baseline of 4 applies. The description correctly implies no input is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Run health check') plus the resources inspected: configuration, database, terminal, and recent error rates. It's a diagnostic tool clearly distinct from the command-execution and workspace siblings, though it doesn't name a sibling it contrasts with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to invoke this versus siblings like get_environment_context or wave_helper_status, both of which also sound diagnostic. There is no statement of prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_to_sessionA

Send a command to an existing named terminal session, reusing its tab. Always prefer this over opening a new tab when a relevant session already exists. Use list_sessions first to check for available sessions.

NameRequiredDescriptionDefault
commandYesThe command to send
session_nameYesName of the target session

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It usefully discloses that the tab is reused (no new resource created) and that a session must pre-exist, but says nothing about what happens if the session name is unknown, whether the call is blocking, or how output is obtained (a sibling get_command_output exists).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the preference rule, then the prerequisite. No filler; every sentence changes agent behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A simple two-parameter tool with a fully documented schema and no output schema; the description covers selection and prerequisite context adequately. The main residual gap is output retrieval guidance for a command-sending tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema; baseline 3 applies. The description adds only that session_name must refer to an existing named session, with no details on name matching or command syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: send a command to an existing named terminal session, and clarifies it reuses the session's tab rather than creating one. This distinguishes it from open_terminal_tab, though other execution siblings (execute_command, execute_with_streaming, wave_run_in_block) are never named as contrasts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit positive guidance ('Always prefer this over opening a new tab when a relevant session already exists') plus a concrete prerequisite step ('Use list_sessions first to check for available sessions'). The when-to-use condition and the alternative are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_notification_preferenceC

Toggle macOS notification preferences for command completion alerts

NameRequiredDescriptionDefault
soundNoEnable or disable notification sounds
enabledNoEnable or disable notifications
minimum_durationNoMinimum command duration (seconds) before notification triggers
notify_on_failureNoNotify on failed commands
notify_on_successNoNotify on successful commands

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and falls short. 'Toggle' is ambiguous for a tool that accepts explicit boolean and numeric values, leaving open whether it flips current state or sets absolute values. It also omits whether partial updates are allowed, whether settings persist across sessions, and any permission or macOS-version requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the scoping qualifier 'for command completion alerts' appears early. It is efficient, though so terse that the brevity reflects under-specification rather than disciplined economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Five optional parameters, no annotations, and no output schema mean the description must do more work than one sentence allows. It says nothing about partial-update semantics, defaults, persistence scope, or the effect of calling it with an empty argument object, all of which an agent needs before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the schema, establishing a baseline of 3. The description only adds the framing that these settings govern completion alerts, which mildly clarifies the meaning of 'enabled' and 'sound' but adds no syntax, units, or default information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: toggling macOS notification preferences scoped to command completion alerts. That is clear enough to distinguish it from unrelated siblings like wave_set_setting or execute_command. It does not explicitly contrast itself with any sibling, and the word 'toggle' is a slightly loose fit for a 5-parameter setter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus alternatives such as wave_set_setting. Nothing states whether it applies globally or per-session, whether omitting parameters preserves existing values, or what defaults apply. The agent must infer all invocation conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shell_shim_statusA

Report the status of the optional shell shim — socket path, whether the MCP server is listening, total events received, and the most recent events. The shim is opt-in (helper/install-shim.sh); when active inside a Warp pane it streams preexec/command_finished events to the MCP via a per-uid Unix socket. Observability surface in v6.0; execute_command auto-routing through shim events is deferred to v6.0.x.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful behavior: the shim is opt-in via helper/install-shim.sh, streams preexec/command_finished events over a per-uid Unix socket, and is an observability surface in v6.0 rather than an execution path. It does not explicitly state read-only safety, permissions, or behavior when the shim is not installed, but "Report the status" strongly implies a non-mutating diagnostic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the returned status fields and then supplies the operational context needed to interpret them. The final sentence about deferred auto-routing is slightly ancillary but earns its place by preventing an agent from assuming this tool changes execute_command behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters and no output schema, the description usefully lists the status information the caller receives and explains how the shim becomes active. It could be more complete by describing behavior when the shim is not installed or not listening, but it provides enough context for an agent to invoke the diagnostic correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to explain and the baseline is 4. The schema coverage is 100% and the description correctly does not invent parameter details that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ("Report the status of the optional shell shim") and enumerates the status fields returned: socket path, listening state, event count, and recent events. It also distinguishes this observability tool from execute_command by noting that shim-based auto-routing is deferred to v6.0.x.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that the shim is opt-in and active inside a Warp pane, which gives useful context for when the status is meaningful. However, it never explicitly states when an agent should call this tool versus alternatives such as self_check, nor does it describe when the tool would be unhelpful or how to react if the shim is inactive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_executeB

Execute a command on a remote host via SSH (key-based authentication only)

NameRequiredDescriptionDefault
hostNoRemote hostname or IP address
portNoSSH port (default: 22)
commandYesCommand to execute remotely
profileNoName of saved SSH profile to use instead of specifying host/username/key
timeoutNoConnection timeout in seconds (default: 30)
usernameNoSSH username
identity_fileNoPath to SSH private key (optional)

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden, and it does disclose one important behavioral constraint: key-based authentication only, which rules out password or agent prompting. It says nothing about whether the command is non-interactive, how output or exit codes are surfaced, or what happens on timeout/connection failure — significant gaps for a remote execution tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler, and the core action is front-loaded. Its brevity is efficient rather than padded, though the parentheses carry the only differentiating detail at the tail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no annotations, and no output schema, an agent needs more than this — notably how results and failures are returned, whether profile overrides host/username, and whether execution is blocking for the duration of the timeout. The description leaves the entire behavioral surface of a remote execution tool undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so defaults for port, timeout, identity_file, and the profile alternative are already documented in the schema. The description adds only the auth-mode constraint that explains why identity_file matters, which is a marginal but real addition over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: execute a command on a remote host over SSH. An agent can distinguish it from the SSH-profile management siblings (save_ssh_profile, list_ssh_profiles) and from local execution tools. It does not explicitly differentiate it from generic siblings like execute_command, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this over execute_command, run_template, or wave_run_in_block, which all appear in the sibling list and could plausibly run commands. The only usage constraint given is the authentication mode, not the selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_commandC

Suggests a terminal command based on the user's request

NameRequiredDescriptionDefault
queryYesThe user's request or task description
working_directoryNoOptional project directory; enables context-aware git/Swift/Node suggestions

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Suggests' implies nothing is executed, which is a useful signal, but it doesn't state whether the result is a command string, whether it validates the command, whether working_directory changes output semantics, or any side effects. That is thin for a tool whose safety profile is undeclared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero padding. It is efficient but borders on under-specified rather than tight—there is room for one more clause on output or usage without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema, so the description should clarify what a 'suggestion' looks like and how it differs from preview_command's output. With only one sentence, an agent cannot tell whether the response is a command string, a list of alternatives, or an explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both query and working_directory are already documented, including the context-aware git/Swift/Node behavior. The description adds nothing beyond echoing the query parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb ('Suggests') and resource ('a terminal command') plus the input basis ('based on the user's request'), so the agent knows this is a suggestion generator rather than an executor. However, it never distinguishes itself from close siblings like preview_command, execute_command, or check_interactive, which an agent must disambiguate by itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this instead of execute_command or preview_command, and no prerequisites or exclusions. The agent is left to infer that 'suggest' is the advisory, non-executing path from the single verb alone.

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.

  1. 40 tool updatesv8.0.4
    • First observedadd_file_watch
    • First observedcapture_environment
    • First observedcheck_interactive
    • First observedcleanup_sessions
    • First observedclose_session
    • First observedcopy_to_clipboard
    • First observeddelete_ssh_profile
    • First observeddelete_template
    • First observeddelete_workspace_profile
    • First observeddiff_environment
    • First observedemit_warp_event
    • First observedexecute_and_parse
    • First observedexecute_command
    • First observedexecute_pipeline
    • First observedexecute_with_auto_retrieve
    • First observedexecute_with_streaming
    • First observedfocus_warp_session
    • First observedget_command_output
    • First observedget_environment_context
    • First observedlist_file_watches
    • First observedlist_recent_commands
    • First observedlist_sessions
    • First observedlist_ssh_profiles
    • First observedlist_templates
    • First observedlist_workspace_profiles
    • First observedload_workspace_profile
    • First observedopen_terminal_tab
    • First observedpreview_command
    • First observedread_from_clipboard
    • First observedremove_file_watch
    • First observedrun_template
    • First observedsave_ssh_profile
    • First observedsave_template
    • First observedsave_workspace_profile
    • First observedself_check
    • First observedsend_to_session
    • First observedset_notification_preference
    • First observedshell_shim_status
    • First observedssh_execute
    • First observedsuggest_command

TDQS

B3.1/5.0

Scored across 40 tools

Disambiguation2/5

Several execution tools heavily overlap: execute_command, execute_with_auto_retrieve, execute_and_parse, execute_with_streaming, and execute_pipeline all run commands, while get_command_output and auto-retrieve both fetch output. Descriptions provide some guidance, but an agent still faces unclear boundaries for choosing the right runner.

Naming Consistency4/5

Most tools follow a predictable snake_case verb_noun pattern such as execute_command, list_templates, save_workspace_profile, and delete_ssh_profile. Minor deviations like ssh_execute, self_check, and shell_shim_status keep it from being fully consistent.

Tool Count2/5

With 40 tools, the surface is heavy for a command-runner server and includes many niche capabilities beyond core command execution, such as clipboard access, notifications, Warp event emission, and shell-shim status. The set feels over-expanded rather than tightly scoped.

Completeness4/5

The surface covers command execution, output retrieval, templates, sessions, workspace profiles, SSH profiles, environment snapshots, file watches, and health checks. Minor gaps remain, such as no explicit template update/get operation and no obvious command cancellation/kill tool, but these are workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    The terminal AI agents can drive: a cross-platform desktop terminal (macOS/Linux/Windows, MIT) that runs a local MCP server. Spawn tabs/panes, run commands with structured output, read screens and full scrollback, take scrolling screenshots, record sessions with secret redaction, switch identity profiles. Auto-registers with Claude Code / Codex / Gemini CLI on install.
    15
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes an interactive terminal over MCP, enabling remote shell command execution, file operations, and directory management via ChatGPT or Claude Desktop.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Local macOS MCP bridge that gives ChatGPT shell, unrestricted filesystem access, real PTY sessions, background jobs, and read-only stored Codex history. ChatGPT stays the reasoning layer; the bridge makes no model calls.
    55
    MIT