Clicky

Made to Spark MCP server

One server address gives ChatGPT, Claude, Claude Code, Cursor or your own agent 18 tools to make Pinterest pins from a link, plan pins for many posts, schedule them to the user's boards and check how Pinterest is going. Pins are made from the page's own photos in the user's brand, and stay drafts until something schedules them.

Server address

https://madetospark.com/mcp
Transport
Streamable HTTP (JSON-RPC 2.0)
Sign-in
OAuth 2.1 with PKCE and dynamic client registration (ChatGPT, Claude, Cursor and localhost callbacks); or an API key as a Bearer token
Scope
mcp:use
Server version
0.7.0
MCP Apps
Yes: ui://made-to-spark/pins-v1.html
For AI agents
Plain-text overview at https://madetospark.com/llms.txt

Quick start

Pick your client. Each one signs in with the user's Made to Spark account; nothing to paste but the address. A step-by-step guide with screenshots is in the help centre.

  1. In ChatGPT, click Plugins, then Add at the top right, then Add custom MCP server.
  2. Name it Made to Spark, paste the server address and choose OAuth.
  3. Save. A Made to Spark window opens: sign in and press Allow.
  4. Start a new chat and name Made to Spark in your first message. ChatGPT asks before tools that change things; Allow once or Always allow.
  1. Open claude.ai (or the desktop app) → Settings → Connectors → Add custom connector. Custom connectors are on Claude's paid plans (Pro, Max and Team).
  2. Name it Made to Spark and paste the server address.
  3. Press Connect, sign in to Made to Spark and press Allow.
  4. Start a new chat and ask for pins. Claude finds the tools by itself.
claude mcp add --transport http made-to-spark https://madetospark.com/mcp

Then run /mcp inside Claude Code and pick made-to-spark to sign in in your browser.

{
    "mcpServers": {
        "made-to-spark": {
            "url": "https://madetospark.com/mcp"
        }
    }
}

In Cursor: Settings → MCP → Add, then sign in when it asks. Other agents on your own computer (Codex, Gemini CLI and similar) work the same way if they sign in through a local localhost address. Web apps not listed here can use an API key.

{
    "mcpServers": {
        "made-to-spark": {
            "url": "https://madetospark.com/mcp",
            "headers": {
                "Authorization": "Bearer YOUR_KEY"
            }
        }
    }
}

For agents with nobody there to sign in (n8n, OpenClaw, scheduled jobs). Create a key in Settings → Integrations → ChatGPT & Claude → Other agents. Keys last a year, up to 10 per account, paid plans only.

Calling it directly

With an API key, any HTTP client can list and call the tools:

curl -s https://madetospark.com/mcp \
  -H 'Authorization: Bearer YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -s https://madetospark.com/mcp \
  -H 'Authorization: Bearer YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"create_pins_from_url","arguments":{"url":"https://myblog.com/my-post","count":3}}}'

Workflows

The calls an assistant makes for the most common requests. In a chat, the person just asks; the assistant chains these by itself.

Pins from one link, then schedule them

  1. 1
    create_pins_from_url(url, count: 3)

    answers at once with a batch_id; the page is read in the background

  2. 2
    get_pin_batch_status(batch_id)

    waits up to 20 s for pins; returns pin_ids, titles and image links

  3. 3
    list_boards

    board_id and the Pinterest account of each board

  4. 4
    schedule_pins(pin_ids, board_id, start_date)

    posting times picked for you; returns the days

Pins for many posts at once

  1. 1
    find_my_posts(topic: "italy")

    the matching posts on the user's site, with how many pins each has

  2. 2
    create_pins_for_posts(urls, pins_per_post)

    first returns the plan and cost; nothing starts

  3. 3
    create_pins_for_posts(urls, pins_per_post, confirm: true)

    starts after the user agrees; returns a bulk_id

  4. 4
    get_bulk_status(bulk_id)

    progress per post and ready pin_ids

A new pin every week, on autopilot

  1. 1
    find_my_posts(topic)

    pick the posts

  2. 2
    keep_posts_fresh(urls)

    returns the plan: pace, posts, pins

  3. 3
    keep_posts_fresh(urls, confirm: true)

    Auto Pin takes it from there

  4. 4
    change_posts_fresh(action: pause)

    pause, resume or take posts off later

Tools

Generated from the live server, so this list always matches what tools/list returns. Descriptions are the ones the assistant reads.

Make pins

create_pins_from_url

Creates In-chat screen

Makes finished Pinterest pins from a web page: a blog post, a product page, an Etsy listing or any public link. Made to Spark reads the page, picks its best photos and writes the pin headlines, then renders the pins in the user's brand colours. Then call get_pin_batch_status with the returned batch_id straight away (it waits for the pins itself; never wait or sleep first). Pins land in the user's My Pins as drafts, nothing is published.

Try: “Make 3 pins from https://myblog.com/lemon-ricotta-pancakes”

Parameters (4)
NameTypeDescription
urlrequired string The public web page to make pins from: a blog post, recipe, product page, Etsy listing or similar.
count integer How many different pins to make from the page, 1 to 5. Each gets its own photo, layout and headline.1–5
use_credits boolean Only after the user agreed to spend credits (1 per pin) because their plan's template pins are used up. Never set it on your own.
workspace string Which Made to Spark workspace (name or site) to use, when the user has several. Usually leave it out: the workspace is picked from the link. list_workspaces shows them.

get_pin_batch_status

Read-only In-chat screen

Shows how a batch started with create_pins_from_url is doing: each pin's state (queued, processing, completed or failed), its headline, and the image address once it is rendered. Each call waits up to 20 seconds for unfinished pins and answers as soon as they are ready, so call it straight after create_pins_from_url and again right away if some are still being made; never wait or sleep between calls. Ready pins show a pin_id, which schedule_pins takes.

Try: “Are my pins ready?”

Parameters (1)
NameTypeDescription
batch_idrequired string The batch_id returned by create_pins_from_url.

find_my_posts

Read-only

Finds the user's own blog posts or product pages about a topic (for example "Peru"), from their site's sitemap, with how many pins each already has. Use it before create_pins_for_posts when the user asks for pins for "all my posts about X".

Try: “Find my posts about Italy”

Parameters (3)
NameTypeDescription
topicrequired string What the posts are about, for example "Peru" or "budget planner".
workspace string Which workspace (name or site), when the user has several.
site string The site to look on, when the workspace has none connected, for example https://myblog.com.

create_pins_for_posts

Creates In-chat screen

Makes template pins for many posts in one go (paid plans): up to 30 post links, 1 to 5 pins each, using the posts' own photos (never AI images). First call without confirm to get the plan (how many pins, what it costs); show it to the user, and only after they agree call again with confirm true. Pins are made in the background; follow them with get_bulk_status.

Try: “Make 3 pins for each of my posts about Italy”

Parameters (5)
NameTypeDescription
urlsrequired string[] The post links, up to 30 (from find_my_posts or the user).up to 30 items
pins_per_post integer Pins per post, 1 to 5. Defaults to 3.1–5
confirm boolean Only true after the user agreed to the plan returned by the first call.
use_credits boolean Only after the user agreed to spend credits for pins beyond what the plan covers.
workspace string Which workspace, when the user has several. Usually picked from the links.

get_bulk_status

Read-only In-chat screen

Shows how pins for many posts (create_pins_for_posts) are doing: each post's pins, and the pin_ids of every ready pin, which schedule_pins takes.

Try: “How are the pins for my Italy posts coming along?”

Parameters (1)
NameTypeDescription
bulk_idrequired string The bulk_id returned by create_pins_for_posts.

Pin details

get_pin_details

Read-only

Shows what goes to Pinterest with each pin: its Pinterest title, description, alt text and link (the headline drawn on the image is separate). Use it before scheduling so the user can check the words; edit_pin_details changes them.

Try: “Show me the title and description of the second pin”

Parameters (1)
NameTypeDescription
pin_idsrequired integer[] The pins to show, up to 10.up to 10 items

edit_pin_details

Changes or removes

Changes what goes to Pinterest with a pin: its Pinterest title, description, alt text or link. Give only what should change. If the pin is already scheduled and has not posted yet, the scheduled pin is updated too. It does not change the headline drawn on the image.

Try: “Make the description of pin 2 shorter and add the word "easy"”

Parameters (5)
NameTypeDescription
pin_idrequired integer The pin to change.
title string New Pinterest title, up to 100 characters.
description string New Pinterest description, up to 800 characters.
alt_text string New alt text describing the image, up to 500 characters.
link string New page the pin sends people to (https://…).

Schedule

list_workspaces

Read-only

Lists the user's Made to Spark workspaces (usually one per blog or shop, each with its own Pinterest account). Other tools take a workspace name when the user has several; most pick it from the link on their own.

Try: “Which workspaces do I have?”

No parameters.

list_boards

Read-only

Lists the Pinterest boards the user can post to, each with the board_id that schedule_pins takes. With several workspaces, boards are grouped by workspace; a pin can only go to a board in its own workspace.

Try: “Which boards can I post to?”

Parameters (1)
NameTypeDescription
workspace string Only this workspace's boards (name or site). Leave out to see every workspace.

schedule_pins

Creates In-chat screen

Schedules ready pins (pin_ids from get_pin_batch_status or add_pin_image) to one of the user's Pinterest boards (board_id from list_boards). The pins post through their own workspace's Pinterest account, so the board must be in that workspace. Made to Spark posts them to Pinterest at those times on its own; the chat does not need to stay open. Either give exact times, or a start_date and pins_per_day to have good posting times picked. Confirm the board and timing with the user before calling.

Try: “Schedule them on my Recipes board from Monday”

Parameters (5)
NameTypeDescription
pin_idsrequired integer[] The pins to schedule, in posting order. Pins must be ready (finished rendering).up to 50 items
board_idrequired integer The board to post to, from list_boards.
start_date string First day to post, as YYYY-MM-DD in the user's timezone. Defaults to tomorrow. Ignored when times is given.
pins_per_day integer Only for several pins: how many to post per day, 1 to 10. Leave it out for a single pin. Ignored when times is given. Pins for the same page are always placed a week apart, whatever this says.1–10
times string[] Exact times instead of a spread: one "YYYY-MM-DD HH:MM" per pin, same order as pin_ids, in the user's timezone. A time that clashes with another pin moves 15 minutes later.

show_schedule

Read-only In-chat screen

Shows the pins waiting to post to Pinterest over the coming days: when, which board, the pin title, and the scheduled_pin_id that unschedule_pin takes.

Try: “What is going out this week?”

Parameters (2)
NameTypeDescription
days integer How many days ahead to show, 1 to 45. Defaults to 14.1–45
workspace string Only this workspace (name or site). Leave out to see every workspace.

unschedule_pin

Changes or removes

Takes a pin off the schedule before it posts (scheduled_pin_id from schedule_pins or show_schedule). The pin itself stays in My Pins and can be scheduled again.

Try: “Take Thursday's pin off the schedule”

Parameters (1)
NameTypeDescription
scheduled_pin_idrequired integer The scheduled_pin_id to remove.

Autopilot

show_auto_pin

Read-only

Shows what Auto Pin does for the user on autopilot: whether new posts get pins by themselves, which posts get a fresh pin every week ("Posts you pick"), the pace, whether pins wait for review or go out automatically, and when the next pins come. Use it when the user asks what is running on autopilot.

Try: “What is Auto Pin doing for me?”

Parameters (1)
NameTypeDescription
workspace string Only this workspace (name or site). Leave out to see all.

keep_posts_fresh

Creates In-chat screen

Puts posts on autopilot: each post gets a brand-new pin (new headline, design and photo) every week, or at the pace chosen, scheduled weeks ahead and topped up by Auto Pin by itself. Template pins from the post's own photos; no credits. Use it when the user says "make new pins every week for these" or "keep these posts fresh". First call without confirm and show the user the plan; only after they agree call again with confirm true. Needs Auto Pin set up once in the app; if it is not, pass on the setup link.

Try: “Make new pins every week for my Peru posts”

Parameters (4)
NameTypeDescription
urlsrequired string[] The post links to keep fresh (up to 25). find_my_posts lists the user's posts.
every_days integer How often each post gets a new pin: 7 (weekly, the usual), 3, 14 or 28. It applies to all picked posts of that site. Leave out to keep the current pace.
confirm boolean True only after the user agreed to the plan.
workspace string Which workspace (name or site), when the user has several.

change_posts_fresh

Changes or removes

Changes the posts on autopilot (Auto Pin's Posts you pick): pause or resume the weekly fresh pins, take some posts off, or take all off. Pins already scheduled still go out and nothing is deleted. Check with the user before remove_all.

Try: “Pause the weekly pins for my Peru posts”

Parameters (4)
NameTypeDescription
actionrequired string pause / resume the weekly pins, remove some posts (give urls), or remove_all.one of: pause, resume, remove, remove_all
urls string[] For remove: the post links to take off.
site string Which site's Auto Pin, when the workspace has several (for pause, resume, remove_all).
workspace string Which workspace (name or site), when the user has several.

Insights

check_pinterest_profile

Read-only

Checks the user's connected Pinterest account with the Profile Checker and gives the top things to fix first (profile, links, pin shapes, timing…), each with what to do, plus a link to the full report. If no recent check exists, one starts in the background; call again in a few minutes.

Try: “What should I fix on my Pinterest profile?”

Parameters (1)
NameTypeDescription
workspace string Which workspace (name or site), when the user has several Pinterest accounts.

get_pin_stats

Read-only

Pinterest results for the user's account: totals (views, saves, pin clicks, visits to their site) compared with the period before, the top pins and the top posts by the chosen number. Use it for "which pins got the most clicks this month?", "how is Pinterest doing?" or "which posts get the most visits?".

Try: “Which of my pins did best this month?”

Parameters (3)
NameTypeDescription
days integer The period: 7, 30 (the usual, "this month") or 90 days.one of: 7, 30, 90
sort_by string What to rank pins and posts by: outbound_clicks (visits to the site, the usual), saves, impressions or pin_clicks.one of: outbound_clicks, saves, impressions, pin_clicks
workspace string Which workspace (name or site), when the user has several Pinterest accounts.

Start

get_started

Read-only

Explains what Made to Spark can do for this user, what is set up on their account (workspaces, Pinterest, scheduling, credits), and example requests to try. Call it when the user asks what Made to Spark can do, how to use it, or on their first request if they seem unsure.

Try: “What can Made to Spark do for me?”

No parameters.

In-chat screens

Tools marked In-chat screen also return structuredContent that MCP Apps hosts can draw as a small screen: pins filling in as they are made, a plan with an Approve button, or the days ahead. The screen is the resource ui://made-to-spark/pins-v1.html (text/html;profile=mcp-app), named in each tool's and each result's _meta.ui.resourceUri. Clients without MCP Apps get the same information as text.

Limits & credits

Pins use the plan's included template pins. Once those are used, each pin costs 1 credit, and only when the person agreed: the tool says so first and needs use_credits: true. Scheduling, editing and reading use no credits.

Pins per page, per requestUp to 5 (3 on the trial)
Pages per day on the trial5; no daily cap on a plan
Pin requests per minute10 per account
Requests to the server60 per minute per account (HTTP 429 above that)
Posts per bulk requestUp to 30, on the Solo and Growth plans
Pins per schedule_pins callUp to 50
Same pagePins for one page go out at least 7 days apart
Daily posting limitThe workspace's own most-pins-a-day limit and warm-up, from the Pin Scheduler's Schedule settings
Pin textTitle up to 100, description 800, alt text 500 characters

Errors

HTTP 401No token, or it expired or was revoked. OAuth clients sign in again by themselves; with an API key, create a new one.
HTTP 403The token was not given the mcp:use scope.
HTTP 429More than 60 requests a minute. Wait a minute.
isError: trueThe request reached the tool but can't go ahead: no plan, credits used up, a private link, a board in another workspace. The text says why and what to do next, written to be passed on to the person. An account whose email is not verified gets this too.
A pin with status failedThe page could not be read (no photos, blocked site). get_pin_batch_status gives the reason; the pins are refunded.

Security & permissions

  • Every call acts on the signed-in account only, and only on its own workspaces, pins and boards.
  • Pins are drafts until schedule_pins is called. Posting goes through the official Pinterest API, from Made to Spark, at the scheduled times.
  • Tools are labelled read-only, creates, or changes/removes (readOnlyHint, destructiveHint), so clients can ask before changing things.
  • Links are checked before they are read: private and local addresses are refused.
  • Sign-in needs a verified email. Each assistant can be disconnected, and each key revoked, in Settings → Integrations; changing the password signs out all of them.
  • What we keep is in the privacy policy.

FAQ & troubleshooting

Which plans include it?

Every Made to Spark plan, and the 7-day trial with the smaller limits above. Pins for many posts at once are on the Solo and Growth plans. API keys are on paid plans.

Does it post to Pinterest without asking?

No. New pins are drafts in My Pins. Nothing goes to Pinterest until schedule_pins is called, and the assistant is told to confirm the board and timing with the person first.

What does it cost?

Pins use the plan's included template pins; after those, 1 credit each, and only when the person agreed (use_credits: true). Scheduling, editing and reading use no credits.

Which workspace does it use?

The one whose site the link is on, or the one named in workspace (id, name or site). Every reply says which workspace it used; list_workspaces shows them all.

I only see text, no pins screen

The screens need a client that supports MCP Apps; others, such as Claude Code, get the same pins as text and links. After an update, disconnect and reconnect the connector, then start a new chat: an old chat keeps the old version.

How do I disconnect?

Press Disconnect next to the assistant in Made to Spark under Settings → Integrations, or remove the connector in the assistant's own settings. API keys are revoked in the same place. Changing your password signs out every assistant and key.

Where do I see what is connected?

Settings → Integrations lists every connected assistant with the day it connected, and every API key with its expiry date. Pins an assistant makes are in My Pins as drafts, and scheduled ones are on your calendar.

Changelog

  1. 0.7.0 Nov 2, 2026
    • create_pins_from_url answers at once and reads the page in the background.
    • get_pin_batch_status waits up to 20 s for pins instead of asking the client to poll.
    • Every tool carries readOnlyHint or destructiveHint.
    • Results carry _meta.ui.resourceUri for MCP Apps hosts.
  2. 0.6.0 Oct 31, 2026
    • In-chat screens (MCP Apps): pins, plans with Approve, and the schedule.
  3. 0.5.0 Oct 30, 2026
    • get_pin_stats: clicks, saves and impressions from stored analytics.
  4. 0.4.0 Oct 30, 2026
    • Pins for many posts: find_my_posts, create_pins_for_posts, get_bulk_status.
    • get_pin_details and edit_pin_details for the Pinterest title, description, alt text and link.
    • check_pinterest_profile.
    • Autopilot: show_auto_pin, keep_posts_fresh, change_posts_fresh.
  5. 0.3.0 Oct 30, 2026
    • get_started and list_workspaces; tools pick the workspace from the link.
  6. 0.2.0 Oct 30, 2026
    • First web release: create_pins_from_url, get_pin_batch_status, list_boards, schedule_pins, show_schedule, unschedule_pin.

Connect it in a minute

Your Made to Spark login is all it needs.

Create an account