MCP Server that exposes an `ask_codex` tool to delegate coding tasks to OpenAI Codex CLI running on a remote Mac via SSH over Tailscale.
Single tool 'ask_codex' has a complete input schema with 4 parameters (task, context, resume_session_id, workdir), all with type definitions and descriptions. Description is 287 chars, within the 10-1024 baseline. However, output schema is not documented, the tool returns (response_text, session_id) but this is not declared in the tool definition visible in the code. Parameter descriptions are adequate but lack format constraints (e.g., no guidance on workdir format, no enum for sandbox modes). Error handling is minimal, no recovery guidance for SSH failures, timeouts, or Codex CLI errors. The tool performs a single, well-defined action (delegate to Codex), but lacks production-grade error classification and user-fixable guidance.
Delegate a coding task to OpenAI Codex CLI running on a remote Mac via SSH. Full Codex agent with Mac filesystem access, can write, run, and debug code. Returns Codex's response plus a session_id, pass session_id back as resume_session_id to continue the same conversation across calls.
Output schema not documented. Tool returns (response_text, session_id) but the types.Tool definition does not declare a return schema. LLMs cannot plan downstream operations or extract fields reliably.
No error classification or recovery guidance. SSH timeouts, Codex CLI failures, and authentication errors are not handled with actionable messages. LLMs receive raw errors and cannot self-correct.
Parameter 'workdir' lacks format constraints. Description says 'Optional absolute working directory on the remote Mac' but does not specify valid path format, length limits, or examples of valid values.
Sandbox mode not exposed as enum. CODEX_BRIDGE_SANDBOX env var accepts 'read-only' or 'workspace-write' but the tool parameter does not declare these as an enum, forcing LLMs to guess valid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Session resumption semantics unclear. 'resume_session_id' parameter description does not explain what state is preserved, whether the session expires, or how to detect a stale session ID.