Skip to main content
Glama

List shared links

well_list_share_links
Read-onlyIdempotent

List the workspace's shared links that still open: links made with well_share_widget, well_share_canvas, well_create_expense_group_link, or well_create_chat_invite_link, newest first. Each row says what is shared (the board's name, the widget's tool for a one-widget link, or the expense group's name), who made it (created_by), when it was made and when its last snapshot was taken. A link opens until it is stopped, so its expires_at is null; only a row of kind: "widget" carries a date.

A member sees the links they made; a workspace owner or admin sees every link of the workspace. can_stop says whether the person may stop or refresh that link: they made it, or they are a workspace owner or admin.

Call it when the person asks what has been shared, which links are still open, for a link they made and lost, or to stop or refresh a link they cannot name exactly. Pass canvas_view_id to list only the links of one board. url is the link itself, set only on the person's own board or widget links. Expense-group links keep only a token digest, so their URL cannot be recovered; make a new link if it was lost. A colleague's link has no url; it is theirs to send. Use the share_link_id of a row with well_revoke_share_links. Use well_refresh_share_link only for a board or widget link.

A tracked WhatsApp chat link (kind: "chat_invite") carries chat_invite: its first message, its creator and campaign, its short link, and counts: how many taps, how many conversations it started, and how many of those signed up, read fresh. counts is null when Well could not count in time: never say 0 then. These are counts only; never name or guess who tapped, wrote or signed up. Pass kind: "chat_invite" to read only those links.

When next_cursor is set, more links follow: pass it as cursor to read the next page.

When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.

Input Schema

NameRequiredDescriptionDefault
kindNoOnly links of this kind.
limitNoHow many links one page holds.
cursorNoThe next_cursor of the previous page.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which.
canvas_view_idNoOnly the links of this board.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.

Output Schema

NameRequiredDescriptionDefault
errorNo
linksNo
successYes
next_cursorNo
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "widget",
      -  "board",
      -  "expense_group"
      -]New value: +[
      +  "widget",
      +  "board",
      +  "expense_group",
      +  "chat_invite"
      +]
    • addedOutput schema / properties / links / items / properties / chat_invite
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "counts": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "conversations": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                },
      +                "sign_ups": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                },
      +                "taps": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "taps",
      +                "conversations",
      +                "sign_ups"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "person_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "person_name": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "prefill_text": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "project_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "project_name": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "ref_code": {
      +          "type": "string"
      +        },
      +        "url": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "prefill_text",
      +        "ref_code",
      +        "url",
      +        "project_id",
      +        "project_name",
      +        "person_id",
      +        "person_name",
      +        "counts"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "What a link of kind \"chat_invite\" prefills and names, with its counts; null on every other kind."
      +}
    • changedOutput schema / properties / links / items / properties / kind / enum
      Previous value: -[
      -  "widget",
      -  "board",
      -  "expense_group"
      -]New value: +[
      +  "widget",
      +  "board",
      +  "expense_group",
      +  "chat_invite"
      +]
    • changedOutput schema / properties / links / items / required
      Previous value: -[
      -  "share_link_id",
      -  "kind",
      -  "name",
      -  "tool_name",
      -  "canvas_view_id",
      -  "tile_count",
      -  "created_at",
      -  "resolved_at",
      -  "expires_at",
      -  "revoked_at",
      -  "created_by",
      -  "can_stop",
      -  "url"
      -]New value: +[
      +  "share_link_id",
      +  "kind",
      +  "name",
      +  "tool_name",
      +  "canvas_view_id",
      +  "tile_count",
      +  "created_at",
      +  "resolved_at",
      +  "expires_at",
      +  "revoked_at",
      +  "created_by",
      +  "can_stop",
      +  "url",
      +  "chat_invite"
      +]
  2. Changed15 schema fields changed
    • removedOutput schema / properties / links / items / properties / canvas_view_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / links / items / properties / canvas_view_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / links / items / properties / created_by / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "avatar_url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "full_name": {
      -        "type": "string"
      -      },
      -      "person_id": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "person_id",
      -      "full_name",
      -      "avatar_url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "avatar_url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "full_name": {
      +        "type": "string"
      +      },
      +      "person_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "person_id",
      +      "full_name",
      +      "avatar_url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / links / items / properties / expires_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / links / items / properties / expires_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / links / items / properties / revoked_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / links / items / properties / revoked_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / links / items / properties / tool_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / links / items / properties / tool_name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / links / items / properties / url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / links / items / properties / url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / next_cursor / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / next_cursor / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / resolved_workspace / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / resolved_workspace / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed2 schema fields changed
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "widget",
      -  "board"
      -]New value: +[
      +  "widget",
      +  "board",
      +  "expense_group"
      +]
    • changedOutput schema / properties / links / items / properties / kind / enum
      Previous value: -[
      -  "widget",
      -  "board"
      -]New value: +[
      +  "widget",
      +  "board",
      +  "expense_group"
      +]
  4. Changed4 schema fields changed
    • addedOutput schema / properties / links / items / properties / can_stop
      Added value: +{
      +  "description": "Whether the person may stop or refresh this link.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / links / items / properties / created_by
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "avatar_url": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "full_name": {
      +          "type": "string"
      +        },
      +        "person_id": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "person_id",
      +        "full_name",
      +        "avatar_url"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Who made the link."
      +}
    • addedOutput schema / properties / links / items / properties / url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The link itself, on the person's own links only."
      +}
    • changedOutput schema / properties / links / items / required
      Previous value: -[
      -  "share_link_id",
      -  "kind",
      -  "name",
      -  "tool_name",
      -  "canvas_view_id",
      -  "tile_count",
      -  "created_at",
      -  "resolved_at",
      -  "expires_at",
      -  "revoked_at"
      -]New value: +[
      +  "share_link_id",
      +  "kind",
      +  "name",
      +  "tool_name",
      +  "canvas_view_id",
      +  "tile_count",
      +  "created_at",
      +  "resolved_at",
      +  "expires_at",
      +  "revoked_at",
      +  "created_by",
      +  "can_stop",
      +  "url"
      +]
  5. Changed3 schema fields changed
    • addedOutput schema / properties / links / items / properties / expires_at / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / links / items / properties / expires_at / description
      Previous value: -"When the link stops opening."New value: +"Null: the link opens until it is stopped. A date only on a row of kind \"widget\"."
    • removedOutput schema / properties / links / items / properties / expires_at / type
      Removed value: -"string"
  6. Added

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare a safe read; the description adds the behavior that actually matters: per-row can_stop authorization, expires_at always null unless kind is widget, URL exposure rules (colleague links carry no url, expense-group links keep only a token digest so the URL is unrecoverable), and null-vs-zero semantics for chat_invite counts ('never say 0 then'). It also flags pagination via next_cursor and the privacy constraint of not naming who tapped or signed up.

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

Conciseness3/5

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

Purpose, trigger, and alternatives are front-loaded and well ordered, but the definition runs long and spends a full paragraph enumerating chat_invite output fields (first message, creator, campaign, short link, counts) that the output schema already carries. The trailing workspace_id paragraph is nearly a verbatim restatement of the schema property, which is exactly the kind of sentence that should be cut.

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

Completeness5/5

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

For a seven-parameter, multi-tenant list tool this covers everything an agent needs: what is returned per row, why some URLs are absent, what can_stop means for follow-up actions, how paging works, and when workspace_id is mandatory versus omittable. Return-value explanation is partly redundant with the output schema, but nothing required to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 and most of the description's parameter talk restates it ('Pass canvas_view_id to list only the links of one board', the workspace_id precondition). It does add the response-side linkage of next_cursor to the cursor parameter, which is genuine meaning beyond the schema, but limit, workspace_scope and conversation_id are left entirely to the schema.

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

Purpose5/5

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

Opens with a specific verb and resource: 'List the workspace's shared links that still open', then names the four creation tools (well_share_widget, well_share_canvas, well_create_expense_group_link, well_create_chat_invite_link) whose output appears here and states the ordering ('newest first'). This clearly separates it from siblings like well_list_given_links or well_get_workspace_invite_link without opening either schema.

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

Usage Guidelines5/5

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

Gives concrete trigger conditions ('the person asks what has been shared, which links are still open, for a link they made and lost, or to stop or refresh a link they cannot name exactly') and explicit routing to alternatives: the row's share_link_id goes to well_revoke_share_links, and well_refresh_share_link applies only to board or widget links. It also states the visibility rule (member sees own links; owner/admin sees the workspace's) that determines what results are even possible.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources