pinterest-mcp
A Pinterest API v5 MCP server exposing 35 typed tools for managing boards, pins, analytics, search, media uploads, and OAuth for an authenticated Pinterest account.
Read the authenticated profile, followers/following, claimed websites, and account analytics.
Manage boards and board sections: list, get, create, update, delete, and list pins within them.
Manage pins: list, get, create, update, delete, and save/repin pins.
Register and track video/media uploads for video pin creation.
Query account analytics, top pins, top video pins, and single/multi-pin analytics over up to 90 days.
Search your own pins and boards (not Pinterest globally).
Build OAuth consent URLs, exchange codes for tokens, and refresh expired access tokens.
Call any Pinterest v5 endpoint via the
pinterest_api_requestescape hatch.Run as a local stdio MCP server or hosted HTTP/remote MCP server, including OAuth 2.1 for multi-user deployments.
Provides 35 typed tools over the Pinterest API v5 for managing the authenticated account: reading the profile/followers/claimed websites; listing, creating, updating and deleting boards and board sections; listing, getting, creating, updating, deleting and saving (repinning) pins, including video upload registration; pulling account-level daily analytics and top pin/video analytics; full-text search over the account's own pins and boards; OAuth flow helpers (consent URL, code exchange, token refresh); and a generic request tool for any other v5 endpoint.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pinterest-mcpcreate a pin on my Recipes board linking to my new blog post"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pinterest-mcp
A Model Context Protocol server for the Pinterest API v5. It gives an AI assistant 35 typed tools over boards, pins, analytics, search and OAuth — runnable as a local stdio subprocess or as a hosted HTTP endpoint.
What it can do
Area | Tools |
Account | Read the authenticated profile, followers, following, claimed websites |
Boards | List, get, create, update, delete; sections; pins within a board or section |
Pins | List, get, create, update, delete, save (repin); video upload registration |
Analytics | Account-level daily metrics, top pins, top video pins, single- and multi-pin analytics |
Search | Full-text search over the account's own pins and boards |
OAuth | Build a consent URL, exchange the code, refresh an expired token |
Escape hatch |
|
What the Pinterest API cannot do
Worth knowing before you plan a workflow around it:
No public discovery search. Everything is scoped to the authenticated account.
pinterest_search_my_pinssearches your pins, not Pinterest at large.Analytics reach back 90 days. Longer windows are rejected by Pinterest, not by this server.
Video pins take three steps — register the upload, PUT the file, then create the pin referencing the media id.
Trial access is limited. A new Pinterest app can only act on its own account until it is approved for Standard access. Everything here works under Trial for your own account; letting other people connect needs Standard.
Related MCP server: pinterest-mcp
Install
npx pinterest-mcpOr from source:
git clone https://github.com/aymandakirgh/pinterest-mcp.git
cd pinterest-mcp
npm install
npm run build # compiles to dist/
npm testGetting a token
Fastest: a test token from the dashboard
Once your app is approved for Trial access, you can generate a token straight from the Pinterest dashboard and skip OAuth entirely — the quickest way to get this server working against your own account:
developers.pinterest.com/apps → Manage → Configure → Generate Access Token → pick Production (or Sandbox) → Generate
claude mcp add pinterest --env PINTEREST_ACCESS_TOKEN=your_token -- npx -y pinterest-mcpThen ask the assistant to call pinterest_get_user_account to confirm the token and its scopes.
In the browser (easiest)
Run the HTTP transport with your app credentials set and open /auth:
PINTEREST_APP_ID=... PINTEREST_APP_SECRET=... npm run start:http
# then open http://localhost:3000/authClick through, approve on Pinterest, and the callback page hands you the access token, the refresh token and the exact claude mcp add command to paste. Nothing is stored server-side — the tokens are shown once and never written to disk.
Register <your-host>/auth/callback as a redirect URI on the Pinterest app first; it must match character for character.
Pinterest is the only sign-in option for its API — there is no "connect with Google" for third-party apps. If your Pinterest account itself uses Google or Facebook, pick that on Pinterest's own consent screen.
From the tools
If you would rather stay in the assistant:
Create an app at developers.pinterest.com/apps and note the app id, secret and a registered redirect URI.
Set
PINTEREST_APP_ID,PINTEREST_APP_SECRETandPINTEREST_REDIRECT_URI.Ask the assistant to call
pinterest_build_oauth_url, open the URL, approve.Copy the
codefrom the redirect and callpinterest_exchange_oauth_code.Put the returned
access_tokeninPINTEREST_ACCESS_TOKEN.
Access tokens last roughly 30 days; refresh tokens roughly a year. When calls start returning 401, use pinterest_refresh_access_token.
Scopes
Request only what you need — Pinterest shows the list on the consent screen.
Scope | Needed for |
| Profile, followers, following, account analytics |
| Reading / modifying boards and sections |
| The same, for secret boards |
| Reading / modifying pins, and pin analytics |
| The same, for pins on secret boards |
The OAuth tool defaults to user_accounts:read, boards:read, boards:write, pins:read, pins:write.
Use it with Claude Code
claude mcp add pinterest --env PINTEREST_ACCESS_TOKEN=your_token -- npx -y pinterest-mcpUse it with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"pinterest": {
"command": "npx",
"args": ["-y", "pinterest-mcp"],
"env": {
"PINTEREST_ACCESS_TOKEN": "your_token_here"
}
}
}
}Let anyone connect their own account (OAuth)
Run with app credentials and the server becomes a remote MCP server with OAuth 2.1. A user adds the URL in their client, clicks Connect, approves on Pinterest, and is done — no token ever passes through their hands.
PINTEREST_APP_ID=... PINTEREST_APP_SECRET=... \
MCP_AUTH_SECRET=$(openssl rand -hex 32) \
PUBLIC_BASE_URL=https://your-host \
npm run start:httpRegister https://your-host/oauth/pinterest/callback as a redirect URI on the Pinterest app, then point a client at https://your-host/mcp.
The client never receives a Pinterest token. It gets one minted here, with the Pinterest credential sealed inside it, so a single deployment can serve many people's accounts without any of them seeing another's.
Endpoint | Purpose |
| RFC 9728 — names the authorization server |
| RFC 8414 — endpoints, scopes, PKCE support |
| RFC 7591 dynamic client registration |
| Starts the flow; hands off to Pinterest |
| Where Pinterest returns |
|
|
PKCE (S256) is mandatory, plain is refused. Authorization codes are single-use and live ten minutes. The iss parameter is returned per RFC 9207 so clients can detect an authorization-server mix-up. An unauthenticated POST /mcp answers 401 with a WWW-Authenticate header pointing at the resource metadata, which is what triggers a client to begin the flow.
Every token — codes, access, refresh, even client ids — is an AES-256-GCM envelope carrying its own payload and expiry, so there is no session store or database. The tradeoff: revocation means rotating MCP_AUTH_SECRET, which invalidates everything at once.
This needs Pinterest Standard access. Under Trial access, Pinterest only authorizes the app owner's own account, so the flow works but nobody else can complete it. Standard access requires an approved Trial app, compliance with the Developer Guidelines, and a video of the app using the API — see access tiers.
Run it hosted
A live instance runs on Railway:
https://pinterest-mcp-http-production.up.railway.app/mcpIt holds no credentials of its own — every caller supplies their own Pinterest token per request, and GET /health reports default_token_configured: false to prove it. Treat it as a convenience for trying the server out; run your own instance for anything that matters.
The HTTP transport turns the same server into a remote MCP endpoint:
npm run start:http # POST /mcp, GET /healthIt is stateless — each request builds its own server, transport and API client, then tears them down. Callers pass their own Pinterest token per request, so one deployment can serve several accounts without a caller's credentials leaking into another's session:
curl -X POST https://your-host/mcp \
-H 'Authorization: Bearer <pinterest_access_token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'X-Pinterest-Access-Token works too, for clients that already use Authorization for their own gateway. If neither is present the server falls back to PINTEREST_ACCESS_TOKEN, and returns 401 if that is unset as well.
Docker
docker build -t pinterest-mcp .
docker run -p 3000:3000 -e PINTEREST_ACCESS_TOKEN=your_token pinterest-mcpThe image is a two-stage build running as the unprivileged node user.
Configuration
Variable | Default | Purpose |
| — | Token the server acts with. Optional: without it only the OAuth tools work. |
| — | App id, for the OAuth tools. |
| — | App secret, for the OAuth tools. |
| — | Must match a URI registered on the app exactly. |
|
| Set to |
| production v5 | Override the API root outright. |
|
| Attempts for retryable failures (429 / 5xx). |
|
| HTTP transport only. |
| derived from the request | Absolute origin of the deployment. Used for OAuth metadata and callback URLs; set it behind a proxy. |
| random per boot | Seals the OAuth tokens this server issues. Required for a hosted deployment — without it, issued tokens die on restart. |
The server starts whether or not a token is present, so an assistant can always reach the OAuth tools to obtain one.
Design notes
Errors are tool results, not exceptions. A Pinterest failure comes back as an
isErrorresult carrying the status, Pinterest's own message, and a hint naming the likely fix — a missing scope, an expired token, a bad id. Agents can act on that; a thrown exception just aborts the turn.429s and 5xx are retried with exponential backoff, honouring
Retry-Afterup to a 30-second cap so a hostile header cannot stall a call.Destructive tools are annotated.
pinterest_delete_boardandpinterest_delete_pincarrydestructiveHint, so clients can gate them behind confirmation. Deleting a board deletes its pins too.Media shapes are a discriminated union, so the model is told which fields go together rather than discovering it from a 400.
Development
npm run build # compile
npm run dev # compile in watch mode
npm run typecheck # types only, no emit
npm test # unit tests + a real MCP handshake over stdioTests cover the client (auth, query building, retries, error shaping) and boot the actual server over stdio to assert the tool surface, schemas and annotations. No network access required.
Contributing
Issues and pull requests are welcome. Adding an endpoint is usually one function in the relevant src/tools/*.ts module.
License
Available Tools
35 toolspinterest_api_requestCall any Pinterest v5 endpointA
Escape hatch: issue an arbitrary request against the Pinterest API v5 using the configured token. Use this only for endpoints no dedicated tool covers — ad accounts, catalogs, audiences, conversion events. Prefer the specific tools when one exists: they validate input and explain failures. Path is relative to https://api.pinterest.com/v5.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body, for POST/PATCH/PUT. | |
| path | Yes | Path below the v5 root, e.g. '/ad_accounts' or '/catalogs/product_groups'. | |
| query | No | Query string parameters. | |
| method | No | HTTP method. Defaults to GET. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true; the description adds that it uses the configured token (auth context) and implicitly that it performs no input validation and surfaces raw failures, unlike dedicated tools. It stops short of describing error/response shape or rate-limit behavior, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the 'Escape hatch' framing and the base URL constraint last. Every sentence carries decision-relevant information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema, open-world escape hatch with full param coverage, the description supplies the routing rule, examples, and base URL an agent needs to call it. It omits only response/error shape and pagination, which are minor for this generic proxy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented, including the path examples and method enum. The description only reiterates that the path is relative to the v5 root, adding no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (issue an arbitrary request) and resource (Pinterest API v5) and explicitly frames itself as an escape hatch distinct from the dedicated siblings. An agent immediately understands this is the generic fallback rather than one of the specialized tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (endpoints no dedicated tool covers, with concrete examples: ad accounts, catalogs, audiences, conversion events) and when-not (prefer the specific tools when one exists), plus the reason — dedicated tools validate input and explain failures. Nothing 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.
pinterest_build_oauth_urlBuild an OAuth authorization URLARead-only
Build the Pinterest consent URL to open in a browser. The user approves, Pinterest redirects to your redirect_uri with a code query parameter, and you exchange that code with pinterest_exchange_oauth_code. Makes no network call.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Opaque value echoed back on redirect. Use it to defend against CSRF. | |
| app_id | No | Pinterest app id. Falls back to the PINTEREST_APP_ID environment variable. | |
| scopes | No | Scopes to request. Defaults to: user_accounts:read, boards:read, boards:write, pins:read, pins:write. | |
| redirect_uri | No | Must match a redirect URI registered on the app exactly. Falls back to PINTEREST_REDIRECT_URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds substantive behavioral context beyond that: it explicitly notes "Makes no network call" (a concrete, non-obvious trait) and explains the full side effect chain (browser open, user approval, redirect with code).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with verb+resource, and every sentence earns its place by adding scope, flow, or a behavioral constraint. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a local URL-builder with 100% schema coverage and no output schema, the description supplies everything an agent needs: what it produces, how it is used, what happens after redirect, and that it performs no network I/O. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including the CSRF role of `state` and the env-var fallbacks. The description adds the returned `code` query parameter detail but does not extend meaning on the input params themselves; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (build) and resource (the Pinterest consent/authorization URL) and clarifies the operational mode with "Makes no network call." It also distinguishes itself from the sibling pinterest_exchange_oauth_code by naming it as the next step, so an agent can place it in the OAuth flow without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes the usage flow explicitly: open in a browser, user approves, Pinterest redirects with a `code`, then exchange via pinterest_exchange_oauth_code. This gives clear context for when to call it, though it doesn't state prerequisites (e.g. needing a registered redirect_uri) or when-not-to-use beyond the implied sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_create_boardCreate boardA
Create a new board on the authenticated account. Scope: boards:write (boards:write_secret for SECRET boards).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Board name, as shown on the profile. | |
| privacy | No | Defaults to PUBLIC. SECRET boards are visible only to the owner. | |
| description | No | Board description. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write (readOnly=false), non-idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds genuine value by disclosing required OAuth scopes (boards:write, and boards:write_secret specifically for SECRET boards), which the agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operation front-loaded and the scope caveat second; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with full annotation coverage and 100% schema descriptions, the entry covers purpose, auth scope, and the SECRET exception. It omits error behavior (e.g. duplicate board names) and the returned identifier, but with no output schema that omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds parameter-linked meaning: choosing privacy=SECRET changes the required scope to boards:write_secret. That links a schema enum to an auth consequence the schema itself does not mention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a new board") plus the target account, which cleanly separates it from the update/delete/list/get board siblings. The scope clause further qualifies the operation for SECRET boards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never states when to choose this tool over alternatives (e.g. update_board, create_board_section) or any precondition beyond scope. The scope line is auth context rather than a when-to-use guideline, so guidance is essentially absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_create_board_sectionCreate board sectionB
Add a section to a board. Scope: boards:write.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Section name. | |
| board_id | Yes | The board to add a section to. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, non-destructive, non-idempotent, open-world). The description adds the required OAuth scope ('boards:write'), which is genuine auth context beyond the annotations. It stops short of noting the ad_account_id shared-asset behavior or what a successful call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action front-loaded and the scope constraint following immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so return values need not be explained, and the schema fully documents all three parameters. However, for a mutation tool the description omits failure behavior, idempotency implications, and the business-account nuance already hinted at by ad_account_id, leaving it only minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so board_id, name, and ad_account_id are fully documented in the schema itself, establishing the baseline of 3. The description adds no parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a section to a board'), which clearly distinguishes it from the update/delete/list section siblings by name convention. It does not explicitly name those siblings, so an agent must infer the create-vs-update distinction, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a prerequisite ('Scope: boards:write') but no when-to-use guidance, no conditions for choosing this over pinterest_update_board_section or pinterest_create_board, and no exclusions. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_create_pinCreate pinA
Create a pin on one of the authenticated user's boards. Requires a board_id and a media_source. Scope: pins:write (pins:write_secret for secret boards).
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | Destination URL opened when the pin is clicked. | |
| note | No | Private note, visible only to the owner. | |
| title | No | Pin title, up to 100 characters. | |
| alt_text | No | Accessibility text describing the image. | |
| board_id | Yes | Board to save the pin to. | |
| description | No | Pin description, up to 800 characters. | |
| media_source | Yes | The pin's media. Pick the variant matching what you have: a URL, base64 bytes, a carousel, or an uploaded video. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| dominant_color | No | Hex colour like '#6E7874'. Only for non-video pins. | |
| board_section_id | No | Section within the board. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a non-read-only, non-idempotent, non-destructive, open-world write. The description adds genuinely new behavioral context: the exact scopes needed (pins:write, and pins:write_secret on secret boards) and the required inputs. It does not discuss failure modes or rate limits, so it stops short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the core action comes first and the constraints follow. The middle sentence is mildly redundant with the schema's required list, which is the only thing keeping it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter create tool, the description correctly delegates the complex media_source variants to the schema and covers the points the schema cannot express (scope requirements). With no output schema, it could have hinted at what is returned (e.g. a pin id), which is the one remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the media_source union already documents all four variants and their required fields in detail, so the schema carries the parameter burden. The description's mention of board_id and media_source only restates what the schema already marks as required, adding no new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create a pin) and scopes it to "one of the authenticated user's boards." It does not, however, distinguish itself from the very similar sibling pinterest_save_pin, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the prerequisites for calling (a board_id and a media_source must be supplied) and the OAuth scopes required, which is useful context. But it never says when to prefer this over pinterest_save_pin or pinterest_update_pin, so tool selection between near-identical siblings 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.
pinterest_delete_boardDelete boardADestructiveIdempotent
Permanently delete a board AND every pin saved to it. This cannot be undone. Scope: boards:write.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | The board id to delete permanently. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is covered structurally. The description adds genuinely non-redundant context: irreversibility ('This cannot be undone') and the cascade delete of all contained pins, plus the required OAuth scope. It stops short of return format or error behavior, but for a deletion call this is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the destructive scope, then the irreversibility warning, then the auth requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the two things an agent most needs to know before calling: the cascade effect and irreversibility. Only return/error semantics and when-to-use are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are documented in the schema, including the ad_account_id business-account nuance. The description adds nothing param-specific, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) plus resource (board), and explicitly names the cascade consequence ('AND every pin saved to it'). This distinguishes it from siblings like pinterest_delete_pin and pinterest_delete_board_section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of alternatives (e.g., pinterest_update_board for reversible changes), and no stated prerequisites beyond the scope string. The agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_delete_board_sectionDelete board sectionADestructiveIdempotent
Delete a board section. Pins in the section move back to the board root rather than being deleted. Scope: boards:write.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | ||
| section_id | Yes | ||
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds the non-obvious consequence that pins are not deleted but moved to the board root. It also names the required scope (boards:write), which is valuable auth context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the side effect, then the scope requirement. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the operation, the side effect on pins, and the required scope. No output schema exists, but the return isn't needed because the operation is a delete. It stops short of noting prerequisites like auth or whether the board must be owned, but is largely complete for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, with board_id and section_id undocumented in the schema, but their names and required status make their purpose inferable. The description adds no parameter syntax or format details, and the optional ad_account_id has schema description coverage. Marginal value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Delete a board section') that clearly identifies the operation and distinguishes it from sibling tools like delete_board or delete_pin. It doesn't explicitly name a sibling alternative, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage from the verb and resource, and the note about pins moving to board root gives useful post-condition context. However, no explicit when-to-use vs. alternatives (e.g., update_board_section, delete_board) is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_delete_pinDelete pinADestructiveIdempotent
Permanently delete a pin. This cannot be undone. Scope: pins:write.
| Name | Required | Description | Default |
|---|---|---|---|
| pin_id | Yes | The pin id to delete permanently. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description reinforces irreversibility ('This cannot be undone') and adds a behavioral fact the annotations do not carry — the required OAuth scope 'pins:write'. That auth requirement is genuinely additive context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse sentences with the action, the irreversibility warning, and the required scope — all front-loaded, zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter delete with full schema coverage and rich annotations, the description covers action, irreversibility, and auth scope, so an agent can call it safely. Only a brief note on the response (nothing returned on success) is missing, which is minor given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (pin_id, ad_account_id) are documented in the schema, including the nuanced ad-account delegation rule. The description adds nothing parameter-specific, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Permanently delete a pin'), which cleanly separates it from the sibling delete_board and delete_board_section tools despite the shared 'delete' verb. The adverb 'Permanently' also signals irreversibility up front.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The destructive nature and the required 'pins:write' scope imply when this is appropriate, but the description never names alternatives or states when NOT to use it (e.g. versus update_pin or save_pin). Usage is inferable from the purpose, not explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_exchange_oauth_codeExchange an OAuth code for tokensA
Exchange the code from the OAuth redirect for an access token and refresh token. Access tokens last about 30 days; refresh tokens about a year. Store both securely.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The `code` query parameter from the redirect URL. | |
| app_id | No | Falls back to PINTEREST_APP_ID. | |
| app_secret | No | Falls back to PINTEREST_APP_SECRET. | |
| redirect_uri | No | Must be identical to the one used to build the authorization URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the write/idempotency profile, but the description adds genuinely new behavioral context: token lifetimes (~30 days vs ~1 year) and the instruction to store both securely. It still omits whether the code is single-use or what error conditions look like, so it stops short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no padding, front-loading the core action before the token-lifetime detail. Every clause carries information the agent would otherwise lack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names the return values (access and refresh tokens) plus their lifetimes, which is the key missing output information. It could go further on failure modes or re-use of the code, but it is solid for a simple four-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including the app_id/app_secret fallbacks and the redirect_uri must-match constraint) are already documented in the schema itself. The description adds no syntax or format detail beyond restating that `code` comes from the redirect URL, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (exchange) and resource (OAuth code → access/refresh tokens), which is clearly distinct from siblings like pinterest_build_oauth_url and pinterest_refresh_access_token. It does not explicitly name those siblings to draw the boundary, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Phrases like 'the code from the OAuth redirect' imply this is the step after the authorization redirect, which gives reasonable context. However, it never states the sequence relative to pinterest_build_oauth_url or when pinterest_refresh_access_token should be used instead, leaving the workflow to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_boardGet boardARead-only
Fetch a single board by id, including its pin and follower counts. Scope: boards:read.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | The numeric board id returned by pinterest_list_boards. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful non-annotation context: the required OAuth scope (boards:read) and a hint about the returned payload (pin/follower counts), which no output schema supplies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and the scoping scope detail last. Nothing is redundant or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with no output schema, the description covers the action, identifier source, auth scope, and partial return contents. It stops short of describing error/not-found behavior or the full response shape, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the note that board_id comes from pinterest_list_boards and that ad_account_id is only for shared-asset business accounts. The description adds nothing parameter-specific, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Fetch a single board by id") and notes the returned data (pin and follower counts). The word "single" implicitly separates it from pinterest_list_boards and the get/update/delete board family, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The presence of "by id" implies the tool requires a known board id, and the scope line signals read permission requirements, but there is no explicit when-to-use or when-not-to-use guidance (e.g., use list_boards to discover ids first, or get_board when you already have one).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_mediaGet media upload statusARead-only
Check a registered upload. Status moves registered -> processing -> succeeded (or failed). Scope: pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| media_id | Yes | Media id from pinterest_register_media. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real behavioral value by disclosing the status progression registered -> processing -> succeeded (or failed) and the pins:read scope requirement, though it says nothing about rate limits or how to interpret a failed terminal state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with zero filler: purpose, state machine, and scope. Every clause earns its place and the core action is stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description reasonably conveys the meaningful return concept (the status field and its possible values), which is the key information an agent needs. It is slightly thin on what a failed result contains or whether other fields are returned, but it is complete enough for a single-parameter status tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single parameter, so the schema already documents media_id and its origin from pinterest_register_media. The description adds no syntax or format detail beyond that, matching the baseline for schema-driven params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check a registered upload') and reinforces it with the status state machine, which clearly separates it from pinterest_register_media (creates) and pinterest_list_media (enumerates). An agent can tell exactly what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the usage context by tying it to 'a registered upload' and describing the status lifecycle, telling the agent this is a polling/verification call after registration. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_multi_pin_analyticsGet analytics for several pinsARead-only
Analytics for up to 100 pins in one call — far cheaper than looping pinterest_get_pin_analytics. Scope: pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| pin_ids | Yes | Up to 100 pin ids to fetch together. | |
| end_date | Yes | End of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| app_types | No | Restrict to a surface. Defaults to ALL. | |
| start_date | Yes | Start of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| metric_types | No | Metrics to return. Common values: ENGAGEMENT, IMPRESSION, PIN_CLICK, OUTBOUND_CLICK, SAVE, SAVE_RATE, TOTAL_AUDIENCE, ENGAGED_AUDIENCE, PROFILE_VISIT, USER_FOLLOW. Omit for all available. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the required auth scope ('pins:read'), which is genuinely useful context not present in structured fields, but it discloses nothing about rate limits or result shape. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no waste; the batching benefit and the sibling comparison are front-loaded, and the scope constraint is appended compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only batch analytics tool with full schema coverage and no output schema, the description covers purpose, routing, and auth scope adequately. Only minor gaps remain, such as return format or batching cost behavior, none of which would cause a misinvocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters, including the 90-day window constraint and enum values, are already documented in the schema. The description's only added detail, the 100-pin cap, merely restates maxItems. Baseline 3 is correct 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope ('Analytics for up to 100 pins in one call') and explicitly names the sibling it replaces (pinterest_get_pin_analytics). An agent can distinguish it from pinterest_get_pin_analytics and pinterest_get_user_analytics without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool and gives the condition that favors this one ('far cheaper than looping pinterest_get_pin_analytics'), which is the key routing signal. It stops short of stating when NOT to use it (e.g., for a single pin), so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_pinGet pinARead-only
Fetch a single pin by id, including its media, link and board. Scope: pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| pin_id | Yes | The numeric pin id. | |
| pin_metrics | No | Include 90-day and lifetime metrics. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered; the description still adds the required OAuth scope (pins:read) and the default response contents, which the annotations do not convey. It omits error behavior and whether a 404 is returned for missing pins, keeping it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the operation and returned fields, followed by a terse scope clause. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-object read with no output schema, the description tells the agent what the response contains and what scope it needs; the only mild gap is that it does not indicate whether the optional pin_metrics flag changes the payload, which the schema does cover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so pin_id, pin_metrics and ad_account_id are already fully documented in the schema. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (a single pin by id) and enumerates what the payload contains (media, link, board). The word 'single' implicitly separates it from list_pins and search_my_pins, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Scope: pins:read' clause tells the agent the authorization requirement, which is genuinely useful usage context, but there is no statement of when to prefer this tool over pinterest_get_pin_analytics or pinterest_list_pins. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_pin_analyticsGet analytics for one pinBRead-only
Daily analytics for a single pin over a date window of up to 90 days. Scope: pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| pin_id | Yes | The pin to analyse. | |
| end_date | Yes | End of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| app_types | No | Restrict to a surface. Defaults to ALL. | |
| start_date | Yes | Start of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| split_field | No | Break results down by a dimension, e.g. NO_SPLIT, NAMED_SPLIT. | |
| metric_types | No | Metrics to return. Common values: ENGAGEMENT, IMPRESSION, PIN_CLICK, OUTBOUND_CLICK, SAVE, SAVE_RATE, TOTAL_AUDIENCE, ENGAGED_AUDIENCE, PROFILE_VISIT, USER_FOLLOW. Omit for all available. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the required OAuth scope ('pins:read'), which is genuinely useful auth context not present in the annotations. It does not mention rate limits or what a partial/failed window returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the resource and window constraint are front-loaded, and the auth scope is appended as a short clause. Nothing could be trimmed without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analytics fetch with a fully documented schema and no output schema, the description covers the essentials: single-pin scope, window bound, and required scope. It stops short of clarifying what 'daily' granularity returns or how split/metric parameters shape the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters including the date constraints, enum values, and metric list. The description's only added parameter-relevant fact is the 90-day window, which the schema already states for both dates. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Daily analytics for a single pin over a date window of up to 90 days.' The word 'single' implicitly distinguishes it from sibling pinterest_get_multi_pin_analytics and pinterest_get_user_analytics, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states scope ('single pin', 'up to 90 days') but gives no when-to-use guidance, no conditions that route the agent to get_multi_pin_analytics or get_user_analytics, and no exclusions. Usage must be inferred from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_top_pinsGet top performing pinsBRead-only
Rank the account's pins by a metric over a date window — the tool to reach for when asked what is working. Scope: user_accounts:read and pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| sort_by | No | Metric to rank by, e.g. IMPRESSION, SAVE, PIN_CLICK, OUTBOUND_CLICK, ENGAGEMENT. | |
| end_date | Yes | End of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| app_types | No | Restrict to a surface. Defaults to ALL. | |
| pin_format | No | ||
| start_date | Yes | Start of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| num_of_pins | No | How many pins to return, 1-50. Defaults to 10. | |
| content_type | No | ||
| metric_types | No | Metrics to return. Common values: ENGAGEMENT, IMPRESSION, PIN_CLICK, OUTBOUND_CLICK, SAVE, SAVE_RATE, TOTAL_AUDIENCE, ENGAGED_AUDIENCE, PROFILE_VISIT, USER_FOLLOW. Omit for all available. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| from_claimed_content | No | ||
| created_in_last_n_days | No | Only consider pins created in the last N days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful non-schema context by naming the required scopes (user_accounts:read, pins:read), but it says nothing about pagination, rate limits, or what happens at the 90-day boundary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the core action and the usage cue front-loaded, then the permission scope. No filler, though it is arguably terse given 11 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should carry more of the return-value and routing burden. It explains the ranking concept and permissions, but omits sibling disambiguation and any sense of what a ranked result contains, leaving a meaningful gap for a tool with this many parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, so the schema already documents most parameters including sort_by, the date bounds, and metric_types. The description only paraphrases "by a metric over a date window," adding no format or constraint detail beyond what the schema carries. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Rank") and resource ("the account's pins") with the mechanism ("by a metric over a date window"). However, it never distinguishes itself from the very close sibling pinterest_get_top_video_pins, which an agent could easily swap in.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"the tool to reach for when asked what is working" gives a scenario, which is more than nothing. But there are no conditions for choosing among the analytics siblings (get_top_video_pins, get_pin_analytics, get_multi_pin_analytics) and no when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_top_video_pinsGet top performing video pinsBRead-only
Rank the account's video pins by a video metric over a date window. Scope: user_accounts:read and pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| sort_by | No | Video metric to rank by, e.g. VIDEO_MRC_VIEW, VIDEO_AVG_WATCH_TIME, VIDEO_V50_WATCH_TIME, QUARTILE_95_PERCENT_VIEW. | |
| end_date | Yes | End of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| app_types | No | Restrict to a surface. Defaults to ALL. | |
| pin_format | No | ||
| start_date | Yes | Start of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| num_of_pins | No | ||
| content_type | No | ||
| metric_types | No | Metrics to return. Common values: ENGAGEMENT, IMPRESSION, PIN_CLICK, OUTBOUND_CLICK, SAVE, SAVE_RATE, TOTAL_AUDIENCE, ENGAGED_AUDIENCE, PROFILE_VISIT, USER_FOLLOW. Omit for all available. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| from_claimed_content | No | ||
| created_in_last_n_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds the required OAuth scopes (user_accounts:read and pins:read), which is useful behavioral context for a read tool. It does not describe pagination, result ordering behavior beyond metric sorting, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no waste; the operation and scope are front-loaded. Efficient, though the scope sentence is somewhat boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no output schema, and only 55% schema coverage, the description is thin. It covers the core operation and auth scope but leaves many parameters (sort_by, metric_types, filtering enums, ad_account_id) for the agent to infer solely from schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 55%, with the required date params and metric_types documented in the schema. The description adds no parameter detail — no mention of date-window constraints, sort_by metric values, or defaults. Baseline 3 given partial schema coverage and the description carrying little of the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Rank the account's video pins by a video metric over a date window' — clearly identifies ranking operation over video pins. It doesn't explicitly differentiate from the sibling pinterest_get_top_pins, which is a near-identical tool for non-video pins, but the 'video' qualifier does imply the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: 'Rank the account's video pins by a video metric over a date window' tells you what it does but not when to choose it over pinterest_get_top_pins or pinterest_get_pin_analytics. No exclusions or alternatives named despite several analytics siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_user_accountGet my accountARead-only
Fetch the authenticated user's account: username, id, account type, profile image and follower counts. The fastest way to verify a token works. Scope: user_accounts:read.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds the required scope (user_accounts:read), which is genuine auth context beyond the annotations, though it says nothing about rate limits or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is returned, then the pragmatic use case, then the scope requirement. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-required-param read tool with no output schema, the description supplies the return fields, the scope prerequisite, and the motivating use case. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional ad_account_id parameter is fully documented in the schema (100% coverage), so the schema does the heavy lifting. The description never references it, adding no meaning beyond the structured field — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (the authenticated user's account), and enumerates exactly what comes back: username, id, account type, profile image, follower counts. This clearly distinguishes it from siblings like pinterest_list_followers or pinterest_get_user_analytics, which cover related but different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case ('The fastest way to verify a token works'), which tells the agent when this cheap read is the right choice. It stops short of naming alternatives or exclusions, so it is clear context without full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_user_analyticsGet account analyticsARead-only
Daily account-level analytics over a date window of up to 90 days. Scope: user_accounts:read and pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Whether the metrics cover your pins, others' pins of your content, or both. | |
| end_date | Yes | End of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| app_types | No | Restrict to a surface. Defaults to ALL. | |
| pin_format | No | Restrict to a pin format. | |
| start_date | Yes | Start of the window, inclusive. Date as YYYY-MM-DD. Must be within the last 90 days and no later than today. | |
| split_field | No | Break results down by a dimension, e.g. PIN_FORMAT, CONTENT_TYPE, SOURCE. | |
| content_type | No | Organic, paid, or both. | |
| metric_types | No | Metrics to return. Common values: ENGAGEMENT, IMPRESSION, PIN_CLICK, OUTBOUND_CLICK, SAVE, SAVE_RATE, TOTAL_AUDIENCE, ENGAGED_AUDIENCE, PROFILE_VISIT, USER_FOLLOW. Omit for all available. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| from_claimed_content | No | Filter by whether the content comes from a claimed domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint, so the lower bar applies. The description still adds non-structured context: the required OAuth scopes and the 90-day date-window ceiling. It omits rate-limit or pagination behavior, but the auth-scope disclosure is exactly the kind of added value credited at this level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler, and the most important scoping fact (daily, account-level, 90-day window) is front-loaded ahead of the permission note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place that could characterize the returned metrics, and it stops at 'daily account-level analytics' without describing the shape of the response or the split_field behavior. Combined with read-only annotations and a fully documented 10-param schema, this is adequate but leaves a real gap for a reporting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 10 parameters, including enum meanings and the 'omit for all available' behavior of metric_types, so the schema carries the semantics. The description adds only the 90-day window constraint, which is already echoed in the start_date/end_date schema text, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (account-level analytics) plus the granularity (daily) and window limit (up to 90 days). The 'account-level' qualifier implicitly separates it from per-pin siblings like pinterest_get_pin_analytics, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is for aggregate account reporting rather than per-pin reporting. It does add a prerequisite signal by naming the required OAuth scopes (user_accounts:read, pins:read), but it never says when to prefer this over pinterest_get_pin_analytics, pinterest_get_multi_pin_analytics, or pinterest_get_top_pins.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_board_pinsList pins on a boardBRead-only
List the pins saved to a board. Scope: pins:read and boards:read.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | The board id whose pins to list. | |
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. | |
| pin_metrics | No | Include 90-day and lifetime metrics on each pin. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| creative_types | No | Filter to these pin creative types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the required OAuth scopes (pins:read, boards:read), which is genuinely useful auth context, but says nothing about pagination behavior, rate limits, or result shape for a list tool that exposes a bookmark cursor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences that are front-loaded with the core action, followed by the scope requirement. Nothing is wasted and no preamble delays the substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are fully documented and no output schema exists, so return-value explanation is not required. However, for a list tool sitting among several similarly named listing siblings, the definition omits the routing guidance and pagination context an agent needs to pick and invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (board_id, bookmark, page_size, pin_metrics, ad_account_id, creative_types) are already documented in the schema. The description adds no parameter-level detail beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (pins saved to a board), so the core action is unambiguous. It does not, however, differentiate itself from close siblings such as pinterest_list_board_section_pins or pinterest_list_pins, leaving the agent to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no exclusions, and no mention of alternatives among the many sibling list tools. The agent must infer that this is the board-wide (non-section) listing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_boardsList boardsARead-only
List the authenticated user's boards, newest first. Scope: boards:read (plus boards:read_secret to include secret boards). Returns a bookmark cursor when more pages exist.
| Name | Required | Description | Default |
|---|---|---|---|
| privacy | No | Board privacy filter. SECRET requires the boards:read_secret scope. | |
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint, so the safety profile is covered. Beyond that, the description adds real behavioral context: sort order (newest first), the exact OAuth scopes required, and the fact that a bookmark cursor is returned when more pages exist — useful details the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and scope, then pagination. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers scope, ordering, scopes, and pagination behavior adequately. It could be slightly more complete by clarifying the relationship to sibling list/search tools, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (privacy, bookmark, page_size, ad_account_id) are already well documented in the schema. The description's note that boards:read_secret is needed for secret boards duplicates the schema's own privacy note, adding no new parameter semantics. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the authenticated user's boards') plus a meaningful ordering guarantee ('newest first'). It clearly scopes to the authenticated user, which implicitly separates it from general searches, but it never names the closest sibling (pinterest_search_my_boards) to make the distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states required scopes, which functions as an implicit precondition for use, but it gives no when-to-use/when-not guidance and does not route the agent to alternatives like pinterest_search_my_boards or pinterest_get_board. Usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_board_section_pinsList pins in a board sectionARead-only
List the pins saved inside one section of a board. Scope: pins:read and boards:read.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | ||
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. | |
| section_id | Yes | ||
| pin_metrics | No | Include per-pin metrics. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds the required OAuth scopes (pins:read, boards:read), which is exactly the auth context annotations do not supply. It stops short of describing pagination behavior, but the bookmark/page_size parameters carry that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose first and the scope requirement second. No filler; every clause conveys information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description plus annotations plus the bookmark/page_size schema fields are nearly sufficient. The minor gap is that it never signals the response is paginated or that ads delegation is possible, though those live in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with board_id, section_id, and pin_metrics essentially undocumented. The description adds no parameter-level detail (no mention of bookmark pagination, page_size, or the ad_account_id delegation case), so it neither compensates for the gap nor duplicates the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (pins saved inside one section of a board), which cleanly separates it from pinterest_list_board_pins and pinterest_list_board_sections. It does not explicitly name those siblings, so routing relies on the reader noticing the 'section' scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the scope ('one section of a board'), so an agent can infer when it applies, but there is no explicit when-to-use/when-not or named alternative (e.g., use pinterest_list_board_pins for the whole board).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_board_sectionsList board sectionsARead-only
List the sections within a board. Scope: boards:read.
| Name | Required | Description | Default |
|---|---|---|---|
| board_id | Yes | The board id whose sections to list. | |
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully adds the required auth scope (boards:read), which is genuine context beyond the annotations, though it omits pagination behavior (documented in schema) and return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero waste; the core action is front-loaded and the scope requirement follows succinctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with full schema coverage, no output schema, and annotations carrying the safety profile, the description is nearly complete. Naming the scope is a helpful addition; little else is required for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (board_id, bookmark, page_size, ad_account_id) are fully documented in the schema. The description adds no parameter-level meaning beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (sections within a board), which is clearly distinct from list_board_pins and list_board_section_pins. It does not explicitly name which sibling it differs from, but the resource scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when to prefer this over alternatives (e.g. list_board_section_pins) or any exclusions. It does disclose the required OAuth scope (boards:read), which serves as an implied prerequisite for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_claimed_websitesList claimed websitesARead-only
List the websites claimed by the authenticated account, with their verification status. Scope: user_accounts:read.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered without the description. The description adds the required scope (user_accounts:read) and the verification-status return content, but says nothing about pagination behavior beyond what the schema implies, nor about empty results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clauses, front-loaded with the action and resource, zero waste. The scope note is efficiently appended.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-required-param read tool whose annotations and schema carry the structure, this covers purpose and scope, but there is no output schema and the description does not explain the return shape beyond naming verification status, leaving moderate gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (bookmark, page_size) are fully documented in the schema. The description adds no parameter detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list claimed websites) and adds the extra content it returns (verification status). It does not name a sibling or distinguish itself from pinterest_get_user_account, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only 'list' nature and the required user_accounts:read scope, but there is no explicit when-to-use/when-not guidance and no alternative named from the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_followersList my followersBRead-only
List the accounts following the authenticated user. Scope: user_accounts:read.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful non-schema detail, the required OAuth scope (user_accounts:read), but says nothing about pagination behavior or rate limits beyond what the schema already documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the operation is front-loaded and the scope constraint is appended compactly. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paged list, the description plus annotations and a fully documented schema cover what an agent needs to invoke it correctly. Nothing explains the shape of returned account objects, but that gap is minor for a simple listing tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with bookmark and page_size fully documented in the schema itself, including defaults and ranges. The description adds no parameter meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List the accounts following the authenticated user'), which correctly frames the follower direction and implicitly distinguishes it from the inverse pinterest_list_following. It stops short of naming that sibling explicitly, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of pinterest_list_following, the obvious inverse operation an agent could confuse this with. The only cue is the phrasing 'following the authenticated user,' which is left for the reader to interpret.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_followingList who I followARead-only
List the users and boards the authenticated user follows. Scope: user_accounts:read.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| feed_type | No | Restrict to a kind of followed entity. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds a genuine behavioral fact beyond the annotations: the required OAuth scope (user_accounts:read), which tells the agent what auth the call needs. It stops short of noting pagination behavior or rate limits, hence 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the core action and resource come first, followed by the scope requirement. Nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list with fully documented parameters and no output schema, the description covers purpose, scope, and limitations adequately. It could add a note on result shape or the meaning of a returned bookmark, but nothing critical to a correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so bookmark, feed_type, and page_size are each fully documented in the schema, including the enum values and 1-250 range. The description adds no parameter-level detail, which is the expected baseline when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (users and boards the authenticated user follows), clearly identifying the outbound-follow relationship. It does not explicitly name pinterest_list_followers as the inverse operation, so an agent must infer the direction distinction from the wording alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description's directionality ('who the authenticated user follows'), which is enough to distinguish it from list_followers. However, there is no explicit when-to-use statement or guidance on choosing among the many list_* siblings (list_boards, search_my_boards, etc.).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_mediaList media uploadsARead-only
List the account's registered media uploads and their statuses. Scope: pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the required OAuth scope, which is real value, but says nothing about pagination, ordering, or what 'status' values look like. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and scope constraint, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with full parameter coverage and no output schema, the description covers what is returned (uploads and their statuses) and the auth requirement. Minor gaps around pagination and result shape, but nothing an agent needs in order 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: bookmark and page_size are both fully documented in the schema, including the 1-250 range and the default of 25. The description adds nothing about parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List), resource (the account's registered media uploads) and an extra detail (their statuses), which distinguishes it from the singular pinterest_get_media and the write-side pinterest_register_media. It does not name those siblings explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Scope: pins:read' note tells the agent the required permission, which is genuinely useful context, but there is no explicit when-to-use guidance or routing to pinterest_get_media for a single upload. Usage is only implied by the plural 'list' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_pinsList pinsBRead-only
List the authenticated user's pins, newest first. Scope: pins:read (plus pins:read_secret for pins on secret boards).
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| pin_type | No | ||
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. | |
| pin_filter | No | Restrict to a subset of the account's pins. | |
| pin_metrics | No | Include 90-day and lifetime metrics per pin. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| creative_types | No | ||
| include_protected_pins | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnlyHint and openWorldHint, so the safety profile is already known, but the description adds real context: results are ordered newest first and the call requires pins:read with pins:read_secret for secret-board pins. It does not mention pagination mechanics, though the bookmark parameter schema carries that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core action and ordering stated first and the auth scope second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, zero-required listing tool with no output schema, the description covers scope and ordering but is silent on pagination behavior and the shape of results. Adequate as a minimum, but not fully sufficient given the parameter surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 63%, leaving several parameters (pin_type, creative_types, include_protected_pins) undocumented, and the description adds no parameter meaning at all. With 8 parameters and no compensating detail, this falls below the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (the authenticated user's pins), and the 'authenticated user's' framing implicitly separates it from board-scoped siblings like pinterest_list_board_pins. It does not name a sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no routing to alternatives such as pinterest_search_my_pins or pinterest_list_board_pins. The only scoping statement is the auth requirement, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_refresh_access_tokenRefresh an access tokenA
Trade a refresh token for a fresh access token. Use this when calls start failing with 401.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optionally narrow the new token to a subset of the original scopes. | |
| app_id | No | Falls back to PINTEREST_APP_ID. | |
| app_secret | No | Falls back to PINTEREST_APP_SECRET. | |
| refresh_token | Yes | The refresh token from the original exchange. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey the safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent, open-world). The description adds the key operational trigger (401 failures), which is the behavior an agent most needs. It does not mention token lifetime or whether the old refresh token is rotated, which would be a useful extra.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the mechanism first, the trigger second. No filler, everything front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple token-exchange tool with full schema descriptions and no output schema, this covers what an agent needs to call it correctly. The remaining gap is return-value shape, which is not strictly required since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented, including fallback behavior for app_id/app_secret and the scope-narrowing semantics. The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Trade') and resource ('refresh token for a fresh access token'), and it clearly distinguishes itself from the OAuth siblings (build_oauth_url, exchange_oauth_code) by naming the refresh-token exchange.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the triggering condition: 'Use this when calls start failing with 401.' That gives the agent a concrete signal for when to invoke this rather than retry or re-authorize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_register_mediaRegister a video uploadA
Step 1 of video pin creation: register an upload and receive one-time S3 form fields. POST the video to upload_url with those upload_parameters as multipart form fields, poll pinterest_get_media until status is 'succeeded', then pass the media_id to pinterest_create_pin with source_type 'video_id'. Scope: pins:write.
| Name | Required | Description | Default |
|---|---|---|---|
| media_type | Yes | Only 'video' is supported by the v5 media endpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the write/non-repeatable/open-world profile is covered. The description adds genuinely new behavior: credentials are one-time, require a multipart POST to an external S3 endpoint, and progress must be confirmed by polling another tool. It stops short of describing credential expiry timing or failure/retry behavior, so 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence front-loads the step number and outcome, then chains the follow-up actions with zero filler. It is slightly run-on and would read better split into two sentences, but every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming what comes back (one-time S3 form fields / upload_url / upload_parameters) and how to use it. Combined with the scope note and the poll-then-create handoff, an agent has everything needed to complete the video upload workflow without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (media_type, const 'video') and schema coverage is 100%, so the schema fully documents the input; the description adds nothing about it. Baseline 3 applies. The only extra semantics, source_type 'video_id' and the S3 fields, belong to downstream tools rather than this schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('register an upload') and immediately positions it as 'Step 1 of video pin creation', distinguishing it from the read/list siblings and from pinterest_create_pin. An agent knows exactly what this call produces: one-time S3 form fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the full when-and-what-next chain: POST the video to upload_url with the returned upload_parameters, poll pinterest_get_media until status is 'succeeded', then hand media_id to pinterest_create_pin with source_type 'video_id'. It also names the required scope (pins:write), so an agent can pre-check authorization.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_save_pinSave (repin) a pinA
Save an existing pin to one of the authenticated user's boards — the API equivalent of a repin. Scope: pins:write.
| Name | Required | Description | Default |
|---|---|---|---|
| pin_id | Yes | The pin to save. | |
| board_id | Yes | Destination board. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| board_section_id | No | Destination section within the board. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description usefully adds the required auth scope ('pins:write'), which annotations do not convey, but says nothing about duplicate-save behavior or what a repin returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence plus a scope tag; the operation is front-loaded and no words are wasted. Appropriate size for a simple two-required-param mutation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param non-idempotent write with full schema coverage and no output schema, the description covers purpose and auth scope adequately. It could additionally note duplicate-repin handling, but nothing essential for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (pin_id, board_id, ad_account_id, board_section_id) are already documented in the schema. The description adds no parameter-level detail, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Save an existing pin') and clarifies the domain term as a repin, which implicitly separates it from pinterest_create_pin. It does not name any sibling explicitly, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'existing pin' implies this is for repinning rather than creating, which edges toward usage context, but there are no explicit when/when-not statements or named alternatives. A single added clause about create_pin vs save_pin would raise this materially.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_search_my_boardsSearch my boardsARead-only
Full-text search across the authenticated user's own boards. Scope: boards:read.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms matched against the user's own board names and descriptions. | |
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful auth context ('Scope: boards:read'), but says nothing about pagination behavior or result shape beyond what the schema implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the core action and scope are front-loaded before the auth note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool, annotations carry the safety profile and the schema fully documents inputs, so little is missing. No output schema is present, but the returned boards and cursor semantics are self-evident enough that the definition is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the four parameters fully documented (including the bookmark cursor and page_size range). The description adds no parameter detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (full-text search) and resource (boards) scoped to the authenticated user's own boards, which separates it from pinterest_list_boards (enumeration) and pinterest_search_my_pins (pins). It distinguishes reasonably from siblings but never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'own boards' scoping plus full-text qualifier implies when this is appropriate versus a plain list, but there is no explicit when-to-use/when-not guidance or named alternative. Usage 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.
pinterest_search_my_pinsSearch my pinsARead-only
Full-text search across the authenticated user's own pins. This does NOT search Pinterest globally — the v5 API exposes no public discovery search. Scope: pins:read.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms matched against the user's own pin titles and descriptions. | |
| bookmark | No | Opaque cursor from a previous response's `bookmark` field. Omit for the first page. | |
| page_size | No | Results per page, 1-250. Pinterest defaults to 25. | |
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds non-obvious behavioral context beyond that: the required OAuth scope ('pins:read') and the API-level limitation that only the user's own pins are searchable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the core scope is front-loaded and the limitation and required scope follow immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search with no output schema, the description covers purpose, scope, and auth requirement adequately; pagination and result format are handled by the schema's bookmark/page_size documentation. Only minor detail about result shape or default behavior is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (query, bookmark, page_size, ad_account_id) are documented in the schema itself. The description adds no syntax or format detail about them, which matches the baseline for fully-covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Full-text search') and resource ('the authenticated user's own pins'), and explicitly rules out global discovery search. This distinguishes it cleanly from siblings like pinterest_list_pins and pinterest_search_my_boards without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear usage boundary ('This does NOT search Pinterest globally — the v5 API exposes no public discovery search'), which tells the agent when the tool is and isn't applicable. It does not, however, name or route to sibling alternatives such as list_pins for browsing versus searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_update_boardUpdate boardAIdempotent
Update a board's name, description or privacy. Only the fields you pass are changed. Scope: boards:write.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| privacy | No | ||
| board_id | Yes | The board id to update. | |
| description | No | ||
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond them by stating that unpassed fields are left untouched and that the boards:write scope is required, which tells the agent this is a safe, partial, non-destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences: capability, mutation semantics, then scope. Every clause carries information and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a simple 5-parameter update, the description covers the essentials: which fields mutate, partial-update behavior, and the required OAuth scope. Minor gaps remain around the privacy options and error/edge behavior, but nothing critical to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40% (only board_id and ad_account_id are documented), so the description must compensate. It partially does by naming the three updatable fields, but it adds nothing about the privacy enum semantics or the ad_account_id 'shared asset' requirement, which the schema only briefly covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Update a board') and enumerates the exact mutable fields (name, description, privacy), so an agent knows precisely what the tool changes. It does not explicitly differentiate itself from siblings like pinterest_create_board or pinterest_update_board_section, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Only the fields you pass are changed' clarifies partial-update semantics and the 'boards:write' scope states a prerequisite, which is real usage context. However, it never says when to choose this tool over pinterest_update_board_section or pinterest_create_board, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_update_board_sectionRename board sectionBIdempotent
Rename an existing board section. Scope: boards:write.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The new section name. | |
| board_id | Yes | ||
| section_id | Yes | ||
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the mutation and safety profile is covered. The description adds the required OAuth scope (boards:write), a genuinely useful behavioral detail not present in annotations, but says nothing about what the rename affects or whether the section must already exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action stated first and the scope constraint second; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations present and no output schema, the description covers the action and permission scope but leaves the required identifiers and the business-account ad_account_id nuance entirely to the schema. It is minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% - name and ad_account_id are documented in the schema, while board_id and section_id carry no description anywhere. "Rename" loosely implies name is the target value, but the description adds no semantics beyond the schema and does not compensate for the two undocumented identifier parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (rename) and resource (existing board section), which clearly separates it from create_board_section and delete_board_section. However, it does not name or contrast any sibling tool explicitly, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Scope: boards:write" implies the prerequisite permission, which gives the agent a usable gating condition. There is no explicit when-to-use guidance or comparison against alternatives such as pinterest_update_board or pinterest_create_board_section, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_update_pinUpdate pinAIdempotent
Update a pin's text fields, link or board placement. Media cannot be changed after creation. Scope: pins:write.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | ||
| note | No | ||
| title | No | ||
| pin_id | Yes | The pin id to update. | |
| alt_text | No | ||
| board_id | No | Move the pin to this board. | |
| description | No | ||
| ad_account_id | No | Act on behalf of this ad account. Required only for business accounts operating on a shared asset. | |
| board_section_id | No | Move the pin to this section. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety profile: readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds valuable context by disclosing the required OAuth scope (pins:write) and the immutability of media after creation. It does not, however, clarify partial-update behavior or whether unspecified fields are preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the core action, then add the media constraint and auth scope. Every sentence earns its place with no redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter mutation tool with no output schema, the description covers purpose, media immutability, and the required scope. It leaves partial-update semantics and some parameter-level detail unstated, but annotations and schema fields fill much of the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 44%, below the 50% threshold, so the description must compensate. It groups parameters into text fields, link, and board placement, which helps map the nine inputs, but it does not explain individual parameters such as alt_text, title, note, board_section_id, or ad_account_id beyond what the schema already partially documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (Update) and resource (a pin's text fields, link or board placement), and explicitly excludes media changes. It distinguishes itself from pinterest_create_pin by noting that media cannot be changed after creation, so an agent can tell the tools apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states what can be updated and notes that media cannot be changed after creation, which is an implied when-not condition. However, it does not name explicit alternatives (e.g., pinterest_create_pin for media changes or pinterest_delete_pin for removal) or give full when-to-use guidance beyond the field scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
35 tool updates
v0.3.0- First observed
pinterest_api_request - First observed
pinterest_build_oauth_url - First observed
pinterest_create_board - First observed
pinterest_create_board_section - First observed
pinterest_create_pin - First observed
pinterest_delete_board - First observed
pinterest_delete_board_section - First observed
pinterest_delete_pin - First observed
pinterest_exchange_oauth_code - First observed
pinterest_get_board - First observed
pinterest_get_media - First observed
pinterest_get_multi_pin_analytics - First observed
pinterest_get_pin - First observed
pinterest_get_pin_analytics - First observed
pinterest_get_top_pins - First observed
pinterest_get_top_video_pins - First observed
pinterest_get_user_account - First observed
pinterest_get_user_analytics - First observed
pinterest_list_board_pins - First observed
pinterest_list_board_section_pins - First observed
pinterest_list_board_sections - First observed
pinterest_list_boards - First observed
pinterest_list_claimed_websites - First observed
pinterest_list_followers - First observed
pinterest_list_following - First observed
pinterest_list_media - First observed
pinterest_list_pins - First observed
pinterest_refresh_access_token - First observed
pinterest_register_media - First observed
pinterest_save_pin - First observed
pinterest_search_my_boards - First observed
pinterest_search_my_pins - First observed
pinterest_update_board - First observed
pinterest_update_board_section - First observed
pinterest_update_pin
TDQS
Scored across 35 tools
Each tool targets a distinct resource and action, with clear boundaries between boards, sections, pins, media, analytics, and OAuth flows. The few similar-sounding tools (e.g., list_board_pins vs. list_board_section_pins, get_top_pins vs. get_top_video_pins) are differentiated by precise descriptions.
All tools follow a consistent snake_case verb_noun pattern with a uniform `pinterest_` prefix. Names like `get_user_account`, `update_board`, `list_board_pins`, and `delete_pin` are predictable and readable.
With 35 tools, the surface is heavy for a single MCP server, exceeding the 25-tool threshold for being too many. While Pinterest's API is broad, many granular tools (e.g., separate board section operations) could be consolidated or left to the escape hatch `pinterest_api_request`.
The set covers full CRUD for boards, sections, and pins, plus media upload lifecycle, analytics, user account, followers, search, and OAuth. The `pinterest_api_request` escape hatch fills any remaining gaps for ad accounts or catalogs.
Maintenance
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
OAuth 2.1 short-link tools for AI agents with scoped tokens, approvals, audit logs, and revocation.
Hosted MCP for Instagram, Facebook, X, LinkedIn, Pinterest, and Ghost. OAuth 2.1, 38 tools.
Discover, inspect and run 63,000+ agent tools from one balance. Pay per call, no subscriptions.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with the Pinterest API, allowing management of boards and pins through natural language commands.84 npm24MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage Pinterest boards and pins, create and update pins, and track analytics via the Pinterest API v5.4MIT
- AlicenseAqualityDmaintenanceAn MCP server that lets Claude interact with Pinterest — browsing, creating, and managing boards, pins, sections, and user profiles via the Pinterest API v5.1557 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to search public Pinterest pins, retrieve pin metadata and media URLs, and download matching images, GIFs, or videos into a local folder, with read-only tools and explicit confirmation for downloads.-