Skip to main content
Glama

List saved ads

list_saved_ads
Read-onlyIdempotent

Lists the user's saved ads, up to 20 per page with next_cursor: each ad with its note, format, run dates and delivery evidence. collection_id reads one collection, null reads the ads not in any collection, and leaving it out reads every saved ad. Saved-ad reads draw on the daily workspace reading allowance.

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_saved_ads"
  }
}

Input Schema

NameRequiredDescriptionDefault
cursorNonext_cursor from the previous page of this same list; absent or null for the first page.
page_sizeNoSaved ads per page, 1 to 20.
collection_idNoCollection id from list_collections; null selects unsorted saved ads; absent selects all saved ads.
response_formatNoOutput format: text (default) or json. table is not available for this tool.

Output Schema

NameRequiredDescriptionDefault
doneNoDeprecated for one release: inverse of has_more.
rowsNoItems in this page of your saved ads or collections.
has_moreNoWhether another bounded page is available with next_cursor.
pageSizeNoDeprecated for one release: alias of page_size.
allowanceNoFree daily ad-return allowance for this workspace, resetting at midnight UTC.
page_sizeNoEffective number of rows requested per page.
nextCursorNoDeprecated for one release: alias of next_cursor.
next_cursorNoContinuation handle for the same filters; null when no further page is offered.
reading_useNoreading use value in this response.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / collection_id / description
      Previous value: -"Collection reference from list_collections; null selects unsorted saved ads where supported."New value: +"Collection id from list_collections; null selects unsorted saved ads; absent selects all saved ads."
    • changedInput schema / properties / cursor / anyOf
      Previous value: -[
      -  {
      -    "description": "Continuation handle from the same tool and filters; absent for the first page.",
      -    "maxLength": 24000,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "next_cursor from the previous page of the same tool and filters; absent for the first page.",
      +    "maxLength": 24000,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / cursor / description
      Previous value: -"Continuation handle from the same tool and filters; absent for the first page."New value: +"next_cursor from the previous page of this same list; absent or null for the first page."
    • changedInput schema / properties / page_size / description
      Previous value: -"Number of rows in this page, constrained by the field maximum."New value: +"Saved ads per page, 1 to 20."
    • changedInput schema / properties / response_format / description
      Previous value: -"Output format: text or json for capped research examples; table is available only for tracked rival rows."New value: +"Output format: text (default) or json. table is not available for this tool."
  2. Changed3 schema fields changed
    • changedOutput schema / properties / allowance / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "Daily scanned-row allowance for this workspace, resetting at midnight UTC.",
      -    "properties": {
      -      "daily_limit": {
      -        "description": "Maximum scanned rows allowed per UTC day.",
      -        "type": "number"
      -      },
      -      "remaining": {
      -        "description": "Scanned rows still available today.",
      -        "type": "number"
      -      },
      -      "resets_at": {
      -        "description": "ISO timestamp when the allowance or credits reset.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "daily_limit",
      -      "remaining",
      -      "resets_at"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "Free daily ad-return allowance for this workspace, resetting at midnight UTC.",
      +    "properties": {
      +      "daily_limit": {
      +        "description": "Maximum free ad examples returned per UTC day.",
      +        "type": "number"
      +      },
      +      "remaining": {
      +        "description": "Free ad examples still available today.",
      +        "type": "number"
      +      },
      +      "resets_at": {
      +        "description": "ISO timestamp when the allowance or credits reset.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "daily_limit",
      +      "remaining",
      +      "resets_at"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / allowance / description
      Previous value: -"Daily scanned-row allowance for this workspace, resetting at midnight UTC."New value: +"Free daily ad-return allowance for this workspace, resetting at midnight UTC."
    • addedOutput schema / properties / reading_use
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "description": "reading use value in this response.",
      +      "properties": {
      +        "ads_returned": {
      +          "anyOf": [
      +            {
      +              "description": "ads returned value in this response.",
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "ads returned value in this response."
      +        },
      +        "message": {
      +          "anyOf": [
      +            {
      +              "description": "message value in this response.",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "message value in this response."
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "reading use value in this response."
      +}
  3. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, and closed-world, so the bar is lower; the description still adds real value by disclosing pagination (20 per page plus next_cursor) and, importantly, that saved-ad reads consume the daily workspace reading allowance — a cost/rate-limit trait no annotation conveys. It does not detail sort order or edge cases for expired ads, so it is not a 5.

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 dense sentences, front-loaded with the core behavior and return shape before the scoping nuance and the quota caveat. The collection_id semantics are effectively stated twice (description and schema), a minor redundancy that keeps it from a 5.

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 fully specified, and the description still summarizes them; pagination, scoping, and quota cost are all covered. What remains missing is any hint about ordering or what happens with an expired cursor, which a reader of a paged list tool might want.

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 the prose largely mirrors the schema's own wording for collection_id (id / null / absent). The description does confirm the cursor-based paging contract and the 20-per-page ceiling, but adds no syntax or format meaning the schema does not already carry.

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?

The description opens with a specific verb and resource ("Lists the user's saved ads") and enumerates the returned fields (note, format, run dates, delivery evidence), so the agent knows exactly what it gets back. It stops short of naming a sibling such as search_ads or list_new_competitor_ads to distinguish itself, which keeps it from a 5.

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?

The tri-state collection_id explanation effectively tells the agent which scoping to choose when it wants one collection, unsorted ads, or everything. However, there is no guidance on when to reach for this tool versus search_ads, find_winning_ads, or the competitor-ad listers, so tool-level selection is left to inference.

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.