MCP server that delegates coding tasks to opencode agents, monitors their sessions, and handles permission/clarification requests
16 tools with consistent naming (handoff_* prefix) and descriptions present. However, input schemas are largely inferred from parameter lists rather than explicitly visible in the source. Parameter descriptions exist but lack detail on constraints, formats, and valid ranges. No output schemas documented. Error handling guidance absent. Tool descriptions average ~150 chars (within baseline 194), but lack WHEN-to-use context and dependency hints. Missing enum constraints for categorical parameters (e.g., model, agent, status). No documented return types or field mappings for chaining.
List opencode agents available for a directory/workspace.
Cancel active execution for a session. Idempotent when already terminal.
Poll session progress. Omits workspace unless include_workspace=true. final_text is terminal-only (default 1200 chars).
Remove an executor-owned workspace (worktree or greenfield). Clean owned workspaces remove by default; force=true discards changes/commits. Idempotent.
Create a session; returns session_id for handoff_fire. Uses configured defaults unless overridden. Auto isolation: worktree for clean Git, else direct. create_directory=true creates a missing exact path as greenfield (parent must exist; existing paths refused).
Bounded tracked-file Git diff vs session start (or empty tree for greenfield). Untracked names: handoff_workspace.
Output schemas not documented. Tools like handoff_check, handoff_execute, handoff_models return complex nested structures (status, session_id, final_text, permissions, questions, model lists) but no schema is visible in source. LLMs cannot plan downstream calls or extract required fields without documented return types.
Parameter constraints missing. 'timeout' (handoff_execute) lacks min/max bounds; 'limit' (handoff_models) documented as 'default 50; -1 unlimited; 0=default' but no type constraint visible; 'filter' accepts 'substring, glob, or regex' but no enum or pattern constraint. LLMs cannot validate inputs without explicit constraints.
Error handling guidance absent. No tool description explains what to do on failure (e.g., 'If session not found, call handoff_sessions() first'). No categorization of errors as retryable vs user-fixable. Agents will not know how to recover from failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
Create session, submit prompt, wait (default 300s) or async=true for immediate return after submit. Wait expiry returns status=running with session_id for handoff_check (not an error). Profiles add server-owned suffixes without replacing the task. idempotency_key is submission-only after session create — not whole-call retry-idempotent.
Submit a prompt to an existing session and return immediately. Requires session_id from handoff_create_session. Poll with handoff_check.
Check connectivity to the configured opencode HTTP server.
List providers and optionally models. Each model has canonical_model (provider_id/model_id, embedded slashes kept) for handoff_create_session.model or execute model. Gateway vs direct are distinct exact selectors (e.g. vercel/xai/grok-4.5 vs xai/grok-4.5). filter: substring, glob, or regex; limit caps models (default 50).
Reply to a pending permission request. See handoff_check for pending permissions.
Reply to or reject a pending clarification question. See handoff_check for pending questions.
Compact workspace review: changed files, commits, diff stat, verification (no paths/metadata/diffs).
List opencode sessions visible in a directory/workspace.
Run executable+argv verification checks in a completed session workspace and record pass/fail. No shell expansion.
Inspect the durable workspace bound to a session: changed files, commits, diff stats, verification. Greenfield is available before Git init and uses the empty tree after history exists.
Descriptions lack WHEN-to-use context and dependency hints. E.g., handoff_fire says 'Submit a prompt to an existing session' but does not explain when to use it vs handoff_execute, or that handoff_create_session must be called first. Agents cannot distinguish between similar tools.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in source. Flags are set (mcputil.ReadOnly, mcputil.Destructive) but not exposed as MCP tool annotations. Clients cannot infer safety properties without explicit annotations.