Skip to main content
Glama

attach_link

Attach an external URL as a zero-byte link, either inside a library (libraryId) or on a task (taskId), exactly one of the two. With libraryId the link becomes a WorkspaceDocument in that library; provider is one of MIRO, FIGMA, NOTION, CONFLUENCE, GOOGLE_DOCS, EXCALIDRAW, OTHER_LINK and url must be http(s); requires project.content.create on the library's project (Viewers are read-only). With taskId the link is the same one a task's Attachments "Add link" makes in the web app: it lands in the project's Project Documents folder and lists with the task's linked files. provider is one of MIRO, FIGMA, NOTION, CONFLUENCE, GOOGLE_DOCS, EXCALIDRAW, OTHER_LINK, SHAREPOINT, MICROSOFT_DRIVE, url must be https, a SHAREPOINT link must be on a SharePoint Online host and a MICROSOFT_DRIVE link on SharePoint Online or personal OneDrive, and those two need a plan with Microsoft files. Linking to a task is available while Onplana has task links turned on, and follows the task attachment rule (project contributors, managers, and the task's assignee or collaborators). The same address already on the task returns the existing link with created: false.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "provider": "<provider>",
      "name": "<name>",
      "url": "<url>"
    },
    "name": "attach_link"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYes1..2048 chars. Library: http(s). Task: https.
nameYesLibrary: 1..200 chars. Task: 1..255 chars.
taskIdNoThe task to link the URL to. Give this or libraryId.
providerYes
libraryIdNoThe library to add the link to. Give this or taskId.
externalFileIdNoTask links only, optional: the Microsoft Graph drive item id of a SharePoint or OneDrive file.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • addedInput schema / properties / externalFileId
      Added value: +{
      +  "description": "Task links only, optional: the Microsoft Graph drive item id of a SharePoint or OneDrive file.",
      +  "type": "string"
      +}
    • addedInput schema / properties / libraryId / description
      Added value: +"The library to add the link to. Give this or taskId."
    • changedInput schema / properties / name / description
      Previous value: -"1..200 chars."New value: +"Library: 1..200 chars. Task: 1..255 chars."
    • changedInput schema / properties / provider / enum
      Previous value: -[
      -  "MIRO",
      -  "FIGMA",
      -  "NOTION",
      -  "CONFLUENCE",
      -  "GOOGLE_DOCS",
      -  "EXCALIDRAW",
      -  "OTHER_LINK"
      -]New value: +[
      +  "MIRO",
      +  "FIGMA",
      +  "NOTION",
      +  "CONFLUENCE",
      +  "GOOGLE_DOCS",
      +  "EXCALIDRAW",
      +  "OTHER_LINK",
      +  "SHAREPOINT",
      +  "MICROSOFT_DRIVE"
      +]
    • addedInput schema / properties / taskId
      Added value: +{
      +  "description": "The task to link the URL to. Give this or libraryId.",
      +  "type": "string"
      +}
    • changedInput schema / properties / url / description
      Previous value: -"1..2048 chars, http(s) only."New value: +"1..2048 chars. Library: http(s). Task: https."
    • changedInput schema / required
      Previous value: -[
      -  "libraryId",
      -  "provider",
      -  "name",
      -  "url"
      -]New value: +[
      +  "provider",
      +  "name",
      +  "url"
      +]
  2. Added

TDQS

A4.2/5.0
Behavior5/5

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

With annotations only covering the safety profile, the description carries real weight: it discloses the permission required on the library's project, that viewers are read-only, the plan gating for SharePoint/OneDrive providers, the host restrictions on those URLs, the feature toggle for task linking, and the dedupe behavior ('same address already on the task returns the existing link with created: false'). The dedupe note sits in mild tension with idempotentHint=false, but it is disclosed rather than hidden, so the agent is not misled about mutation effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core concept and the two-way branch are front-loaded in the first sentence, and every subsequent clause carries a rule (permissions, provider subsets, host constraints, dedupe). It is a single dense paragraph of ~200 words whose readability would improve if the library and task branches were separated into bullets, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation tool with no output schema, the description is nearly complete: it covers both modes, their preconditions, provider legality, and the 'created: false' return signal. It does not say what a fresh link returns (document/link identifier) or what happens when a matching link already exists in a library rather than a task.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the baseline is 3, but the description goes further than the schema by mapping which provider values are legal in which mode (SHAREPOINT/MICROSOFT_DRIVE only for taskId, and https-only there vs http(s) for libraries) — something the single flat enum cannot express. The externalFileId parameter is only described in the schema, not the description, which is the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Attach an external URL as a zero-byte link') and immediately splits the two targets (libraryId vs taskId), so an agent knows exactly what is created. The 'zero-byte link' phrasing implicitly distinguishes it from file-upload siblings, but no sibling (e.g. attach_file_from_url, upload_task_attachment) is named to make the choice explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a hard selection rule ('exactly one of the two'), then describes the distinct outcomes of each mode and the precondition for each (project.content.create with viewers read-only; Microsoft-files plan; task links enabled; task attachment permission set). It stops short of naming a competing tool, so the agent still has to infer when to prefer this over attach_file_from_url.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.