Skip to main content
Glama

Publish pin

create_pin

Publish a pin to Pinterest now, or preflight it with dry_run=true.

    Use for a pin that should go out immediately; for a future time use
    create_schedule, for many pins use create_pins_batch. Provide either
    image_url or asset_id (from upload_asset), not both. Run dry_run first
    and reuse resolved.idempotency_key on the real call.

    Returns the pin with id and status "queued" (poll get_pin), or with
    dry_run the validation result (valid, checks, resolved, headroom).
    Fails fast with board_not_found / board_not_owned / board_access_denied
    for an unpublishable board, quota_exceeded when the monthly quota is
    spent, and validation_error for bad fields.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYesPin title, at most 100 characters.
dry_runNotrue runs every API check (account, board, media, quota, rate headroom) and returns the resolved payload without publishing anything.
alt_textNoAccessibility text for the image, <= 500 characters.
asset_idNoUUID of an uploaded PinBridge asset, from upload_asset.
board_idYesPinterest board ID (numeric string), from list_boards.
link_urlNoDestination URL opened when the pin is clicked.
image_urlNoPublic URL of the image or video; Pinterest must be able to fetch it.
account_idYesUUID of a connected Pinterest account, from list_pinterest_accounts.
descriptionNoPin description, at most 800 characters.
related_termsNoKeywords that improve discoverability.
dominant_colorNoHex color of the image, e.g. "#FF5733".
cover_image_urlNoPublic cover image URL; video pins only.
idempotency_keyNoUnique key so a retry never duplicates the pin. Generated when omitted, in which case a repeat call publishes again; reuse the key on retries.
cover_image_asset_idNoUploaded image asset UUID used as the video cover.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • addedInput schema / properties / account_id / description
      Added value: +"UUID of a connected Pinterest account, from list_pinterest_accounts."
    • addedInput schema / properties / alt_text / description
      Added value: +"Accessibility text for the image, <= 500 characters."
    • addedInput schema / properties / asset_id / description
      Added value: +"UUID of an uploaded PinBridge asset, from upload_asset."
    • addedInput schema / properties / board_id / description
      Added value: +"Pinterest board ID (numeric string), from list_boards."
    • addedInput schema / properties / cover_image_asset_id / description
      Added value: +"Uploaded image asset UUID used as the video cover."
    • addedInput schema / properties / cover_image_url / description
      Added value: +"Public cover image URL; video pins only."
    • changedInput schema / properties / description / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 800,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / description / description
      Added value: +"Pin description, at most 800 characters."
    • addedInput schema / properties / dominant_color / description
      Added value: +"Hex color of the image, e.g. \"#FF5733\"."
    • addedInput schema / properties / dry_run / description
      Added value: +"true runs every API check (account, board, media, quota, rate headroom) and returns the resolved payload without publishing anything."
    • addedInput schema / properties / idempotency_key / description
      Added value: +"Unique key so a retry never duplicates the pin. Generated when omitted, in which case a repeat call publishes again; reuse the key on retries."
    • addedInput schema / properties / image_url / description
      Added value: +"Public URL of the image or video; Pinterest must be able to fetch it."
    • addedInput schema / properties / link_url / description
      Added value: +"Destination URL opened when the pin is clicked."
    • addedInput schema / properties / related_terms / description
      Added value: +"Keywords that improve discoverability."
    • addedInput schema / properties / title / description
      Added value: +"Pin title, at most 100 characters."
    • addedInput schema / properties / title / maxLength
      Added value: +100
  2. Changed1 schema field changed
    • addedInput schema / properties / dry_run
      Added value: +{
      +  "default": false,
      +  "title": "Dry Run",
      +  "type": "boolean"
      +}
  3. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the description carries the burden of explaining side effects. It details return behavior ('Returns the pin with id and status "queued"'), error handling ('Fails fast with board_not_found / board_not_owned / board_access_denied...'), and idempotency semantics. It adds substantial behavioral context beyond the annotations, with no contradictions.

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

Conciseness5/5

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

The description is well-organized in three short paragraphs: purpose and alternatives, usage guidance, and return/error behavior. It front-loads the core purpose and avoids redundancy, with every sentence contributing actionable information.

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?

Despite 14 parameters and no output schema, the description covers the critical operational details: immediate vs. preflight, the mutual exclusion of media sources, idempotency handling, expected response shape, and error conditions. The schema covers parameter definitions, and the description fills the behavioral gaps, making it complete for an agent to call correctly.

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 100% with each parameter documented, so baseline is 3. The description adds meaningful guidance: 'Provide either image_url or asset_id (from upload_asset), not both' and explains the idempotency_key reuse workflow, which is not fully captured in the schema. This raises the score to 4.

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 clearly states 'Publish a pin to Pinterest now, or preflight it with dry_run=true', specifying the verb, resource, and immediate vs. preflight modes. It explicitly distinguishes from sibling tools by noting 'for a future time use create_schedule, for many pins use create_pins_batch', so an agent can immediately differentiate it from related operations.

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 provides explicit when-to-use guidance: 'Use for a pin that should go out immediately; for a future time use create_schedule, for many pins use create_pins_batch.' It also instructs to run dry_run first and reuse the resolved.idempotency_key on the real call, giving clear operational steps and alternatives.

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