Skip to main content
Glama

Create proof upload link

create_proof_upload_link

Generate a one-time browser link (URL + QR code) to upload proof documents of EXPLICITLY chosen types to one identity or address, independent of any regulation requirement. Use it for voluntary / preventive uploads and for REPLACING an existing document: uploading a proof type the entity already has automatically replaces the old proof — no delete_proof call is needed. Pass exactly one of identity_id / address_id plus proof_types. The USER opens the link to submit the actual files (documents never travel through the chat). Returns upload_url and qr_code_url (plus qr_svg when qr: "svg" is requested). Priority #1: show upload_url as a clickable link — it always works. The QR lets the user continue on a phone and photograph documents with the camera: offer qr_code_url as a plain link, but do NOT rely on it as a markdown image — some clients (incl. claude.ai) gate external images behind a click. Request qr: "svg" ONLY if your client can render SVG through an HTML/artifact/widget capability; never paste raw SVG markup into plain reply text — chat clients escape it into a wall of code. Files are encrypted in the browser; the server never sees plaintext. The link works once; its lifetime is account-specific — quote expires_in_minutes from the response, never assume a fixed value. After the user says they are done, call check_upload_status with the returned token. For documents a requirement still demands (and to create verifications), use create_regulation_upload_link instead.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qrNoQR delivery: "url_only" (default) returns qr_code_url only; "svg" additionally includes qr_svg — ~7 KB of inline SVG markup. Request "svg" ONLY when your client can render SVG through an HTML/artifact/widget capability — raw SVG pasted into chat text gets escaped, not rendered.
address_idNoAddress UUID the proofs attach to. Pass exactly one of identity_id / address_id.
identity_idNoIdentity UUID the proofs attach to. Pass exactly one of identity_id / address_id.
proof_typesYesProof type names (case-insensitive) or UUIDs — one upload slot opens per listed type. Identity proof types go with identity_id, address proof types with address_id. Uploading a type the entity already has replaces the old proof.

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the safety profile (not read-only, not destructive, not idempotent), and the description adds substantial behavior beyond that: one-time link, browser-side encryption with the server never seeing plaintext, account-specific lifetime that must be read from expires_in_minutes rather than assumed, and automatic replacement of an existing proof. This is exactly the kind of context annotations cannot carry.

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?

Purpose is front-loaded in the first sentence, and most sentences carry operational weight (QR delivery, lifetime, follow-up call). It is dense and long, with several sentences devoted to client-specific rendering warnings, but those warnings are actionable rather than filler.

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?

There is no output schema, so the description carries the burden of describing returns — it does so explicitly (upload_url, qr_code_url, and qr_svg when requested) and tells the agent which value to prioritize. Combined with the sibling routing and follow-up call, nothing needed to invoke this correctly is missing.

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 earns a bump by restating and contextualizing the exclusivity rule (exactly one of identity_id/address_id plus proof_types) and the replacement semantics of proof_types within the workflow. It does not add syntax-level detail the schema lacks, so it falls short of a 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?

States a specific verb and resource — generate a one-time browser link (URL + QR code) for uploading proof documents — and immediately scopes it to explicitly chosen proof types on one identity or address. It also names the sibling it is not (create_regulation_upload_link), so an agent can route between them without opening either 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 when-to-use (voluntary/preventive uploads, replacing an existing document), when-not (documents a requirement still demands → create_regulation_upload_link), and the follow-up step (call check_upload_status with the returned token once the user is done). It even pre-empts the delete_proof detour by explaining replacement is automatic.

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