Skip to main content
Glama

List pins

list_pins
Read-onlyIdempotent

List pins in this workspace, newest first, with search, filters and sorting.

    Use to find a pin's id (search its title with q), review what published
    or failed, or audit one board or account. For one known pin use
    get_pin; for scheduled (not yet published) pins use list_schedules; for
    totals over a period use get_dashboard_summary.

    Returns one page: {items, total, limit, offset, has_more}. items are
    pin summaries (id, title, status, board_id, pinterest_account_id,
    pinterest_pin_id, link_url, error_code, error_message, created_at,
    published_at, removed_from_pinterest_at); detail="full" returns every
    field, but read one pin with get_pin instead. removed=true lists
    published pins that were deleted on Pinterest. total counts every match
    across all pages, so "how many pins failed this week?" is one call with
    status=failed, since=... and limit=1. To read further, repeat the call
    with the same filters, q and sort and offset = offset + limit while
    has_more is true. total is null only against a PinBridge API older
    than 1.34. Filtering on an account
    outside the key's allow-list fails with account_not_permitted, and an
    unknown sort or status fails with validation_error.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoCase-insensitive text to find in the title, description or link URL; % and _ match literally.
sortNoOrder: created_at, published_at (unpublished last), title or status, each _asc or _desc.created_at_desc
limitNoPage size, 1-200.
sinceNoISO 8601 timestamp with timezone; lower bound, inclusive.
untilNoISO 8601 timestamp with timezone; upper bound, exclusive.
detailNosummary (default): the fields needed to find, audit and count pins. full: the whole pin, including description, alt text and media URLs; about three times larger, so prefer get_pin for one pin.summary
offsetNoRows to skip. For the next page pass offset + limit from the last result.
statusNoOne of queued, deferred, publishing, published, failed.
removedNotrue: only published pins that were later deleted on Pinterest; false: leave them out. Default: both.
board_idNoPinterest board ID (numeric string), from list_boards.
account_idNoUUID of a connected Pinterest account, from list_pinterest_accounts.
error_codeNoOnly failed pins with this error code, e.g. board_access_denied.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
itemsYesPins on this page in the requested order. With detail=summary each has id, title, status, board_id, pinterest_account_id, pinterest_pin_id, link_url, error_code, error_message, created_at, published_at and removed_from_pinterest_at (set when the pin was deleted on Pinterest). detail=full returns every pin field. Empty when nothing matches.
limitYesPage size used for this call.
totalYesHow many rows match the filters and search across all pages. Answer "how many ...?" from this; limit=1 is enough. Null only when the PinBridge API is older than 1.34.
offsetYesRows skipped before this page.
has_moreYestrue when more rows follow: call again with the same filters, q and sort and offset = offset + limit. When total is null it only means this page was full.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / detail
      Added value: +{
      +  "default": "summary",
      +  "description": "summary (default): the fields needed to find, audit and count pins. full: the whole pin, including description, alt text and media URLs; about three times larger, so prefer get_pin for one pin.",
      +  "enum": [
      +    "summary",
      +    "full"
      +  ],
      +  "title": "Detail",
      +  "type": "string"
      +}
    • addedInput schema / properties / removed
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "true: only published pins that were later deleted on Pinterest; false: leave them out. Default: both.",
      +  "title": "Removed"
      +}
    • changedOutput schema / properties / items / description
      Previous value: -"Pins on this page in the requested order, each with id, title, board_id, pinterest_account_id, status, error_code, error_message, pinterest_pin_id, image_url, link_url, created_at and published_at. Empty when nothing matches."New value: +"Pins on this page in the requested order. With detail=summary each has id, title, status, board_id, pinterest_account_id, pinterest_pin_id, link_url, error_code, error_message, created_at, published_at and removed_from_pinterest_at (set when the pin was deleted on Pinterest). detail=full returns every pin field. Empty when nothing matches."
  2. Changed12 schema fields changed
    • changedInput schema / properties / offset / description
      Previous value: -"Rows to skip for pagination."New value: +"Rows to skip. For the next page pass offset + limit from the last result."
    • addedInput schema / properties / q
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Case-insensitive text to find in the title, description or link URL; % and _ match literally.",
      +  "title": "Q"
      +}
    • addedInput schema / properties / sort
      Added value: +{
      +  "default": "created_at_desc",
      +  "description": "Order: created_at, published_at (unpublished last), title or status, each _asc or _desc.",
      +  "enum": [
      +    "created_at_desc",
      +    "created_at_asc",
      +    "published_at_desc",
      +    "published_at_asc",
      +    "title_asc",
      +    "title_desc",
      +    "status_asc",
      +    "status_desc"
      +  ],
      +  "title": "Sort",
      +  "type": "string"
      +}
    • addedOutput schema / description
      Added value: +"One page of list_pins results plus the total number of matching pins."
    • addedOutput schema / properties / has_more
      Added value: +{
      +  "description": "true when more rows follow: call again with the same filters, q and sort and offset = offset + limit. When total is null it only means this page was full.",
      +  "title": "Has More",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / items
      Added value: +{
      +  "description": "Pins on this page in the requested order, each with id, title, board_id, pinterest_account_id, status, error_code, error_message, pinterest_pin_id, image_url, link_url, created_at and published_at. Empty when nothing matches.",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "title": "Items",
      +  "type": "array"
      +}
    • addedOutput schema / properties / limit
      Added value: +{
      +  "description": "Page size used for this call.",
      +  "title": "Limit",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / offset
      Added value: +{
      +  "description": "Rows skipped before this page.",
      +  "title": "Offset",
      +  "type": "integer"
      +}
    • removedOutput schema / properties / result
      Removed value: -{
      -  "items": {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  "title": "Result",
      -  "type": "array"
      -}
    • addedOutput schema / properties / total
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "How many rows match the filters and search across all pages. Answer \"how many ...?\" from this; limit=1 is enough. Null only when the PinBridge API is older than 1.34.",
      +  "title": "Total"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "result"
      -]New value: +[
      +  "items",
      +  "total",
      +  "limit",
      +  "offset",
      +  "has_more"
      +]
    • changedOutput schema / title
      Previous value: -"list_pinsOutput"New value: +"PinListPage"
  3. Changed11 schema fields changed
    • addedInput schema / properties / account_id / description
      Added value: +"UUID of a connected Pinterest account, from list_pinterest_accounts."
    • addedInput schema / properties / board_id / description
      Added value: +"Pinterest board ID (numeric string), from list_boards."
    • addedInput schema / properties / error_code / description
      Added value: +"Only failed pins with this error code, e.g. board_access_denied."
    • addedInput schema / properties / limit / description
      Added value: +"Page size, 1-200."
    • addedInput schema / properties / limit / maximum
      Added value: +200
    • addedInput schema / properties / limit / minimum
      Added value: +1
    • addedInput schema / properties / offset / description
      Added value: +"Rows to skip for pagination."
    • addedInput schema / properties / offset / minimum
      Added value: +0
    • addedInput schema / properties / since / description
      Added value: +"ISO 8601 timestamp with timezone; lower bound, inclusive."
    • addedInput schema / properties / status / description
      Added value: +"One of queued, deferred, publishing, published, failed."
    • addedInput schema / properties / until / description
      Added value: +"ISO 8601 timestamp with timezone; upper bound, exclusive."
  4. Changed6 schema fields changed
    • addedInput schema / properties / account_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Account Id"
      +}
    • addedInput schema / properties / board_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Board Id"
      +}
    • addedInput schema / properties / error_code
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Error Code"
      +}
    • addedInput schema / properties / since
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Since"
      +}
    • addedInput schema / properties / status
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Status"
      +}
    • addedInput schema / properties / until
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Until"
      +}
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds substantial behavioral context beyond that: pagination semantics (items, total, limit, offset, has_more), the fact that total counts all matching pages, a version-specific quirk (total null on PinBridge API older than 1.34), error conditions (account_not_permitted, validation_error), and the size trade-off of detail='full'. This far exceeds the annotation baseline.

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 description is front-loaded with a clear one-sentence purpose and then organized into use cases, return structure, pagination, and error behavior. It is long, and the return-field enumeration is partly redundant given an output schema exists, so it loses one point. However, nearly every other sentence earns its place with actionable detail.

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 12-parameter tool with a full input schema, output schema, and safety annotations, the description is complete. It covers pagination, counting patterns, edge cases (older API versions, allow-list failures), and error handling. Nothing an agent needs 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.

Parameters4/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. The description goes further by showing parameter combination patterns: using q to find a pin's id, status=failed with since and limit=1 for counts, and offset = offset + limit for pagination. It doesn't redefine individual params (schema already handles that), making 4 appropriate rather than 5.

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?

The description opens with a specific verb, resource, and scope: 'List pins in this workspace, newest first, with search, filters and sorting.' It then clarifies the core use cases (find pin id, audit published/failed pins, review one board or account), which differentiates it from siblings like get_pin, list_schedules, and get_dashboard_summary. This is a clear, non-tautological statement of function.

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?

The description explicitly names alternatives and the conditions that route to them: 'For one known pin use get_pin; for scheduled (not yet published) pins use list_schedules; for totals over a period use get_dashboard_summary.' It also gives concrete scenarios like 'how many pins failed this week?' with the parameter combination to use. This is exemplary when-to-use guidance.

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