Skip to main content
Glama
N-Graves

pinterest-mcp

by N-Graves

pinterest-mcp

A minimal Model Context Protocol server for the Pinterest API v5. Reads boards/pins/analytics; publishes new pins and boards. Built for a multi-agent fleet where a human must sign off before anything reaches the public account.

Setup

npm install
npm run build

Requires a Pinterest Developer App (https://developers.pinterest.com/apps/) with a registered redirect URI of http://localhost:3034/oauth/redirect. Note the App ID and App Secret.

Getting a token

PINTEREST_APP_ID=<id> PINTEREST_APP_SECRET=<secret> \
  PINTEREST_CREDENTIALS_FILE=/home/you/.openclaw/credentials/pinterest.env \
  node scripts/get-pinterest-token.mjs

Approve in the browser. The script writes PINTEREST_APP_ID, PINTEREST_APP_SECRET, PINTEREST_ACCESS_TOKEN, PINTEREST_REFRESH_TOKEN, PINTEREST_TOKEN_EXPIRES_AT into the file (mode 0600). Tokens are deliberately not printed.

Pass --port <n> if 3034 is taken (register the matching redirect URI in the Pinterest app). The listener binds before printing the authorize URL, so an occupied port fails loudly rather than burning the one-time auth code.

Configuration

{
  "mcpServers": {
    "pinterest": {
      "command": "node",
      "args": ["/path/to/pinterest-mcp/dist/index.js"],
      "env": {
        "PINTEREST_CREDENTIALS_FILE": "/home/you/.openclaw/credentials/pinterest.env"
      }
    }
  }
}

The server rewrites PINTEREST_ACCESS_TOKEN / PINTEREST_TOKEN_EXPIRES_AT in that file when it refreshes (Pinterest access tokens expire after ~30 days). OpenClaw's MCP config bakes env vars at mcp add time and cannot rewrite them; the file it points at can be rewritten — same pattern as x-mcp.

Related MCP server: @striderlabs/mcp-pinterest

Available tools

Tool

Description

pinterest_get_user_info

Current account (username, id, account type). Safe read.

pinterest_list_boards

List boards, paginated. Safe read.

pinterest_get_board

One board's details by id. Safe read.

pinterest_list_pins

List pins, optionally scoped to one board_id. Safe read.

pinterest_get_pin

One pin's details by id. Safe read.

pinterest_get_pin_analytics

Impressions / saves / pin clicks / outbound clicks / video views for our own pin. Safe read.

pinterest_create_board

Live. Create a new board on the account.

pinterest_create_pin

Live. Publish an immediately-visible pin to one of our boards.

Write tools require agent_id (must hold the social capability) and task_id (task must be Done and carry at least one approved output; brand must match PINTEREST_SERVER_BRAND, default with_nate). Both are ordinary refusals, not crashes — a gate rejection returns isError: true with a readable message.

Pinterest-specific gotchas

  • Trial mode. A fresh Pinterest Developer app starts in trial mode, limited to the app owner's own account. That is its own safety net for a first-time integration — write scope cannot touch anyone else's account until the app is submitted for review and approved for standard access.

  • Access-token rotation. Tokens expire in ~30 days; the server refreshes proactively via POST /v5/oauth/token with grant_type=refresh_token. The refresh token itself usually persists but is written back to the credentials file if Pinterest ever rotates it.

  • image_url must be publicly reachable. Pinterest fetches the image server-side. A local filesystem path (e.g. a MUSE-generated PNG under /mnt/d/Fleet/...) will fail — the file has to be hosted somewhere public first, or uploaded via Pinterest's separate POST /v5/media flow (not implemented in this first version).

  • Put the destination URL in link, not description. The link field is what pinterest_get_pin_analytics counts outbound clicks against. For Etsy promotion the Etsy listing URL goes there.

  • PNG or JPEG. Other formats are rejected by Pinterest at pin-create time.

Security model: agent_id capability gating + brand + publish-clearance

OpenClaw doesn't propagate per-agent caller identity down to MCP tool calls in this version (all agents share the same MCP process — confirmed platform limitation, openclaw/openclaw#67682). Write tools ask the fleet board's own capability record for the caller before doing anything, via GET /agents/{id}/capabilities at FLEET_BOARD_URL (default http://127.0.0.1:8420).

A second call — GET /tasks/{id}/publish-clearance?brand=<brand> — proves both the task's brand matches this server AND that a human has actually closed the task with an approved output. Same endpoint every outward server uses; the board owns the rule.

Honest limitations:

  • agent_id is self-reported by the caller, not cryptographically bound. This turns a silent wrong-agent action into a loud, rejected, auditable one — it does not stop a determined actor from lying.

  • The clearance gate is defence in depth. The load-bearing rule is that the board's own fan-out (BRAND_CHANNELS in pickup.py) decides whether a publishing subtask is ever created. This gate catches an agent reaching for the tool outside that flow.

Standalone use: either stand up a minimal service at FLEET_BOARD_URL returning a JSON string array for GET /agents/{id}/capabilities and a {cleared: bool, reasons: string[]} for GET /tasks/{id}/publish-clearance, or remove the requireCapability / requireBrand calls from src/index.ts.

Deliberately not exposed

  • Deleting a pin (DELETE /v5/pins/{pin_id}). An unreviewed retraction of live content is a real, unrecoverable outward action. Deletions stay with Nathan, via the Pinterest app.

  • Deleting a board. Same reason.

  • Follows / reactions. Social actions belong behind an explicit ECHO decision, not incidentally callable.

Notes on safety

  • Every request goes to api.pinterest.com or www.pinterest.com only — no telemetry, no third-party calls, no dynamic code execution.

  • Credentials live in a mode-0600 file rewritten in place. Tokens are never printed by either the server or the OAuth catcher.

License

MIT — see LICENSE.

Available Tools

8 tools
pinterest_create_boardA

Create a new Pinterest board on the account. Live, immediately visible on the profile if privacy=PUBLIC. Requires agent_id (must hold 'social') and task_id (task must be cleared for the with_nate brand — Done and carrying an approved output).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBoard name (visible to the public)
privacyNoPUBLIC (default) or SECRET (hidden from other users)
task_idYesThe board task this belongs to. The task's brand must be with_nate and it must be Done with an approved output, or the call is refused.
agent_idYesYour fleet-board agent id, e.g. 'echo'
descriptionNoBoard description

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full burden. It discloses live visibility ('Live, immediately visible on the profile if privacy=PUBLIC'), authorization requirements ('agent_id must hold social'), and failure conditions ('or the call is refused'). These go far beyond the schema and give the agent critical behavioral expectations.

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 two sentences, front-loaded with the primary purpose, and includes only high-value details about visibility, prerequisites, and failure. No waste.

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?

For a 5-parameter tool with no annotations or output schema, it covers purpose, prerequisites, side effects, and refusal behavior. It does not mention the return value, but given the lack of output schema, this is a minor gap rather than a critical omission.

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%, so baseline is 3. The description adds meaning for agent_id by specifying it must hold 'social' permission, and clarifies the consequence of task_id requirements. It does not repeat all parameters but enriches two key ones.

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 and resource: 'Create a new Pinterest board on the account.' This clearly distinguishes it from sibling tools like pinterest_create_pin, and the read-only tools (get/list). No ambiguity about what the tool does.

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

Usage Guidelines4/5

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

It provides clear context for when to use the tool by stating prerequisites: 'Requires agent_id (must hold 'social') and task_id (task must be cleared for the with_nate brand — Done and carrying an approved output).' It does not explicitly name alternatives or exclusion criteria, but the purpose and requirements make usage obvious.

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

pinterest_create_pinA

Publish a real, immediately-live pin to one of our boards. Requires agent_id (must hold 'social') and task_id (task must be cleared for the with_nate brand). No draft state — once this returns success, the pin is on the account. image_url must be a PUBLIC http(s) URL that Pinterest can fetch server-side; a local file path will NOT work. The 'link' field is the destination URL when someone clicks the pin (e.g. the Etsy listing URL) — put it there, not in the description, or click-through analytics count nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoDestination URL clicked from the pin. Put the Etsy listing URL here for Etsy promotion — not in the description.
titleNoPin title (visible)
task_idYesThe board task this belongs to. Must be with_nate, Done, and have an approved output.
agent_idYesYour fleet-board agent id, e.g. 'echo'
alt_textNoAccessibility alt text
board_idYesThe board id to pin to (from pinterest_list_boards)
image_urlYesPUBLIC http(s) URL of the image. Pinterest fetches it server-side — a local file path will not work. PNG or JPEG.
descriptionNoPin description (visible)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility for behavioral disclosure. It reveals that the pin is immediately live, has no draft state, requires specific permissions, demands a public http(s) image URL (local files fail), and warns about click-through analytics depending on the 'link' field. This goes well beyond a generic 'creates a pin' statement.

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 three focused sentences, each carrying necessary information: what the tool does, prerequisites, and critical constraints. It is front-loaded with the main action and avoids redundancy or filler, making it easy to scan.

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 having 8 parameters, no output schema, and no annotations, the description covers the core purpose, prerequisites, key parameter constraints, and success semantics ('once this returns success, the pin is on the account'). This is sufficient for an agent to invoke the tool correctly without needing additional context.

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 descriptions already cover 100% of parameters, so baseline is 3. The description adds marginal value by emphasizing the 'social' permission requirement for agent_id (not in schema) and reasserting the live-pin consequence. It mostly echoes schema details for image_url and link, but the added prerequisite justifies a score above baseline.

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 'Publish a real, immediately-live pin to one of our boards,' which uses a specific verb ('publish') and resource ('pin') while also indicating the scope ('to one of our boards'). This clearly distinguishes it from sibling read/list tools and the separate pinterest_create_board tool.

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

Usage Guidelines4/5

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

The description provides explicit prerequisites: agent_id must hold 'social' and task_id must be cleared for with_nate. It also states the 'no draft state' behavior and directs the 'link' field to the destination URL, giving practical usage context. It does not explicitly name alternative tools, but the conditions and examples imply when this tool is appropriate.

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

pinterest_get_boardA

Fetch one board's details by id. Safe read.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_idYesThe board id

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. 'Safe read' discloses the non-destructive nature, which is valuable. However, it does not describe what specific details are returned, error behavior, or any other behavioral traits, leaving some ambiguity.

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 extremely concise: two short phrases that convey the essential purpose and safety. Every word is functional, with no redundancy or fluff.

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?

For a single-parameter, read-only getter, the description sufficiently covers the operation. While it lacks detail on the return payload, the phrase 'board's details' implies the core output. The absence of an output schema is not critical given the straightforward nature of the tool.

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?

The schema has 100% coverage with 'The board id' for the single parameter. The description adds no additional format, type constraints, or usage notes, but with full schema coverage the baseline of 3 is appropriate.

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 the action ('Fetch'), the resource ('one board's details'), and the method ('by id'). It distinguishes itself from sibling tools like list_boards, which retrieves multiple boards, and get_pin, which targets a different resource.

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

Usage Guidelines4/5

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

The description implies the use case: when you have a specific board ID and need that board's details. It provides clear context but does not explicitly mention alternatives or when not to use this tool, which is acceptable for a simple singleton getter.

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

pinterest_get_pinA

Fetch one pin's details by id. Safe read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pin_idYesThe pin id

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must convey safety traits. It adds 'Safe read', indicating a read-only operation, which is helpful. But it omits other behavioral details like error handling, permissions, or return format, leaving the full burden partially unmet.

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 extremely concise, consisting of two short sentences that front-load the primary action. Every word contributes value, with no redundancy or filler.

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?

This is a simple single-parameter tool with no output schema or annotations. The description explains its core function adequately. It could be more complete by detailing what 'details' include, but the minimal complexity makes this 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?

The schema already fully describes pin_id as 'The pin id' (100% coverage). The description's 'by id' reinforces the parameter but adds no new meaning beyond the schema, so the baseline score of 3 is appropriate.

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 'Fetch one pin's details by id' uses a specific verb and resource, clearly indicating the tool fetches a single pin's data. The phrase 'one pin' distinguishes it from sibling tools like list_pins and get_pin_analytics.

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 description implies usage for retrieving a single pin by ID, which contrasts with listing all pins. However, it does not explicitly mention when to use this tool over alternatives or provide exclusions, so guidance is implicit rather than explicit.

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

pinterest_get_pin_analyticsA

Engagement metrics for one of our own pins (impressions, saves, pin clicks, outbound clicks, video views). Safe read. This is the native Etsy-driver measurement — outbound clicks on a pin whose link points at an Etsy listing are the traffic-lever signal.

ParametersJSON Schema
NameRequiredDescriptionDefault
pin_idYesThe pin id
end_dateNoOptional YYYY-MM-DD, default today
start_dateNoOptional YYYY-MM-DD, default 30 days ago
metric_typesNoOptional comma-separated list of Pinterest metric names. Default: IMPRESSION,SAVE,PIN_CLICK,OUTBOUND_CLICK,VIDEO_MRC_VIEW

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explicitly states 'Safe read' and that it works on 'one of our own pins,' which discloses the ownership requirement and read-only nature. It doesn't detail rate limits, error conditions, or return format, but for a simple analytics read, the provided transparency is above average.

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?

Two sentences, no waste. The first sentence front-loads the core purpose, the second adds a crucial usage context. Every phrase earns its place.

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?

Given the tool's simplicity and 100% schema coverage, the description covers purpose, safety, and a key usage context. However, it lacks a description of the return shape (e.g., a list of metric-value pairs), which matters since there is no output schema. Still, the overall completeness is high for a read-only analytics tool.

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 adds meaningful semantics by listing the exact default metrics (impressions, saves, pin clicks, outbound clicks, video views) and explaining the significance of outbound clicks in the Etsy context. This goes beyond the schema's bare parameter names.

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 the tool returns engagement metrics (impressions, saves, pin clicks, outbound clicks, video views) for a single owned pin, distinguishing it from sibling tools like get_pin (which likely returns pin details) and list_pins. The verb is implied ('get') but the resource and scope are specific.

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

Usage Guidelines4/5

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

The description gives context on when to use the tool: to measure native Etsy-driver traffic via outbound clicks, which is the traffic-lever signal. It doesn't explicitly state exclusions or alternatives, but the sibling list is limited and the analytics-focused purpose is clear. This is more than implied usage; it's a strong contextual cue.

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

pinterest_get_user_infoA

Get the current Pinterest account's basic info (username, id, account type). Safe read. Use to confirm the credentials point at the intended account before any write.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It explicitly states 'Safe read', which is a key behavioral trait. It also specifies the returned data fields. While it does not cover potential errors or prerequisites, it is adequate for a simple read-only tool.

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 two sentences, each serving a clear purpose: what the tool does and when to use it. No unnecessary words or repetition.

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 no-parameter, no-output-schema tool, the description fully explains the return values (username, id, account type) and provides a use case. It is complete for the tool's simplicity.

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?

The tool has zero parameters, so the schema is empty. Per guidelines, a baseline score of 4 applies. No additional parameter explanation is needed.

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 the tool's function with a specific verb ('Get') and resource ('current Pinterest account's basic info'), naming the exact fields returned (username, id, account type). It is distinct from sibling tools like get_pin or list_boards, which operate on different resources.

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

Usage Guidelines4/5

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

The description gives explicit guidance on when to use the tool ('before any write' to confirm credentials). It does not mention alternatives or when not to use it, but the context is clear and actionable.

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

pinterest_list_boardsA

List the account's boards, paginated. Safe read. Use before creating a pin to find the board_id you want to pin to — the create-pin call needs it.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookmarkNoPagination cursor from a previous response
page_sizeNoResults per page (1-100, default 25)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Safe read' and 'paginated', which are valuable safety and behavior traits, but it doesn't cover auth requirements, rate limits, or output details beyond the board_id hint. This is adequate but not rich.

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 two sentences long, with the first sentence immediately stating the purpose and the second providing usage guidance. Every word earns its place, and it is front-loaded and easy to scan.

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?

For a simple list tool with two optional params and no output schema, the description covers the core purpose, safety, pagination, and use case. It doesn't spell out the exact response fields, but the board_id reference gives enough context for an agent to infer the return shape.

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 the parameters (bookmark, page_size) are already fully described. The description adds no extra meaning to the parameters; it only repeats 'paginated' which is redundant. Baseline of 3 is appropriate when the schema does the heavy lifting.

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 'List the account's boards' with a specific verb and resource, distinguishing it from siblings like pinterest_get_board (singular) and pinterest_list_pins. It also mentions pagination, which is implied by the tool's name but reinforced in the description.

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

Usage Guidelines4/5

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

It explicitly says 'Use before creating a pin to find the board_id you want to pin to — the create-pin call needs it', which gives a concrete when-to-use scenario. It doesn't explicitly state when not to use it, but the guidance is clear enough for an agent to decide between this and alternatives.

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

pinterest_list_pinsA

List pins on the account, optionally scoped to a single board via board_id. Safe read.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_idNoOptional: only pins on this board
bookmarkNoPagination cursor from a previous response
page_sizeNoResults per page (1-100, default 25)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. 'Safe read' explicitly signals a non-mutating operation, and 'optionally scoped' explains scoping behavior. It does not cover pagination details, but the schema already documents the bookmark parameter, and for a read-only list tool this level of disclosure is adequate.

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?

Two short, front-loaded sentences. Every word adds value: the core behavior, the optional scoping, and a safety hint. No filler or repetition.

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?

For a straightforward listing tool with only optional parameters and no output schema, the description is nearly complete. It conveys the resource type, scoping possibility, and safe-read nature. It does not spell out the return structure, but 'List pins' makes it evident.

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% (all three parameters have descriptions), so the baseline is 3. The description adds meaningful context for board_id ('optionally scoped to a single board') but adds nothing for bookmark or page_size beyond their schema descriptions.

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 a specific action ('List pins') and a resource ('the account'), optionally scoped by board_id. This distinctly differentiates it from siblings like pinterest_get_pin (single pin) and pinterest_list_boards (boards vs pins).

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

Usage Guidelines4/5

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

The phrase 'List pins on the account' implies general listing, and 'optionally scoped to a single board via board_id' gives conditional usage. It does not explicitly name alternatives, but the sibling set and the verb 'list' make the use case clear for enumerating pins.

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

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: single-item reads (pin, board, user), list operations (boards, pins), analytics, and creation (board, pin). The descriptions clarify use cases, e.g., list_boards for finding board_id before create_pin, so there is no real ambiguity.

Naming Consistency5/5

All tools follow the same 'pinterest_{verb}_{noun}' pattern with lowercase snake_case. Verbs are consistently get, list, or create, and nouns are clear resources. No mixed conventions or vague names.

Tool Count5/5

Eight tools is well-scoped for a Pinterest management server. It covers authentication check, reading user/boards/pins, analytics, and creating boards/pins—enough to perform the advertised workflow without redundancy or bloat.

Completeness4/5

The set covers the core workflow: list boards to get IDs, create boards and pins, fetch pin data, and retrieve analytics. Missing update/delete operations are a minor gap, but the described use case (publishing live pins and measuring traffic) is fully supported.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/N-Graves/pinterest-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server