Skip to main content
Glama

list_short_links

Read-onlyIdempotent

List short links in a workspace, newest first. Optional query searches URL, name, and slug.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "list_short_links"
  }
}

Input Schema

NameRequiredDescriptionDefault
pageNo1-based page number.
queryNoSearch term (destination, name, or slug).
page_sizeNoResults per page (max 200, default 25).
workspaceNoWorkspace id. Optional when the account has one workspace; use list_workspaces to resolve otherwise.

Output Schema

NameRequiredDescriptionDefault
nextNoURL of the next page, or null on the last page.
countNoTotal matching rows across all pages.
errorNoPresent only when the tool failed (isError): cause, retryable, message.
resultsNo
previousNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • removedOutput schema / properties / error / additionalProperties
      Removed value: -true
    • changedOutput schema / properties / error / description
      Previous value: -"Present only when the tool failed (the result is also flagged isError)."New value: +"Present only when the tool failed (isError): cause, retryable, message."
    • removedOutput schema / properties / error / properties
      Removed value: -{
      -  "cause": {
      -    "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
      -    "type": "string"
      -  },
      -  "message": {
      -    "type": "string"
      -  },
      -  "retryable": {
      -    "description": "Whether repeating the same call could succeed.",
      -    "type": "boolean"
      -  }
      -}
    • removedOutput schema / properties / results / items
      Removed value: -{
      -  "additionalProperties": true,
      -  "properties": {
      -    "created": {
      -      "type": "string"
      -    },
      -    "display_name": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "domain": {
      -      "type": "string"
      -    },
      -    "gps": {
      -      "type": "boolean"
      -    },
      -    "id": {
      -      "type": "string"
      -    },
      -    "link": {
      -      "description": "Destination URL.",
      -      "type": "string"
      -    },
      -    "link_type": {
      -      "type": "string"
      -    },
      -    "png": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "short_url": {
      -      "type": "string"
      -    },
      -    "slug": {
      -      "type": "string"
      -    },
      -    "svg": {
      -      "description": "QR code for the short URL, as SVG markup.",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "total_clicks": {
      -      "type": "integer"
      -    },
      -    "unique_clicks": {
      -      "type": "integer"
      -    }
      -  },
      -  "type": "object"
      -}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "count": {
      +      "description": "Total matching rows across all pages.",
      +      "type": "integer"
      +    },
      +    "error": {
      +      "additionalProperties": true,
      +      "description": "Present only when the tool failed (the result is also flagged isError).",
      +      "properties": {
      +        "cause": {
      +          "description": "Machine-readable failure category: invalid_argument, not_found, forbidden, plan_limit, rate_limited, or server_error.",
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        },
      +        "retryable": {
      +          "description": "Whether repeating the same call could succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "next": {
      +      "description": "URL of the next page, or null on the last page.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "previous": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "results": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "created": {
      +            "type": "string"
      +          },
      +          "display_name": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "domain": {
      +            "type": "string"
      +          },
      +          "gps": {
      +            "type": "boolean"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "link": {
      +            "description": "Destination URL.",
      +            "type": "string"
      +          },
      +          "link_type": {
      +            "type": "string"
      +          },
      +          "png": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "short_url": {
      +            "type": "string"
      +          },
      +          "slug": {
      +            "type": "string"
      +          },
      +          "svg": {
      +            "description": "QR code for the short URL, as SVG markup.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "total_clicks": {
      +            "type": "integer"
      +          },
      +          "unique_clicks": {
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so the safety profile is fully covered. The description adds one genuine behavioral trait beyond that ('newest first'), but says nothing about pagination behavior or result limits, which matter for a list tool.

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?

Two short sentences with the ordering constraint front-loaded and no filler. The second sentence is close to redundant with the schema's parameter description, which slightly dilutes the otherwise tight structure.

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?

An output schema exists, so return values need not be explained. The description covers the listing operation, ordering, and search scope, and the schema covers workspace resolution and pagination; only pagination behavior narration is absent, which is a minor gap.

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 coverage is 100%, so page, page_size, workspace, and query are already documented. The description's note that `query` searches 'URL, name, and slug' largely repeats the schema's 'destination, name, or slug' rather than adding new meaning, so the baseline 3 applies.

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?

States a specific verb and resource ('List short links') plus the scope ('in a workspace') and a default ordering ('newest first'). It is clearly distinct from get_short_link, but it never names a sibling or distinguishes itself from list_qr_codes/list_pages beyond the resource noun.

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

Usage Guidelines3/5

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

Usage is implied by the listing verb and the optional workspace qualifier, which hints at the multi-workspace case. There is no explicit when-to-use/when-not guidance or routing to get_short_link for a single link, so the agent must infer the intent.

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.