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.

Pick your client

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

ToolAccess
lnkdrp_whoamiWhich workspace, plan and key the agent is using.read
Inputs
  • none
Returns

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 and purchased) and when they reset, whether on-demand usage keeps AI running past them (onDemand, 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.

Errors
  • unauthorized: the key is missing or invalid
  • key_revoked: the key was revoked
Worth knowing

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
Inputs
  • 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
Returns

total, page, limit, hasMore and the matching documents: id, default shareId and shareUrl, title, one-line summary, processing status, version and dates. Archived and deleted documents are left out.

Errors
  • validation: a malformed id or an out-of-range page or limit
Worth knowing

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
Inputs
  • 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)
Returns

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.

Errors
  • validation: an unknown event type, a malformed cursor or an out-of-range limit
Worth knowing

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
Inputs
  • 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
  • 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.)
  • 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)
Returns

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.

Errors
  • plan_limit: the Free plan's shared-document cap; the error lists what you can still do without upgrading
  • out_of_credits: the AI summary needs credits the workspace does not have; add credits or retry after the reset
  • fetch_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 them
  • drive_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 Sheet
  • validation: 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
  • not_found: the uploadId is not this connection's, was already used, or expired and was cleared; get a new one from lnkdrp_create_upload
Worth knowing

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). If the agent's client blocks that upload, it saves the PDF to the person's Downloads folder and says where. 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
Inputs
  • 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
  • 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
  • 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)
Returns

docId, shareId, shareUrl, status, the new version number, uploadId, what optimization did (optimized), and any AI steps that were skipped as warnings.

Errors
  • 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 reset
  • fetch_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 them
  • drive_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 Sheet
  • validation: 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
Worth knowing

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_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
Inputs
  • 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)
Returns

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.

Errors
  • no_remote_source: the document was uploaded, not imported from a linked file; use lnkdrp_replace_pdf
  • 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 them
  • drive_file_not_found: their Drive connection cannot see the file; the error names whose Drive it was imported from
  • version_processing: a new version is still being prepared; wait for it, then update again
Worth knowing

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
Inputs
  • 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
Returns

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.

Errors
  • drive_not_connected: the person has not connected Google Drive to LinkDrop; give them the Integrations page link the error carries
  • drive_token_revoked: Google no longer accepts their Drive connection; ask them to reconnect it on the Integrations page
Worth knowing

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
Inputs
  • 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
Returns

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.

Errors
  • 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 upload
  • too_large: the declared size is over 50 MB
  • rate_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
Worth knowing

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, it saves the PDF to the person's Downloads folder and says where.

lnkdrp_get_shareStatus, settings and summary of a link. Poll it after share_pdf.read
Inputs
  • docId or shareId: exactly one; any of a document's links resolves
Returns

Processing status, whether sharing is on, download/password/version-history settings, the share URL, preview image, and the AI one-liner and summary once ready. Asked about a specific link, it reports that link's own settings and a link block naming it.

Errors
  • validation: none or both ids given
  • not_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
Inputs
  • idempotencyKey: required
  • docId
  • shareEnabled / allowDownload: optional booleans
  • password: a string to set, null to remove
  • allowRevisionHistory: optional; letting recipients browse versions is Pro
Returns

The same shape as lnkdrp_get_share, after the change.

Errors
  • plan_limit: turning sharing on at the Free shared-document cap, or version history on Free
  • forbidden: a read-only key
  • not_found
lnkdrp_get_share_statsViews, downloads and viewers for a link over a window of days.read
Inputs
  • 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
Returns

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.

Errors
  • validation
  • not_found
Worth knowing

views counts recipients; opens counts sittings. A reader who came back three times is one view and three opens.

lnkdrp_create_share_linkAdd another link to a document, one per recipient, with its own label, password and expiry.write
Inputs
  • 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
Returns

The new link with its own shareUrl, working immediately.

Errors
  • validation: missing label, past expiry, short password
  • not_found: the document
Worth knowing

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
Inputs
  • docId
  • query: optional; full-text search this document's links by label/audience, ranked by relevance
Returns

Every link (or, with query, only the matches), default first: label, audience, shareUrl, status (active, disabled, expired), password and expiry state, and that link's viewer and download counts.

Errors
  • not_found
Worth knowing

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
Inputs
  • query: the name to search for, e.g. "a16z" or "Sequoia"
  • limit: optional, 1 to 50, default 20
Returns

The matching links, ranked by relevance: which document each is on (id, title, default shareId), the link's own id, shareId, shareUrl, label, audience and whether it's the default link.

Errors
    Worth knowing

    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
    Inputs
    • docId and linkId
    • password: the candidate to test
    Returns

    { passwordEnabled, matches }. matches is false whenever the link has no password.

    Errors
    • validation
    • not_found: unknown link, or a link on another document
    • forbidden: owner or admin only
    • rate_limited
    Worth knowing

    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_get_share_link_passwordShow the password set on a link, so an agent can tell the owner what it is later.read
    Inputs
    • docId and linkId
    Returns

    { passwordEnabled, password }. password is null when the link has none, or when only its hash survives.

    Errors
    • not_found: unknown link, or a link on another document
    • forbidden: owner or admin only
    • rate_limited
    Worth knowing

    Returns the secret in plain text, so every read writes a workspace activity row. Prefer lnkdrp_verify_share_password when you only need to confirm a password you already have.

    lnkdrp_update_share_linkChange or disable one link without touching the document's other links.write
    Inputs
    • linkId and docId
    • label / audience / enabled / allowDownload / password / expiresAt / allowRevisionHistory: any of them
    Returns

    The updated link.

    Errors
    • validation
    • not_found: unknown link, or a link on another document
    • forbidden
    Worth knowing

    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
    Inputs
    • linkId and docId
    • confirm: only for clients that cannot show you a prompt; the agent sets it after you say yes
    Returns

    ok, and what was deleted (link id, shareId, label). The link stops resolving at once and cannot come back; its analytics stay in the document's totals.

    Errors
    • validation: the default link cannot be deleted (disable it instead), or you did not confirm
    • not_found
    Asks you first

    Before acting it shows you the link, how many recipients opened it and when, and asks. It will not proceed without your yes.

    lnkdrp_set_doc_visibilityKeep a document inside its project only, or list it in the workspace again.write
    Inputs
    • docId
    • visibility: "project" to keep it inside its project, "workspace" to list it everywhere again
    Returns

    docId, visibility, primaryProjectId.

    Errors
    • validation: the document is in no project (VISIBILITY_NEEDS_PROJECT)
    • not_found
    Worth knowing

    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
    Inputs
    • docId
    • archived: true to archive, false to bring it back
    • confirm: only for clients that cannot show you a prompt
    Returns

    ok, the document's new archived state, and how many links were affected.

    Errors
    • validation: you did not confirm
    • not_found
    • plan_limit: unarchiving at the Free shared-document cap
    Asks you first

    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
    Inputs
    • docId
    • confirm: only for clients that cannot show you a prompt
    Returns

    ok, and what was deleted (document id, title, how many links).

    Errors
    • validation: still processing, or you did not confirm
    • not_found
    Asks you first

    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
    Inputs
    • docId: the deleted document's id (from the delete, or a doc.deleted row in the activity feed)
    Returns

    ok, the restored document id, and notes on its links and tags.

    Errors
    • not_found: unknown, or permanently removed
    • validation: not deleted, or its project or workspace is deleted
    • plan_limit: at the Free shared-document cap
    Worth knowing

    Puts back exactly what the delete took away; its tags are not restored. No confirmation, because nothing is lost by it.

    lnkdrp_create_projectCreate a project to group documents, such as a data room for one deal.write
    Inputs
    • 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
    Returns

    The project: id, slug, name, description, document count, its page in the app, and its public page URL.

    Errors
    • plan_limit: the Free plan's project cap; the error lists what you can still do without upgrading
    • validation: a missing or too-long name, or a name another project already uses
    Worth knowing

    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
    Inputs
    • query: optional; matches project names and descriptions
    • page: optional, default 1
    • limit: optional, 1 to 50, default 25
    Returns

    total, page, limit, hasMore and the projects, most recently updated first: id, slug, name, description, document count, app URL and dates.

    Errors
    • validation: an out-of-range page or limit
    lnkdrp_get_projectOne project and a page of its documents.read
    Inputs
    • 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
    Returns

    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.

    Errors
    • not_found: no such project in this workspace
    • validation: both or neither of projectId and projectSlug
    lnkdrp_add_docs_to_projectPut documents into a project. A document can be in several projects.write
    Inputs
    • projectId or projectSlug: exactly one
    • docIds: 1 to 50 document ids
    Returns

    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.

    Errors
    • not_found: no such project in this workspace
    • forbidden: a read-only key, or a viewer in the workspace
    Worth knowing

    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
    Inputs
    • projectId or projectSlug: exactly one
    • docId
    Returns

    Whether it was removed, whether it was in the project at all, and the projects it is still in.

    Errors
    • not_found: no such project or document in this workspace
    Worth knowing

    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
    Inputs
    • 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
    Returns

    The updated project.

    Errors
    • validation: nothing to change, or a name another project already uses
    • not_found
    Worth knowing

    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.asks firstwrite
    Inputs
    • projectId or projectSlug: exactly one
    • confirm: only for clients that cannot show you a prompt
    Returns

    ok, and what was deleted (project id, slug, how many documents left it).

    Errors
    • validation: you did not confirm
    • not_found
    Asks you first

    Only the project goes: its documents, their links and analytics are kept. Its public page stops working and the project can't be restored. It shows you the project, its document count and whether its public page is live, and will not proceed without your yes.

    lnkdrp_create_project_linkSend a whole project to one audience: one link to the project, with its own password and expiry.write
    Inputs
    • 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
    Returns

    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.

    Errors
    • validation: missing label, or an expiry in the past
    • not_found: the project
    • forbidden: read-only key, or not an owner or admin
    Worth knowing

    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
    Inputs
    • projectId or projectSlug: exactly one
    • query: optional; search this project's links by label or audience
    Returns

    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, and how many documents recipients opened and downloaded through each one.

    Errors
    • not_found
    Worth knowing

    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
    Inputs
    • linkId, and projectId or projectSlug
    • label / audience / enabled / allowDownload / password / expiresAt: any of them
    Returns

    The updated link.

    Errors
    • validation: nothing to change, or an expiry in the past
    • not_found: unknown link, or a link on another project
    • forbidden
    Worth knowing

    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
    Inputs
    • linkId, and projectId or projectSlug
    • confirm: only for clients that cannot show you a prompt; the agent sets it after you say yes
    Returns

    ok, and what was deleted (link id, shareId, label). The link stops resolving at once and cannot come back; its analytics stay in the project's totals.

    Errors
    • validation: the project's default link cannot be deleted (disable it instead), or you did not confirm
    • not_found
    Asks you first

    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
    Inputs
    • docIds: 1 to 50 documents
    • starred: true to star (default), false to unstar
    Returns

    Which documents changed, which were already that way, which weren't found, and your starred list afterwards.

    Errors
    • not_found: reported per document in notFound, not as an error
    Worth knowing

    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
    Inputs
      Returns

      Each tag's id, name, slug, colour and how many documents and projects carry it, alphabetical.

      Errors
        Worth knowing

        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 or a project, by name.write
        Inputs
        • docId or projectId: exactly one
        • tags: 1 to 10 names, created if the workspace has none by that name
        Returns

        Every tag on the item afterwards, and which names were newly created.

        Errors
        • validation: both or neither of docId and projectId, or a name with no letters or digits
        • not_found: no such document or project in this workspace
        Worth knowing

        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 or a project.write
        Inputs
        • docId or projectId: exactly one
        • tags: 1 to 10 names to remove
        Returns

        What was removed, what was not on the item (notTagged), and the tags left.

        Errors
        • validation: both or neither of docId and projectId
        • not_found: no such document or project in this workspace
        Worth knowing

        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
        Inputs
        • 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)
        Returns

        Each contact's id, name, address, domain, first and last seen, documents read, visits and tags, with the total.

        Errors
        • not_found: no tag by that slug
        • validation: a date since cannot read
        Worth knowing

        Read-only. Every contact comes with its name and address on every plan.

        lnkdrp_get_contactOne contact: identity, sources, everything they touched, and the note.read
        Inputs
        • contactId: from lnkdrp_list_contacts
        Returns

        The contact with every source, document and project they touched, their tags, and the team's note with who wrote it.

        Errors
        • not_found: no such contact in this workspace
        Worth knowing

        Names, addresses, titles and the note come wrapped as untrusted content; nothing here writes a contact.

        lnkdrp_list_starredList your starred documents, in sidebar order.read
        Inputs
          Returns

          Each starred document's id, title and when it was starred.

          Errors
            Worth knowing

            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
            Inputs
            • email: required; the person's address, which is the contact's identity
            • name: optional, up to 80 characters
            Returns

            created (false when the address was already a contact), the contact, and a note saying which happened.

            Errors
            • validation: a malformed address
            Worth knowing

            An address already in the contacts is not an error: it gains a source recording that this agent added it. Notes and tags on a person have no tool.

            lnkdrp_list_revisionsWhat changed, newest first: one row per replacement, with the AI compare's summary.read
            Inputs
            • 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
            Returns

            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. Plus nextCursor.

            Errors
            • not_found: no document by that id or slug
            • validation: a since value that cannot be read
            Worth knowing

            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
            Inputs
            • 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
            Returns

            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.

            Errors
            • not_found: version 1, or a version with no stored record
            Worth knowing

            Everything the compare wrote comes back as untrusted document text.

            lnkdrp_revision_contributorsWho replaces documents most, with how many and when.read
            Inputs
            • docId or shareId: optional; one document, or omit both for the workspace
            • since: optional; as for list_revisions
            Returns

            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.

            Errors
            • 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
            Inputs
            • email: required; where the invitation goes
            • role: optional; member (default) or viewer
            Returns

            An approvalId, its status and expiry, and an approvalUrl for an owner or admin to open and approve.

            Errors
            • validation: a malformed address
            • refused at once: the person is already in the workspace, or the plan has no seat for another member
            Worth knowing

            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
            Inputs
            • approvalId: from lnkdrp_request_member_invite
            Returns

            The request's status (pending, approved, denied or expired), the address and role, and when it expires.

            Errors
            • not_found: no such request in this workspace

            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 key

            Last updated: September 28, 2026

            Connect your AI agent to LinkDrop - LinkDrop