Skip to main content
Glama

decide_pending_action

Destructive

Approve or reject one AI action parked for a human decision (the twin of ankra chat actions confirm|reject), or every action of one batch at once by its batch_id (the actions one session parked together, shown beside each action by list_pending_actions), for MCP clients acting on behalf of an organisation admin. Only organisation admins, and the policy's designated approvers when it names any, may decide; approving resumes the session that proposed the action and executes the change it parked, rejecting tells it not to. Read the action with list_pending_actions first and say plainly what approving will change. Refused once the action is already decided or expired. Over MCP or any API token the decision needs a token whose scopes name ai_actions.approve: mcp:write alone is refused (error_code AI_ACTION_APPROVAL_NEEDS_HUMAN_PERMISSION). On a protected target (a stack under an enabled backup policy, or a production cluster) the person who configured the remediation policy, or whose identity the proposing lane runs as, cannot approve; another admin must (error_code AI_ACTION_SELF_APPROVAL_ON_PROTECTED_TARGET); that self-approval rule never restricts rejecting. Not offered in chat: there, the parked action's own card is the decision.

Input Schema

NameRequiredDescriptionDefault
batch_idNoThe batch id (UUID) from list_pending_actions, to decide every live action of the batch at once. Name this or action_id, not both.
decisionYesApprove runs the parked change; reject discards it.
action_idNoThe pending action id (UUID) from list_pending_actions. Name this or batch_id, not both.
action_idsNoWith batch_id and decision approve: the action ids (UUIDs) to approve; the batch's other live actions are rejected. Omit to approve them all. Not allowed with reject, which settles the whole batch.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / action_id / description
      Previous value: -"The pending action id (UUID) from list_pending_actions."New value: +"The pending action id (UUID) from list_pending_actions. Name this or batch_id, not both."
    • addedInput schema / properties / action_ids
      Added value: +{
      +  "description": "With batch_id and decision approve: the action ids (UUIDs) to approve; the batch's other live actions are rejected. Omit to approve them all. Not allowed with reject, which settles the whole batch.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / batch_id
      Added value: +{
      +  "description": "The batch id (UUID) from list_pending_actions, to decide every live action of the batch at once. Name this or action_id, not both.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "action_id",
      -  "decision"
      -]New value: +[
      +  "decision"
      +]
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only declare the destruction/idempotency profile; the description goes well beyond them with the auth scope requirement (ai_actions.approve, not mcp:write), the AI_ACTION_APPROVAL_NEEDS_HUMAN_PERMISSION and AI_ACTION_SELF_APPROVAL_ON_PROTECTED_TARGET error codes, the self-approval restriction on protected targets, and the expiry/already-decided refusal. It explains what approving actually does (resumes the session and executes the parked change).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose in the opening clause, and every sentence carries operative content (auth, errors, self-approval, chat exclusion). It is a dense single paragraph with several parenthetical asides, so it is longer than strictly necessary but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers what happens on approve vs reject, the auth and permission model, refusal conditions, the protected-target exception, and the chat alternative. For a high-stakes decision tool with four parameters, nothing needed to invoke it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by defining what a batch is (the actions one session parked together, shown beside each action) and clarifying the single-vs-batch routing, though per-parameter details like the action_ids/reject interaction largely restate the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (approve/reject) on a specific resource (an AI action parked for human decision) and explicitly scopes it to single-action vs whole-batch modes. It names the sibling list_pending_actions as the way to read the action and distinguishes itself from the in-chat card, so an agent can separate it from neighbours without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use: read with list_pending_actions first, then decide, and say plainly what approving will change. It names the alternative (the parked action's own card in chat) and the exclusion (not offered in chat), plus the precondition that only org admins or designated approvers may decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources