Circus MCP has 6 tools with explicit schemas and descriptions visible in the source code. However, the server suffers from several critical definition quality issues that prevent it from scoring higher. Tool descriptions are extremely terse (7-20 characters), providing minimal context for LLM selection. Parameters are present with type definitions but lack comprehensive descriptions explaining constraints, formats, or expected ranges. Output schemas are completely undocumented, callers have no visibility into what fields are returned or their structure. Error handling is minimal, with no guidance on recovery strategies. The tools themselves are well-named with clear verb-noun patterns (add_process, start_process, stop_process, restart_process, list_processes, get_process_status), which is a strength. However, the extreme brevity of descriptions (e.g., 'Add a new process to Circus', 'Start a process', 'Stop a process') falls well below the 50-200 character guideline for production-grade tools and provides insufficient context for reliable LLM reasoning about when and why to call each tool.
Add a new process to Circus
Get process status
List all processes
Restart a process
Start a process
Stop a process
Tool descriptions are critically underdeveloped (7-20 characters). The 'Start a process' description provides no context for when to use this vs restart_process, what happens on retry, or how to handle failures. Descriptions must be 50-200 characters and explain WHAT the tool does, WHEN to use it, and any prerequisites.
Output schemas are completely undocumented. The source shows TextContent return type but no structured output definition. LLMs cannot know what fields are in the response, breaking tool composition (e.g., if add_process returns a process_id, downstream tools cannot reference it reliably).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Error handling returns generic TextContent without recovery guidance. 'Failed to connect to Circus daemon' and 'Unknown tool: {name}' are raw errors with no actionable next steps. Should categorize errors as retryable/user-fixable/fatal and suggest corrective actions.
Parameter descriptions are minimal or missing. 'working_dir' has description 'Working directory' but no guidance on absolute vs relative paths, validation rules, or defaults. 'numprocesses' has no description of valid range (1 - 1000? 1 - 100?). LLMs cannot reliably construct valid input.
No enum constraints on process names or commands. 'command' parameter accepts free-form strings with no validation hints. Should document format, length limits, or shell quoting rules. Current definition invites hallucinated invalid commands.
list_processes lacks pagination parameters. If Circus manages hundreds of processes, returning all at once blows context window. Should support limit, offset, and return total_count. Current description 'List all processes' is misleading if results are capped.
No idempotence guarantees documented. If an agent retries start_process on failure, does it fail safely or create duplicate process instances? add_process should clarify whether repeated calls with same name are idempotent or fail with 'already exists'.
Tool descriptions do not indicate mutability/side effects. Descriptions should explicitly state which tools modify state (add_process, start_process, stop_process, restart_process) vs read-only (list_processes, get_process_status) so LLMs understand retry safety and composition constraints.