Skip to main content
Glama

Get document download URL

clm_get_contract_document_download_url
Read-onlyIdempotent

Get a short-lived original/available preview-PDF URL; default: current primary. Supports prior/draft/related versions.

Input Schema

NameRequiredDescriptionDefault
idYesID
fileIdNoFile version ID; omit for current primary
variantNoRetained original or available preview PDForiginal

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / fileId / description
      Previous value: -"Contract file version identifier. Omit to download the current primary version."New value: +"File version ID; omit for current primary"
    • removedInput schema / properties / fileId / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • changedInput schema / properties / id / description
      Previous value: -"Contract identifier"New value: +"ID"
    • removedInput schema / properties / id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • changedInput schema / properties / variant / description
      Previous value: -"Original retained file or the available preview PDF"New value: +"Retained original or available preview PDF"
    • changedOutput schema / (root)
      Previous value: -{
      -  "$schema": "http://json-schema.org/draft-07/schema#",
      -  "additionalProperties": false,
      -  "properties": {
      -    "contractId": {
      -      "allOf": [
      -        {
      -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -          "type": "string"
      -        },
      -        {
      -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -          "type": "string"
      -        }
      -      ],
      -      "description": "Contract UUID",
      -      "type": "string"
      -    },
      -    "downloadUrl": {
      -      "description": "Short-lived HTTPS URL for the selected document bytes",
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "expiresAt": {
      -      "allOf": [
      -        {
      -          "pattern": "^(?:(?:\\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))$",
      -          "type": "string"
      -        },
      -        {
      -          "pattern": "^(?:(?:\\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))$",
      -          "type": "string"
      -        }
      -      ],
      -      "description": "When the signed URL stops working (ISO-8601)",
      -      "type": "string"
      -    },
      -    "expiresIn": {
      -      "description": "Number of seconds until the signed URL expires",
      -      "exclusiveMinimum": 0,
      -      "maximum": 9007199254740991,
      -      "type": "integer"
      -    },
      -    "fileId": {
      -      "allOf": [
      -        {
      -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -          "type": "string"
      -        },
      -        {
      -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -          "type": "string"
      -        }
      -      ],
      -      "description": "Contract file version UUID",
      -      "type": "string"
      -    },
      -    "fileName": {
      -      "description": "Download file name",
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "isPrimary": {
      -      "description": "Whether the file belongs to the primary document group",
      -      "type": "boolean"
      -    },
      -    "mimeType": {
      -      "description": "MIME type of the selected bytes",
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "status": {
      -      "enum": [
      -        "draft",
      -        "effective",
      -        "superseded"
      -      ],
      -      "type": "string"
      -    },
      -    "variant": {
      -      "enum": [
      -        "original",
      -        "preview"
      -      ],
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "downloadUrl",
      -    "expiresAt",
      -    "expiresIn",
      -    "fileName",
      -    "mimeType",
      -    "variant",
      -    "isPrimary",
      -    "status",
      -    "fileId",
      -    "contractId"
      -  ],
      -  "type": "object"
      -}New value: +null
  2. First observed

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the bar is lower. The description's one genuine addition is 'short-lived', which tells the agent the URL expires and shouldn't be cached — useful, but no expiry scale, auth prerequisites, or redirect behavior are disclosed.

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?

Two compact clauses with the core capability front-loaded and no filler. It is slightly telegraphic — 'original/available preview-PDF URL' takes a second read to parse.

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 simple three-parameter read with strong annotations and no output schema, the description covers the returned artifact (a short-lived URL), the default version, and which versions are reachable. Only prerequisite/auth context is missing, which is minor here.

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 100%, so the schema already documents id, fileId and the variant enum with defaults. The description echoes the same semantics ('omit for current primary', original vs available preview) without adding format or constraint detail beyond the schema, so it sits at the baseline.

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 names a specific verb and resource ('Get a ... download URL') and pins down scope with 'default: current primary' and coverage of prior/draft/related versions. That distinguishes it from siblings like clm_read_contract_document or clm_search_contract_documents, though it never names an alternative explicitly.

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 implies when to use it via the default behavior (omit fileId for current primary; pass a version for prior/draft/related), which is real selection guidance. It gives no explicit when-not-to-use or routing to a sibling tool such as clm_read_contract_document for in-band content.

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.