"Pinterest" matching MCP tools:
- Searches Pinterest for pins matching a keyword and returns pins plus a cursor to page. Each pin carries id, url, title, description, grid_title, created_at, images in five sizes (170x, 236x, 474x, 736x, orig), link, domain, board (name, url, pin_count) and pinner (username). Measured at about 110 KB for 17 pins; trim=true cuts that to 28 KB and keeps six fields per pin — id, url, description, created_at, images and pinner — dropping title, link, board and domain, so only skip trim when you need those. The board.url on each result feeds get_pinterest_board; for one pin's engagement counts use get_pinterest_pin.ConnectorOAuth
- Searches Pinterest for pins matching a keyword and returns pins plus a cursor to page. Each pin carries id, url, title, description, grid_title, created_at, images in five sizes (170x, 236x, 474x, 736x, orig), link, domain, board (name, url, pin_count) and pinner (username). Measured at about 110 KB for 17 pins; trim=true cuts that to 28 KB and keeps six fields per pin — id, url, description, created_at, images and pinner — dropping title, link, board and domain, so only skip trim when you need those. The board.url on each result feeds get_pinterest_board; for one pin's engagement counts use get_pinterest_pin.ConnectorOAuth
- Searches Pinterest for pins matching a keyword and returns pins plus a cursor to page. Each pin carries id, url, title, description, grid_title, created_at, images in five sizes (170x, 236x, 474x, 736x, orig), link, domain, board (name, url, pin_count) and pinner (username). Measured at about 110 KB for 17 pins; trim=true cuts that to 28 KB and keeps six fields per pin — id, url, description, created_at, images and pinner — dropping title, link, board and domain, so only skip trim when you need those. The board.url on each result feeds get_pinterest_board; for one pin's engagement counts use get_pinterest_pin.ConnectorOAuth
- Upload an image or video to PinBridge and get an asset_id for create_pin. Use when the media was generated in this session or Pinterest cannot fetch it from a public URL; otherwise pass image_url to create_pin directly. Provide exactly one of content_base64 or source_url. Videos must be uploaded assets. Returns id (use as asset_id), public_url, asset_type, content_type, size_bytes, created_at. Files are capped at 200 MB (plans cap lower). Fails with payment_required on plans without uploaded_media_assets (see get_billing_status), validation_error for unsupported media, and invalid_image when the file is truncated or corrupted (re-encode the exact original bytes; never retype base64 by hand).ConnectorAPI key
- Create a post to connected accounts — X/Twitter, Instagram, LinkedIn, Facebook, TikTok, YouTube, Threads, Bluesky, Pinterest. CREATING IT SENDS IT: no `scheduled_at` publishes now, one publishes then; a project can hold agent posts instead, and `status` says which. The answer carries `message` and a link: `approval_link` when it waits, `preview_link` when not. `accounts` takes each account's `ref`. Media is `media_ids`, `files` (attachments from this conversation) or `media_pending: true`, which holds the post until the picture arrives — the reply's `upload_url` takes a POST of the file (`upload_curl`), or the person adds it in the card; then it goes out on its own unless the project holds agent posts. "next_slot" takes the queue; `is_draft` saves without sending.ConnectorAPI key
- Search a single network for posts matching a query, returned as the unified Post[] schema and tagged with its platform. Keyless on TikTok, YouTube, and Pinterest. Instagram, Twitter/X, Reddit, and Facebook need operator-side credentials (returns credentials_required until set). Snapchat and Threads do not support keyless search (returns not_supported); LinkedIn is quarantined. To fan one query across every network at once, use search_all.ConnectorNo auth
Matching MCP Servers
- AlicenseAqualityCmaintenanceA minimal MCP server for the Pinterest API v5 that reads boards, pins, and analytics and publishes new pins and boards, with human sign-off required before any public changes.8MIT
- AlicenseAqualityDmaintenanceExtracts images, gifs, videos, and search results from Pinterest without authentication. Supports search, pin details, board pins, related pins, autocomplete, and media downloads.626 npm1MIT
Matching MCP Connectors
- AIsa PinterestOAuth
Your agent needs Pinterest as a demand signal — what people are saving in a category, which pins earn engagement, what a competitor's boards are collecting. **What you can ask for** • "What pins come up for 'home office setup', and which get saved most?" • "Page through this board and list the products it links to." • "Which boards does this user keep, and what are they about?" • "Show the engagement on this pin." **How to use it** Point any MCP client at https://mcp.aisa.one/pinterest/mcp and sign in with OAuth — there is no key to create or paste. 4 read tools: search pins, read one pin and its engagement, page through a board, and list a user's boards. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Spot the trend here, then ask the same agent for search volume on the same phrase or who already ranks for it — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/social/mcp for X plus Instagram, Reddit, Pinterest and YouTube; https://mcp.aisa.one/gtm/mcp for those plus Similarweb and Apollo.
- Pinterest ScraperOAuth
Pinterest pins, boards, profiles and keyword search to JSON: saves, images, links, creators.
- Update a DRAFT or SCHEDULED post in place; any other status fails with "Cannot edit post in current state", so published posts cannot be changed. Updates are partial: text, contentType, scheduledAt, timezone, and thumbnail fields you omit keep their values. The exception is platforms: sending it rebuilds the post's target set from this request alone, so include every connection-id array and platform config you want to keep (TikTok with privacyLevel, Pinterest with boardId); omitting platforms leaves accounts, configs, and media untouched. mediaUrls only take effect together with platforms; use publicUrl values from upload_media. On SCHEDULED posts new media is verified in storage. Returns the updated post record. Use publish_draft to change a draft's status, unschedule_post to take a scheduled post off the calendar, delete_post to cancel, and create_post for a new post.ConnectorDestructiveOAuth
- Fetches one pin by URL, of the form pinterest.com/pin/<id>. The response is a different shape from search results: camelCase fields including entityId, description, category, totalReactionCount, aggregatedPinData, richMetadata, pinner, originPinner and genAiTopics. Measured at 12.5 KB, the smallest full response in this API; trim=true reduces it to 1.6 KB, keeping entityId, description, createdAt, pinner, originPinner, nativeCreator, shareCount, repinCount and totalReactionCount while dropping richMetadata and category. To find pins by keyword use get_pinterest_search; to page through the board a pin sits on use get_pinterest_board. Only standard numeric pin URLs resolve: of 12 search results fed straight back, the 3 whose URL ended in a shortcode (dwA0UYrl style) all answered 404 and one numeric id did too, so check for a numeric trailing id before calling and expect occasional 404s on deleted pins.ConnectorOAuth
- Create a post in PurrPlan, attached to one or more connected social accounts. `content` takes either a string (a simple post — an empty line starts a new paragraph) or an ARRAY of strings whose first element is the post and whose following elements are published automatically AFTER it. What the second block becomes depends on the network: a THREAD (chained reply) on X/Twitter, Threads, Mastodon and Bluesky — a FIRST COMMENT on Facebook Page, Instagram and Instagram Direct, which automates the "link or call to action in the first comment" habit. On the other networks (LinkedIn, TikTok, YouTube, Pinterest, Reddit, Telegram, Google Business) the extra blocks are IGNORED and the response carries a `warnings` field. By default this creates a draft. Pass `scheduled_at` (ISO 8601 UTC) to schedule it instead; publication then happens at that time, not during this call. Media imported with upload_media_from_url can be attached (they go on the first block). `options` carries network-specific settings keyed by provider — for example {"threads": {"topic_tag": "buildinpublic"}} to post inside a Threads topic. Do not use this tool for a STORY: it creates a FEED post. Use create_stories, or pass options {"<provider>": {"type": "story"}} explicitly (Instagram, Instagram Direct, Facebook Page, Facebook extension). Without that option the post goes to the feed. — FR : crée un post (brouillon par défaut, programmé avec `scheduled_at`) ; post de FIL, pas une story.ConnectorOAuth
- List the Pinterest accounts connected to this workspace with their health. Use first: list_boards, create_pin, create_schedule and get_rate_meter all need an account_id from here. Also read pinbridge://accounts. To connect a new account or fix reconnect_required, the user must use the PinBridge dashboard; there is no tool for that. Returns one entry per account with id (the account_id), username, display_name, scopes (comma-separated), token_expires_at and health: health_status (healthy, refresh_due, reconnect_required or scope_missing), health_message, reconnect_required and missing_scopes. An empty list means nothing is connected. Accounts outside this API key's allow-list are omitted. Never fails for a valid key.ConnectorAPI key
- Publish a pin to Pinterest now, or preflight it with dry_run=true. Use for a pin that should go out immediately; for a future time use create_schedule, for many pins use create_pins_batch. Provide either image_url or asset_id (from upload_asset), not both. Run dry_run first and reuse resolved.idempotency_key on the real call. Returns the pin with id and status "queued" (poll get_pin), or with dry_run the validation result (valid, checks, resolved, headroom). Fails fast with board_not_found / board_not_owned / board_access_denied for an unpublishable board, quota_exceeded when the monthly quota is spent, and validation_error for bad fields.ConnectorAPI key
- Pinterest performance metrics for one published pin over a date range. Use after a pin has been published for a while to report impressions, saves and clicks. For the whole account use get_account_analytics; for publish status use get_pin. Returns pin_id, pinterest_pin_id, account_id, start_date, end_date, provider_mode, totals (each metric summed over the range, lowercase names), daily rows (empty with include_daily=false; pass that when the totals are enough), source (stored or live) and data_as_of for stored reads. total_comments and total_reactions are lifetime counts on live reads and 0 on stored reads, which do not keep them: use source=live for comments and reactions. They read 0 on every daily row, since Pinterest does not report them per day. A pin deleted on Pinterest is answered from stored history with removed_from_pinterest_at set, and fails with pin_removed_on_pinterest when none is stored. Fails with not_found for an unknown pin and with pin_not_published for a pin that has not published yet; sandbox pins return zeroed metrics.ConnectorAPI key
- Summarize publishing activity over a period: how many pins went out and how it went. Use to answer "how did publishing go this week / today / last month": pin outcomes, success rate, the change against the previous period, and what is still queued or scheduled. Ranges up to 48 hours come back hourly, longer ones daily, up to 366 days. For Pinterest engagement (impressions, saves, clicks) use get_account_analytics; to see the individual failed pins use list_pins with status=failed. Returns start, end, timezone, granularity (hour | day), pins (total, submitted, by_status, success_rate from 0 to 1), previous_pins (same figures for the preceding period of equal length), series (created / published / failed per bucket), published_by_account, queue (queued, deferred, publishing right now), schedules (by_status in the range, upcoming) and import_jobs (null when filtered by account). Outcomes count by when they happened: published by publish time, failed by failure time (for pins still failed); pins.total is the sum of by_status, and pins.submitted and series.created count pins submitted in the range (API 1.38+; older APIs report submissions in pins.total and omit pins.submitted). Fails with invalid_date_range (start not before end, or more than 366 days), invalid_timezone, or account_not_permitted for an account outside the key's allow-list.ConnectorAPI key
- Create one post for one or more platforms: publish now, schedule, or save a draft. Omit scheduledAt to publish immediately; a future scheduledAt sets status SCHEDULED; saveAsDraft stores it as DRAFT and defers validation to publish_draft. Publishing runs asynchronously per platform, so the response ({ postId, queuedPlatforms, isScheduled, scheduledAt }) is not the outcome; read list_post_results, where each platform succeeds or fails on its own. Call list_accounts first: each platform in platforms needs its connection-id array (linkedinConnectionIds, pageIds for Facebook, and so on), one account per platform. TikTok needs tiktokConfigs with privacyLevel; Pinterest needs pinterestConfigs with boardId. For a LinkedIn document (PDF, slides or Word file) use contentType DOCUMENT with the one file in mediaUrls and only LINKEDIN in platforms. mediaUrls must come from upload_media, or the call fails with "Media file(s) not found in storage". Pass recurrence with a future scheduledAt to repeat the post daily, weekly or monthly; the response then adds recurringPostId and postId is the first occurrence. Use bulk_schedule_posts for many posts on the same accounts, and update_post or publish_draft for an existing post.ConnectorDestructiveOAuth
- Schedule up to 100 posts in one call to the same platforms and accounts. Each item supplies its own text, contentType, scheduledAt, and optional media; platforms, connection-id arrays, timezone, and platform configs are shared by every item, though an item may carry its own tiktokConfigs, youtubeConfigs, instagramConfigs, facebookConfigs or pinterestConfigs to replace the shared ones. Items are processed independently: each is validated and created like create_post, so one bad item fails alone while the rest are scheduled. Returns { totalScheduled, totalFailed, results[] } with a postId or errorMessage per item, in input order; read every row. An item with a past scheduledAt publishes immediately rather than being rejected. Call list_accounts first; TikTok needs tiktokConfigs with privacyLevel and Pinterest needs pinterestConfigs with boardId. Use create_post for a single post or a draft; this tool has no draft mode.ConnectorDestructiveOAuth
- Returns one page of pins from a board URL, with a cursor to page. Board pins carry a third field subset, different from both search results and pin detail: node_id, link, domain, rich_summary, seo_url, board and auto_alt_text among them. Measured at 104 KB for 16 pins; trim=true cuts it to 28 KB, keeping per pin id, title, description, link, domain, board, pinner, alt_text, rich_summary and reaction_counts. Board URLs come from board.url on search results — relative, like /agkelsey/the-apartment/, so prefix https://www.pinterest.com — or from get_pinterest_user_boards. For a user's board list rather than one board's pins, use get_pinterest_user_boards.ConnectorOAuth
- List pins in this workspace, newest first, with search, filters and sorting. Use to find a pin's id (search its title with q), review what published or failed, or audit one board or account. For one known pin use get_pin; for scheduled (not yet published) pins use list_schedules; for totals over a period use get_dashboard_summary. Returns one page: {items, total, limit, offset, has_more}. items are pin summaries (id, title, status, board_id, pinterest_account_id, pinterest_pin_id, link_url, error_code, error_message, created_at, published_at, removed_from_pinterest_at); detail="full" returns every field, but read one pin with get_pin instead. removed=true lists published pins that were deleted on Pinterest. total counts every match across all pages, so "how many pins failed this week?" is one call with status=failed, since=... and limit=1. To read further, repeat the call with the same filters, q and sort and offset = offset + limit while has_more is true. total is null only against a PinBridge API older than 1.34. Filtering on an account outside the key's allow-list fails with account_not_permitted, and an unknown sort or status fails with validation_error.ConnectorAPI key
- Rename a board or change its description or privacy on Pinterest. Use for board housekeeping; pins on the board are untouched. To move a pin that has not published between boards use update_pin; to remove a board use delete_board. Pass at least one of name, description or privacy. Returns the updated board (id, name, description, privacy). Fails with board_not_found for an unknown board, forbidden when sandbox board writes are blocked, and token_expired / scope_missing when the Pinterest connection needs a reconnect (including SECRET on an account connected without boards:write_secret).ConnectorAPI key
- Delete an uploaded image or video from PinBridge storage. Irreversible; confirm first. Use to clean up media from upload_asset that is no longer needed; its public_url stops working. Published pins keep their image on Pinterest. With confirm=true, a pin or scheduled pin that has not published yet and uses the asset fails to publish, so tell the user which ones first. Returns asset_id, deleted, requires_confirmation, referenced_pin_count (pins plus scheduled pins that have not run yet) and freed_bytes. With confirm=false and the asset still in use, nothing is deleted: deleted is false and requires_confirmation true. Fails with not_found for an unknown id and insufficient_scope without the destructive scope.ConnectorDestructiveAPI key
- Fetch the user's most recent posts straight from their connected platform APIs (Instagram, TikTok, X, YouTube, Facebook, LinkedIn, and more), INCLUDING content published outside OmniSocials. Use this when list_posts is empty — e.g. a brand-new workspace that has not published through OmniSocials yet — so you can still analyze the user's real content. Each post includes normalized `engagement` plus every raw metric the platform reported (Instagram: reach/views/saves/shares from per-post insights; TikTok: average_time_watched/full_video_watched_rate/total_time_watched/favorites/reach when the workspace enabled TikTok comments). Metrics only appear where the platform exposes them for historical posts (X, TikTok, Bluesky, Mastodon, Instagram, Facebook, YouTube); Threads, Pinterest, and Google Business return captions only. Records also carry `duration_seconds` — the video length in whole seconds — where the platform's listing API reports it (currently TikTok and YouTube); null for images and platforms that don't expose it. LinkedIn personal profiles can't be listed live (LinkedIn grants apps no such permission), so their results are posts published through OmniSocials with their latest collected stats. Fetched live for most platforms, so expect a few seconds of latency; X results may come from a snapshot up to 24h old (X bills per returned post) — the snapshot refreshes right after the user publishes to X through OmniSocials. Output is a human-readable summary table PLUS a 'Structured data' JSON block carrying, for every post, the platform's own post id (the stable dedupe key), a permalink, the FULL untruncated caption, and exact-integer metrics — use that block when ingesting or storing native posts rather than the rounded/truncated table. Requires the analytics:read scope.ConnectorOAuth
- Upload media to the library. Three methods supported: 1. **url** — import from a PUBLIC https URL (e.g. a hosted image link). NEVER pass a local sandbox path — the URL must be reachable from our servers. 2. **base64_data** — pass base64-encoded file data directly. ONLY use this for tiny files (≲50 KB). MCP tool inputs are token-capped — anything larger gets silently truncated and uploads a corrupted file. For any user-pasted image, use upload_url instead. 3. **upload_url** — PREFERRED for any file the user attached to the chat. Call with method="upload_url" to get a one-time presigned URL plus a ready-to-run snippet. Execute the snippet in your code-execution tool against the actual file path. The response JSON contains the media id you pass to create_post. Size limits: base64/direct uploads are capped at **100 MB**. For anything larger — up to **1 GB** — use a public **url** (fetched server-side, bypasses the cap), OR have the user upload the file in the OmniSocials Library UI at https://app.omnisocials.com/library . IMPORTANT: if the user has a large LOCAL file (over ~100 MB) with no public url, do NOT tell them to compress it — point them to the Library UI link above. Large videos (over 100 MB) are processed in the background — the response status is "processing" and the file is NOT usable in a post until it becomes "ready" (re-check with list_media). Compatibility: every upload response includes a "compatibility" summary of any CONNECTED platforms that would reject the file (e.g. too large for Instagram). If there are warnings, RELAY them and ask the user whether to continue before posting — the file still uploads and can post to platforms that accept it. To check BEFORE uploading, call check_media_compatibility first. PDF = carousel: upload a PDF (via a public url, or base64_data with mime_type "application/pdf", or the upload_url snippet) and it is split into one image slide per page (max 20). The response lists a Media ID for EVERY slide — pass ALL of them, in order, as media_ids to create_post to post the deck as a carousel. On LinkedIn the slides post as a native swipeable DOCUMENT made from the ORIGINAL PDF file (the file is kept: text stays sharp, in-document links work, viewers download the real file, and every page is included even past the 20-slide cap) as long as the slides are posted unchanged and in order; on Instagram, TikTok, Threads and Pinterest as an image carousel. Set linkedin.document_source to 'slides' on the post to send a document rebuilt from the slide images instead. This is how a user posts an existing slide deck (Canva/PowerPoint/Figma exported to PDF) as a carousel. Prefer pdf_mode "document" when the user wants ONE library item for the deck (no per-page clutter): the response then has a single Media ID whose media_ids entry expands into every page at post time. Supported: JPEG, PNG, GIF, WebP, MP4, MOV, AVI, PDF. For user-attached files: ALWAYS try upload_url first. Call upload_media with method="upload_url", then in your code-execution sandbox run the returned Python (ChatGPT Code Interpreter, file at /mnt/data/<filename>) or curl (Claude Code Execution) snippet against the actual file path. Only react to a failure AFTER actually executing the snippet.ConnectorOAuth