Cancel prepared change
cancel_changeCancel an unexecuted proposal. Does not undo an operation already started.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_id | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | ||
| proposal_id | Yes |
cancel_changeCancel an unexecuted proposal. Does not undo an operation already started.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_id | Yes |
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | ||
| proposal_id | Yes |
Changes observed during successful MCP inspections.
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false; the description adds the important nuance that only unexecuted proposals can be cancelled, which qualifies the destructive flag. It doesn't say what happens if the proposal was already applied or doesn't exist (error vs. silent no-op), leaving a minor 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?
Two short sentences with zero filler, and the scope-limiting clause is front-loaded in the first sentence. Nothing is wasted.
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?
An output schema exists so return values needn't be described, and annotations cover the safety profile. However, for a single-param mutation the description omits the origin of proposal_id and the failure behavior for already-executed or unknown proposals, leaving it only minimally 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 0% and the single parameter proposal_id is never mentioned in the description. The schema only gives type and length bounds; the description doesn't explain what a proposal_id is or where to obtain one (presumably from get_change_status), so it fails to compensate for the coverage gap.
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?
States a specific verb+resource (cancel a proposal) and narrows scope with 'unexecuted'. It doesn't name the sibling it complements (get_change_status) for retrieving proposal IDs, but the action itself is 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?
'Does not undo an operation already started' gives an explicit when-not condition, which is the critical routing decision for a cancel tool. It stops short of naming an alternative for already-started operations, so it falls just below a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Add one secure layer between your agents and this server.