Skip to main content
Glama

Grant or ask for access

access_grant
Destructive

Give access, ask for it, or decide on it. A grant changes who can read the content and cannot be unread, so every action here is treated as consequential. A request goes to the lowest common ancestor of you and the data's owner and climbs until it reaches someone who can grant it. Actions — share: grant members of this organization, by email or by member id from browse action=people, viewer or editor (or manager) on a folder or document; two calls, the first previews who would be granted and returns a confirm_token, and an address or id that is no member is refused. The second is all or nothing: if it fails partway, nobody was granted. request: ask for a role on something (location or node, role, reason); wait=true with a deadline registers a wait for the decision. approve: approve a request routed to you (request_id, note). decline: decline a request routed to you (request_id, note). declassify: release what your session has read so your next write is not labeled with it (sources), or one label on a document (location or node, source). hold: place a legal hold so nothing under it can be erased or purged (location or node, or identity; reason). share_out: offer a folder or document to a person in another organization by email (location or node, to, role); an agent below a person's own client proposes instead, and that person decides in the console. An address with no account is invited. The answer says whether they were emailed and carries recipient_link. accept_share: accept an offer made to you, a person (share_id), into the organization this connection is in; the answer names it. organization, if given, must be that one: a person in several picks another in the console. It lands under its own name at the top level, or inside location: a folder only you can see (refused, with the reasons, anywhere else). Only you and your agents read it. decline_share: decline an offer made to you (share_id). decide_share: a person decides a proposal (share_id, approve); refused to every AI client. set_settings: set whether editors may share a folder or document (location or node, editors_can_share: true, false, or null to inherit); owner or manager only.

Input Schema

NameRequiredDescriptionDefault
toNoshare_out: the recipient's email
nodeNorequest, declassify, hold, share_out, set_settings: the document or folder, by id instead of location. A console link (`/d/<Name-Slug>-<32 hex>`, whole or just its id) is accepted too.
noteNoapprove, decline: a note to the requester
roleNoshare: viewer opens it; editor also edits; manager can also approve access requests for it, share it and grant within it. Sharing needs manager on this folder or one above it, or editor there to share as viewer or editor, unless its owner turned editor sharing off (access_grant action=set_settings). reader, writer and approver are deprecated aliases for viewer, editor and manager · request, share_out: default viewer. editor can also edit; manager (request only) can also share it, grant within it and decide requests for it. An approved request gives the role to everyone you work under who lacks it, too. Asking for a role you already hold, or one below it (manager implies editor, editor implies viewer), is refused. reader, writer and approver are deprecated aliases for viewer, editor and manager
seatNothe seat token identity_write action=take_seat gave you; pass it on every call while you drive that agent
waitNorequest: also register a wait for the decision
actionYeswhat to do; each action takes the arguments its line names
emailsNoshare: email addresses to share with; give emails, members or both (at most 20 recipients per call)
reasonNorequest, hold, share_out: why you are doing this, in one line (at most 200 characters); recorded with the event and exported with the log
sourceNodeclassify: the label's source, a path or node id. A console link (`/d/<Name-Slug>-<32 hex>`, whole or just its id) is accepted too.
approveNodecide_share: true to offer it, false to decline
membersNoshare: member ids from browse action=people, for a person whose address you do not have; the preview names who each one is
sourcesNodeclassify: which read sources to release (paths or node ids); default all. A console link (`/d/<Name-Slug>-<32 hex>`, whole or just its id) is accepted too.
deadlineNorequest: with wait: when to stop waiting (ISO)
identityNohold: an identity id, to hold its drafts
locationNoshare: full path from the workspace root, e.g. "handbook/vendor/acme.md" (as printed by browse action=documents or search). A console link (`/d/<Name-Slug>-<32 hex>`, whole or just its id) is accepted too. · request, declassify, hold, share_out, accept_share, set_settings: the document or folder, by path; accept_share: the folder to put it in, only you can see (default the top level)
share_idNoaccept_share, decline_share, decide_share: the share's id, from access_read action=offers, shared or proposals
acting_asNoan agent identity below you (its id, from identity_write action=spawn) to make this one call as, with that agent's narrower access; for a helper whose session signs in as its person
request_idNoapprove, decline: the request's id, from access_read action=requests or my_requests
scope_typeNoshare: folder (the default) shares everything beneath the path; document shares that one file. A pasted link's kind is used when omitted.
continuationNorequest: with wait: a note to your future self for when it resolves
organizationNoaccept_share: the organization to put an accepted share in, by id or name: only the one this connection is in; omit for that one
confirm_tokenNoshare: from the first call. Calling without it PREVIEWS: nothing is shared.
idempotency_keyNoAny unique string you choose for this write, e.g. a UUID. If you retry the call with the same key and the same arguments, the first answer is returned and nothing is done twice. Reusing a key for a different request is refused. Keys are kept 24 hours.
editors_can_shareNoset_settings: true lets editors share here, false stops them, null clears this node's own setting so it inherits

Output Schema

NameRequiredDescriptionDefault
holdNo
textNothe answer as prose, for an action that answers in prose
waitNo
acrossNo
actionYesthe action that answered
canSeeNo
labelsNo
emailedNoshare_out when offered or invited: whether the recipient is emailed; when false, send them recipient_link
refusedNo
requestNo
requestsNo
settingsNo
invitationNo
declassifiedNo
organizationNoaccept_share: the organization it went into
recipient_linkNoshare_out: when offered, the recipient's inbox for this offer; when invited, the invitation's preview, names only. Absolute; absent when the console's public URL is not configured. It grants no access
not_emailed_reasonNoshare_out when invited: why the recipient is not emailed, when emailed is false

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. Changed1 schema field changed
    • changedInput schema / properties / scope_type / description
      Previous value: -"share: default folder, or what a pasted link names"New value: +"share: folder (the default) shares everything beneath the path; document shares that one file. A pasted link's kind is used when omitted."
  3. Changed35 schema fields changed
    • removedInput schema / properties / editors_can_share / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / editors_can_share / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • addedInput schema / properties / seat
      Added value: +{
      +  "description": "the seat token identity_write action=take_seat gave you; pass it on every call while you drive that agent",
      +  "maxLength": 64,
      +  "type": "string"
      +}
    • removedOutput schema / properties / across / items / properties / mount / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / across / items / properties / mount / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hold / properties / releasedAt / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hold / properties / releasedAt / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / labels / items / properties / declassifiedBy / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / labels / items / properties / declassifiedBy / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / labels / items / properties / derivedBy / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / labels / items / properties / derivedBy / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / labels / items / properties / location / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / labels / items / properties / location / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / request / properties / approvals / items / properties / approverDisplay / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / request / properties / approvals / items / properties / approverDisplay / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / request / properties / approvals / items / properties / approverId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / request / properties / approvals / items / properties / approverId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / request / properties / approvals / items / properties / note / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / request / properties / approvals / items / properties / note / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / request / properties / asked / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / request / properties / asked / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / request / properties / location / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / request / properties / location / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / requests / items / properties / approvals / items / properties / approverDisplay / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / requests / items / properties / approvals / items / properties / approverDisplay / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / requests / items / properties / approvals / items / properties / approverId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / requests / items / properties / approvals / items / properties / approverId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / requests / items / properties / approvals / items / properties / note / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / requests / items / properties / approvals / items / properties / note / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / requests / items / properties / asked / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / requests / items / properties / asked / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / requests / items / properties / location / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / requests / items / properties / location / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / settings / properties / inheritedFrom / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / settings / properties / inheritedFrom / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  4. Changed2 schema fields changed
    • changedInput schema / properties / emails / description
      Previous value: -"share: email addresses to share with (at most 20 per call)"New value: +"share: email addresses to share with; give emails, members or both (at most 20 recipients per call)"
    • addedInput schema / properties / members
      Added value: +{
      +  "description": "share: member ids from browse action=people, for a person whose address you do not have; the preview names who each one is",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "minItems": 1,
      +  "type": "array"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / acting_as
      Added value: +{
      +  "description": "an agent identity below you (its id, from identity_write action=spawn) to make this one call as, with that agent's narrower access; for a helper whose session signs in as its person",
      +  "type": "string"
      +}
  6. Changed2 schema fields changed
    • changedInput schema / properties / location / description
      Previous value: -"share: full path from the workspace root, e.g. \"handbook/vendor/acme.md\" (as printed by browse action=documents or search) · request, declassify, hold, share_out, accept_share, set_settings: the document or folder, by path; accept_share: the folder to put it in, only you can see (default the top level)"New value: +"share: full path from the workspace root, e.g. \"handbook/vendor/acme.md\" (as printed by browse action=documents or search). A console link (`/d/<Name-Slug>-<32 hex>`, whole or just its id) is accepted too. · request, declassify, hold, share_out, accept_share, set_settings: the document or folder, by path; accept_share: the folder to put it in, only you can see (default the top level)"
    • changedInput schema / properties / scope_type / description
      Previous value: -"share: default folder"New value: +"share: default folder, or what a pasted link names"
  7. Changed1 schema field changed
    • changedInput schema / properties / location / description
      Previous value: -"share: full path from the workspace root, e.g. \"handbook/vendor/acme.md\" (as printed by browse action=documents or search) · request, declassify, hold, share_out, set_settings: the document or folder, by path"New value: +"share: full path from the workspace root, e.g. \"handbook/vendor/acme.md\" (as printed by browse action=documents or search) · request, declassify, hold, share_out, accept_share, set_settings: the document or folder, by path; accept_share: the folder to put it in, only you can see (default the top level)"
  8. Added

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the destructive/openWorld annotations: grants are irreversible in effect ("cannot be unread"), share is two-call with a preview that changes nothing, the confirming call is all-or-nothing, request routing climbs the lowest common ancestor until it finds an approver, and declassify explains what it releases. It also discloses privilege requirements (manager or editor above the node) and which actions are denied to AI clients.

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

Conciseness3/5

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

Everything earns its place in content, but structurally it is a single long paragraph of semicolon-separated action clauses with no line breaks or headers, which makes scanning for one action costly. The irreversibility warning is front-loaded well, but the action catalog is not.

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?

For a 25-parameter, 11-action tool this is close to complete: prerequisites, refusal conditions, two-step confirm flow, routing behavior, and even return-shape notes (recipient_link, the named organization) are stated. An output schema exists so return documentation is not required, yet the extra notes do not bloat it meaningfully.

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, but the description adds cross-parameter behavior the schema cannot express: confirm_token meaning that the call without it is a preview, wait paired with deadline, approve/decline consuming request_id from access_read, and role semantics (manager implies editor). Much of the per-action argument listing does duplicate schema text, so it does not reach 5.

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?

Opens with a plain statement of the three families of work (give access, ask for it, decide on it) and then enumerates every action verb with its specific resource and effect, so an agent can map intent to action without opening the schema. It is clearly distinguishable from access_read and access_revoke, which are the read-only and removal counterparts.

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

Usage Guidelines4/5

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

Gives concrete when-to-use routing: preview-then-confirm for share, request only for roles you do not already hold, share_out when the recipient is in another organization and propose-instead when below a person's client, accept_share only into this connection's organization. It also names explicit refusals (decide_share refused to every AI client, addresses that are no member refused, non-private locations refused for accept_share). It never names the sibling access_revoke as the alternative for removing access, which keeps it from a 5.

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