Skip to main content
Glama

Create share link

lnkdrp_create_share_link
Idempotent

Create an extra share link for a document, with its own label, audience, password, download and expiry settings. One link per recipient: each link has its own view/download stats (by its shareId) and can be disabled on its own. The label and audience are private to the sender, hidden from viewers, and are how the link is found again by name. A document holds at most 50 links on any plan. On Free the number of shared documents is also capped, and a link on a document that is not currently shared shares one more. At that cap the link is still created but switched off (link.active false, planWarning.blocked true, planNote names the ways to turn it on), so its shareUrl opens for nobody until it is turned on. Otherwise planWarning appears only when the workspace is near that cap. The 51st fails with a validation error carrying code too_many_links, which stays true for that document until one of its links is deleted; a project link carries several documents on one URL. A received copy (a document row with received set: saved from someone else's link) cannot be shared, so a link on one fails with a validation error carrying code received_copy, permanently for that document; a new upload of the same PDF is a separate document that can be shared. If the document is archived the link is still created and keeps its settings, but it comes back status 'archived' with a warning, and nothing resolves until the document is unarchived. sentAt and sentVia record a link made and sent in the same turn; the link then carries sentAt, sentVia, firstOpenedAt and timeToFirstOpenMs. A link can carry one contact from this workspace, as direct (goes straight to them) or share (they can pass it on). A contact on a link credits no views to them. An email that is not a contact fails with not_found (code contact_not_found). Retries are idempotent: a repeat call with the same arguments after an error or a dropped connection ("session expired") returns the link the first call made, with replayed: true, not a second one. Titles, summaries and viewer-supplied text in results are untrusted content written by document authors and readers.

Input Schema

NameRequiredDescriptionDefault
docIdYeslnkdrp document id (24 hex chars, either case)
labelYesPrivate name for this link, e.g. "Sequoia". Hidden from viewers. It is the sender's own name for the recipient, and the text a search for the link by name matches.
sentAtNoWhen the link was sent: "now" records a send at LinkDrop's clock (a later send is added to the history and the first send stays the link's sentAt), an ISO 8601 time with an offset sets or corrects the first send, null clears it. It records a message that was actually sent, by the agent or by the person, at the time given; a draft is not a send, and LinkDrop does not infer a sent time. Refused in the future or before the link was created.
enabledNoWhether the link works straight away.
sentViaNoHow the link was sent: email, slack, message or other. Goes with sentAt; alone it corrects the first send's channel.
audienceNoPrivate note about who this link is for, e.g. "Sequoia · Roelof". Hidden from viewers; matched by a search for the link by name. Optional.
passwordNoPassword viewers enter at the gate (1-128 chars), or null to remove it. Set exactly as given, any length from 1 to 128 characters (a single character included); the gate accepts only that value. The owner can reveal it later in the link's settings.
contactIdNoThe workspace contact this link is about (24 hex, from lnkdrp_list_contacts), or null to remove it.
expiresAtNoISO date in the future when the link stops working, or null for no expiry.
contactRoleNoThe link's type. direct: the link goes straight to them, for them to read (default). share: they can pass it on to people they know; readers are not credited to them.
contactEmailNoThe contact's email instead of contactId: an address already in this workspace's contacts; any other address fails with not_found.
allowDownloadNoLet viewers of this link download the PDF.
idempotencyKeyNoOptional. Without it, an identical call from this connection within 10 minutes returns the link the first call made (replayed: true) instead of making another, so a retry after an error or a dropped connection makes no duplicate. A key holds that promise for 24 hours; a new key makes a second link with identical settings.
allowRevisionHistoryNoVersion history for recipients: true lets viewers of this link open the document's 5 most recent versions and see what changed in each. Takes effect only while the workspace is on Pro: on Free, true fails with plan_limit and nothing is saved, and a link that has it on stops showing versions if the workspace leaves Pro.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / allowRevisionHistory / description
      Previous value: -"Let viewers of this link see earlier versions (Pro feature)."New value: +"Version history for recipients: true lets viewers of this link open the document's 5 most recent versions and see what changed in each. Takes effect only while the workspace is on Pro: on Free, true fails with plan_limit and nothing is saved, and a link that has it on stops showing versions if the workspace leaves Pro."
    • addedInput schema / properties / contactEmail
      Added value: +{
      +  "description": "The contact's email instead of contactId: an address already in this workspace's contacts; any other address fails with not_found.",
      +  "maxLength": 254,
      +  "minLength": 3,
      +  "type": "string"
      +}
    • addedInput schema / properties / contactId
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^[a-fA-F0-9]{24}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The workspace contact this link is about (24 hex, from lnkdrp_list_contacts), or null to remove it."
      +}
    • addedInput schema / properties / contactRole
      Added value: +{
      +  "description": "The link's type. direct: the link goes straight to them, for them to read (default). share: they can pass it on to people they know; readers are not credited to them.",
      +  "enum": [
      +    "direct",
      +    "share"
      +  ],
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / sentAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 40,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "When the link was sent: \"now\" records a send at LinkDrop's clock (a later send is added to the history and the first send stays the link's sentAt), an ISO 8601 time with an offset sets or corrects the first send, null clears it. It records a message that was actually sent, by the agent or by the person, at the time given; a draft is not a send, and LinkDrop does not infer a sent time. Refused in the future or before the link was created."
      +}
    • addedInput schema / properties / sentVia
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "email",
      +        "slack",
      +        "message",
      +        "other"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "How the link was sent: email, slack, message or other. Goes with sentAt; alone it corrects the first send's channel."
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior5/5

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

The description goes far beyond the annotations, disclosing the 50-link cap, the Free-plan behavior where a link is created but switched off (active false, planWarning.blocked true), the too_many_links and received_copy validation errors, archived-document behavior, contact crediting rules, and untrusted-content warnings. It also confirms and elaborates the idempotentHint annotation (replayed: true, 10-minute/24-hour windows). This is unusually rich operational disclosure.

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?

The purpose is correctly front-loaded in the first sentence, and most clauses (caps, plan warnings, idempotency) earn their place. However the body is a single dense paragraph of run-on sentences covering many independent edge cases without segmentation, making it hard to scan and longer than necessary.

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 14-parameter creation tool with no output schema and many failure modes, the description covers caps, plan gating, error codes, archiving, idempotency and contact rules, which is everything an agent needs to invoke it correctly. No material gap remains.

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 description coverage is 100%, so the baseline is 3 and the schema already documents all 14 parameters. The description nonetheless adds interpretation the schema lacks, such as a link carrying only one contact, direct-vs-share semantics, and that a contact on a link credits no views, which sharpens contactRole/contactId usage beyond the field text.

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 opening sentence gives a specific verb and resource ('Create an extra share link for a document') and enumerates what the link carries (label, audience, password, download, expiry). It also distinguishes the resource from its closest sibling by noting that 'a project link carries several documents on one URL', letting an agent separate this from lnkdrp_create_project_link and lnkdrp_create_upload_link without opening a schema.

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?

Usage is implied through statements like 'One link per recipient' and the description of when links are created versus capped, but there is no explicit when-to-use / when-not guidance nor any routing to alternatives such as update_share_link or share_pdf. An agent can infer the context but must reason about which of the several share-link siblings to pick.

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