Skip to main content
Glama
Approval Gate MCP

Approval Gate MCP

request_approval

Registers a consequential action for human approval before execution and returns a request ID, letting agents gate sends, deletes, payments, or deployments on an out-of-band decision.

Instructions

Register a consequential action for human approval BEFORE performing it. Returns a request id. The action is NOT executed by this server; status 'approved' does NOT authorize anything by itself. Right before acting, call consume_approval with the same id, the exact action text and the same operation/payload if you supplied them; proceed only on ok:true. Anything else means no (fail closed).

Input Schema

NameRequiredDescriptionDefault
actionYesPrecise description of the action you intend to take, e.g. 'send email to alice@example.com with subject X'
reasonYesWhy this action is needed right now
payloadNoOptional JSON payload the action will execute (at most 32768 bytes canonical). The human reviews it; consume must present an identical payload.
operationNoOptional operation name a trusted executor must present, e.g. 'smtp.send' (A-Z a-z 0-9 . _ : / -)
ttl_secondsNoHow long the request stays valid, pending or approved (default 1 hour)
requested_byNoIdentifier of the requesting agent or workflow (self-reported, not authenticated)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.4.1
    • removedInput schema / additionalProperties
      Removed value: -false
  2. Changed7 schema fields changedv0.4.0
    • addedInput schema / properties / action / maxLength
      Added value: +8192
    • addedInput schema / properties / operation
      Added value: +{
      +  "description": "Optional operation name a trusted executor must present, e.g. 'smtp.send' (A-Z a-z 0-9 . _ : / -)",
      +  "maxLength": 128,
      +  "type": "string"
      +}
    • addedInput schema / properties / payload
      Added value: +{
      +  "description": "Optional JSON payload the action will execute (at most 32768 bytes canonical). The human reviews it; consume must present an identical payload."
      +}
    • addedInput schema / properties / reason / maxLength
      Added value: +8192
    • changedInput schema / properties / requested_by / description
      Previous value: -"Identifier of the requesting agent or workflow"New value: +"Identifier of the requesting agent or workflow (self-reported, not authenticated)"
    • addedInput schema / properties / requested_by / maxLength
      Added value: +256
    • changedInput schema / properties / ttl_seconds / description
      Previous value: -"How long the request stays pending before it expires (default 1 hour)"New value: +"How long the request stays valid, pending or approved (default 1 hour)"
  3. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

No annotations exist, so the description carries the full burden and does so: it discloses that the server does not execute the action, that an 'approved' status is not authorization, that a request id is returned, and that the system fails closed. These are exactly the non-obvious behavioral traits an agent would otherwise get wrong.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the purpose, then the return value, then the critical caveat, then the next step. No filler and the ordering matches the agent's decision sequence.

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

Completeness4/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 correctly supplies the return value (a request id). The only gaps are secondary: it does not say what happens when ttl_seconds expires or how a pending request becomes visible to a human, both of which are covered by siblings like wait_for_approval and list_pending.

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 earns above that by explaining the cross-call coupling — operation and payload supplied here must be re-presented identically at consume time — which is the parameter behavior most likely to cause silent failure. It does not add anything for ttl_seconds or requested_by, but those are self-explanatory in 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 and resource ('Register a consequential action for human approval') and immediately pins down the workflow position: BEFORE performing it. It also names the follow-up sibling consume_approval, so an agent can tell this apart from check_approval/decide_approval 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 about when to call (before a consequential action), what to do next (consume_approval with the same id, action text, operation/payload), and the decision rule ('proceed only on ok:true. Anything else means no (fail closed)'). This is the rare description that leaves nothing to inference.

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