MCP server for Cycles — runtime budget authority for autonomous agents
Cycles MCP server has well-structured tool definitions with consistent naming (verb_noun pattern: cycles_reserve, cycles_commit, etc.) and complete parameter descriptions. All 9 tools have descriptions (avg ~80 chars) and input schemas with typed parameters. However, output schemas are not documented in the visible code, parameter constraints lack enums/ranges, and error handling guidance is absent. Tool descriptions are functional but generic, they state WHAT but not WHEN or WHY to use each tool. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Idempotency keys are present across write operations, which is good practice.
Check current budget balance for a scope
Commit actual cost against a reservation
Create a custom event for budget tracking
Get a decision on whether an action is allowed within budget
Extend the TTL of an active reservation
Get details of a specific reservation
List active reservations for a scope
Output schemas not documented. Tool descriptions state what each tool does but do not specify the structure of returned data. LLMs cannot plan downstream tool calls or extract fields without knowing response structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY, WRITE, REVERSIBLE, WRITE). Tool annotations enable LLMs to reason about safety and retry semantics.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Release a reservation without committing cost
Reserve runtime budget for an action with an estimated cost
Parameter constraints missing. 'status' in cycles_list_reservations lists allowed values in description ('ACTIVE, COMMITTED, RELEASED, EXPIRED') but not as enum. 'ttlMs' and 'extendByMs' lack min/max bounds. Enums and ranges prevent LLM hallucination.
Descriptions lack WHEN/WHY guidance. 'Reserve runtime budget for an action with an estimated cost' states WHAT but not when to call cycles_reserve vs cycles_decide, or how they differ. LLMs cannot disambiguate similar tools.
No error handling guidance. Tool descriptions do not explain what errors are possible, when they are retryable, or what the LLM should do next. A failed cycles_reserve call leaves the agent without recovery direction.