What is a Pinterest MCP server?
A Pinterest MCP server is a Model Context Protocol server that exposes Pinterest actions, such as listing boards, creating Pins or reading analytics, as tools that an AI client like Claude, Cursor or Claude Code can call. What you can do depends on the server: some are built for ads and insights, others for organic publishing.
When we checked on November 11, 2026, there were three kinds. Pinterest's own server, announced on June 17, 2026, is aimed at advertisers and agencies and is being developed with alpha partners. Community and vendor servers wrap the public Pinterest API v5, either with your own Pinterest app and token or through the vendor's hosted connection. Scheduler-backed servers, such as Reeling's open-source adapter (github:yomariano/reeling-mcp), publish through the scheduler's existing Pinterest connection, so your agent never handles Pinterest tokens and Pins can be queued for a later time.
| Option | Built for | How it reaches Pinterest | Organic Pins | Scheduling | Watch out for |
|---|---|---|---|---|---|
| Pinterest MCP (official) | Advertisers, agencies and partner copilots | Pinterest API with OAuth 2.0; the developer page shows an HTTP config for https://api.pinterest.com/mcp with a Bearer token | Pinterest describes searching Pins, managing boards, trends and audience insights; its June announcement centres on campaign, analytics and keyword insights | No scheduler described | Alpha with agency partners; the developer page still invites sign-ups for launch updates (checked 2026-11-11) |
| Your own or a community API v5 wrapper | Developers who want full Pinterest API coverage | A Pinterest app (yours or the vendor's) and an OAuth token with boards:read, boards:write, pins:read and pins:write | Image and video Pins through POST /v5/pins | You build it (cron job or queue) | Apps on Trial access create Pins visible only to you; Standard access needs a reviewed demo video |
| Reeling MCP (github:yomariano/reeling-mcp) | Creators and teams scheduling video to Pinterest and other networks | Your Reeling API key; Reeling's Pinterest connection handles OAuth | Video Pins to a board you choose | Yes: scheduled_at takes an ISO 8601 time | Video Pins only; Pinterest comments and metrics are not fetched; needs the Creator or Agency plan |
Pinterest Ads MCP vs organic Pin publishing
If you are looking for a Pinterest Ads MCP server, Pinterest's official server is the one to follow. Pinterest says it gives partner copilots secure access to campaign, analytics and keyword insights, and it is being shaped with alpha partners PMG, Pacvue, Dentsu, Havas, Innovid by Mediaocean and Omnicom's Jump450. Reeling does not create or manage Pinterest ads.
Split the work by job. Ad reporting, campaign planning and keyword research belong to Pinterest's server or the ads endpoints of Pinterest API v5. Publishing organic Video Pins on a schedule, often alongside the same video on YouTube, Instagram or Threads, is what a scheduler-backed server is for. Running both is reasonable: one server for insights, one for publishing, each with its own scoped credential.
| Task | Use |
|---|---|
| Campaign reporting and ad performance | Pinterest MCP (official) or the ads endpoints of Pinterest API v5 |
| Keyword and trend research for new creative | Pinterest MCP (official) |
| Creating or editing ad campaigns | Pinterest Ads Manager or the ads endpoints of Pinterest API v5 |
| Scheduling organic Video Pins to a board | Reeling MCP, or your own API v5 wrapper |
| Sending one video to Pinterest and other networks in one call | Reeling MCP: reeling_publish_post with several platform keys |
| Image Pins, board sections or alt text | Your own API v5 wrapper; Reeling publishes Video Pins |
What you need before you connect Pinterest
You need four things: a Pinterest business account connected in Reeling's Connect Channels, a Reeling plan with API and MCP access (Creator at $5.99 a month or Agency at $19.99 a month), an API key from Reeling's Settings, and a video within the Pin limits below. Node.js 22 or later is needed only for the local adapter.
Pinterest also controls what the connection may do. Reeling's platform notes say production publishing needs appropriate Pinterest app access and that Trial access can reject Pin creation. Pinterest's documentation adds that Pins and boards created with Trial access are visible only to their creator, as sandbox entities. Check the channel in Connect Channels before you hand the job to an agent.
| Requirement | Detail | Where to check |
|---|---|---|
| Pinterest account | Business account with at least one public board | Pinterest settings, then Reeling Connect Channels |
| Reeling plan | Creator ($5.99/mo) or Agency ($19.99/mo); Starter does not include MCP or API access | Reeling pricing page |
| API key | Created in Reeling Settings; keys start with rl_ | Reeling Settings |
| Video file | MP4 or MOV up to 100 MiB, at a URL Reeling can download | Video file size calculator |
| Shape | Pinterest accepts videos between 1:2 and 1.91:1 and recommends 1:1, 2:3, 4:5 or 9:16 | Video aspect ratio calculator |
| Text | Title up to 100 characters; description up to 500 characters in Reeling (Pinterest itself allows 800) | Field table later in this guide |
| Local adapter only | Node.js 22 or later, as the package's engines field requires | node --version |
Install the Reeling MCP server in Claude Desktop, Cursor or Claude Code
Add one server entry named reeling. In Claude Desktop or Cursor, run the local adapter: command npx, arguments -y and github:yomariano/reeling-mcp#v1.1.0, and your key in the REELING_API_KEY environment variable. In Claude Code, add the hosted endpoint https://mcp.reeling.app/mcp with an X-API-Key header, or register the same local command.
Claude Desktop reads claude_desktop_config.json, which lives in ~/Library/Application Support/Claude/ on macOS and %APPDATA%\Claude\ on Windows. Cursor reads .cursor/mcp.json in your project. Keep the key out of anything you commit, and restart the client after saving. To confirm the connection, ask the client to list its tools, or run claude mcp get reeling in Claude Code. The free MCP config generator writes the same JSON with placeholder credentials.
# Claude Desktop (claude_desktop_config.json) or Cursor (.cursor/mcp.json)
{
"mcpServers": {
"reeling": {
"command": "npx",
"args": ["-y", "github:yomariano/reeling-mcp#v1.1.0"],
"env": {
"REELING_API_KEY": "rl_your_api_key"
}
}
}
}
# Claude Code: hosted Streamable HTTP endpoint
claude mcp add --transport http reeling https://mcp.reeling.app/mcp \
--header "X-API-Key: rl_your_api_key"
# Claude Code: local stdio adapter instead
claude mcp add --env REELING_API_KEY=rl_your_api_key --transport stdio reeling \
-- npx -y github:yomariano/reeling-mcp#v1.1.0
# Check that Claude Code saved and connected the server
claude mcp get reelingFind the Pinterest board ID your agent should pin to
Call three read-only tools in order. reeling_list_projects returns your project IDs. reeling_list_channels, given that project_id, returns the connected Pinterest channel and its channel ID. reeling_get_channel_options, given that channel_id, returns the account's boards with ID, name and privacy. Copy the board's numeric ID, not the name in its URL.
The Create Pin schema in Pinterest API v5 only accepts digits for board_id, so a value like weeknight-recipes is a URL slug, not an ID. Pass the ID explicitly every time. If pinterest_board_id is left out, the tool's own description says Reeling uses a default board or creates one called Reeling Videos, which is rarely where a scheduled Pin should land. Choose a public board too, because a secret board is visible only to you and its collaborators.
// 1. Read-only: find the project
reeling_list_projects({})
// 2. Read-only: find the Pinterest channel in that project
reeling_list_channels({"project_id": "YOUR_PROJECT_ID"})
// 3. Read-only: list boards (ID, name, privacy) for that channel
reeling_get_channel_options({"channel_id": "YOUR_PINTEREST_CHANNEL_ID"})
// A prompt you can give Claude or Cursor:
// "List my Reeling projects, find the Pinterest channel in the Recipes
// project and show its boards with ID, name and privacy.
// Do not publish anything yet."Schedule a Video Pin with reeling_publish_post
Call reeling_publish_post with platforms set to pinterest, a public video_url, a title of up to 100 characters, the Pin description in content (up to 500 characters in Reeling), pinterest_board_id, a pinterest_link destination and scheduled_at as an ISO 8601 time with Z or an offset. Leave scheduled_at out to publish immediately.
Keep client-side approval on for this tool. It is a consequential write, and Reeling's MCP guide recommends reviewing the destination, content, schedule and visibility before it runs. Replace the example timestamp, and tag the destination link with UTM parameters so Pinterest visits show up as Organic Social in GA4. The same call can list other platform keys, such as youtube or instagram, to send one video to several networks, each under its own limits and approvals.
The REST API accepts the same job at POST https://api.reeling.app/api/v1/publish, with the Pinterest fields in a pinterest object (title, description, link and board_id) and the time in scheduled_for. Use REST when you need a setting the MCP tool schema does not expose.
// MCP: arguments the agent should show you before it runs the tool
reeling_publish_post({
"project_id": "YOUR_PROJECT_ID",
"platforms": ["pinterest"],
"video_url": "https://cdn.example.com/pins/one-pan-pasta-9x16.mp4",
"title": "One-pan pasta in 15 minutes",
"content": "Weeknight one-pan pasta with cherry tomatoes, garlic and basil. Full recipe and shopping list on the blog.",
"pinterest_board_id": "YOUR_NUMERIC_BOARD_ID",
"pinterest_link": "https://example.com/one-pan-pasta?utm_source=pinterest&utm_medium=social&utm_campaign=weeknight-recipes&utm_content=video-pin",
"scheduled_at": "2026-11-14T19:00:00Z"
})
# REST: the same Video Pin
curl -X POST https://api.reeling.app/api/v1/publish \
-H "X-API-Key: $REELING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"project_id": "YOUR_PROJECT_ID",
"video_url": "https://cdn.example.com/pins/one-pan-pasta-9x16.mp4",
"platforms": ["pinterest"],
"pinterest": {
"title": "One-pan pasta in 15 minutes",
"description": "Weeknight one-pan pasta with cherry tomatoes, garlic and basil.",
"link": "https://example.com/one-pan-pasta?utm_source=pinterest&utm_medium=social&utm_campaign=weeknight-recipes&utm_content=video-pin",
"board_id": "YOUR_NUMERIC_BOARD_ID"
},
"scheduled_for": "2026-11-14T19:00:00Z"
}'| Pin field | MCP argument | REST field | Reeling limit | Pinterest limit |
|---|---|---|---|---|
| Video | video_url | video_url (or a multipart video upload) | MP4 or MOV, up to 100 MiB | MP4, MOV or M4V; H.264 or H.265; up to 2 GB; 4 seconds to 15 minutes |
| Title | title | pinterest.title | 100 characters | 100 characters; about the first 40 show in feeds, depending on the device |
| Description | content | pinterest.description | 500 characters | 800 characters |
| Destination link | pinterest_link | pinterest.link | A full URL | 2,048 characters |
| Board | pinterest_board_id | pinterest.board_id | ID from reeling_get_channel_options | Digits only |
| Publish time | scheduled_at | scheduled_for | ISO 8601 with a timezone; omit to publish now | Not applicable: Reeling holds the queue |
Check delivery and fix common Pinterest publishing errors
A successful tool response means Reeling accepted or scheduled the Pin, not that it is live. Save the returned post ID and call reeling_get_post_status (REST: GET /api/v1/posts/{id}) to read each destination's published flag and upload status. Pinterest also processes video after creation, and notes that a new Video Pin can report the creative type REGULAR until processing finishes.
If a publish call times out, do not resend it straight away. Check the status of the post ID you already have, so you do not create a duplicate Pin. The table maps the failure modes documented by Pinterest and in Reeling's platform notes to a fix.
| Symptom | Likely cause | Fix |
|---|---|---|
| Pin exists but nobody else can see it | The Pinterest app has Trial access, so its Pins are sandbox entities visible only to their creator | Public Pins need Standard access; check the channel's status in Connect Channels |
| Pin creation rejected | Trial access or missing permissions on the connection; Reeling's Pinterest notes say Trial access can reject Pin creation | Reconnect the business account and confirm the channel's capabilities before retrying |
| HTTP 403 PINNER_DATA_ACCESS_DENIED when calling Pinterest directly | An app registered on or after September 14, 2026 requested a non-business user's board or Pin without Pinterest's authorization | Use a business account, or request the access Pinterest asks for |
| Pin landed on the wrong board | pinterest_board_id was left out, so the default or Reeling Videos board was used | Pass the numeric ID from reeling_get_channel_options |
| Video refused before publishing | File over 100 MiB, or not MP4 or MOV | Re-encode at a lower bitrate; size it with the video file size calculator |
| Video letterboxed or cropped in the feed | Aspect ratio outside 1:2 to 1.91:1, or a 16:9 master in a vertical feed | Export 2:3 or 9:16 for vertical placements |
| Description cut off or rejected | Longer than Reeling's 500-character Pinterest limit | Trim to 500 characters and put the keyword early |
| 400 Bad Request on a direct POST /v5/pins video call | No valid cover image in media_source | Send cover_image_url, or cover_image_key_frame_time, with the media_id |
What a Pinterest MCP wrapper does under the hood
Creating a Video Pin with Pinterest API v5 takes four calls. Register the upload with POST /v5/media, send the file to the returned upload_url with every upload_parameter, poll GET /v5/media/{media_id} until the status is succeeded, then call POST /v5/pins with board_id and a media_source of type video_id. The token needs boards:read, boards:write, pins:read and pins:write.
The upload step goes straight to Pinterest's media bucket without a Bearer token and returns 204 No Content, and the media status moves from registered to processing to succeeded or failed. Build this yourself if you need image Pins, board sections or alt text: the Create Pin schema in API v5.28.0 also accepts board_section_id, alt_text (up to 500 characters) and a link of up to 2,048 characters. With a scheduler-backed server, your agent makes one tool call and the scheduler deals with Pinterest's upload steps.
# 1. Register the upload (returns media_id, upload_url and upload_parameters)
curl -X POST https://api.pinterest.com/v5/media \
-H "Authorization: Bearer $PINTEREST_TOKEN" \
-H "Content-Type: application/json" \
-d '{"media_type": "video"}'
# 2. Upload the file to upload_url, one -F per upload_parameter
# (no Bearer header; success is 204 No Content)
curl -X POST "$UPLOAD_URL" \
-F "key=..." -F "policy=..." -F "x-amz-signature=..." \
-F "file=@one-pan-pasta-9x16.mp4"
# 3. Poll until status is succeeded (registered > processing > succeeded or failed)
curl https://api.pinterest.com/v5/media/$MEDIA_ID \
-H "Authorization: Bearer $PINTEREST_TOKEN"
# 4. Create the Video Pin
curl -X POST https://api.pinterest.com/v5/pins \
-H "Authorization: Bearer $PINTEREST_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"board_id": "YOUR_NUMERIC_BOARD_ID",
"title": "One-pan pasta in 15 minutes",
"description": "Weeknight one-pan pasta with cherry tomatoes, garlic and basil.",
"link": "https://example.com/one-pan-pasta?utm_source=pinterest&utm_medium=social",
"media_source": {
"source_type": "video_id",
"media_id": "MEDIA_ID_FROM_STEP_1",
"cover_image_url": "https://cdn.example.com/pins/one-pan-pasta-cover.jpg"
}
}'Checklist: a weekly Pinterest batch your agent can run safely
Run the batch as a short loop: read the channel and boards, draft every Pin for review, schedule only after you approve the arguments, and check status the next day. Give each Pin a UTM-tagged link and its own time slot rather than sending the batch at once, so a failed Pin is easy to spot.
Paste the checklist into your project notes or the agent's instructions. Each line maps to a tool call or a limit covered above, so the agent can report a pass or fail for every item before asking you to approve the publish calls.
[ ] reeling_list_channels: Pinterest channel connected and active in the right project
[ ] reeling_get_channel_options: numeric board IDs copied; boards are public
[ ] Each video: MP4 or MOV, under 100 MiB, 2:3 or 9:16, at least 4 seconds
[ ] Title: 100 characters or fewer, keyword in the first 40
[ ] Description: 500 characters or fewer
[ ] Link: utm_source=pinterest&utm_medium=social&utm_campaign=...&utm_content=video-pin
[ ] scheduled_at: ISO 8601 with Z or an offset, one slot per Pin
[ ] Client approval prompt shown for every reeling_publish_post call
[ ] Next day: reeling_get_post_status for every post ID; published flag checked