purplemux-mcp
purplemux-mcp
한국어 · English
Claude Code / Codex에서 로컬 purplemux(subicura의 tmux + LLM 워크스페이스 매니저)를 제어하는 MCP 서버다. 워크스페이스·탭·터미널·(Electron)브라우저·서브에이전트 오케스트레이션을 26개 툴로 다룬다.
purplemux CLI는 localhost HTTP API를 감싼 얇은 래퍼일 뿐이라, 이 서버는 그 API를 MCP 툴로 그대로 노출한다(CLI로 셸아웃하지 않고 HTTP를 직접 호출). 그래서 에이전트가 터미널을 오케스트레이션하고, 나아가 Claude·GPT 계열을 넘나드는 크로스 LLM 서브에이전트(다른 AI-CLI 세션)까지 직접 운전할 수 있다.
Node ≥ 20 + 같은 호스트에 purplemux 실행이 필요하다.
왜 만들었나 — 크로스 LLM · 구독형 CLI를 서브에이전트로
이 프로젝트의 진짜 목적은 tmux(purplemux) 위에서 돌아가는 구독형 CLI(claude-code, codex-cli)를, 서로 다른 LLM을 넘나드는(크로스 LLM) 서브에이전트로 부려먹는 것이다.
크로스 LLM 오케스트레이션. 하나의 오케스트레이터가 Claude 계열(claude-code)과 GPT 계열(codex-cli)을 동시에 서브에이전트로 띄워 쓸 수 있다. 같은 문제를 서로 다른 모델에 던져 **교차 검증·합의(consensus)**를 시키거나, 강점이 다른 모델에 작업을 라우팅하는 식으로 — 한 모델 계열에 갇히지 않는다.
구독 정액 활용. 서브에이전트를 API로 붙이면 토큰 종량 과금이 붙지만, Claude Code(Claude 구독)·Codex CLI(ChatGPT/Codex 구독)는 정액 구독으로 돌아가는 대화형 세션이다. 이 세션들을 워커로 재활용한다.
다리 역할. purplemux는 이 구독형 CLI들을 각각 tmux 페인(탭)으로 띄워 주고, 그걸 제어할 로컬 HTTP API를 갖고 있다. 이 MCP가 그 API를 열어주는 다리다. 오케스트레이터(예: 지금 이 Claude Code)가 →
pmux-mcp-init으로.purplemux-mcp/agents-reply와 reply 도구 응답 계약을 준비하고필요하면
pmux-mcp-configure-agents로 Codex/Claude 설정에 purplemux MCP와 reply 도구 approval을 심고pmux_agent_start로 claude/codex CLI를 탭에 런치하고 (훅 주입 + 부트 검증까지 자동)pmux_agent_wait_ready로 부트스트랩 echo 완료 증거를 확인하고pmux_agent_turn으로 턴 단위 작업을 던져 응답을 무손실 회수하고pmux_close_tab으로 정리한다.
pmux_create_tab(claude-code/codex-cli 타입) +pmux_send_input조합은 서브에이전트 실행 경로가 아니다 — 그 panelType은 UI 패널이라 빈 셸일 수 있고, readiness·응답 회수를 아무도 관리하지 않는다. 저수준 툴은 일반 터미널 작업과 수동 폴백 전용.
즉 여러 LLM의 구독 CLI 세션을 "호출 가능한 워커 에이전트"로 바꿔 팬아웃(fan-out) 오케스트레이션을 하는 게 핵심 시나리오다. 여러 탭에 작업을 나눠 병렬로 돌리고, 상태를 폴링하고, 서로 다른 모델의 결과를 합치는 흐름 전체를 자연어 지시로 굴릴 수 있다.
참고: 이 저장소 자체도 그 정신으로 만들어졌다 — 추출→설계→작업→리뷰→테스트 5단계를 각각 크로스 LLM 3개 서브에이전트(Claude Sonnet / Claude Opus / Codex gpt-5.5-high)의 합의로 진행했다. 서로 다른 모델이 교차 검증한 덕에 실제로 한쪽만으론 놓쳤을 것들(예:
send자동 제출 동작, 포트 인젝션 토큰 유출)을 잡아냈다.
Related MCP server: t-pane MCP Server
빠른 시작
# 1. purplemux 실행 중이어야 함 (서버가 ~/.purplemux/{port,cli-token}을 기록)
# 2. 빌드
npm install && npm run build # -> dist/index.js
# 3. 등록 (절대경로)
claude mcp add purplemux -s user -- node "$PWD/dist/index.js"
codex mcp add purplemux -- node "$PWD/dist/index.js"Claude Code / Codex 세션을 재시작하면 pmux_* 툴이 뜬다. 포트·토큰은 호출마다 ~/.purplemux/에서 자동으로 읽으므로(캐시 없음), purplemux를 재시작하거나 포트가 바뀌어도 이 서버는 재시작할 필요가 없고 일반 환경에선 env 설정도 필요 없다.
서브에이전트 사전 작업
크로스 LLM 서브에이전트가 pmux-agent-reply를 바로 쓰려면, 오케스트레이터 세션에서 한 번 준비한다.
pmux_list_workspaces로 대상workspaceId와 실제 디렉터리를 확인한다.pmux-mcp-init {workspaceId}를 실행해<workspace>/.purplemux-mcp/agents-reply를 만든다.pmux-mcp-configure-agents {workspaceId, target:"both"}로 dry-run 결과를 확인한다.문제가 없으면
pmux-mcp-configure-agents {workspaceId, target:"both", apply:true}를 실행한다.이후 새로 시작하는 Codex/Claude 서브에이전트부터 설정이 적용된다.
권한 패치는 안전 병합 방식이다. 기존 파일이 있으면 백업하고, JSON은 파싱 후 필요한 값만 추가한다.
Codex:
~/.codex/config.toml에 purplemux MCP 서버와pmux-agent-replyapproval만 추가Claude MCP 서버:
~/.claude.json의mcpServers.purplemuxClaude tool allow:
<workspace>/.claude/settings.local.json의permissions.allow에mcp__purplemux__pmux-agent-reply
<workspace>는 선택한 purplemux workspace의 directories[0]이다. 예를 들어 workspace가 /home/yoway030를 가리키면 생성 위치도 /home/yoway030/.claude/settings.local.json이고, 현재 git repo 아래 .claude/가 아니다.
툴 (26개)
에이전트 오케스트레이션 (v2 — 권장 진입점): pmux-mcp-init · pmux-mcp-configure-agents · pmux_agent_start · pmux_agent_wait_ready ·
pmux_agent_send · pmux_agent_capture · pmux_agent_status · pmux_agent_turn · pmux-agent-reply
claude/codex를 훅 주입으로 부팅해(purplemux 네이티브
cliState/command상태 채널 활용) readiness·busy를 결정론적으로 판정하고, 부트 검증(SessionStart 부트 신호 + bootstrap echo)으로 "프로세스가 떴고 모델이 실제로 응답했다"는 증거를 확보한 뒤, 응답은pmux-agent-reply도구가.purplemux-mcp/agents-reply/<agentId>-<turn>-<requestId>.md에 쓰는 파일 프로토콜(req 신원 + EOF 커밋 이중 게이트)로 무손실 회수한다.pmux_agent_turn은 send→폴링→회수를 턴당 1콜로 묶은 복합 툴. 설계·근거: docs/worklog-20260707-workflow/design-v2.md, design-v22.md, worklog/plan-boot-signal-echo.md
터미널/탭 (headless에서도 동작): pmux_list_workspaces · pmux_list_tabs ·
pmux_create_tab · pmux_get_tab · pmux_send_input · pmux_tab_status ·
pmux_capture_pane · pmux_close_tab
브라우저 (Electron 필요): pmux_browser_url · pmux_browser_screenshot ·
pmux_browser_console · pmux_browser_network · pmux_browser_network_body ·
pmux_browser_eval
메타/유틸: pmux_guide(이 서버의 오케스트레이션 가이드 — LLM 셀프 문서) · pmux_api_guide(purplemux HTTP API 레퍼런스) · pmux_connection_info(토큰값은 절대 노출 안 함)
접속하는 LLM에는 MCP
instructions로 툴 계층·골든 패스가 initialize 시점에 자동 전달되고, 상세 가이드(실패 모드·복구 패턴 포함)는pmux_guide한 번으로 회수할 수 있다.
pmux_send_input은 자동 제출된다(서버가 Enter를 침) — 개행을 붙이지 말 것. trailing\n1개는 자동 제거된다. 브라우저 툴은 headless(비 Electron) purplemux에서 503을 반환하고,web-browser탭 생성 직후엔 409 "not attached yet"(잠시 후 재시도)가 날 수 있다.
claude/codex CLI를 pmux_agent_*로 서브에이전트로 부리는 cookbook을 포함한 전체 기능·설치 옵션·사용 예시: docs/USAGE.md.
개발 / 테스트
npm run build && npm run typecheck
npm run smoke # handshake + 26툴 + 라이브 list_workspaces
npm run unit # 순수 함수 단위테스트 (fixture 기반)
npm run e2e # 실행 중 purplemux 대상 라이브 라운드트립 12케이스구조
src/ # config, http, errors, schemas, tools, agents, boot, guide, pane, paths, profiles, index
test/ # smoke + 라이브 e2e (Node, 프레임워크 없음)
docs/
USAGE.md # 기능 · 설치 · 사용법
01-cli-features.md # purplemux CLI 추출 정본
02-mcp-design.md # MCP 서버 설계 정본
worklog/ # 단계별 작업기록 (추출→설계→작업→리뷰→테스트)
panel/ # 3에이전트(Sonnet/Opus/Codex) 단계별 초안
reference/ # 추출에 사용한 고정 입력(api-guide 등)어떻게 만들었나
추출 → 설계 → 작업 → 리뷰 → 테스트 5단계. 각 단계를 세 서브에이전트(Claude Sonnet, Claude Opus, Codex gpt-5.5-high)의 합의로 통과시키고, 이견은 오케스트레이터가 라이브 서버 실측으로 판정했다(예: send 자동 제출 동작 확정, 리뷰 단계에서 포트 인젝션에 의한 토큰 유출 취약점 발견·차단). 자세한 내용은 docs/worklog/.
라이선스
MIT (이 서버). purplemux는 subicura의 별도 프로젝트다.
Available Tools
23 toolspmux_agent_captureA
Primary agent orchestration tool: recover a v2.1 agent response. Use pmux_capture_pane only as a low-level fallback. If requestId is supplied, first read the report file at workspaceDir/.pmux-agents//turn-.md and require matching status line plus EOF marker. Without requestId, file recovery is skipped and pane BEGIN/END fallback is used. Returns structured complete/blocked/working/inconsistent/partial/missing results; partial/working means do not send the next turn yet.
| Name | Required | Description | Default |
|---|---|---|---|
| turn | Yes | Caller-owned turn number. turn=0 is recommended for bootstrap. | |
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| agentId | Yes | Caller-owned agent id: ^[a-z0-9][a-z0-9_-]{0,31}$. | |
| requestId | No | Optional caller-owned request id using the same format as agentId. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the two recovery paths (with/without requestId), file reading requirements (status line + EOF marker), and the structured result types (complete/blocked/working/inconsistent/partial/missing). The implication that partial/working results block further turns is explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: first sentence states primary purpose and fallback alternative. Subsequent sentences explain two modes and return semantics. No redundant wording; each sentence adds critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description adequately covers the two main usage scenarios and return types. It could benefit from clarifying the file report format but is sufficient for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the behavioral impact of requestId (enabling file recovery) and clarifying that requestId is optional. However, it does not elaborate on other parameters beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as the primary agent orchestration tool for recovering v2.1 agent responses, distinguishing it from pmux_capture_pane which is described as a low-level fallback. The verb 'recover' and resource 'agent response' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs. pmux_capture_pane ('Use pmux_capture_pane only as a low-level fallback'). Also describes two distinct usage modes based on requestId presence, with clear guidance that partial/working results mean not to send the next turn yet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_agent_sendA
Primary agent orchestration tool: validate provider-specific readiness/busy/error state, optionally verify a previous DONE signal or END marker, append the v2.1 PMUX footer, and send the prompt. Use pmux_send_input/pmux_capture_pane only as low-level fallbacks. For fileOutput=true previous turns, pass expectPrevTurnEnd together with expectPrevRequestId so shortened req-keyed markers can be matched. On turn <= 1 only, pane fallback input_queued is treated as a composer placeholder and sent with validation.warning; later turns remain strict. fileOutput defaults true: requestId is generated when omitted, workspaceDir is resolved from workspaces[].directories[0], and expectedReportFile is returned. Use fileOutput:false when pmux_agent_start returned recommendedFileOutput:false; read-only/plan agents cannot write report files. fileOutput=false uses the pane BEGIN/END fallback. agent_busy returns {sent:false, reason:"busy"}. Caller contract: if pmux_agent_capture returns partial/working, do not call pmux_agent_send again until the current turn completes or is explicitly abandoned.
| Name | Required | Description | Default |
|---|---|---|---|
| turn | Yes | Caller-owned turn number. turn=0 is recommended for bootstrap. | |
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| prompt | Yes | Prompt body to send before the standard PMUX sentinel footer. | |
| agentId | Yes | Caller-owned agent id: ^[a-z0-9][a-z0-9_-]{0,31}$. | |
| provider | Yes | Provider used for readiness/busy checks: codex or claude. | |
| requestId | No | Optional caller-owned request id using the same format as agentId. | |
| fileOutput | No | Defaults to true. true writes response content to the v2.1 report file; false uses pane BEGIN/END fallback. | |
| busyPattern | No | busyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). | |
| errorPattern | No | errorPattern regex override. Max 200 chars; compile errors become ToolError. | |
| readyPattern | No | readyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| skipReadyCheck | No | Skip prompt-readiness gating, but still reject launch/error patterns. | |
| maxResponseLines | No | Line limit inserted into the sentinel footer. Defaults to 40. | |
| expectPrevTurnEnd | No | If set, the pane must contain the previous turn's completion marker before sending. For fileOutput=true turns, pair this with expectPrevRequestId. | |
| expectPrevRequestId | No | Optional previous turn request id. Use with expectPrevTurnEnd for fileOutput=true prior-turn validation. | |
| runtimeErrorPattern | No | runtimeErrorPattern regex override. Max 200 chars; compile errors become ToolError. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers behavioral traits: validation steps, optional previous signal verification, busy response format, fileOutput behavior, turn<=1 exception, pattern override limits, and error handling. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive and front-loaded with main purpose, but somewhat verbose. Every sentence adds value; no redundancy. Good structure with separate points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 16 parameters, no output schema, and many siblings, the description covers key workflows, edge cases, and behavioral expectations. Lacks a brief note about expected return format after sending (besides busy), but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, but description adds significant context: relationships between expectPrevTurnEnd and expectPrevRequestId, defaults for fileOutput/requestId/maxResponseLines, and runtime behavior. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it is the primary agent orchestration tool, validates readiness/busy/error state, verifies previous markers, appends footer, and sends prompt. Distinguishes from siblings by naming pmux_send_input/pmux_capture_pane as low-level fallbacks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use fallbacks only when needed, fileOutput:false conditions, turn<=1 special handling, and caller contract about not calling again until turn completes. Alternatives and context are clearly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_agent_startA
Primary agent orchestration tool: create a terminal tab, poll briefly for shell readiness, then send an interactive agent CLI command. ORCHESTRATOR CONTRACT: before launching, ask the user which model/effort (and codex sandbox / claude permissionMode) each subagent should use, unless the user already specified them. Use pmux_send_input/pmux_capture_pane only as low-level fallbacks. Returns recommendedFileOutput: false for read-only/plan agents that should be sent fileOutput:false. Boot verification: returns bootId — by default (bootstrapEcho:true) the CLI is launched with a fixed initial prompt that makes the model print a DONE marker (req=bootId), and a SessionStart hook writes a boot-signal file; verify with pmux_agent_wait_ready {bootId, expectEcho:true}, then send user work from turn=1 (bootstrap consumed turn 0; do not pass expectPrevTurnEnd on turn 1). bootstrapEcho costs one tiny model turn — pass false to skip. codex hook trust (실측 2026-07-08): the FIRST launch that wires the boot hook requires a one-time interactive trust approval in the codex TUI — until approved, boot.fileSeen stays false while the echo still works; treat fileSeen:false + echoSeen:true on codex as this case, not a failure. This is non-blocking: after a successful start return, use pmux_agent_wait_ready before sending work. wait_ready launch_failed is meaningful only after start has successfully sent the command; an idle shell before command send is indistinguishable to the stateless wait tool. Session lifetime contract: keep the tab open until the task is finished, then close it with pmux_close_tab. Codex command: codex --no-alt-screen -s ; Claude permissionMode choices are based on claude 2.1.201 and intentionally exclude bypassPermissions; claude effort maps to the --effort flag (claude >=2.1.202).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name for the terminal tab. | |
| model | No | Optional model id. Must satisfy ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$; invalid values return ToolError. | |
| effort | No | Optional reasoning effort. codex: -c model_reasoning_effort=<v>; claude: --effort <v> (claude >=2.1.202). | |
| sandbox | No | Codex-only sandbox. Defaults to read-only in the command profile. | |
| provider | Yes | Agent CLI provider: codex or claude. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). | |
| bootstrapEcho | No | Defaults to true. Appends a fixed single-line initial prompt (positional arg, auto-submitted by both CLIs) asking the agent to print the bootstrap DONE marker, so pmux_agent_wait_ready with {bootId, expectEcho:true} can verify the LLM actually responds — evidence-based boot readiness. Costs one tiny model turn; set false to skip. | |
| permissionMode | No | Claude-only permission mode; bypassPermissions is intentionally excluded. | |
| shellTimeoutMs | No | How long pmux_agent_start waits for the new terminal shell prompt before returning not_shell_ready. Defaults to 5000; max 30000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description fully discloses boot verification (bootstrapEcho, bootId, wait_ready), codex hook trust behavior, session lifetime contract, and return hint about recommendedFileOutput. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but all information is necessary; front-loaded with primary purpose. Could be slightly more structured but earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers boot verification, session lifetime, and important behavioral nuances. Missing explicit error handling but sufficient given complexity and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by explaining bootstrapEcho cost, permissionMode exclusion, codex vs claude command construction, and shellTimeoutMs defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly specifies the tool creates a terminal tab, polls for shell readiness, and sends an agent CLI command. Distinguishes from low-level fallbacks like pmux_send_input and pmux_capture_pane.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit orchestration contract on when to ask user for model/effort etc., and directs to use low-level tools only as fallbacks. Lacks explicit when-not alternatives but offers clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_agent_statusA
Primary agent orchestration tool: return a no-wait v2.1 status snapshot. Use pmux_tab_status/pmux_capture_pane only as low-level fallbacks. Includes tab alive, provider-specific readiness, optional DONE signal for agentId/turn/requestId, optional report-file check, runtimeError when detected, and pane tail. No server-side state is kept.
| Name | Required | Description | Default |
|---|---|---|---|
| turn | No | Optional turn number. Used with agentId for DONE/report-file status. | |
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| agentId | No | Optional agent id. When omitted, status returns readiness only. | |
| provider | Yes | ||
| requestId | No | Optional caller-owned request id using the same format as agentId. | |
| busyPattern | No | busyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). | |
| errorPattern | No | errorPattern regex override. Max 200 chars; compile errors become ToolError. | |
| readyPattern | No | readyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| runtimeErrorPattern | No | runtimeErrorPattern regex override. Max 200 chars; compile errors become ToolError. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes what status includes (tab alive, readiness, DONE signal, report-file check, runtimeError, pane tail) and explicitly states no server-side state kept, which is crucial for an orchestration tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load purpose and are free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all major output aspects and state behavior, though no output schema exists; minor gaps on response format but adequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has high description coverage (90%), but description adds context on how agentId/turn/requestId relate to DONE signal and report-file check, enhancing understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns a no-wait status snapshot for agent orchestration, distinguishes itself as primary tool and mentions siblings as low-level fallbacks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this as primary tool and pmux_tab_status/pmux_capture_pane only as low-level fallbacks, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_agent_turnA
Primary agent orchestration tool for one full turn: send a prompt, poll for completion evidence, then return the recovered response. Safe to call immediately after a previous turn; transient pre-send busy/starting states are retried within the same pollTimeoutMs budget. Use pmux_agent_capture with the returned marker to resume after timeout; use pmux_send_input/pmux_capture_pane only as low-level fallbacks. Completion evidence from a valid report file or pane markers wins over readiness/runtime-error signals. Without completion evidence, ready plus runtimeError returns status:"agent_error".
| Name | Required | Description | Default |
|---|---|---|---|
| turn | Yes | Caller-owned turn number. turn=0 is recommended for bootstrap. | |
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| pollMs | No | Polling interval in ms after a successful send. Defaults to 2000; minimum 500. | |
| prompt | Yes | Prompt body to send before the standard PMUX sentinel footer. | |
| agentId | Yes | Caller-owned agent id: ^[a-z0-9][a-z0-9_-]{0,31}$. | |
| provider | Yes | Provider used for readiness/busy checks: codex or claude. | |
| requestId | No | Optional caller-owned request id using the same format as agentId. | |
| fileOutput | No | Defaults to true. true writes response content to the v2.1 report file; false uses pane BEGIN/END fallback. | |
| busyPattern | No | busyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). | |
| errorPattern | No | errorPattern regex override. Max 200 chars; compile errors become ToolError. | |
| readyPattern | No | readyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| pollTimeoutMs | No | Total polling timeout in ms after a successful send. Defaults to 120000; max 300000. | |
| skipReadyCheck | No | Skip prompt-readiness gating, but still reject launch/error patterns. | |
| maxResponseLines | No | Line limit inserted into the sentinel footer. Defaults to 40. | |
| expectPrevTurnEnd | No | If set, the pane must contain the previous turn's completion marker before sending. For fileOutput=true turns, pair this with expectPrevRequestId. | |
| expectPrevRequestId | No | Optional previous turn request id. Use with expectPrevTurnEnd for fileOutput=true prior-turn validation. | |
| runtimeErrorPattern | No | runtimeErrorPattern regex override. Max 200 chars; compile errors become ToolError. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses polling timeout, retry logic, priority of completion evidence, and error status. However, it does not explicitly state that sending input mutates state or that it is destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and usage, then adds behavioral details. All sentences are valuable but could be slightly more streamlined. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (18 params, no output schema), the description covers purpose, usage, and many behaviors. However, it lacks detail on the return structure beyond mentioning 'recovered response' and a specific error status. Without an output schema, the agent would benefit from more explicit return description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description briefly mentions key parameters (pollTimeoutMs, fileOutput) but does not add significant new semantics beyond summarizing their roles. Schema already documents each parameter well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it is the primary tool for a full agent turn: sending a prompt, polling for completion, and returning the response. It distinguishes from siblings like pmux_agent_capture, pmux_send_input, and pmux_capture_pane by positioning them as fallbacks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (immediately after previous turn, retrying transient states) and when not to (after timeout use pmux_agent_capture, low-level fallbacks only as fallback). Provides clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_agent_wait_readyA
Primary agent orchestration tool: poll a tab until an agent is ready, still starting/busy, launch_failed, exited, or timeout. Use pmux_send_input/pmux_capture_pane only as low-level fallbacks. agent_busy is non-terminal and keeps polling. Boot verification (recommended after pmux_agent_start): pass {bootId, expectEcho:true} — agent_ready is then returned ONLY on the bootstrap DONE marker (completion evidence; supersedes ready heuristics, requireBusyTransition and runtimeError), and every response carries boot.fileSeen (SessionStart boot-signal file — diagnostic only; on echo timeout, fileSeen:false suggests launch/hook-trust failure while fileSeen:true suggests the model never answered). Default timeout rises to 90s under expectEcho. requireBusyTransition defaults false for boot readiness; set true when waiting after send so ready is returned only after busy was observed or an initial non-ready baseline later changes to ready. In boot mode only (and never under expectEcho), pane fallback input_queued can be treated as a composer placeholder and returned ready; send validation remains strict. Uses pane capture + tab_status only; no server-side registry is kept. Session lifetime contract: keep the tab open until the task is finished, then close it with pmux_close_tab.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| bootId | No | bootId returned by pmux_agent_start. When set, every response includes boot.fileSeen (SessionStart boot-signal file existence — diagnostic only, never gates readiness). | |
| pollMs | No | Polling interval in ms. Defaults to 1500; minimum 500. | |
| provider | Yes | ||
| timeoutMs | No | Total polling timeout in ms. Defaults to 30000 (90000 when expectEcho is true); max 180000. | |
| expectEcho | No | Requires bootId, and is only meaningful when the agent was STARTED with bootstrapEcho:true (the default) — with bootstrapEcho:false no echo will ever arrive and this would time out. When true, agent_ready is returned ONLY once the bootstrap-echo DONE marker (req=bootId) is on the pane — evidence-based boot readiness that supersedes ready-pattern heuristics and requireBusyTransition. | |
| busyPattern | No | busyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). | |
| errorPattern | No | errorPattern regex override. Max 200 chars; compile errors become ToolError. | |
| readyPattern | No | readyPattern regex override. Max 200 chars; compile errors become ToolError. | |
| runtimeErrorPattern | No | runtimeErrorPattern regex override. Max 200 chars; compile errors become ToolError. | |
| requireBusyTransition | No | Defaults false for boot readiness. Set true when waiting after send; ready is returned only after a busy state has been observed. Superseded by expectEcho (the DONE marker is itself completion evidence). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully covers behavioral traits: it explains the polling mechanism (pane capture + tab_status, no server-side registry), non-terminal states (agent_busy keeps polling), boot mode details, echo behavior, and session lifetime contract. All relevant behaviors are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, but it is somewhat verbose with multiple clauses and parentheticals. Some phrases like 'supersedes ready heuristics, requireBusyTransition and runtimeError' are dense but still add value. Minor trimming could improve readability without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters and no output schema, the description is remarkably complete. It covers all return states (agent_ready, still starting, etc.), explains the boot.fileSeen diagnostic field in responses, and even provides a session lifetime contract. No gaps remain for understanding tool behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite high schema coverage (92%), the description adds significant meaning beyond parameter descriptions. For example, it explains that expectEcho requires bootId and is only meaningful with bootstrapEcho:true, that timeoutMs defaults to 90000 when expectEcho is true, and that requireBusyTransition behaves differently for boot vs. after-send scenarios.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'poll a tab until an agent is ready, still starting/busy, launch_failed, exited, or timeout.' It distinguishes itself from sibling tools like pmux_send_input and pmux_capture_pane by calling them low-level fallbacks, establishing this as the primary orchestration tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (e.g., for boot verification after pmux_agent_start) and when to use alternatives (pmux_send_input/pmux_capture_pane as low-level fallbacks). It also explains parameter defaults and conditions like requireBusyTransition for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_api_guideA
Return the purplemux application's HTTP API reference as markdown (fetched from the running purplemux). This documents the underlying REST endpoints, NOT how to use this MCP server's tools — for orchestration guidance use pmux_guide.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the tool fetches data from the running purplemux and returns markdown. It could mention side-effect-free nature, but the behavior is straightforward for a read-only informational tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main purpose, then a crucial clarification. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description fully explains what the tool does, what it returns, and how it differs from a sibling. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema coverage is 100% (empty schema). The description adds value by explaining the output format and source, which goes beyond the schema. Baseline for 0 params is 4, and this description meets that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the purplemux HTTP API reference as markdown, and distinguishes it from pmux_guide which covers MCP tool usage. It specifies the verb 'return' and resource 'HTTP API reference', with scope 'fetched from the running purplemux'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (for HTTP API reference) and when not to use (for MCP tool orchestration guidance, use pmux_guide). This provides clear decision-making context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_browser_consoleA
Get browser console entries { tabId, entries[] } (ring buffer, last 500). since=ms is an incremental polling cursor; level filters by console level. Electron-only (503/409).
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter by console level (e.g. error, warning, log). | |
| since | No | Incremental polling cursor in ms; only entries after this ts. | |
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses ring buffer limit of 500, incremental polling via 'since', filtering by 'level', and platform restriction (Electron-only with error codes 503/409). This provides solid behavioral context beyond basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences front-load the purpose and key behaviors. Every word adds value, including the ring buffer note and platform restriction. No verbose or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description provides sufficient context: return format, capacity, parameter explanations, and platform limitation. Could mention ordering or empty result behavior, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, but the description adds value by explaining 'since' as an incremental polling cursor and 'level' as filter, plus ring buffer context. This goes beyond the schema's basic type info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves browser console entries for a tab, specifying the return format and ring buffer capacity. While distinct from sibling tools like pmux_browser_network, it does not explicitly differentiate usage, preventing a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for console log retrieval and mentions platform restriction (Electron-only), but lacks explicit guidance on when to use this tool versus alternatives like pmux_browser_network or pmux_browser_eval. No exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_browser_evalA
Evaluate a JavaScript expression in the page and return { tabId, value } (CDP Runtime.evaluate, returnByValue + awaitPromise, 10s timeout). A JS exception/timeout surfaces as 409. Electron-only: 503 = not under Electron (hard); 409 'Browser tab not attached yet' = webview not dom-ready (transient, retry shortly).
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| expression | Yes | JavaScript expression evaluated in the page (CDP, 10s timeout). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses return format, CDP method, timeout, and specific error codes. However, it does not mention potential side effects of executing arbitrary JavaScript (e.g., state mutation), which is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two sentences front-loaded with core purpose, followed by error handling details. Every sentence adds value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description covers main return format ({ tabId, value }) and error codes. It does not detail the type of 'value' (e.g., any JSON), but overall it is sufficiently complete for an evaluation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description adds context about CDP and timeouts but largely overlaps with schema descriptions. Baseline 3 is appropriate as no significant extra semantic value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Evaluate a JavaScript expression in the page and return { tabId, value }'. It specifies the underlying CDP method and options. However, it does not explicitly differentiate from sibling tools like pmux_browser_console or pmux_browser_url, though the unique evaluation capability is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on error conditions (409 for exceptions/timeout, 503 for Electron-only) and transient retry logic. It does not explicitly state when to use this tool vs alternatives, but the context of JavaScript evaluation is distinct enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_browser_networkA
Get browser network entries { tabId, entries[] } (ring buffer, last 500). Filters: since=ms cursor, method (upper-cased server-side), url (substring), status (exact int). Electron-only (503/409). Use pmux_browser_network_body for a single response body.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Filter by URL substring. | |
| since | No | Incremental polling cursor in ms. | |
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| method | No | Filter by HTTP method (upper-cased server-side). | |
| status | No | Filter by exact HTTP status code. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries burden. Reveals ring buffer, filter behavior, platform restriction, but missing auth needs, destructive effects, rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three short segments covering purpose, filters, platform, and sibling. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description must explain return. Mentions structure and ring buffer but entries detail missing. Mostly complete for a filter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 100% with descriptions. Description adds detail on 'since' as cursor and method server-side casing, but adds little beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get browser network entries' with resource and verb. It specifies structure and distinguishes from sibling pmux_browser_network_body.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context: ring buffer, filters, Electron-only restriction. Explicitly mentions alternative tool for single response body, but lacks full when-not usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_browser_network_bodyA
Get a single network response body by requestId: { tabId, requestId, body }. Body is cached after the first call. 404 'Response body unavailable' if not cached/available. Electron-only (503/409).
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| requestId | Yes | Network requestId (from pmux_browser_network entries). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses caching ('Body is cached after the first call'), error states ('404 if not cached/available', 'Electron-only 503/409'), and the output format. It does not explicitly state read-only nature, but the caching and error descriptions provide good behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three sentences with no wasted words. It is front-loaded with the main purpose, followed by critical behavioral notes. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, but the description partially compensates by indicating the output format ({tabId, requestId, body}) and error scenarios. However, it does not describe the 'body' field content or provide examples. Given the lack of output schema, the description is fairly complete but could be slightly more precise about return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter schema coverage is 100% (each param described in the schema). The description adds marginal value by mentioning parameters in a shorthand format and discussing caching, but does not provide new semantic meaning beyond what the schema already offers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a single network response body by requestId'. It specifies the verb (Get), resource (network response body), and key parameter (requestId). The context distinguishes it from siblings like pmux_browser_network, which lists requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks explicit guidance on when to use this tool versus alternatives. It only mentions 'Electron-only' and caching behavior, but does not compare with siblings like pmux_browser_network or pmux_browser_console. The agent would need additional context to decide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_browser_screenshotA
Screenshot a web-browser tab. Default: returns MCP image content (PNG). With savePath: writes raw PNG bytes to that path and returns { saved, bytes }. full=true captures beyond the viewport. Electron-only (503 hard / 409 'not attached yet' transient).
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Capture the full page beyond the viewport. | |
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| savePath | No | If set, write PNG bytes to this ABSOLUTE path and return {saved,bytes} instead of image content. Must be absolute; refuses to overwrite an existing file. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It covers return formats (default PNG image content vs. {saved, bytes} with savePath), full page option, Electron-only constraint, and specific error codes. This is comprehensive for a screenshot tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—three sentences with no wasted words. It is front-loaded with the main action, then details default, savePath, full, and constraints. Every sentence adds essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so return values are described adequately. Prerequisites (workspaceId, tabId from specific tools) are mentioned in the schema. The description covers Electron-only and error codes. No mention of rate limits or auth, but these are not critical for a screenshot tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining the conditional behavior of savePath (changes return type) and full (captures beyond viewport), which goes beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Screenshot a web-browser tab.' The verb 'Screenshot' and resource 'web-browser tab' are specific and unambiguous. Among the sibling tools, no other tool captures a full browser tab screenshot, so it is well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear default behavior and alternatives (savePath, full). It also notes Electron-only requirement and error codes (503 hard, 409 transient). However, it does not explicitly compare to other tools like pmux_capture_pane or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_browser_urlA
Get the browser tab's { tabId, url, title }. Browser tools are Electron-only: 503 = not running under Electron (hard, don't retry); 409 'Browser tab not attached yet' = webview not dom-ready (transient, retry shortly). 400 'Tab is not a web-browser panel' on a non-browser tab.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses three distinct error conditions with actionable guidance (hard vs. transient), which is excellent transparency for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second lists errors. No fluff, front-loaded, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description declares return fields (tabId, url, title). Error conditions are covered. Might lack detail on URL format, but sufficient for a simple getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds context by noting that tabId comes from pmux_list_tabs/pmux_create_tab and workspaceId from pmux_list_workspaces, which is not in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves tabId, url, and title from a browser tab. Distinguishes itself from sibling browser tools like pmux_browser_console or pmux_browser_eval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit error codes and retry advice (503 hard, 409 transient, 400 invalid tab), helping the agent decide when to retry. However, does not explicitly contrast with other browser tools for when to use this vs. alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_capture_paneA
Low-level fallback for manual pane inspection; for agent orchestration prefer pmux_agent_* tools. Capture the current pane snapshot as { content }. Not meaningful for web-browser tabs. 409 'Tab session is not running' if the session is dead.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions return format as { content } and a 409 error condition. However, it does not explicitly state read-only nature or other behavioral traits like side effects, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a purpose: purpose, usage guidance, and error condition. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low-level nature and no output schema, description covers purpose, usage, and a common error. However, it could have elaborated on output format to fully compensate for missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description does not add extra meaning beyond what's already in the schema, so baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it captures a pane snapshot and distinguishes from higher-level pmux_agent_* tools. The verb 'capture' and resource 'pane snapshot' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (low-level fallback) and when not (prefer pmux_agent_* tools). Also notes it's not meaningful for web-browser tabs, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_close_tabB
Close a tab. Returns the real { ok:boolean } body (surfaced faithfully; the CLI would hide it). For web-browser tabs the tmux kill is skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the return value is the real {ok:boolean} body and that for web-browser tabs the tmux kill is skipped. However, with no annotations, it lacks details on side effects, error cases, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and no extraneous information. It is efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description provides the return type and a conditional behavior, but lacks broader context about outcomes, state changes, or usage flows. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Close a tab' which is a specific verb and resource. It does not explicitly differentiate from sibling tools like pmux_get_tab or pmux_create_tab, which reduces clarity slightly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of when not to use it, prerequisites, or contextual triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_connection_infoA
Local diagnostic: { baseUrl?, portSource, tokenSource, hasToken }. NEVER returns the token value. When port/token are missing it returns partial diagnostics (source "none", hasToken:false) rather than erroring.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses critical behavior: never returns token, returns partial diagnostics on missing fields instead of erroring. This provides good transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with structure, no wasted words. Every sentence adds essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains return structure and edge cases. Could mention it's for local connection, but overall adequate for a simple diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters but schema coverage is 100%. Description adds value by explaining the object structure returned, which is meaningful beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a local diagnostic returning connection info components, and distinguishes from siblings by explicitly stating it never returns the token value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use versus alternatives, but the description implies diagnostic use. Sibling tools suggest different purposes, so context is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_create_tabA
Create a tab in a workspace. panelType is one of terminal | claude-code | codex-cli | agent-sessions | web-browser | diff (default terminal); invalid → 400 with validPanelTypes. WARNING: claude-code/codex-cli panelType creates a UI panel, NOT a managed agent session — the pane may be an empty shell before the UI attaches, and sending prompts into it is unreliable. To run a subagent, use pmux_agent_start instead (it launches the CLI in a terminal tab under full protocol control). Creating claude-code/codex-cli without the CLI installed → 409 with suggestedCommand. Returns the created-tab object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name for the tab. | |
| panelType | No | One of terminal | claude-code | codex-cli | agent-sessions | web-browser | diff. Defaults to terminal. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: panelType creates UI panel not agent, sending prompts is unreliable, and error responses include validPanelTypes and suggestedCommand.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with main action, and efficient use of sentences covering warnings, errors, and alternatives without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given tool complexity and no output schema, the description covers purpose, parameter nuances, error conditions, sibling differentiation, and behavioral caveats fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value by explaining panelType enum with default and error behavior, workspaceId source (pmux_list_workspaces), and name as optional display name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'tab in a workspace', specifies panelType options with defaults, and distinguishes from sibling pmux_agent_start for certain panel types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns against using this tool for agent panels (claude-code/codex-cli) by directing to pmux_agent_start, and mentions error conditions for invalid panelType (400) and missing CLI (409).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_get_tabA
Get info for a single tab by id.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It only states the basic operation ('Get info') without mentioning side effects, permissions, rate limits, or any behavioral constraints. This is insufficient for a safe agent invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key action and parameter. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description is minimally adequate. However, it fails to specify what 'info' is returned, leaving the agent guessing about the output structure. This gap reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters having clear descriptions in the schema (e.g., 'Target tab id from pmux_list_tabs / pmux_create_tab'). The tool description adds no additional semantic value beyond restating the parameter role ('by id'). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('Get') and resource ('info for a single tab'), with the identifier ('by id') that distinguishes it from siblings like pmux_list_tabs and pmux_tab_status. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a specific tab ID is available, but provides no explicit when-to-use, when-not-to-use, or alternatives like pmux_list_tabs for enumeration. The context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_guideA
Return the orchestration guide for THIS MCP server as markdown: tool layers (agent_* primary vs low-level fallbacks), the golden path for running claude/codex subagents, boot verification semantics, fileOutput routing, failure modes and recovery patterns. Call this before orchestrating subagents for the first time, or whenever an agent_* result is unclear. (For the purplemux HTTP API reference, use pmux_api_guide instead.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It accurately describes the returned content and usage context but does not elaborate on non-behavioral aspects like auth or side effects; however, this is an informational read-only tool, so 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured sentence with a colon-delimited list covering key aspects. No redundant information, every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully covers what the tool does, when to use it, and how it differs from siblings. Complete for the agent's needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters defined; schema coverage is 100% implicitly. Baseline 4 for zero-parameter tools is applied, as description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns an orchestration guide in markdown, listing specific topics (tool layers, golden path, etc.). It explicitly distinguishes from pmux_api_guide, clarifying scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to call: before orchestrating subagents for the first time or when agent_* results are unclear. Also directs to pmux_api_guide for the API reference, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_list_tabsA
List tabs, optionally filtered by workspaceId. Omit workspaceId to list across all workspaces. Unknown workspaceId returns {tabs:[]}, not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Optional workspace filter. Omit to list tabs across all workspaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses edge case (unknown workspaceId returns empty array) without annotations; adequate for a read-only list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and efficient coverage of behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple list tool with one optional param and no output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds edge case info beyond schema, though schema already describes parameter; adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List tabs' with optional filter, distinguishing from sibling tools like pmux_get_tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains optional workspaceId usage and behavior for unknown workspaceId, but does not compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_list_workspacesA
List purplemux workspaces: { workspaces:[{id,name,directories}] }. Start here to get workspaceId values for the other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It correctly identifies a read-only list operation with no side effects. However, it does not mention authentication requirements or performance characteristics, but for a simple listing tool, the transparency is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first describes output structure, second gives usage guidance. No superfluous words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description explicitly reveals return format (workspaces with id, name, directories) and explains importance for other tools. Complete for a simple listing tool with clear context among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no parameters (0 params), so description cannot add parameter semantics. Baseline of 4 is appropriate per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List purplemux workspaces' with specific verb and resource, and explicitly says it provides workspaceId for other tools, distinguishing it among siblings. Purpose is immediately clear and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Start here to get workspaceId values for the other tools,' providing clear guidance that this is the entry point. Lacks explicit alternatives or when-not-to-use, but the role as first step is well communicated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_send_inputA
Low-level fallback for manual tab input; for agent orchestration prefer pmux_agent_* tools. Send text to a tab. The server AUTO-SUBMITS (delivers as a bracketed paste then presses Enter) — do NOT append a newline to submit. Exactly one trailing '\n' is stripped from content; other whitespace is preserved. Returns { status:"sent" }. 409 'Tab session is not running' if the tmux session is dead.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| content | Yes | Exact text to deliver. The server auto-submits (presses Enter) — do NOT add a trailing newline; one trailing '\n' is stripped for you. | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full responsibility. It discloses server auto-submits as bracketed paste then Enter, exactly one trailing newline is stripped, returns {status:'sent'}, and 409 error when tmux session is dead. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus error note. Front-loaded with purpose and alternative guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but describes return value and error condition. All three parameters explained with behavioral context. Complete for a simple input tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. Description adds context for content (reiterates trimming of one newline and auto-submit) and references origin for tabId and workspaceId. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends text to a tab (specific verb+resource) and distinguishes from sibling tools by calling it a low-level fallback and recommending pmux_agent_* tools for orchestration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to prefer alternatives ('for agent orchestration prefer pmux_agent_* tools') and warns not to append a newline, with detailed auto-submit behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pmux_tab_statusA
Get tab runtime status. NOTE: for web-browser tabs alive:false is NORMAL (they are Electron webviews, not tmux) — probe health via the browser tools instead. claudeSessionId is a legacy alias of agentSessionId (same value).
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Target tab id (from pmux_list_tabs / pmux_create_tab). | |
| workspaceId | Yes | Target workspace id (from pmux_list_workspaces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It adds behavioral context (alive:false is normal, legacy alias) but does not cover side effects, auth requirements, rate limits, or error conditions. It provides some transparency but not comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with the core purpose. Every sentence adds value, with no waste. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lacks information about return values. It provides some special notes but is incomplete regarding what the tool outputs, which is important for a status tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no new meaning to the parameters beyond what the schema already provides. The note about claudeSessionId is not related to input parameters and may be confusing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get tab runtime status', which is a specific verb and resource. It adds context about web-browser tabs and a legacy alias, distinguishing it from similar tools like pmux_get_tab by focusing on runtime status. However, it does not explicitly differentiate from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides mild usage guidance by noting that alive:false is normal for web-browser tabs and suggesting to use browser tools for health checks. It does not explicitly state when to use this tool versus alternatives like pmux_get_tab or pmux_list_tabs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
23 tool updates
v0.1.0- First observed
pmux_agent_capture - First observed
pmux_agent_send - First observed
pmux_agent_start - First observed
pmux_agent_status - First observed
pmux_agent_turn - First observed
pmux_agent_wait_ready - First observed
pmux_api_guide - First observed
pmux_browser_console - First observed
pmux_browser_eval - First observed
pmux_browser_network - First observed
pmux_browser_network_body - First observed
pmux_browser_screenshot - First observed
pmux_browser_url - First observed
pmux_capture_pane - First observed
pmux_close_tab - First observed
pmux_connection_info - First observed
pmux_create_tab - First observed
pmux_get_tab - First observed
pmux_guide - First observed
pmux_list_tabs - First observed
pmux_list_workspaces - First observed
pmux_send_input - First observed
pmux_tab_status
TDQS
Tools are clearly described with explicit guidance on primary vs fallback usage, reducing ambiguity. However, some overlap exists between pmux_agent_turn and the manual send+capture pattern, which could still cause misselection.
All tools follow the consistent pattern 'pmux_<category>_<action>', with clear prefixes for agent, browser, and tab operations. No mixing of conventions.
23 tools is slightly above the typical 3-15 range but still well-scoped for a server covering agent orchestration, browser control, and tab management. Each tool has a distinct purpose.
Agent lifecycle is well-covered (start, send, capture, status, turn, wait_ready). Browser tools lack a navigate action, but the set is otherwise comprehensive. Minor gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Live SEO workflow tools for Claude Code, Codex, and AI agents.
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage local tmux sessions, including creating and controlling sessions, windows, and panes, sending commands, and capturing terminal output.1617Do What The F*ck You Want To Public
- FlicenseNot gradedqualityDmaintenanceEnables Claude to execute commands and manage directory-aware panes within tmux sessions for a shared terminal experience. It features smart output capture, interactive prompt detection, and background task management.2-
- AlicenseNot gradedqualityDmaintenanceEnables Claude to control tmux sessions, manage windows and panes, and search/extract text from terminal output.2MIT
- FlicenseNot gradedqualityDmaintenanceGives Claude Code terminal control and multi-agent coordination through tmux sessions.4-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yoway030/purplemux-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server