pinterest-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP transport only. | 3000 |
| MCP_AUTH_SECRET | No | Seals the OAuth tokens this server issues. Required for a hosted deployment — without it, issued tokens die on restart. | random per boot |
| PUBLIC_BASE_URL | No | Absolute origin of the deployment. Used for OAuth metadata and callback URLs; set it behind a proxy. | derived from the request |
| PINTEREST_APP_ID | No | App id, for the OAuth tools. | |
| PINTEREST_SANDBOX | No | Set to `1` to target the Pinterest sandbox. | 0 |
| PINTEREST_APP_SECRET | No | App secret, for the OAuth tools. | |
| PINTEREST_MAX_RETRIES | No | Attempts for retryable failures (429 / 5xx). | 3 |
| PINTEREST_ACCESS_TOKEN | No | Token the server acts with. Optional: without it only the OAuth tools work. | |
| PINTEREST_API_BASE_URL | No | Override the API root outright. | |
| PINTEREST_REDIRECT_URI | No | Must match a URI registered on the app exactly. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pinterest_get_user_accountA | 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. |
| pinterest_get_user_analyticsA | Daily account-level analytics over a date window of up to 90 days. Scope: user_accounts:read and pins:read. |
| pinterest_get_top_pinsB | 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. |
| pinterest_get_top_video_pinsB | Rank the account's video pins by a video metric over a date window. Scope: user_accounts:read and pins:read. |
| pinterest_get_pin_analyticsB | Daily analytics for a single pin over a date window of up to 90 days. Scope: pins:read. |
| pinterest_get_multi_pin_analyticsA | Analytics for up to 100 pins in one call — far cheaper than looping pinterest_get_pin_analytics. Scope: pins:read. |
| pinterest_list_followersB | List the accounts following the authenticated user. Scope: user_accounts:read. |
| pinterest_list_followingA | List the users and boards the authenticated user follows. Scope: user_accounts:read. |
| pinterest_list_claimed_websitesA | List the websites claimed by the authenticated account, with their verification status. Scope: user_accounts:read. |
| pinterest_list_boardsA | List the authenticated user's boards, newest first. Scope: boards:read (plus boards:read_secret to include secret boards). Returns a |
| pinterest_get_boardA | Fetch a single board by id, including its pin and follower counts. Scope: boards:read. |
| pinterest_create_boardA | Create a new board on the authenticated account. Scope: boards:write (boards:write_secret for SECRET boards). |
| pinterest_update_boardA | Update a board's name, description or privacy. Only the fields you pass are changed. Scope: boards:write. |
| pinterest_delete_boardA | Permanently delete a board AND every pin saved to it. This cannot be undone. Scope: boards:write. |
| pinterest_list_board_pinsB | List the pins saved to a board. Scope: pins:read and boards:read. |
| pinterest_list_board_sectionsA | List the sections within a board. Scope: boards:read. |
| pinterest_create_board_sectionB | Add a section to a board. Scope: boards:write. |
| pinterest_update_board_sectionB | Rename an existing board section. Scope: boards:write. |
| pinterest_delete_board_sectionA | Delete a board section. Pins in the section move back to the board root rather than being deleted. Scope: boards:write. |
| pinterest_list_board_section_pinsA | List the pins saved inside one section of a board. Scope: pins:read and boards:read. |
| pinterest_list_pinsB | List the authenticated user's pins, newest first. Scope: pins:read (plus pins:read_secret for pins on secret boards). |
| pinterest_get_pinA | Fetch a single pin by id, including its media, link and board. Scope: pins:read. |
| pinterest_create_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). |
| pinterest_update_pinA | Update a pin's text fields, link or board placement. Media cannot be changed after creation. Scope: pins:write. |
| pinterest_delete_pinA | Permanently delete a pin. This cannot be undone. Scope: pins:write. |
| pinterest_save_pinA | Save an existing pin to one of the authenticated user's boards — the API equivalent of a repin. Scope: pins:write. |
| pinterest_register_mediaA | Step 1 of video pin creation: register an upload and receive one-time S3 form fields. POST the video to |
| pinterest_get_mediaA | Check a registered upload. Status moves registered -> processing -> succeeded (or failed). Scope: pins:read. |
| pinterest_list_mediaA | List the account's registered media uploads and their statuses. Scope: pins:read. |
| pinterest_search_my_pinsA | 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. |
| pinterest_search_my_boardsA | Full-text search across the authenticated user's own boards. Scope: boards:read. |
| pinterest_api_requestA | 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. |
| pinterest_build_oauth_urlA | Build the Pinterest consent URL to open in a browser. The user approves, Pinterest redirects to your redirect_uri with a |
| pinterest_exchange_oauth_codeA | Exchange the |
| pinterest_refresh_access_tokenA | Trade a refresh token for a fresh access token. Use this when calls start failing with 401. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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.