MCP
Connect your AI agent
LinkDrop is an MCP server at https://mcp.lnkdrp.com/mcp. Add it to your client, sign in when it asks, and your agent creates share links, sets passwords and reads the numbers. No key to paste; a key is there for scripts and for clients that cannot sign in.
What the MCP server does
MCP (Model Context Protocol) is how an AI client such as ChatGPT, Claude or Cursor reaches tools outside the chat. LinkDrop's MCP server gives your agent the tools to share a PDF as a link, set a password or an expiry, replace the file without breaking the link, and read who opened it and which pages they read. It runs on LinkDrop's servers, so there is nothing to install.
Pick your client
- Claude CodeOne command in a terminal, then sign in from Claude Code. Nothing to paste.How to connect →
- ClaudeAdd LinkDrop as a custom connector in claude.ai or Claude Desktop, then click Connect and sign in.How to connect →
- ChatGPTAdd LinkDrop to ChatGPT as a custom MCP server with OAuth, then sign in. No terminal needed.How to connect →
- CoworkAdd LinkDrop as a connector from Cowork's settings and sign in. No terminal needed.How to connect →
- CursorA few lines in Cursor's mcp.json, then click Login. Works globally or per project.How to connect →
- CodexTwo commands in a terminal: add the server, then log in.How to connect →
- Gemini CLIOne command in a terminal, then sign in with /mcp auth.How to connect →
- GrokAdd LinkDrop as a tool from Grok's settings. No terminal needed.How to connect →
- Any clientAny MCP client that reads an mcpServers config. Sign in if it supports OAuth, or use a key.How to connect →
Try asking your agent
- “Share the Q3 board deck from my Google Drive with Priya.”
- “Share board-update.pdf from my Downloads and give me the link.”
- “Make a link to the Series A memo for Priya that expires in a week.”
- “Put the password tidewater on the pricing sheet link.”
- “Has anyone opened the pricing sheet this week?”
Plain requests: your agent picks the tools. Checked against the tool list below on 2026-10-13; each guide has more for its client.
How connecting works
Sign in, no key
Claude Code, Cursor, Codex, Gemini CLI, Cowork, ChatGPT and Claude sign in: LinkDrop opens in your browser, you pick the workspace the agent should work in and click Allow. The agent then shows on the Agents page, where an owner or admin can revoke it at any time.
A key, for the rest
Grok, scripts and machines with no browser use a key, sent as an Authorization header. A key is shown once, LinkDrop keeps only a hash, and a workspace can have up to ten.
Your rules apply
An agent works under your plan and credits, asks before it deletes anything, and cannot invite a teammate without an owner or admin approving. Everything it does is in your activity feed, named after its app.
Every step, for every client, is also in the help article Connect your agent, and Getting a file to your agent covers sharing from Google Drive, a public link or your computer.
More than one workspace
A connection belongs to one workspace, and your client keeps one server per name. To connect another workspace, add LinkDrop again under a different name, any name you will recognize, such as LinkDrop Acme (LinkDrop-Acme in a command), and pick that workspace when you sign in, or use a key created there. Existing connections keep working, and your agent sees them all; lnkdrp_whoami on each says which workspace it acts on.
What your agent can do
lnkdrp_whoamiWhich workspace, plan and key the agent is using.read
- none
Your user id and email, the workspace id and name, plan (free or pro), the key's prefix and scopes, the client name LinkDrop recorded, credits remaining (included, starter, purchased and automatically reloaded) and when they reset, whether another automatic reload can add credits when they run low (onDemand, monthly Pro only), the credit cost per AI action by tier, and a capabilities object answering "what can I do here" in one call: document/project/collaborator caps with what's used and left, whether links are limited (they are not a plan limit; a document holds up to 50), whether recipients can browse prior versions, and which product features have no MCP tool at all yet.
unauthorized: the key is missing or invalidkey_revoked: the key was revoked
Call it first to confirm the connection; it costs nothing.
lnkdrp_list_docsFind documents by title, by any share-link slug, or by id.read
- query: optional; matches document titles and the slug of any share link on the document
- ids: optional; up to 50 document ids to fetch directly (query and page are then ignored)
- page: optional, default 1
- limit: optional, 1 to 50, default 25
total, page, limit, hasMore and the matching documents: id, default shareId and shareUrl, title, one-line summary, processing status, version, who put the live version up (name and agent, no email) and dates. Archived and deleted documents are left out.
validation: a malformed id or an out-of-range page or limit
This is how an agent finds a document it was not handed. Pair a result's id with get_share, list_share_links or get_share_stats.
lnkdrp_get_activityThe workspace activity feed: uploads, link changes, views, downloads, plan and agent events.read
- limit: optional, 1 to 100, default 40
- cursor: optional; the nextCursor from the previous page
- types: optional; only these event types, e.g. share.viewed, share_link.created, doc.archived
- docId: optional; only events on one document
- who: optional; agents (anything done by any MCP or API client), me (the key owner in the app) or team (other members)
items, newest first, each with type, time, who acted (and which agent client, if any), the document and project it concerns, and the event's payload. Plus nextCursor for the next page.
validation: an unknown event type, a malformed cursor or an out-of-range limit
who: agents is the audit trail for agents, including this one. Viewer names and emails show on share.viewed and share.downloaded rows on every plan, as in the app.
lnkdrp_share_pdfCreate a share link from a PDF: a file in your Google Drive, a URL, or a file on your own machine.write
- idempotencyKey: required; reuse it on retries and you get the same document back
- driveFileId: a file in the person's Google Drive: the id from lnkdrp_drive_search, or the Drive, Docs, Slides or Sheets link the person pasted. LinkDrop fetches it itself through the person's own Drive connection: nothing is downloaded or uploaded by the agent, and the document links back to the original. A PDF is imported as is, up to 50 MB; a Google Doc, Slides deck or Sheet is converted to PDF by Google (up to 10 MB). Without a title the document is named after the Drive file. The first choice whenever the file is in Drive
- sourceUrl: a public https URL to a PDF, up to 50 MB. A Google Docs, Slides or Sheets link, or a Drive file link, goes through the person's Drive connection when they have one; without it a Docs link is refused with the Integrations link, and a Drive file link works only if shared with anyone who has the link. OneDrive and SharePoint links are refused. Exactly one of sourceUrl / fileBase64 / filePath / uploadId / driveFileId / file
- filePath: an absolute path to a PDF, read from disk by the MCP server itself, so it only works when the server runs on the same machine as the file (a local server; otherwise the call is refused and points you at lnkdrp_create_upload or sourceUrl). The right input for a file you already have locally: no base64 for the agent to emit. Up to 16 MB before optimization
- fileBase64: the PDF's bytes, base64-encoded, the last resort for a small file with no public URL and no local path: up to 16 MB before optimization and, on the hosted server, under 3 MB after it, or the call is refused and points at lnkdrp_create_upload / sourceUrl. A file in the agent's own environment goes in with lnkdrp_create_upload and uploadId instead
- uploadId: from lnkdrp_create_upload, after the PDF was PUT to its one-time URL. The input for a cloud agent whose file is only in its own sandbox: up to 50 MB, used once, only from the connection that created it. (The uploadId in the result is LinkDrop's upload record, a different id.)
- file: ChatGPT only, a PDF the person attached in the chat, passed by ChatGPT as { download_url, file_id, mime_type?, file_name? }. The server downloads it in the same call, so no sandbox network access is involved; without a title the document is named after file_name. Other clients do not see this input
- optimize: optional, default on; shrinks the PDF before upload by downsampling its images, and keeps the original whenever the result is not smaller or its page count changed
- fileName: optional, used with fileBase64, or to override filePath's own basename or the name given to lnkdrp_create_upload
- title: optional, up to 200 characters
- allowDownload: optional, default off
- password: optional, 1 to 128 characters
- waitForReady / timeoutSeconds: optional; wait for processing (default 60s, max 120s)
docId, shareId, the shareUrl (valid at once, even while processing), status, version, uploadId, what optimization did (optimized), and any AI steps that were skipped as warnings.
plan_limit: the Free plan's shared-document cap; the error lists what you can still do without upgradingout_of_credits: the AI summary needs credits the workspace does not have; add credits or retry after the resetfetch_blocked / source_not_found / unsupported_content_type / too_large: the URL or file could not be used (source_not_found: the URL answered 404/410; too_large for an inline file names lnkdrp_create_upload and sourceUrl as the way round)drive_not_connected / drive_token_revoked: the person has not connected Google Drive, or Google no longer accepts the connection; the error carries the Integrations page link to give themdrive_file_not_found / drive_not_supported: the Drive file is not visible to their connection, or is not a PDF or Google Doc, Slides or Sheetfile_unavailable: the file from the ChatGPT chat could not be fetched (the HTTP status is in the message); nothing is createdfile_not_reachable: the path is inside the agent's own sandbox (/mnt/data/…), which the server cannot readOn ChatGPT and claude.ai, a failure about where the file is (these two, a sandbox path, a filePath on the hosted server, a fileBase64 that is garbled, not a PDF or too large) also carries details.uploadLink, an upload link made with this call's settings, and details.next, the sentence to pass onvalidation: the arguments were wrong, or the uploadId has expired, has not arrived yet or is in use by another call; the message says how to fix themnot_found: the uploadId is not this connection's, was already used, or expired and was cleared; get a new one from lnkdrp_create_upload
The routes in, best first: a file in Google Drive (driveFileId), a public link (sourceUrl), a file on the person's computer with a local server (filePath), a file only in the agent's sandbox (lnkdrp_create_upload, then uploadId), a file attached in a ChatGPT chat (file), and an upload link the person opens (lnkdrp_create_upload_link). If the agent's client blocks the sandbox upload, the file never reaches LinkDrop and nothing is created; the other routes do not go through the client's network. LinkDrop writes every upload's summary itself, for 1 credit; an agent cannot supply its own. Optimization needs Ghostscript on the MCP server; without it the file is uploaded unchanged.
lnkdrp_replace_pdfPut a new PDF on a document you already shared. Every link keeps working.write
- idempotencyKey: required; reuse it on retries and you get the same result back
- docId: the existing document to update
- driveFileId: the new file in the person's Google Drive: the id from lnkdrp_drive_search, or the Drive, Docs, Slides or Sheets link the person pasted; LinkDrop fetches it itself (a PDF up to 50 MB, or a Google Doc, Slides deck or Sheet converted to PDF, up to 10 MB) and the new version links back to the original. The first choice whenever the file is in Drive
- sourceUrl: a public https URL to the new PDF, up to 50 MB. A Google Docs, Slides or Sheets link, or a Drive file link, goes through the person's Drive connection when they have one; without it a Docs link is refused with the Integrations link. OneDrive and SharePoint links are refused. Exactly one of sourceUrl / fileBase64 / filePath / uploadId / driveFileId / file
- filePath: an absolute path to the new PDF, read from disk by the MCP server itself, so it only works when the server runs on the same machine as the file. Up to 16 MB before optimization
- fileBase64: the new PDF's bytes, base64-encoded, the last resort for a small file with no public URL and no local path: up to 16 MB before optimization and, on the hosted server, under 3 MB after it, or the call is refused and points at lnkdrp_create_upload / sourceUrl
- uploadId: from lnkdrp_create_upload, after the new PDF was PUT to its one-time URL; up to 50 MB, used once, only from the connection that created it
- file: ChatGPT only, the new PDF attached in the chat, passed by ChatGPT as { download_url, file_id, mime_type?, file_name? }; the server downloads it in the same call. Other clients do not see this input
- optimize: optional, default on; shrinks the PDF before upload, keeping the original whenever the result is not smaller or its page count changed
- fileName: optional, used with fileBase64, or to override filePath's own basename or the name given to lnkdrp_create_upload
- title: optional, up to 200 characters; leaves the title unchanged if omitted
- waitForReady / timeoutSeconds: optional; wait for processing (default 60s, max 120s)
docId, shareId, shareUrl, status, the new version number, uploadId, what optimization did (optimized), and any AI steps that were skipped as warnings.
not_found: the docId does not exist in this workspace, or the uploadId is not this connection's, was already used, or expired and was cleared (get a new one from lnkdrp_create_upload)out_of_credits: the AI summary needs credits the workspace does not have; add credits or retry after the resetfetch_blocked / source_not_found / unsupported_content_type / too_large: the URL or file could not be used (source_not_found: the URL answered 404/410; too_large for an inline file names lnkdrp_create_upload and sourceUrl as the way round)drive_not_connected / drive_token_revoked: the person has not connected Google Drive, or Google no longer accepts the connection; the error carries the Integrations page link to give themdrive_file_not_found / drive_not_supported: the Drive file is not visible to their connection, or is not a PDF or Google Doc, Slides or Sheetfile_unavailable: the file from the ChatGPT chat could not be fetched (the HTTP status is in the message); nothing is createdfile_not_reachable: the path is inside the agent's own sandbox (/mnt/data/…), which the server cannot readOn ChatGPT and claude.ai, a failure about where the file is (these two, a sandbox path, a filePath on the hosted server, a fileBase64 that is garbled, not a PDF or too large) also carries details.uploadLink, an upload link made with this call's settings, and details.next, the sentence to pass onvalidation: the arguments were wrong, or the uploadId has expired, has not arrived yet or is in use by another call; the message says how to fix them
Never blocked by the document cap: replacing does not create a document. The status flips to preparing as soon as the call starts, before the new file is fetched.
lnkdrp_stage_pdfSave a new PDF beside a document as a draft for review, instead of replacing it. Links keep showing the live version until the draft is published.write
- docId or shareId: the document
- driveFileId, sourceUrl, filePath, fileBase64 or uploadId (or file in ChatGPT): the new PDF, exactly one, as for lnkdrp_replace_pdf
- baseVersion: optional; base the draft on this earlier version and compare it with that version (default: the live version)
- idempotencyKey: optional; the same call again returns the same draft
- wait / timeoutSeconds: optional; wait until the draft is ready for review (default 60s, max 120s)
The draft: its uploadId, status, file name, the version it is based on and the live version's number, how many pages changed from its base and a summary of the changes, when it expires, the review page link, and who may publish it. identical: true when the file is the live version (nothing is staged).
plan_limit: drafts are a Pro featurevalidation: the document is not ready, your earlier draft is still being prepared, or baseVersion is not a version of the document (or was removed)storage_quota_exceeded: the workspace's storage is full
Anyone on the team who can upload may stage a draft, even on a document only some people may publish. One open draft per person per document; a new one replaces your earlier draft. Drafts are discarded after 14 days unless published.
lnkdrp_update_from_sourcePull the latest version of a document from where it was imported (today: its Google Drive file). Creates nothing when the file has not changed.write
- idempotencyKey: required; reuse it on retries and you get the same result back
- docId: a document imported from Google Drive (its remoteSource names the file)
- waitForReady / timeoutSeconds: optional; wait for processing (default 60s, max 120s)
- stage: optional; true saves a changed file as a draft for review instead of a new version (Pro)
upToDate: true with the current version when the Drive file has not changed since the last import (no version, no credits); otherwise the same fields as lnkdrp_replace_pdf for the new version, or the draft when stage is true.
no_remote_source: the document was uploaded, not imported from a linked file; use lnkdrp_replace_pdfdrive_not_connected / drive_token_revoked: the person has not connected Google Drive, or Google no longer accepts the connection; the error carries the Integrations page link to give themdrive_file_not_found: their Drive connection cannot see the file; the error names whose Drive it was imported fromversion_processing: a new version is still being prepared; wait for it, then update again
Uses the Drive connection of the person the agent acts as, never the importer's. Changed files become a new version exactly as lnkdrp_replace_pdf makes one: every link keeps working, and the compare and summary are charged as usual.
lnkdrp_drive_searchFind a file in the person's own Google Drive, to share it without downloading or uploading anything. The best way to get a file in.read
- query: words from the file's name, as the person said it ("USAVX deck", "Q3 board update"). An empty string lists their most recently modified files
Up to 10 PDFs and Google Docs, Slides and Sheets whose name contains the query, newest first: driveFileId, name, kind (pdf, google-doc, google-slides or google-sheets), mimeType, modifiedTime, ownerName, webViewLink and sizeBytes, plus the connected googleEmail. Pass the driveFileId to lnkdrp_share_pdf or lnkdrp_replace_pdf.
drive_not_connected: the person has not connected Google Drive to LinkDrop; give them the Integrations page link the error carriesdrive_token_revoked: Google no longer accepts their Drive connection; ask them to reconnect it on the Integrations page
Uses the Drive connection of the person the agent acts as, in this workspace, never a teammate's. Read-only: it never changes anything in Drive or LinkDrop. When several files match, ask the person which one. A Drive or Docs link the person pasted needs no search: pass it as driveFileId.
lnkdrp_create_uploadGet a one-time URL to upload a PDF from the agent's own environment, for a cloud agent with no public link to the file.write
- fileName: required, the PDF's file name, ending in .pdf
- sizeBytes: optional; a file over 50 MB is refused now rather than after the upload
- contentType: optional, always application/pdf
uploadId, the uploadUrl to PUT the file to, method (PUT), expiresAt, maxBytes, a ready-made curl command, and the next step: lnkdrp_share_pdf or lnkdrp_replace_pdf with the uploadId. If the PUT fails with a network error, the next step names lnkdrp_create_upload_link: with docId for a new version, or with the share's settings for a new document.
validation: the file name is not a .pdf, or the MCP server runs locally over stdio, which serves no upload URLs (pass filePath there)forbidden: the connection is read-only (a Viewer's, or a read key), so it cannot uploadtoo_large: the declared size is over 50 MBrate_limited: too many upload URLs from this connection (20 in 10 minutes, or 5 unused at once); use or let expire the ones it has
Not the first choice: a file in Google Drive goes in with lnkdrp_drive_search and driveFileId, and a public link as sourceUrl, with nothing to upload. The URL takes one PDF up to 50 MB, expires 15 minutes after it is issued and only works for the connection that created it, which needs write access; treat it like a password until it is used. Once the file arrives the server keeps it 5 minutes for the share, and deletes it as soon as it is shared. If the agent's client blocks the upload, the file never reaches LinkDrop and nothing is created; Drive, a public link and an upload link (lnkdrp_create_upload_link) do not go through the client's network. mcp.lnkdrp.com is not on the package-manager allowlist claude.ai's code sandbox uses by default, and ChatGPT's code tool has been seen without outbound network.
lnkdrp_create_upload_linkGet a one-time link where the person adds a PDF from their own browser, for an agent that cannot send the file itself.write
- docId: optional; makes the upload a new version of this document. With docId every other setting is refused: a new version keeps the document's title, project, links and access
- title: optional, up to 200 characters; without it the document is named after the file
- projectId or projectSlug: optional; the project the new document goes into
- allowDownload: optional, default off
- password: optional, 1 to 128 characters; stored on the server and never returned
- idempotencyKey: optional; the same key returns the same link while it is unused
uploadLinkId, the url (https://www.lnkdrp.com/u/…), expiresAt, mode (new or replace), the settings it carries, passwordSet, status pending, and next: the URL on its own line, then a sentence to pass on to the person.
validation: a setting given with docId, a bad title or password, a project that is not in this workspace, or a document that is a received copynot_found: the document is not in this workspaceversion_processing: a new version of that document is still being prepared; wait for itplan_limit: a new document at the Free plan's shared-document capforbidden: the connection is read-onlylink_used / link_expired: the idempotencyKey's link was already used or has expired; use a new keyrate_limited: 10 upload links are already waiting for this person in this workspace
The link works once, for 60 minutes, and only for the LinkDrop account this connection acts as, signed in, in this workspace. Nothing changes until the person opens it and chooses a PDF; the document is then filed with these settings, and a new version needs them to click Replace. The URL carries no password or personal details. Links are always on www.lnkdrp.com, never emailed or shortened. The route for claude.ai and ChatGPT, whose sandboxes cannot reach LinkDrop by default.
lnkdrp_check_upload_linkWhether the person has used an upload link yet, and the document it made.read
- uploadLinkId: from lnkdrp_create_upload_link (ulk_ and 20 hex characters)
- waitSeconds: optional, 0 to 20, default 0; waits only while the upload is under way
status (pending, started, uploaded, processing, ready, failed, expired or revoked), the document once there is one (docId, title, status, shareUrl, version), failReason, expiresAt, and next.
not_found: no such upload link for this connection; only the person whose connection made it can read it
Check after the person says it's uploaded rather than in a loop. failed and expired need a new link; revoked means the key or sign-in that made it was removed.
lnkdrp_get_shareStatus, settings and summary of a link. Poll it after share_pdf.read
- docId or shareId: exactly one; any of a document's links resolves
Processing status, whether sharing is on, download/password/version-history settings, the share URL, preview image, the AI one-liner and summary once ready, and who put the live version up (name and agent; who staged it, for a published draft; no email). Asked about a specific link, it reports that link's own settings and a link block naming it.
validation: none or both ids givennot_found: unknown id, or a document in another workspace
lnkdrp_set_share_accessTurn sharing, downloads or the password on or off for a link.write
- idempotencyKey: required
- docId
- shareEnabled / allowDownload: optional booleans
- password: a string to set, null to remove
- allowRevisionHistory: optional; letting recipients browse versions is Pro
The same shape as lnkdrp_get_share, after the change.
plan_limit: turning sharing on at the Free shared-document cap, or version history on Freeforbidden: a read-only keynot_found
lnkdrp_get_share_statsViews, downloads and viewers for a link over a window of days.read
- docId and/or shareId: a shareId scopes everything to that one link; a docId covers all its links
- days: 1 to 60, default 15, on every plan
- includeViewers: per-viewer rows with per-page time, on every plan
Totals for views, opens, downloads, pages viewed and time spent, a unique viewer count, and a per-day series. With includeViewers it also returns every reader, with their pages and the time spent on each page. Owner and teammate opens are excluded from every figure and counted separately as ownerPreviews.
validationnot_found
views counts recipients; opens counts sittings. A reader who came back three times is one view and three opens.
lnkdrp_write_visit_briefWrite the brief for a visit that ended without one, for the same credits as Write the brief in the app.write
- visitBriefId: the id of a visit in recentVisits (lnkdrp_get_share_stats or lnkdrp_get_project_stats) whose status is recap or failed
The visit with its brief, the credits it cost, and the credits left.
out_of_credits: not enough credits, or the day's credit cap is reached (nothing is charged)not_found: no such visit in this workspacevalidation: the visit already has a brief, or one is being writtenupstream: the model failed; nothing is charged and it can be tried again
Costs what the button costs: 1 credit at Standard, 3 at Advanced (the workspace's level); the one free brief on Free costs nothing. It is billed to you and named in the activity feed as asked for by the agent. No confirmation, like an upload's summary.
lnkdrp_create_share_linkAdd another link to a document, one per recipient, with its own label, password and expiry.write
- docId
- label: private name, 1 to 80 characters, never shown to viewers
- audience: optional private note, up to 120 characters
- allowDownload / allowRevisionHistory: optional
- password: optional, 1 to 128 characters
- expiresAt: optional ISO date in the future
- enabled: optional, default on
- sentAt / sentVia: optional; when the link was sent ("now" or an ISO time) and how (email, slack, message, other), for a link made and sent together
The new link with its own shareUrl, working immediately, with its sent time when one was given.
validation: missing label, past expiry, short passwordnot_found: the document
Links are never plan-capped. A document may carry one per investor or counterparty on any plan.
lnkdrp_list_share_linksEvery link of a document with its settings, status and view counts, or search its links by name.read
- docId
- query: optional; full-text search this document's links by label/audience, ranked by relevance
Every link (or, with query, only the matches), default first: label, audience, shareUrl, status (active, disabled, expired), password and expiry state, that link's viewer and download counts, and when it was sent and first opened (sentAt, sentVia, firstOpenedAt, timeToFirstOpenMs).
not_found
Don't know which document a link is on? lnkdrp_find_share_link searches by name across the whole workspace.
lnkdrp_find_share_linkFind a share link by name (its label or audience) across the whole workspace.read
- query: the name to search for, e.g. "a16z" or "Sequoia"
- limit: optional, 1 to 50, default 20
The matching links, ranked by relevance: which document each is on (id, title, default shareId), the link's own id, shareId, shareUrl, label, audience, whether it's the default link, and when it was sent and first opened.
Backed by a MongoDB text index: whole-word matches only ("a16z" matches, "nest" does not), fast at any workspace size. Returns [] rather than an error when nothing matches.
lnkdrp_verify_share_passwordCheck whether a password opens a link, without revealing the real one.read
- docId and linkId
- password: the candidate to test
{ passwordEnabled, matches }. matches is false whenever the link has no password.
validationnot_found: unknown link, or a link on another documentforbidden: owner or admin onlyrate_limited
Safe to call: it never opens the link, records a view, or spends the recipient's 10-tries-per-5-minutes unlock budget. Its own limit is 20 checks per link per 5 minutes.
lnkdrp_update_share_linkChange or disable one link without touching the document's other links.write
- linkId and docId
- label / audience / enabled / allowDownload / password / expiresAt / allowRevisionHistory: any of them
- sentAt: "now" records a send, an ISO time sets or corrects the first send, null clears it; sentVia: email, slack, message or other
The updated link.
validation: includes a sent time in the future or before the link was creatednot_found: unknown link, or a link on another documentforbidden
Disabling a link revokes one recipient's access instantly; the document's other links are untouched.
lnkdrp_delete_share_linkDelete one link after confirming with you; its past analytics are kept.asks firstwrite
- linkId and docId
- confirm: only for clients that cannot show you a prompt; the agent sets it after you say yes
ok, and what was deleted (link id, shareId, label). The link stops resolving at once; its analytics stay in the document's totals. lnkdrp_restore_share_link brings it back for as long as the document exists.
validation: the default link cannot be deleted (disable it instead), or you did not confirmnot_found
Before acting it shows you the link, how many recipients opened it and when, and asks. It will not proceed without your yes.
lnkdrp_restore_share_linkBring back a deleted document link or project link, at the same address.write
- linkId: the deleted link's id (from the delete, or the share_link.revoked row in the activity feed)
ok, the restored link id, and notes on its state.
not_found: unknown, or its document or project was permanently removedvalidation: not deleted, or its document or project is deletedforbidden: a viewer, or below admin for a project link
It comes back switched off, with its label, settings and analytics, so the recipient is not let back in until you turn it on. No confirmation, because nothing is lost by it.
lnkdrp_set_doc_visibilityKeep a document inside its project only, or list it in the workspace again.write
- docId
- visibility: "project" to keep it inside its project, "workspace" to list it everywhere again
docId, visibility, primaryProjectId.
validation: the document is in no project (VISIBILITY_NEEDS_PROJECT)not_found
A contained document leaves every workspace-wide list, search, the dashboard and lnkdrp_list_docs; the project's own listing, its direct link, metrics and history keep working. Adding a contained document to a second project is refused until it is listed again.
lnkdrp_archive_docArchive a document to free a slot, or bring it back. Reversible; keeps analytics. Confirms with you first.asks firstwrite
- docId
- archived: true to archive, false to bring it back
- confirm: only for clients that cannot show you a prompt
ok, the document's new archived state, and how many links were affected.
validation: you did not confirmnot_foundplan_limit: unarchiving at the Free shared-document cap
Archiving takes every link on the document down at once and frees a Free-plan slot; everything comes back on unarchive. It asks first because of the blast radius, even though it is reversible.
lnkdrp_delete_docDelete a document, after confirming with you. It can be restored for 30 days. Prefer archive if you might want it back.asks firstwrite
- docId
- confirm: only for clients that cannot show you a prompt
ok, and what was deleted (document id, title, how many links).
validation: still processing, or you did not confirmnot_found
The document, its file and every link disappear at once; lnkdrp_restore_doc brings them back for 30 days, then it is purged for good. It shows you the document, its links and traffic first, and will not proceed without your yes.
lnkdrp_restore_docBring back a document deleted in the last 30 days, with its links working again.write
- docId: the deleted document's id (from the delete, or a doc.deleted row in the activity feed)
ok, the restored document id, and notes on its links and tags.
not_found: unknown, or permanently removedvalidation: not deleted, or its project or workspace is deletedplan_limit: at the Free shared-document cap
Puts back exactly what the delete took away; its tags are not restored. No confirmation, because nothing is lost by it.
lnkdrp_update_docRename a document without uploading a new version.write
- docId
- title: 1 to 200 characters
docId, the new title and the previous one; unchanged: true when it already had that title.
validation: an empty or too-long titlenot_foundforbidden: a viewer or a read-only key
Recipients see the title too: in the tab and link preview of its links, and under a project link. The file, version, links and analytics are unchanged, and the rename shows in the activity feed.
lnkdrp_create_projectCreate a project to group documents, such as a data room for one deal.write
- idempotencyKey: required; reuse it on retries and you get the same project back
- name: 1 to 80 characters, unique in the workspace
- description: optional; shown on the project's public page
The project: id, slug, name, description, document count, its page in the app, and its public page URL.
plan_limit: the Free plan's project cap; the error lists what you can still do without upgradingvalidation: a missing or too-long name, or a name another project already uses
A new project's public page is on from the start and lists every document you add whose link is on. Turn it off with update_project if you don't want it.
lnkdrp_list_projectsList the workspace's projects, or search them by name.read
- query: optional; matches project names and descriptions
- page: optional, default 1
- limit: optional, 1 to 50, default 25
total, page, limit, hasMore and the projects, most recently updated first: id, slug, name, description, document count, app URL and dates.
validation: an out-of-range page or limit
lnkdrp_get_projectOne project and a page of its documents.read
- projectId or projectSlug: exactly one
- query: optional; only documents whose title or link slug matches
- page: optional, default 1
- limit: optional, 1 to 50, default 25
The project (id, slug, name, description, document count, app URL, whether its public page is on and its URL) and its documents: id, shareId and share URL, title, status, version and dates. Archived documents are left out.
not_found: no such project in this workspacevalidation: both or neither of projectId and projectSlug
lnkdrp_get_project_statsWho opened a project's links and what they read: the analytics of a data room.read
- projectId or projectSlug: exactly one
- shareId: optional; one project link only
- days: optional, 1 to 60, default 15
- includeViewers / includeVisits: optional; per-reader detail and visit briefs
- viewerUserId or viewerBotIdHash, docId: optional; one reader, one document
Landings and document opens over time, each reader with the documents they opened and for how long, and the project's visit briefs. Names, emails and brief text are marked as content from viewers.
not_found: no such project in this workspacevalidation: both or neither of projectId and projectSlug, or an out-of-range value
The project-level counterpart of lnkdrp_get_share_stats. Capped at 50 readers and 10 documents per reader, with counts of what was left out.
lnkdrp_get_team_statsWhat each member of the workspace did: the Team tab of the Metrics page.read
- range: optional, 7d, 30d or 90d, default 30d
- includeMemberSeries: optional; each member's actions per day
One row per owner, admin and member, their agents counted as them: documents added, new versions published (a replaced file or a published draft), drafts added and waiting for review, links created and marked sent, views and readers on their links, last active. Team totals and actions per day. Names and emails are marked as content people typed.
validation: a range other than 7d, 30d or 90d
On Free, or with nobody else in the workspace, it answers with no rows and a note saying why.
lnkdrp_add_docs_to_projectPut documents into a project. A document can be in several projects.write
- projectId or projectSlug: exactly one
- docIds: 1 to 50 document ids
Which documents were added, which were already in the project, which were not found (unknown, deleted or archived), and any that failed with the reason.
not_found: no such project in this workspaceforbidden: a read-only key, or a viewer in the workspace
Safe to retry. While the project's public page is on, added documents whose link is on are listed there.
lnkdrp_remove_doc_from_projectTake a document out of a project. The document itself stays.write
- projectId or projectSlug: exactly one
- docId
Whether it was removed, whether it was in the project at all, and the projects it is still in.
not_found: no such project or document in this workspace
Not a delete: the document, its links, their analytics and its other projects are untouched, so it doesn't ask first.
lnkdrp_update_projectRename a project, change its description, or turn its public page on or off.write
- projectId or projectSlug: exactly one
- name: optional, 1 to 80 characters
- description: optional; an empty string clears it
- publicPageEnabled: optional; whether the project's public page works
The updated project.
validation: nothing to change, or a name another project already usesnot_found
Anything you don't pass is kept. Renaming keeps the slug and every URL.
lnkdrp_delete_projectDelete a project after confirming with you. Its documents stay in the workspace; it can be restored for 30 days.asks firstwrite
- projectId or projectSlug: exactly one
- confirm: only for clients that cannot show you a prompt
ok, and what was deleted (project id, slug, how many documents left it).
validation: you did not confirmnot_found
Only the project goes: its documents, their links and analytics are kept. Its public page stops working. lnkdrp_restore_project brings it back, its documents put back, for 30 days; then it is purged for good. It shows you the project, its document count and whether its public page is live, and will not proceed without your yes.
lnkdrp_restore_projectBring back a project deleted in the last 30 days, with its documents put back.write
- projectId or projectSlug of the deleted project (from the delete, or the activity feed)
ok, the restored project, and notes on what came back.
not_found: unknown, or permanently removedvalidation: not deleted, or a live project now uses its name or slugplan_limit: at the Free project cap
No confirmation, because nothing is lost by it.
lnkdrp_list_deletedWhat was deleted in this workspace lately: documents, links and projects, newest first, with what restores each, and the versions removed from live documents.read
- kind: optional; doc, link, project or version (doc, link and project when omitted, with the removed versions listed beside them)
- days: optional; deleted in the last 1 to 30 days, default 7
- page, limit: optional; limit 1 to 50, default 20
Each item's id, title or label, when it was deleted and by whom (and which agent, when one did it), when it will be removed for good, whether it can be restored and with which tool. A link also names its document or project. A removed version has its document, number, file name, the storage its purge frees, its purge date and whether that purge is switched on.
validation: an unknown kind, or days outside 1 to 30
The same list as Recently deleted in the app, for this workspace only and never a deleted workspace or account. It lists what an owner or admin sees there; for a member the list is empty. Private (locked) projects you hold no grant for stay hidden. A removed version cannot be restored, and its PDF counts toward storage until it is purged.
lnkdrp_get_pending_purgesWhat is waiting to be removed for good in this workspace, by kind: how many, when the next one is due, and how much storage each frees.read
One bucket per kind (deleted documents, deleted projects, removed versions, abandoned and failed uploads, documents with no file): count, next purge date, bytes freed, and whether that purge deletes or only reports. Plus the storage meter.
For an owner or admin of this workspace; for a member it is empty. Some kinds only report what they would remove while LinkDrop reviews them; nothing of theirs is deleted.
lnkdrp_create_project_linkSend a whole project to one audience: one link to the project, with its own password and expiry.write
- projectId or projectSlug: exactly one
- label: private name, 1 to 80 characters, never shown to viewers
- audience: optional private note, up to 120 characters
- allowDownload: optional, default off; it governs every document opened through this link
- password: optional, 1 to 128 characters
- expiresAt: optional ISO date in the future
- enabled: optional, default on
- sentAt / sentVia: optional; when the link was sent ("now" or an ISO time) and how, for a link made and sent together
The new link with its own shareUrl (the project page, /p/<shareId>), plus warnings when the project already has a link with that label, or when the new link turned a switched-off public page back on.
validation: missing label, or an expiry in the pastnot_found: the projectforbidden: read-only key, or not an owner or admin
Reach for this instead of one link per document whenever several documents go to the same audience. Everything they open behind it is attributed to this link, so you get one answer to "who came and what did they read".
lnkdrp_list_project_linksEvery link of a project with its settings, status and counts, or search them by name.read
- projectId or projectSlug: exactly one
- query: optional; search this project's links by label or audience
The project, whether its public page is on at all, and every link (default first): label, audience, shareUrl, status (active, disabled, expired), password, expiry and download state, how many documents recipients opened and downloaded through each one, and when it was sent and first opened.
not_found
While the project's public page is off, every link reads disabled. Turn it back on with lnkdrp_update_project.
lnkdrp_update_project_linkChange or revoke one audience's access to a project, leaving the others alone.write
- linkId, and projectId or projectSlug
- label / audience / enabled / allowDownload / password / expiresAt: any of them
- sentAt / sentVia: as on lnkdrp_update_share_link
The updated link.
validation: nothing to change, or an expiry in the pastnot_found: unknown link, or a link on another projectforbidden
enabled: false takes the whole project away from one recipient instantly and reversibly, without touching the documents, their own links, or anyone else's project link. Usually what you want instead of deleting.
lnkdrp_delete_project_linkDelete one project link after confirming with you; its past analytics are kept.asks firstwrite
- linkId, and projectId or projectSlug
- confirm: only for clients that cannot show you a prompt; the agent sets it after you say yes
ok, and what was deleted (link id, shareId, label). The link stops resolving at once; its analytics stay in the project's totals. lnkdrp_restore_share_link brings it back for as long as the project exists.
validation: the project's default link cannot be deleted (disable it instead), or you did not confirmnot_found
The recipient loses the whole project, not one document, so it shows you how many documents they opened through it and when, and will not proceed without your yes.
lnkdrp_star_docsStar or unstar documents so they sit at the top of your sidebar.write
- docIds: 1 to 50 documents
- starred: true to star (default), false to unstar
Which documents changed, which were already that way, which weren't found, and your starred list afterwards.
not_found: reported per document in notFound, not as an error
Stars are yours, not the workspace's, and recipients never see them. Safe to repeat: starring a starred document does nothing.
lnkdrp_list_tagsEvery tag in the workspace, with how many things carry each.read
Each tag's id, name, slug, colour and how many documents and projects carry it, alphabetical.
Read it before tagging to reuse the workspace's own words; a workspace with “Fundraising” does not want “fund raising” as well.
lnkdrp_tagPut tags on a document, a project or a contact, by name.write
- docId, projectId or contactId: exactly one
- tags: 1 to 10 names, created if the workspace has none by that name
Every tag on the item afterwards, and which names were newly created.
validation: not exactly one of docId, projectId and contactId, or a name with no letters or digitsnot_found: no such document, project or contact in this workspace
Names fold on case, accents and punctuation, so “Fundraising” and “fundraising” are one tag. Tags are private to the workspace; recipients never see them.
lnkdrp_untagTake tags off a document, a project or a contact.write
- docId, projectId or contactId: exactly one
- tags: 1 to 10 names to remove
What was removed, what was not on the item (notTagged), and the tags left.
validation: not exactly one of docId, projectId and contactIdnot_found: no such document, project or contact in this workspace
The tag itself survives on everything else that carries it; only this item loses it.
lnkdrp_list_contactsThe people the workspace has heard from, with what they read and the team's tags.read
- query (optional): match name, address or domain
- tagSlug (optional): only contacts carrying that tag
- docId or projectId (optional): only contacts who touched it
- since (optional): only contacts last seen on or after a date
- sort, dir, page, limit (optional)
Each contact's id, name, address, domain, first and last seen, documents read, visits and tags, with the total.
not_found: no tag by that slugvalidation: a date since cannot read
Read-only. Every contact comes with its name and address on every plan; the name is the team's when the team gave one, and query also finds the name the person gave.
lnkdrp_get_contactOne contact: identity, sources, everything they touched, and the note.read
- contactId: from lnkdrp_list_contacts
The contact with every source, document and project they touched, their tags, the team's note with who wrote it, and who named them when the team did.
not_found: no such contact in this workspace
Names, addresses, titles and the note come wrapped as untrusted content. Read-only: lnkdrp_update_contact edits a contact.
lnkdrp_list_starredList your starred documents, in sidebar order.read
Each starred document's id, title and when it was starred.
Deleted and archived documents are left out; their stars come back if the document does.
lnkdrp_add_contactAdd somebody to the workspace's contacts by email address.write
- email: required; the person's address, which is the contact's identity
- name: optional, up to 80 characters
created (false when the address was already a contact), the contact, and a note saying which happened.
validation: a malformed address
An address already in the contacts is not an error: it gains a source recording that this agent added it. A name already on file is kept; a name it fills in counts as the team's, not the person's. lnkdrp_update_contact renames.
lnkdrp_update_contactRename a contact, or write, replace or clear the team's note on them.write
- contactId: from lnkdrp_list_contacts
- name: optional, up to 80 characters; null goes back to the name the person gave
- note: optional, up to 2,000 characters; null clears it
The contact after the edit, what changed, and the note it replaced (with who wrote it) when it overwrote one.
validation: neither name nor note, or one over its limitnot_found: no such contact, or deletedupstream (409): the contact kept changing while it was being saved; nothing was written, so retry
The team's name wins over what the person later says about themselves. Tags are lnkdrp_tag and lnkdrp_untag with contactId. Shows in your activity feed as yours and the agent's.
lnkdrp_delete_contactDelete one contact after confirming with you; their reading stays in your documents' analytics.asks firstwrite
- contactId: from lnkdrp_list_contacts
- confirm: only for clients that cannot show you a prompt; the agent sets it after you say yes
ok, who was deleted, and what went with them (note, tags, reader summary, reader profile). No document's numbers change.
validation: you did not confirm, or declinednot_found: no such contact, or already deleted
Before acting it shows you who the contact is and what the team kept about them, and asks. It cannot be undone; they come back only if they read, introduce themselves or are added again.
lnkdrp_list_revisionsWhat changed, newest first: one row per replacement, with the AI compare's summary.read
- docId or shareId: optional; one document's history, or omit both for the whole workspace
- since: optional; an ISO date, 24h, 7d, 30d, this_week or this_month
- limit: optional, 1 to 50, default 20
- cursor: optional; the nextCursor from the previous page
Each revision's document, from and to versions, who replaced it and when, the one-line summary, and how many changes and pages the compare found. A version published from a draft says who staged it (and the agent they staged it through) and who published it. Plus nextCursor.
not_found: no document by that id or slugvalidation: a since value that cannot be read
A document's first version has no row: there was nothing to compare it with.
lnkdrp_get_revisionOne version's full diff: itemised changes and each changed page's before and after.read
- docId or shareId: the document
- version: optional; the toVersion to explain, default the current version
- includeText: optional; also return the extracted text of both versions
The compare's summary, the itemised changes, per changed page the kind of change and the previous and new wording, file sizes and page counts on both sides, and whether the compare ran.
not_found: version 1, or a version with no stored record
Everything the compare wrote comes back as untrusted document text.
lnkdrp_restore_versionMake an earlier version of a document the current one again, on Pro. Every link shows that file again; nothing is deleted.asks firstwrite
- docId or shareId: the document
- version or fileName: the version to make current, by number or by the file name it was uploaded as
- confirm: only for clients that cannot show you a prompt
The new version number, the version it restored, its file name, the version now current, and whether its compare was copied from the stored one.
not_found: no such versionvalidation: already current, a version still processing, or you did not confirmplan_limit: Free workspaces (replace the file instead)
It adds a version that reuses the earlier one's stored file: no upload, no AI and no credits. It asks you first when recipients have opened the document.
lnkdrp_remove_latest_versionRemove a document's latest version, on Pro, so the version before it is current again. Confirms with you first.asks firstwrite
- docId or shareId: the document
- version: the latest version's number
- confirm: only for clients that cannot show you a prompt
The removed version and its file name, the version now current and its file name, and the number the next upload gets.
validation: not the latest version, the only version, or you did not confirmnot_found: no such versionplan_limit: Free workspaces
It shows you who viewed the version first. The version leaves the history; its views stay in the analytics. There is no undo: upload the file again.
lnkdrp_get_draftRead a document's drafts: new files waiting for review, with what each changes compared with the live version.read
- docId or shareId: the document
- uploadId: optional; one draft, in any state
- mine: optional; only your own open draft
- status: optional; open (default), published or discarded (replaced and expired included, last 90 days)
One draft with its changes page by page (or the list when several are open), the version it is based on and whether that is the live version, who staged it, when it expires, the review page link, and who may publish the document. With status published or discarded: those drafts, with who published or discarded each, when, and the version a published one became.
not_found: no such draft, or you have none open
Recipients never see drafts, and the version history does not list them until they are published.
lnkdrp_list_draftsList the workspace's drafts across documents: open ones waiting for your review, your own, or all of them, with who added each; the ones already published or discarded; or every draft together.read
- status: optional; open (default), published, discarded (replaced and expired included, last 90 days), or all (every draft together, newest activity first, as the Drafts page shows by default)
- filter: optional; needs_my_review (default for open drafts: drafts someone else added, on documents you may publish), mine, or all (default for the other statuses)
- offset / limit: optional; page on (up to 100 at a time)
Each draft's document, who added it (or their agent), its state (open, published as a version, discarded) and how many pages changed, the version it is based on and the live version's number, when, whether you may publish or discard it, and the review page link; plus how many drafts each filter and each status holds.
The same list as the Drafts page in the app's sidebar. Drafts in locked rooms you cannot open are left out.
lnkdrp_publish_draftMake a draft the live version of its document. Every link shows it at once; the version that was live stays in the history.asks firstwrite
- docId or shareId: the document
- uploadId: optional; default your own open draft, or the only one
- confirm: only for clients that cannot show you a prompt
The new version number, the version it replaced, the file name, whether the draft's compare became the version's change record, and the share link. For a draft based on an older version, which later versions' changes it does not include.
forbidden: only the document's publishers may publish it; the error names themvalidation: the draft is still being prepared or failed, or the document changed meanwhilenot_found: no open draft
It asks you first when recipients have opened the document. Works on every plan; the summary is written after publishing.
lnkdrp_discard_draftDiscard a draft. The live version and every link stay as they are. Confirms with you first.asks firstwrite
- docId or shareId: the document
- uploadId: optional; default your own open draft, or the only one
- confirm: only for clients that cannot show you a prompt
discarded: true with the draft's uploadId and file name.
forbidden: someone else's draft (its owner, the document's publishers and admins may discard it)not_found: no open draft
There is no undo: stage the file again to make a new draft. Its space is freed at once.
lnkdrp_recompare_draftCompare a draft again against the version that is live now, when the live version moved after it was compared. Nothing recipients see changes.write
- docId or shareId: the document
- uploadId: optional; default your own open draft, or the only one
- baseVersion: optional; compare with this version instead, which becomes the draft's base
The draft as it stands (processing until the new compare lands).
validation: the draft is already compared with that version, still being prepared, or failed, or baseVersion is not a version of the documentnot_found: no open draft
Uses credits like any compare; a failed compare is refunded.
lnkdrp_set_doc_publishersChoose who may publish a document (replace its file or publish a draft): the workspace default, owners and admins, also chosen people, or everyone on the team. Owners, admins and the document's owner always can; everyone else can still add drafts. Confirms with you first.asks firstwrite
- docId or shareId: the document
- mode: default (follow the workspace), owners, chosen or everyone; left out, a list means chosen and an empty one the default
- publishers: for chosen, up to 5 members by email, name or user id ("me" for yourself)
- confirm: only for clients that cannot show you a prompt
The mode in force, the document's own choice, the workspace's default, the listed publishers, and what you may do on it.
plan_limit: chosen and everyone are Pro features (the default and owners work on every plan)forbidden: only owners and admins, the document's owner and its publishers may change it; when everyone can publish, only the document's owner and owners and adminsvalidation: a name that matches no member, a viewer, or more than 5 people
Workspace owners and admins and the document's owner can always publish. Viewers never can.
lnkdrp_get_storageHow much storage the workspace uses: every stored file, open drafts, what is waiting to be removed, and the largest documents.read
Used and total storage, the split between PDFs and the page images and previews made from them, open drafts, space waiting for the purge, the ten largest documents, and storage add-ons (not available yet).
Storage counts every stored file, so it reads higher than the PDFs alone. Add-ons are coming; until then delete old documents or upgrade.
lnkdrp_revision_contributorsWho replaces documents most, with how many and when.read
- docId or shareId: optional; one document, or omit both for the workspace
- since: optional; as for list_revisions
Members, most active first, with replacements, documents and first and last dates, plus the agents that made replacements. Each has a url to their page.
not_found: no document by that id or slug
lnkdrp_request_member_inviteAsk an owner or admin to invite someone as a member or viewer.write
- email: required; where the invitation goes
- role: optional; member (default) or viewer
An approvalId, its status and expiry, and an approvalUrl for an owner or admin to open and approve.
validation: a malformed addressrefused at once: the person is already in the workspace, or the plan has no seat for another member
Sends nothing and grants nothing until a person approves it. A request expires after 30 minutes. An agent cannot ask for an admin.
lnkdrp_check_approvalWhether a member-invite request was approved, denied or expired.read
- approvalId: from lnkdrp_request_member_invite
The request's status (pending, approved, denied or expired), the address and role, and when it expires.
not_found: no such request in this workspace
lnkdrp_get_notificationsWhat is waiting for you: download requests to decide, failed documents, broken integrations.read
- limit: optional; up to 100, default 20
- includeDismissed: optional; items you dismissed in the app, flagged (default true)
Your open items, newest first, with the badge's count. A download request names the document, the link and the requester, whose address, name and note are wrapped as reader text.
forbidden: the key has no scope to read with
Every other tool's result also carries a one-line needsYou note while something is waiting, and agents that read MCP log messages are told live when something new arrives.
lnkdrp_decide_download_requestApprove or deny a download request, after you confirm in the agent's prompt.write
- notificationId or requestId: from lnkdrp_get_notifications
- decision: approve or deny
What was decided, the request's status now, and the app's own sentence.
refused: the agent's client cannot show the confirmation prompt, or you did not confirm (decide in the app or from the email instead)not_found: the request is not waiting for yourate_limited: too many decisions in the last hour
You confirm every decision in lnkdrp's own prompt; there is no way for the agent to skip it. Only the document's owner or the link's creator can decide, and the requester's email names you, not the agent.
lnkdrp_get_settingsYour own settings: your name, your preferences and which notification emails you get from this workspace.read
- None.
Your name and sign-in email, each preference with its value and what it does, your email mode for each kind of notification (off, daily or immediate), and who publishes new versions in the workspace by default.
Only the settings of the person the connection acts for. The sign-in email is shown but cannot be changed by an agent.
lnkdrp_update_settingsChange your own settings, after you confirm: your name, a preference, or a notification email; and, for an owner or admin, who publishes new versions in the workspace by default.asks firstwrite
- name: optional; { firstName, lastName? }, your name on every workspace you belong to
- preferences: optional; one or more preference keys with new values (lnkdrp_get_settings lists them)
- notifications: optional; viewEmailMode, briefEmailMode, docUpdateEmailMode, docUploadEmailMode, versionChangeEmailMode (owners and admins), each off, daily or immediate
- workspace: optional; { publishDefault: owners or everyone }, who publishes new versions of documents that follow the workspace (owners and admins only; everyone is Pro)
- confirm: only for clients that cannot show you a prompt; the agent sets it after you say yes
What changed, each with its old and new value. A setting that already had the value changes nothing and is not asked about.
validation: nothing to change, an unknown preference or value, or you did not confirm or declined
Every change asks you first, like a delete, showing each setting's current and new value; you can change it back at any time. Billing, keys, your sign-in email, deleting your account or a workspace, and workspace members stay with you in the app.
lnkdrp_create_email_templateCreate an email template: a subject and a text or HTML body with replaceable tags.write
- name: unique in the workspace
- format: text or html
- align: optional; left (default) or center, where an HTML email sits in the reader's window
- subject: one line, with tags
- body: with tags; contains {{link.url}}
- description: optional
- tags: optional; each {{custom.x}} used, with a description of what it stands for
The template with every tag it uses (entity, description, required, example), unusedTags, and warnings (body_self_centred: an HTML body that centres itself while align is left).
validation: an unknown or malformed tag, no {{link.url}}, HTML with scripts or a tag in a link or unquoted attribute, or a name already used
Tags are {{entity.field}} or {{entity.field|fallback}}; LinkDrop fills contact.*, link.url, document.title, project.name, sender.*, workspace.name for each recipient, and {{custom.x}} takes a value you give when rendering.
lnkdrp_list_email_templatesThe workspace's email templates, without their bodies.read
- query: optional; part of the name
- page, limit: optional
Each template's name, format, subject and tags, and builtInTags: the tags LinkDrop fills for each recipient.
lnkdrp_get_email_templateOne email template in full: subject, body and every tag with its entity and description.read
- templateId: from lnkdrp_list_email_templates
The template and builtInTags.
not_found: no such template in this workspace
lnkdrp_update_email_templateChange an email template's name, description, format, alignment, subject, body or tags.write
- templateId
- name, description, format, align, subject, body, tags: optional; tags replaces the whole list
The template, unusedTags and warnings. Emails already rendered keep their text.
validation: the same checks as creatingnot_found: no such template
lnkdrp_delete_email_templateDelete an email template, after you confirm.asks firstwrite
- templateId
- confirm: only for clients that cannot show you a prompt
What was deleted and how many rendered emails stay until they expire.
not_found: no such template
Share links and contacts are not touched.
lnkdrp_preview_email_templatePreview a template with example values: a saved one or a draft, with no recipient.read
- templateId: a saved template, or format, subject, body and tags for a draft
- values: optional; values for tags, by key
The subject, text and html as they would read, the tags with no value (missingTags), and what a save would refuse (errors). Nothing is stored and no link is made; {{link.url}} shows an example address.
validation: a body that is not a template at allnot_found: no such template
A preview page with a link of its own comes from lnkdrp_render_email, which renders for a real contact.
lnkdrp_create_contact_listCreate a contact list, such as Investors, from existing contacts.write
- name: unique in the workspace
- description: optional
- contactIds, emails: optional; existing contacts
The list, how many were added, and the addresses that are not contacts (notFound).
validation: a name already used, or the workspace has 50 listslist_members_limit: 500 members
lnkdrp_list_contact_listsThe workspace's contact lists, with how many members each has.read
- page, limit: optional
Each list's name, description and memberCount.
lnkdrp_get_contact_listOne contact list with a page of its members.read
- listId
- page, limit: optional
The list and its members (contact id, name, address, domain), each member's contactId being what lnkdrp_render_email takes.
not_found: no such list
lnkdrp_update_contact_listRename or re-describe a contact list.write
- listId
- name, description: optional
The list.
validation: a name already usednot_found: no such list
lnkdrp_delete_contact_listDelete a contact list, after you confirm; its contacts stay.asks firstwrite
- listId
- confirm: only for clients that cannot show you a prompt
What was deleted.
not_found: no such list
lnkdrp_add_contact_list_membersAdd existing contacts to a contact list.write
- listId
- contactIds, emails: up to 100 in all
The list, how many were added or already members, and the addresses that are not contacts.
not_found: no such listlist_members_limit: 500 members
lnkdrp_remove_contact_list_membersTake contacts off a contact list; the contacts stay.write
- listId
- contactIds: up to 100
The list and how many were removed.
not_found: no such list
lnkdrp_render_emailRender one email from a template for one contact and one document or project, with a preview page.write
- templateId
- contactId or contactEmail: an existing contact
- docId or projectId
- values: optional; values for custom tags
The subject, text and html, the tags still missing, warnings, whether it is ready, the contact's own link (made if they had none), and previewUrl: a signed page, valid 7 days, that shows the email without sign-in.
validation: a contact that does not exist, or the contact's link is switched off or expired (link_inactive)not_found: no such template, document or project
Rendering the same email again before it is sent replaces it. Nothing is sent: the agent sends it with its own mail tool and records it with lnkdrp_mark_email_sent, or uses lnkdrp_send_email.
lnkdrp_list_email_rendersRendered emails, newest first, kept 30 days.read
- templateId, contactId, sent: optional filters
- page, limit: optional
Each email's recipient, document or project, link, subject, missing tags, preview page and whether it was sent or held.
lnkdrp_get_email_renderOne rendered email in full, with a fresh preview page.read
- renderId
The email's subject, text and html, its recipient and link, and what to do to send it.
not_found: no such email, or it expired
lnkdrp_delete_email_renderDelete a rendered email and its preview page, after you confirm; the link stays.asks firstwrite
- renderId
What was deleted.
not_found: no such email
lnkdrp_mark_email_sentRecord that a rendered email went out through the agent's own mail tool or by hand.write
- renderId
- sentAt: optional; now or a date-time
- via: optional; agent_gmail or manual
The email, marked sent, and the recipient's link marked sent by email.
not_found: no such email
Already marked sent: nothing changes.
lnkdrp_send_emailAsk to send a rendered email from the Gmail account you connected to LinkDrop. You approve it in LinkDrop, every time.write
- renderId
approval_required, with approvalUrl: a page in LinkDrop where you see the whole email and click Approve and send. Nothing is sent before that click.
gmail_not_connected: connect Gmail on Integrationsgmail_not_configured: this server has no Gmail sendingvalidation: missing tags, the link is off, already sent, or a send in progressrate_limited: 50 Gmail sends per person per day
Your agent never sends an email by itself. You open the approval link signed in to LinkDrop, read the email as the recipient will get it, and approve or decline; it cannot be set to Always allow. The agent sees the result with lnkdrp_check_approval or by reading the email.
lnkdrp_upload_email_assetUpload an image (GIF, PNG, JPEG or WebP) for HTML email templates, from its bytes or an https URL.write
- dataBase64 or sourceUrl: exactly one; sourceUrl must be https
- name: optional; the display name and alt text
The image's id, public URL, type, size and pixel size, and imgTag: a ready <img> to put in an HTML template's body.
validation: neither or both sources, or not httpsimage_type_not_allowed: the bytes are not GIF, PNG, JPEG or WebP (never SVG)image_too_large: over 5 MBsource_unavailable: the URL could not be fetchedassets_limit: 200 images per workspace
An HTML template can show only images uploaded this way to the same workspace; any other image source is refused when the template is saved.
lnkdrp_list_email_assetsThe workspace's uploaded email images, newest first.read
- none
Each image's id, name, URL, type, size, pixel size and imgTag.
lnkdrp_delete_email_assetDelete an uploaded email image, after you confirm.asks firstwrite
- assetId
- confirm: only for clients that cannot show you a prompt
What was deleted.
not_found: no such image
Templates that show it keep their text but the image stops loading, and their next save asks for it to be taken out.
lnkdrp_confirm_actionWhat the buttons on LinkDrop's confirmation card call in ChatGPT: delete or archive once, always allow that function, or cancel. Agents never call it.write
- cardToken: held by the card only, never shown to the agent
- decision: once, remember (always allow this function on this connection) or cancel
Done (with the action's own result) or cancelled.
validation: the card's confirmation expired (10 minutes), was already used, or belongs to another connection; nothing changed
Hidden from the agent in ChatGPT; other clients may list it, but only the card ever holds its token. In ChatGPT a delete or archive shows a LinkDrop card with the preview and three buttons; only a click on the card carries it out, and Cancel is final.
Ready to connect?
Keys are created in your workspace and shown once. One key per agent or machine, up to ten per workspace.
Sign in to create a keyLast updated: October 13, 2026