Skip to main content
Glama

Mint Access Link

mint_link

Generate an additional access link for an existing qURL resource so a second recipient or replacement link can be issued without creating a new qURL. Set expiration, one-time use, or policy as needed.

Instructions

Mint a fresh access link for an existing qURL resource — same one-shot display semantics as create_qurl.qurl_link. Use this to issue additional access links to a resource without creating a brand-new qURL (e.g. a second recipient, a replacement after the original was lost). Use create_qurl instead when you want a brand-new resource with its own target_url and policy. Use update_qurl when you only want to change expiration/tags/description on the existing resource. Accepts resource public keys, CRIDs, legacy r_ IDs, and q_ display IDs. Constraints: expires_in and expires_at are mutually exclusive (handler returns an isError: true content block before any API call if both are set). If neither expiry field is specified, the API defaults to 24 hours from now. Output: the new qurl_link is shown ONCE — no subsequent call returns it. Capture qurl_id if you need to correlate future access events or update this specific token.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
labelNoHuman-readable label identifying who this link is for (max 500 chars)
expires_atNoAbsolute expiration timestamp (RFC 3339). Mutually exclusive with expires_in
expires_inNoRelative duration until expiration (e.g., "5m", "24h", "7d"). Mutually exclusive with expires_at
resource_idYesThe resource public key, CRID, legacy r_ ID, or qURL display ID (q_ prefix) to mint a new access link for. If a q_ ID is passed, the API resolves it to the parent resource automatically.
max_sessionsNoMaximum concurrent sessions for this qURL token (0 = unlimited, max 1000)
one_time_useNoWhether this link can only be used once
access_policyNoAccess control policy for this link
session_durationNoHow long access lasts after clicking (e.g., "1h"). Rejected if it exceeds the parent resource's session-duration cap.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeNoResource type echoed from the underlying resource
qurl_idYesDisplay-friendly qURL ID (q_ prefix) for the minted token
qurl_linkYesNewly minted access link with one-shot display semantics, like create_qurl
expires_atNo
branded_domainNoBare branded hostname for anchor text when the resource has a usable custom domain
email_deliveryNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed38 schema fields changedv0.2.1
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / access_policy / additionalProperties
      Removed value: -false
    • removedInput schema / properties / access_policy / properties / ai_agent_policy / additionalProperties
      Removed value: -false
    • changedInput schema / properties / access_policy / properties / ai_agent_policy / properties / allow_categories / description
      Previous value: -"AI agent categories to permit (all others blocked)"New value: +"AI agent categories to permit (all others blocked; max 20 entries, 128 chars each)"
    • addedInput schema / properties / access_policy / properties / ai_agent_policy / properties / allow_categories / items / maxLength
      Added value: +128
    • addedInput schema / properties / access_policy / properties / ai_agent_policy / properties / allow_categories / items / minLength
      Added value: +1
    • addedInput schema / properties / access_policy / properties / ai_agent_policy / properties / allow_categories / maxItems
      Added value: +20
    • changedInput schema / properties / access_policy / properties / ai_agent_policy / properties / deny_categories / description
      Previous value: -"AI agent categories to block (e.g., gptbot, commoncrawl)"New value: +"AI agent categories to block (e.g., gptbot, commoncrawl; max 20 entries, 128 chars each)"
    • addedInput schema / properties / access_policy / properties / ai_agent_policy / properties / deny_categories / items / maxLength
      Added value: +128
    • addedInput schema / properties / access_policy / properties / ai_agent_policy / properties / deny_categories / items / minLength
      Added value: +1
    • addedInput schema / properties / access_policy / properties / ai_agent_policy / properties / deny_categories / maxItems
      Added value: +20
    • changedInput schema / properties / access_policy / properties / geo_allowlist / description
      Previous value: -"Allowed country codes (ISO 3166-1 alpha-2)"New value: +"Allowed country codes (ISO 3166-1 alpha-2; max 50 entries, 8 chars each)"
    • addedInput schema / properties / access_policy / properties / geo_allowlist / items / maxLength
      Added value: +8
    • addedInput schema / properties / access_policy / properties / geo_allowlist / items / minLength
      Added value: +1
    • addedInput schema / properties / access_policy / properties / geo_allowlist / maxItems
      Added value: +50
    • changedInput schema / properties / access_policy / properties / geo_denylist / description
      Previous value: -"Denied country codes (ISO 3166-1 alpha-2)"New value: +"Denied country codes (ISO 3166-1 alpha-2; max 50 entries, 8 chars each)"
    • addedInput schema / properties / access_policy / properties / geo_denylist / items / maxLength
      Added value: +8
    • addedInput schema / properties / access_policy / properties / geo_denylist / items / minLength
      Added value: +1
    • addedInput schema / properties / access_policy / properties / geo_denylist / maxItems
      Added value: +50
    • changedInput schema / properties / access_policy / properties / ip_allowlist / description
      Previous value: -"Allowed IP addresses or CIDR ranges"New value: +"Allowed IP addresses or CIDR ranges (max 100 entries, 64 chars each)"
    • addedInput schema / properties / access_policy / properties / ip_allowlist / items / maxLength
      Added value: +64
    • addedInput schema / properties / access_policy / properties / ip_allowlist / items / minLength
      Added value: +1
    • addedInput schema / properties / access_policy / properties / ip_allowlist / maxItems
      Added value: +100
    • changedInput schema / properties / access_policy / properties / ip_denylist / description
      Previous value: -"Denied IP addresses or CIDR ranges"New value: +"Denied IP addresses or CIDR ranges (max 100 entries, 64 chars each)"
    • addedInput schema / properties / access_policy / properties / ip_denylist / items / maxLength
      Added value: +64
    • addedInput schema / properties / access_policy / properties / ip_denylist / items / minLength
      Added value: +1
    • addedInput schema / properties / access_policy / properties / ip_denylist / maxItems
      Added value: +100
    • changedInput schema / properties / access_policy / properties / user_agent_allow_regex / description
      Previous value: -"Regex to allow matching user agents"New value: +"Regex to allow matching user agents (max 256 chars)"
    • addedInput schema / properties / access_policy / properties / user_agent_allow_regex / maxLength
      Added value: +256
    • changedInput schema / properties / access_policy / properties / user_agent_deny_regex / description
      Previous value: -"Regex to deny matching user agents"New value: +"Regex to deny matching user agents (max 256 chars)"
    • addedInput schema / properties / access_policy / properties / user_agent_deny_regex / maxLength
      Added value: +256
    • addedInput schema / properties / expires_at / pattern
      Added value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • changedInput schema / properties / max_sessions / description
      Previous value: -"Maximum concurrent sessions (0 = unlimited, max 1000)"New value: +"Maximum concurrent sessions for this qURL token (0 = unlimited, max 1000)"
    • changedInput schema / properties / resource_id / description
      Previous value: -"The resource ID (r_ prefix) or qURL display ID (q_ prefix) to mint a new access link for. If a q_ ID is passed, the API resolves it to the parent resource automatically."New value: +"The resource public key, CRID, legacy r_ ID, or qURL display ID (q_ prefix) to mint a new access link for. If a q_ ID is passed, the API resolves it to the parent resource automatically."
    • removedInput schema / properties / resource_id / minLength
      Removed value: -1
    • addedInput schema / properties / resource_id / pattern
      Added value: +"(?:^(r_[a-z0-9_-]{11}|(?:[A-Za-z0-9_-]{4}){27,53}|(?:[A-Za-z0-9_-]{4}){27,53}[A-Za-z0-9_-]{2}|(?:[A-Za-z0-9_-]{4}){26,52}[A-Za-z0-9_-]{3}|[a-z2-7]{47}|[a-z2-7]{60})$)|(?:^q_[0-9a-f]{11}$)"
    • changedInput schema / properties / session_duration / description
      Previous value: -"How long access lasts after clicking (e.g., \"1h\")"New value: +"How long access lasts after clicking (e.g., \"1h\"). Rejected if it exceeds the parent resource's session-duration cap."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "branded_domain": {
      +      "description": "Bare branded hostname for anchor text when the resource has a usable custom domain",
      +      "type": "string"
      +    },
      +    "email_delivery": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "attempted": {
      +          "type": "boolean"
      +        },
      +        "enabled": {
      +          "type": "boolean"
      +        },
      +        "failed": {
      +          "type": "number"
      +        },
      +        "recipients": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "results": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "email": {
      +                "type": "string"
      +              },
      +              "error": {
      +                "type": "string"
      +              },
      +              "message_id": {
      +                "type": "string"
      +              },
      +              "skipped": {
      +                "type": "boolean"
      +              },
      +              "success": {
      +                "type": "boolean"
      +              }
      +            },
      +            "required": [
      +              "email",
      +              "success",
      +              "skipped"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "sent": {
      +          "type": "number"
      +        },
      +        "skipped_reason": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "attempted",
      +        "enabled",
      +        "recipients",
      +        "sent",
      +        "failed",
      +        "results"
      +      ],
      +      "type": "object"
      +    },
      +    "expires_at": {
      +      "type": "string"
      +    },
      +    "qurl_id": {
      +      "description": "Display-friendly qURL ID (q_ prefix) for the minted token",
      +      "type": "string"
      +    },
      +    "qurl_link": {
      +      "description": "Newly minted access link with one-shot display semantics, like create_qurl",
      +      "type": "string"
      +    },
      +    "type": {
      +      "description": "Resource type echoed from the underlying resource",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "qurl_id",
      +    "qurl_link"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.2.0

TDQS

A5/5.0
Behavior5/5

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

It discloses behavior not visible from annotations: one-shot display semantics, mutual exclusivity of expires_in and expires_at with an isError: true result, the 24-hour default when neither is set, and the need to capture qurl_id because the link is not returned again. These details extend the annotations without contradicting them.

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?

The description is longer than average but every clause earns its place, and bold labels like 'Constraints:' and 'Output:' keep it scannable. It front-loads the core purpose before alternatives and edge conditions, making good use of structure given the tool's complexity.

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 8 parameters, nested access_policy objects, and an output schema, the description covers what an agent needs: when to call the tool, which ID forms are accepted, expiry edge cases, and what to capture after a successful call. The presence of an output schema means return-value details do not need to be repeated in prose.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds decisive parameter-level meaning: accepted resource ID forms including q_ resolution, expiry mutual exclusivity and defaulting behavior, and the one-shot output implication for qurl_id. These are cross-parameter constraints the schema alone does not fully express.

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?

The description uses the specific verb 'mint' with a clear resource: a fresh access link attached to an existing qURL resource. It immediately differentiates from siblings by stating it shares one-shot display semantics with create_qurl.qurl_link but does not create a brand-new resource, and it names update_qurl as a separate alternative.

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?

Explicitly states when to use mint_link (issue additional access links for a second recipient or replacement) and when not to: create_qurl for a brand-new resource, and update_qurl for changing expiration/tags/description on the existing resource. This gives an agent a clear, actionable decision rule.

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