Skip to main content
Glama

Approve an access request

requests_approve
DestructiveIdempotent

Approve a pending in-scope access request with a chosen duration, enforcing role, scope, and expiry rules while preserving existing grants.

Instructions

Current portal owner (owner or people-manager role): approve one in-scope request within the scope maximum and binding expiry and select its duration in one action. Uses persisted member/guest lifetime policy; only the owner role can create an unknown person, while people-manager requires an existing person. Preserves their other app grants and never revives a revoked person. Exact retries replay; different or stale decisions conflict. No invitations or remote tailnet calls.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>",
      "for": "<for>"
    },
    "name": "requests_approve"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYes
forYesRelative lifetime (descending unique units w,d,h,m,s,ms,us,ns) or until <RFC3339|YYYY-MM-DD|YYYY-MM-DDTHH:MM>. Local unless offset given; DST gaps/folds require an offset. Minimum 1h. Presets: 1h, 8h, 24h, 3d, 7d. New grants default to 24h; update omission preserves deadlines. Never requires ack_never for members and device-invited guests; finite guest grants retain the configured maximum.
ack_neverNo

Output Schema

NameRequiredDescriptionDefault
changedYes
requestYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.3.0
    • changedInput schema / properties / for / description
      Previous value: -"Relative lifetime (descending unique units w,d,h,m,s,ms,us,ns) or until <RFC3339|YYYY-MM-DD|YYYY-MM-DDTHH:MM>. Local unless offset given; DST gaps/folds require an offset. Minimum 1h. Presets: 1h, 8h, 24h, 3d, 7d. New grants default to 24h; update omission preserves deadlines. Never requires ack_never and a tailnet-member login; device-invited guests have the configured public maximum."New value: +"Relative lifetime (descending unique units w,d,h,m,s,ms,us,ns) or until <RFC3339|YYYY-MM-DD|YYYY-MM-DDTHH:MM>. Local unless offset given; DST gaps/folds require an offset. Minimum 1h. Presets: 1h, 8h, 24h, 3d, 7d. New grants default to 24h; update omission preserves deadlines. Never requires ack_never for members and device-invited guests; finite guest grants retain the configured maximum."
  2. First observedv0.1.0

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint and idempotentHint, but the description adds substantial context beyond them: exact retries replay while stale or differing decisions conflict, other app grants are preserved, a revoked person is never revived, and persisted member/guest lifetime policy applies. The role-based privilege rules and the guest maximum retention rule are behavioral facts that exist nowhere in the structured fields.

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?

The actor, action and scope are front-loaded, and the remaining clauses each carry distinct information (idempotency semantics, grant preservation, out-of-scope work). It is dense and clause-heavy rather than wasteful, though a few packed sentences could be split for scanability.

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?

For a destructive, role-gated mutation this is nearly complete: authorization rules, scope ceiling, idempotency and conflict behavior, and explicit non-goals are all covered, and an output schema means return values need no prose. The remaining gap is operational plumbing — where the request id comes from and what ack_never actually signals.

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

Parameters3/5

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

Schema coverage is only 33%, so the description has to compensate. It does help on the lifetime parameter ('within the scope maximum and binding expiry', 'select its duration in one action') and touches ack_never ('never requires ack_never for members and device-invited guests'), but the required 'id' parameter is never explained — the description gives no hint that it is a request identifier obtained elsewhere — and ack_never's actual effect remains unstated.

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

Purpose4/5

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

The description opens with a specific actor, verb and resource: 'Current portal owner ... approve one in-scope request', plus the scope and duration constraints that distinguish a grant decision from other mutations. It never names the directly competing siblings (requests_deny, requests_list), so the differentiation is implied by the verb rather than stated.

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

Usage Guidelines3/5

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

It clearly sets preconditions for use: caller must be the portal owner or people-manager, the request must be in scope, and the role determines whether an unknown person can be created. However, it never routes the agent to requests_deny for refusals or requests_list for discovering the request id, and it states exclusions ('no invitations or remote tailnet calls') without saying which tool does handle those.

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