pinterest-mcp-server
Manage and analyse a Pinterest account: read your boards, pins and analytics, create image pins, and reach any of Pinterest's 263 API operations through one dispatcher.
Browse the catalogue —
pinterest_list_operationssearches all reachable operations by id, path, tag or summary (131 need an ad account; the rest are the organic pins/boards/media/search/analytics surface).Call anything —
pinterest_callruns any operation by id withparams/body;ad_account_idis filled in automatically fromPINTEREST_AD_ACCOUNT_ID.Read the account —
pinterest_get_me(authenticated user),pinterest_list_boards(filter by privacy, paginate via bookmark),pinterest_list_pins(paginate, filter by pin status).Create pins —
pinterest_create_pinposts an image pin to a board from a publicly reachable URL, with optional link, title, description, alt text and board section.Analytics —
pinterest_get_pin_analyticsreports how a pin performed over a date range, with selectable metric types (e.g.IMPRESSION,PIN_CLICK,SAVE); read-only, so it works underMCP_READ_ONLY.Search your own pins —
pinterest_search_my_pinsby term, with paging.Safety rails —
MCP_READ_ONLY=1refuses anything that changes state;MCP_NO_DESTRUCTIVE=1refuses irreversible or chargeable operations (ad creation/changes, billing); OAuth token endpoints are deliberately unreachable.Caveats in this schema — it exposes 8 tools, not the 10 the README lists:
pinterest_create_video_pinandpinterest_get_account_analyticsare absent, andpinterest_create_pintakes onlyimage_url(required), so local files and carousels are not offered here either. Ad-account operations are reachable only viapinterest_call.
Provides access to the Pinterest API v5, enabling management of boards and pins, pin creation, pin analytics, pin search, and a catalogue of Pinterest operations including advertising account endpoints.
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-mcp-servershow me my boards and recent pins"
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-server
A Model Context Protocol server for the Pinterest API v5.
263 of Pinterest's 266 published operations are reachable. The three that are not are the OAuth token endpoints, excluded for a security reason rather than an access one. A test compares the catalogue against Pinterest's own OpenAPI spec, so when Pinterest ships an endpoint the build goes red.
It keeps itself authorised (Pinterest tokens expire after 30 days; this refreshes them), and it can pin local images, carousels and videos from one folder you choose.
MIT licensed.
Install
npm install -g @nasdigitaluk/pinterest-mcpRelated MCP server: pinterest-mcp
Authorise once
Create an app at developers.pinterest.com/apps and add http://localhost:3034/oauth/redirect as a redirect URI. Then:
PINTEREST_APP_ID=your-app-id PINTEREST_APP_SECRET=your-app-secret pinterest-mcp-authOpen the link it prints, sign in as the account the server should act as, and approve. It writes everything the server needs to ~/.pinterest-mcp-credentials (mode 0600) — the tokens, their expiry dates, and the app id and secret used to refresh them — and prints no tokens. It starts listening before it prints the link, so an occupied port fails at once instead of wasting the single-use code.
{
"mcpServers": {
"pinterest": {
"command": "pinterest-mcp",
"env": {
"PINTEREST_CREDENTIALS_FILE": "/home/you/.pinterest-mcp-credentials",
"PINTEREST_UPLOAD_DIR": "/home/you/pinterest-uploads"
}
}
}
}pinterest-mcp-auth --help lists the options: --port, --scopes, --add-scopes. The default scopes cover reading and publishing organic content, including secret boards. They deliberately leave out ads:write: an active campaign spends money the moment it exists. Add --add-scopes ads:read,catalogs:read if you want ad reporting and catalogues.
How long the tokens last
Lifetime | What happens | |
Access token | 30 days | Refreshed automatically five minutes before it expires. |
Refresh token | 60 days, renewed on every refresh | So it never expires while the server is in use. Leave the server unused for more than 60 days and you need to run |
Pinterest's refresh tokens rotate: each refresh returns a new one. Two MCP clients running at once is normal, and if both refreshed with the same stored token, one could save a token that has already been replaced — breaking the chain until somebody re-authorises by hand. So the refresh runs under a lock on the credentials file, re-reads the file inside the lock (another process may just have refreshed), and saves the new access token, the new refresh token and both expiries in one atomic write.
Or a static token
PINTEREST_ACCESS_TOKEN=... still works, exactly as in 1.0.0 — a token generated in the developer portal. It does not refresh, so it stops working after 30 days, and the server says so when it starts.
Configuration
Variable | |
| The file |
| Optional overrides for the app credentials stored in that file. |
| A static token instead of the file. |
| Optional. The one folder local images and videos may be read from. Unset: local files are refused. |
| Optional. 148 operations are scoped to an ad account; set this and it is filled in when omitted. |
| Defaults to |
| Refuse anything that changes state. |
| Allow writes, refuse anything irreversible or chargeable — see below. |
The order is: an explicit PINTEREST_CREDENTIALS_FILE, then PINTEREST_ACCESS_TOKEN, then the default file.
Tools
Ten tools for 263 operations. Every tool description is paid for in context on every turn, so the common path gets purpose-built tools and the rest goes through one dispatcher.
Tool | |
| Browse the catalogue. Start here — try |
| Call any operation by id. |
| The authenticated account. |
| Your boards. |
| Your pins. |
| An image pin from a public URL, a local file, or a 2–5 image carousel. |
| A video pin from a local MP4 or MOV. |
| How one pin performed. |
| How the account performed, or its top pins and top video pins. |
| Search your own pins. |
Local images and videos
Pinterest accepts images as base64 and videos through an upload, so a local file can become a pin — as long as you have said which folder the server may read.
A tool that reads a path and publishes the contents is an exfiltration route: "make a pin from ~/.ssh/id_rsa" is one prompt injection away. So:
Nothing is read unless
PINTEREST_UPLOAD_DIRis set.The folder and the file are both resolved with
realpath, so neither../nor a symlink placed inside the folder can reach outside it.The file's type is decided by its contents, not its name: a key renamed
.pngis refused. Images must be PNG or JPEG (the only types Pinterest takes). Videos must be MP4 or MOV.Images are capped at 20 MB and videos at 2 GB.
A refusal names your input, never the resolved path, so it cannot be used to map the filesystem.
A carousel is all URLs or all local files, not a mix: turning a URL into base64 would mean this server fetching arbitrary URLs.
Video is three steps, and the tool does all of them: register the upload with Pinterest, send the file (streamed, not loaded into memory) to the storage URL Pinterest returns, then wait for processing and create the pin. The storage URL is a signed upload form, so your Pinterest token is never sent there. If processing outlasts wait_seconds, you get status: "processing" and a media_id; call again with that media_id and it carries on without uploading twice. The cover is a URL, a local image, or a frame of the video (by default, the frame one second in). Pinterest's sandbox cannot do video.
Pin images from a URL must be publicly reachable: Pinterest fetches them itself. The schema refuses file://, javascript: and URLs with embedded credentials.
Errors you can act on
Pinterest explains its refusals, and the explanation is often the only way to know what to do. A token missing a scope comes back as HTTP 401 — which a generic summary would call "rejected the credentials", sending you off to replace a token that is fine — while Pinterest's message says exactly which scope is missing:
The provider rejected the credentials. (HTTP 401) Pinterest says: … Missing: ['boards:write']So Pinterest's message field is passed on, capped in length and with anything resembling a credential redacted. Nothing else from the response body is.
Why the ads suite is covered, not excluded
Most of Pinterest's API is advertising: campaigns, ad groups, ads, audiences, billing, conversions, targeting. It is tempting to exclude the lot as "needs special access".
That would be wrong. Unlike an admin API key on a self-hosted Forem — which an ordinary account genuinely cannot obtain — a Pinterest ad account is something any business account can create. Excluding those endpoints would deny the API to people who can perfectly well use it, and dress a shortcut up as a safety measure.
So all 148 are covered. What they need is an ad account, which is a fact about your Pinterest setup rather than a limitation of this server.
What is excluded, and why
Three operations: POST /oauth/token, POST /oauth/token/revoke, POST /oauth/conversion_token.
Authentication belongs to the server, not to the caller. The server refreshes its own token internally; exposing these endpoints as tools would let a model mint itself fresh credentials or revoke the ones the server is running on, which is not a feature.
This is enforced, not just documented: asking pinterest_call for a token operation returns that reason.
⚠️ Ads spend money
destructive here means irreversible or chargeable, not "deletes something".
A campaign created in ACTIVE status starts spending against its budget immediately. The same call with PAUSED spends nothing, and no static rule can tell them apart — so the conservative reading wins: anything that creates or changes an advertising entity, plus billing and order lines, is classified destructive.
MCP_NO_DESTRUCTIVE=1 therefore means "will not touch my ad budget". Ad reporting stays a read, so analysis still works under it — there are 30+ ad-account GET endpoints and every one is available read-only.
Of 266 operations: 138 read, 91 write, 37 destructive.
Trial and Standard access
A new Pinterest app starts on Trial access. Pins and boards a Trial app creates are visible only to you, as sandbox content; publishing publicly needs Standard access, which you apply for from the app's page. The server behaves the same either way — what changes is who can see what you create.
Refreshing the catalogue
Pinterest publishes YAML, so it is converted on the way in:
curl -sL https://raw.githubusercontent.com/pinterest/api-description/main/v5/openapi.yaml \
| python3 -c 'import sys,yaml,json,datetime; json.dump(yaml.safe_load(sys.stdin), open("vendor/pinterest-openapi.json","w"), default=lambda o: o.isoformat())'
npm run generate && npm testTesting
npm test # unit tests, no network
npm run smoke # real MCP over stdio, fake credentials
node scripts/live-check.mjs # against your real account, read-onlylive-check.mjs --write also does a full write round-trip: it creates a secret board, pins to it every way the server can (a public URL via LIVE_IMAGE_URL, a local image, a carousel, a video made with ffmpeg), reads each pin back, then deletes them and the board and checks your account is back where it started.
Built on
@nasdigitaluk/mcp-server-core.
Licence
MIT.
Available Tools
8 toolspinterest_callC
Call any Pinterest operation by id. ad_account_id is filled in from PINTEREST_AD_ACCOUNT_ID when you leave it out.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| params | No | ||
| operation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses that ad_account_id defaults from an environment variable, but it does not explain that this tool may perform reads or mutations across many different operations, nor any side effects, authentication requirements, or failure 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?
The description is very short with no filler; both sentences contribute information. It is under-specified, but the conciseness itself is appropriate and the most important operational detail is 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 generic dispatch tool with no output schema, no annotations, and three barely documented parameters, the description is severely incomplete. It does not tell the agent how to obtain valid operation ids, how body/params should be shaped, what the response looks like, or when the generic tool should be preferred over the sibling-specific tools.
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 0%, so the description must compensate for the schema's lack of parameter documentation. It adds some meaning by explaining the ad_account_id default behavior, but operation_id, body, and params are left essentially undefined beyond the raw 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?
The description states a clear verb and resource: call any Pinterest operation by id. This implies a generic dispatcher distinct from the specific sibling operations, though it does not explicitly name those siblings or define what an operation id is.
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 no guidance on when to use this tool instead of the specialized Pinterest tools, nor does it mention that available operation ids can be discovered via pinterest_list_operations. The ad_account_id environment fallback is useful but does not constitute usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_create_pinA
Create a pin on one of your boards. The image must be a publicly reachable URL — Pinterest fetches it server-side, so a local file path will not work.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | Where the pin sends people. | |
| title | No | ||
| alt_text | No | Worth filling in; Pinterest is a visual search engine. | |
| board_id | Yes | ||
| image_url | Yes | Publicly reachable image URL. | |
| description | No | ||
| board_section_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It usefully explains that Pinterest fetches the image server-side and that local file paths will not work, which is a non-obvious behavioral trait and common failure point. It does not cover permissions or response behavior, but the key operational trap is disclosed.
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 no wasted words. The action is front-loaded, and the essential constraint about public URLs is placed immediately after.
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 creation tool, the description communicates what is being created and the most important prerequisite for successful invocation. It does not describe the return value, but with no output schema and a fairly self-explanatory create operation, the missing return info is a minor 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?
The description adds critical meaning for image_url by requiring a publicly reachable URL. However, schema description coverage is only 43%, and the description does not clarify ambiguous parameters like board_section_id or further explain title, description, and link semantics 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?
The description opens with a specific verb and resource: 'Create a pin on one of your boards.' This clearly identifies the action and distinguishes it from sibling read/list tools like pinterest_list_pins or pinterest_get_pin_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear usage context — you use this when creating a pin on an owned board. It does not explicitly name alternatives or when-not-to-use cases, but the creation intent is unambiguous against the read/search/list siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_meD
The authenticated Pinterest account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations and the description reveals no behavioral details such as side effects, required permissions, or return format. It is completely silent on what happens when the tool is called.
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?
The description is extremely short but is not a well-formed sentence and lacks a verb. It sacrifices clarity for brevity, so it does not effectively earn 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?
With no parameters or output schema, the description is the only source of information. It fails to explain what the tool does or what it returns, leaving the agent completely in the dark about the tool's function.
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 tool has zero parameters and the schema coverage is 100%, so the baseline of 4 applies. No parameter descriptions are needed because there are no parameters to explain.
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?
Description is a noun phrase ('The authenticated Pinterest account.') with no verb, so it does not clearly state what the tool does. It fails to distinguish this tool from siblings like pinterest_list_boards or pinterest_get_pin_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the many sibling tools. The description offers no context about its intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_get_pin_analyticsC
How a pin has performed. Reads only, so it works under MCP_READ_ONLY.
| Name | Required | Description | Default |
|---|---|---|---|
| pin_id | Yes | ||
| end_date | Yes | YYYY-MM-DD. | |
| start_date | Yes | YYYY-MM-DD. | |
| metric_types | No | Comma-separated, e.g. IMPRESSION,PIN_CLICK,SAVE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Reads only' and mentions the MCP_READ_ONLY context, indicating the tool is non-destructive. However, it does not disclose other behavioral traits such as rate limits, authentication requirements, or error behaviors. Since no annotations are provided, the description carries the full burden but only partially covers the safety profile.
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?
The description is a single concise sentence that delivers the core purpose without unnecessary fluff. It is well-structured and easy to parse, though it could include a bit more detail without becoming verbose.
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?
The description lacks important context such as the format of the analytical response, whether the tool returns a single aggregate or time-series data, and how to interpret the output. This leaves significant gaps for an agent attempting to invoke the tool effectively.
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 schema provides descriptions for start_date, end_date, and metric_types, while pin_id has no description but its meaning is immediately inferable. With 75% schema coverage, the baseline is 3, and the description adds no extra semantic clarity beyond what the schema already offers.
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 clearly states that the tool provides pin performance analytics ('How a pin has performed'), which distinguishes it from general pin creation or listing tools. However, it lacks specifics about which metrics are included, but the core purpose is understandable.
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 guidance is given on when to use this tool versus alternative pin-related tools like search or list. The description does not mention prerequisites, intended use cases, or conditions that would favor this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_boardsC
Boards belonging to the authenticated account.
| Name | Required | Description | Default |
|---|---|---|---|
| privacy | No | ||
| bookmark | No | Cursor from a previous page. | |
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden, and it does contribute one meaningful trait: the tool is scoped to the authenticated account's own boards. However, it does not disclose pagination behavior (despite the bookmark parameter), whether secret or protected boards appear by default, ordering, or response shape. The single scoping disclosure is useful, but the behavioral picture is thin.
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?
The description has zero wasted words and is efficiently scoped, but at six words it is under-sized for a tool with a privacy filter, pagination cursor, and page size control. This reads more as under-specification than as deliberate, high-value conciseness.
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 tool with no annotations and no output schema, the description is incomplete. It omits default privacy behavior, how pagination via bookmark works, and any indication of what the response contains. A listing tool with a cursor parameter and an enum filter needs more than a scope statement to be invoked correctly and 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 only 33% (only bookmark is documented), and the description adds nothing about privacy or page_size. The privacy enum values and page_size are partially inferable from their names and constraints, but the description does not compensate for the low coverage. Two of three parameters remain effectively undocumented by both the schema and the description.
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 names the resource (boards) and scope (authenticated account), which makes the intent reasonably clear when read alongside the tool name. However, it is a noun phrase with no explicit verb, so it describes a result set rather than the action. It does not explicitly differentiate itself from siblings like list_pins or search_my_pins.
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 guidance is given on when to use this tool versus siblings such as pinterest_list_pins or pinterest_search_my_pins. There is no context, exclusion, or alternative mentioned. An agent must infer the distinction purely from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_operationsA
Browse the Pinterest API — 263 of 266 operations are reachable here. 131 of them are advertising and need an ad account; the rest are the organic surface (pins, boards, media, search, analytics). Use this to find an operation id for pinterest_call.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter by id, path, tag or summary — try 'boards', 'catalog', 'campaign'. | |
| include_excluded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses meaningful behavioral constraints: 263 of 266 operations are reachable, and 131 advertising operations need an ad account. It does not explicitly say the tool is read-only or describe the three missing operations, but 'browse' and 'find an operation id' imply a non-mutating discovery role.
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 filler. The purpose is front-loaded, and the usage guidance is immediately actionable. Every clause adds useful context.
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?
The description is adequate for basic use: it explains what the tool does, why it exists, and the ad-account prerequisite. But with no output schema and no annotations, important gaps remain: the return shape is not described, 'include_excluded' is unexplained, and the three unreachable operations are not identified.
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%: 'search' has a description, but 'include_excluded' has none. The tool description simply repeats the schema text for 'search' and adds no meaning for the undocumented boolean parameter, so it fails to compensate for the coverage 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 action ('Browse the Pinterest API') and a concrete outcome: 'Use this to find an operation id for pinterest_call.' It also distinguishes the advertising operations from the organic surface, making the tool's role clear relative to its siblings.
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 explicitly tells the agent when to use the tool: to find an operation id for pinterest_call. It also gives useful context that 131 advertising operations require an ad account. However, it does not explicitly state when NOT to use it or how it compares to directly using sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_list_pinsC
Pins belonging to the authenticated account.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark | No | ||
| page_size | No | ||
| pin_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must disclose behavioral aspects. It does not mention whether this operation is read-only, any rate limits, or potential side effects. This lack of transparency is a significant gap.
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?
The description is very concise and straightforward, consisting of a single sentence. It is appropriately short and focuses on the core purpose without extraneous text, though it lacks detailed structure.
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?
Given the low schema coverage and missing parameter explanations, the description is far from complete. It does not provide enough context for an agent to understand how to use the tool effectively, including pagination via bookmark, filtering via pin_filter, or page_size limits.
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 schema defines three parameters (bookmark, page_size, pin_filter) but provides no descriptions. The tool description does not explain what these parameters control or how they affect results. With zero schema coverage and no compensation in the description, parameter semantics are entirely unexplained.
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 clearly states the resource (pins) and the scope (belonging to the authenticated account), which conveys the primary purpose. However, it does not explicitly distinguish this from sibling tools like pinterest_search_my_pins, so it does not fully achieve a perfect score.
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 guidance on when to use this tool versus alternatives such as pinterest_search_my_pins or pinterest_list_boards. The description simply states what it does without any contextual usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinterest_search_my_pinsC
Search your own pins by term.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| bookmark | No | ||
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals only the scope ('your own pins') and search-by-term behavior, but says nothing about pagination, match criteria, result shape, or any side effects. For a search tool this is a meaningful gap.
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?
The description is a single clear sentence with no filler or repeated information. It is appropriately brief and front-loads the core action, though the brevity contributes to missing contextual detail.
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 tool with 3 parameters, no output schema, and no annotations, the description is too thin. It explains the high-level purpose but omits necessary context about pagination, parameter behavior, and what a response might contain, leaving an agent to guess at invocation details.
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 0%, so the description must compensate for undocumented parameters. It adds meaning only to the query parameter via 'by term', while bookmark and page_size remain unexplained. This is only partial compensation.
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 clearly states the action ('Search'), the resource ('your own pins'), and the qualifying condition ('by term'). This distinguishes it from a plain listing operation like pinterest_list_pins, though it does not explicitly name a sibling alternative.
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 implies the use case: when the user wants to find their own pins matching a term. However, it provides no explicit guidance about when not to use this tool or how it compares to alternatives such as pinterest_list_pins.
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.
8 tool updates
v1.0.0- First observed
pinterest_call - First observed
pinterest_create_pin - First observed
pinterest_get_me - First observed
pinterest_get_pin_analytics - First observed
pinterest_list_boards - First observed
pinterest_list_operations - First observed
pinterest_list_pins - First observed
pinterest_search_my_pins
TDQS
Scored across 8 tools
Each convenience tool targets a distinct Pinterest resource (create pin, pin analytics, search pins, list boards, list pins, get account), and list_operations/call form a clear discovery/execution pair. The only soft spot is that pinterest_call can also perform operations that have dedicated wrappers, so an agent must decide between the generic and specific path.
Tool names use a consistent pinterest_ + verb + noun pattern in snake_case, such as create_pin, list_boards, and get_pin_analytics. Minor inconsistencies exist: pinterest_call lacks a target noun, and search_my_pins mixes a possessive modifier while similar tools don't.
Eight tools is a compact, well-scoped set for a Pinterest server. The design intentionally avoids hundreds of individual tools by providing pinterest_list_operations and pinterest_call as a generic discovery/execution pair.
The server exposes 263 of 266 Pinterest API operations through pinterest_call, making the surface nearly exhaustive. Convenience wrappers cover common pin, board, and account workflows, while pinterest_list_operations prevents dead ends by enabling operation discovery.
Maintenance
Related MCP Connectors
Publish and schedule Pinterest pins from any MCP client. Token refresh and retries handled.
Schedule and publish social posts across 9 platforms (Instagram, LinkedIn, X, TikTok, Facebook, Threads, Pinterest, Bluesky, Mastodon) straight from Claude, ChatGPT, Cursor, or any MCP client. Create, edit, and reschedule posts, upload media, and pull account and post analytics, follower demographics, and best-time windows. 20 tools, free on every plan.
Search and read public data from X/Twitter, Reddit, YouTube, Instagram, TikTok, Facebook, Threads, Bluesky, Trustpilot, Amazon, Google Maps, news, forums and the web. 90+ read-only tools plus ready-made research playbooks (lead finding, brand monitoring, review mining). Hosted: connect with an API key; 50 free requests per endpoint each month.
PerfectPost is a LinkedIn content management platform. This MCP server gives AI assistants read and write access to a user's PerfectPost account: published posts with their engagement analytics, drafts lifecycle (create / edit / schedule), and LinkedIn profile data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with the Pinterest API, allowing management of boards and pins through natural language commands.134 npm32MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage Pinterest boards and pins, create and update pins, and track analytics via the Pinterest API v5.6MIT
- AlicenseBqualityBmaintenanceEnables image search and information retrieval from Pinterest using the Model Context Protocol. Supports searching by keywords, getting similar pins, and downloading images directly.5134 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.-