Pith — the Instagram MCP server

MCP serverCommunication

Publish to Instagram from chat, official Graph API, OAuth 2.1, free for your own posts.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use Pith — the Instagram MCP server

From the project's README

As published by pith-day/pith-mcp in README.md.


Add it

Your client will ask for a remote MCP server URL. This is it:

https://pith.day/api/mcp

Streamable HTTP. Sign-in happens in your browser over OAuth 2.1 — the server issues the token, the client never sees a password of yours.

  1. Settings → Connectors → Add custom connector.
  2. Paste the address above and connect.
  3. Sign in with email or Google when Claude opens pith.day, and approve what it asks for.
  1. Add it once, then /mcp to sign in.
claude mcp add --transport http pith https://pith.day/api/mcp
  1. Add the server to your MCP config:
{
  "mcpServers": {
    "pith": {
      "type": "http",
      "url": "https://pith.day/api/mcp"
    }
  }
}
  1. Wherever the app asks for a remote MCP server, paste the address.
  2. Transport: streamable HTTP. Auth: OAuth — Dynamic Client Registration and Client ID Metadata Documents both work, so most clients need no manual setup at all.

First run

  1. whoami — shows nothing is connected yet.
  2. connect my instagram — the server hands back a single-use link into Instagram's official login. Approve there, and you land back on a done page.
  3. whoami again — your account, with canPublish: true.
  4. post this photo with this caption — it is live on Instagram. The reply tells you the exact caption that was posted and links the post.

An Instagram Business or Creator account is required — that is Meta's rule for API publishing, not ours. Switching a personal account over is free and takes a minute in the Instagram app.


What it does

Publishes your own content, freeHand your assistant a photo and a caption and it goes up: a story, a feed post, or a 2–10 image carousel. One request, one post, immediately. Free accounts get 10 of these a day.
Runs the daily draft loop, when you want onePith can also write the posts: a few drafts a morning in your brand's voice, built from your own photos and products. Your assistant reads them out, you approve the good one, it goes up. Five a month on the free plan.
Keeps the boring account work in chatProducts and prices, the photo library, your brand voice, the week's plan, what is left this month. The same things the app does, without opening the app.

What you actually say

Real sentences, from the mornings this was built for.

WhenWhat you type
A photo you took a minute ago"Post this to my feed: fresh sourdough, 7am sharp."
Three shots from the shoot"Make these a carousel with a short caption about the new collection."
7:05, hands full"What's waiting for approval this morning? Approve it and post it."
Your menu is a PDF"Here's my menu. Add every item as a product, with prices."
It sounds too formal"Make that caption warmer and lose the emoji."
Sunday night, planning"Fill next week with product posts."
Did it work?"Did yesterday's story actually go out? Why not?"
How much is left"How many stories do I have left this month?"

How this differs from the other Instagram MCP servers

It actually publishesThrough the official Instagram Graph API, with Meta's instagram_business_content_publish permission approved at standard access (2026-09-18). Not a scraper, not a private endpoint, not a browser it drives for you.
Nothing runs on your machineIt is a hosted remote server. No Python, no Node, no Docker, no cookie or session token to extract and keep fresh.
You never paste a credentialOAuth 2.1 with PKCE, DCR and CIMD. Instagram's own login screen grants access; Pith holds a scoped token, your client holds a revocable one, and neither ever sees your Instagram password.
Publishing is per-request, alwaysEvery post is one explicit ask, or an approved draft you said yes to. There is no timer, no queue that fires on its own, and no way to ask it to post unattended.
It is a product, not a demoA real SaaS with a free tier, a paid tier, a help centre and a human on hello@pith.day. Broken things get fixed.

The tools

The full list, generated from the live server — not a highlight reel. The permission column is what your client is granted at connect time.

Your account

How the assistant finds you and which business it's working on.

ToolWhat it doesPermission
whoamiSee which pith.day account is connected and what it's allowed to doview
get_tenantPull your profile: voice, active flow, Instagram connection, timezoneview
onboard_tenantSet up a new business from its Instagram handle. Scrape, brand voice, first draftsedit
connect_instagramGet a one-time link that connects your Instagram account for publishingedit

The daily drafts

The morning inbox, by chat. This is where most of the day happens.

ToolWhat it doesPermission
list_draftsSee what's waiting for approval this morningview
get_draftRead one draft in full, image includedview
update_draftApprove, reject, reword, or schedule a draft for lateredit
generate_draftAsk for today's drafts now instead of waiting for the morning runedit
regenerate_draftRewrite a draft's text, optionally with a new angleedit

Publishing

Your own content publishes free; drafts only ever from one you approved. The same rule as the app.

ToolWhat it doesPermission
publish_postPublish your own image and caption to Instagram now. Story, feed post, or carouselpublish
publish_draftPost an approved draft to Instagram nowpublish
download_draft_imageGet the story image to post yourselfpublish

The week ahead

Plan posts by date without opening the calendar.

ToolWhat it doesPermission
get_scheduleSee everything queued and when it goes outview
edit_scheduleAdd, move, or remove a scheduled post. Including filling a whole weekedit

Your Brand DNA

The voice every draft is written from. Describe the change in words.

ToolWhat it doesPermission
get_brand_dnaRead your voice, palette, and posting beatsview
refine_brand_dna"Warmer voice", "add a Friday specials beat", and it's changededit
brand_dna_driftAccept or dismiss a suggested update when your feed moves onedit
regenerate_brand_dnaStart the voice profile over from your current Instagramedit
curate_imagesKeep only the photos worth generating stories fromedit

Photos & products

The raw material the daily drafts are built from.

ToolWhat it doesPermission
list_assetsBrowse your uploads and your scraped Instagram photosview
add_assetAdd a photo from a linkedit
delete_assetRemove a photo you uploadededit
refresh_scrapePull your latest Instagram photos after your grid changesedit
list_productsSee the products your daily posts rotate throughview
manage_productAdd a product, rename it, retire it, set its description or price, or attach photos to itedit
set_websiteTell pith your business website so it can learn from itedit
refresh_websiteRe-read your website for brand details, products, and photosedit

Your daily flow

Which loop feeds the mornings. Recycling, a campaign, products, or fresh ideas.

ToolWhat it doesPermission
get_flowSee which flow is running and how it's set upview
set_flowSwitch flows or adjust the one you're onedit
list_eventsRead the activity log. Why a draft was skipped or a publish didn't landview

Plan & billing

Read-only, except for handing you a checkout link. Nothing is ever charged by the assistant.

ToolWhat it doesPermission
get_usageCheck what's left this month and your posting streakview
get_billing_statusSee your plan and subscription stateview
get_checkout_urlGet an upgrade link to open yourself. It never charges on its owncheckout

Settings

The switches you'd otherwise hunt for in the app.

ToolWhat it doesPermission
set_automationChange your posting time, timezone, daily email, or WhatsApp pingsedit

View, edit and publish are granted by default; checkout only if a client asks for it. Every connection is listed in Settings → Connected apps on pith.day, and disconnecting cuts it off immediately.


Things worth knowing before you connect

Nothing is posted that you did not ask forEither you asked for this post in this message, or you approved the draft it came from. The server has no path around that rule and no unattended mode.
Nothing goes out on a timerPith does not hold an approved post and release it later. If you want a post at 9:30, your own assistant's scheduled task can ask for it then — that is your action, under your grant, and you can stop it whenever you like.
Drawing a story takes a minuteWhen Pith makes the image rather than posting yours, an image model draws it. Sixty to ninety seconds is normal and your client will sit and wait.
Free-plan story images cost a slotAsking to download a generated story image spends one of the five monthly stories the first time, exactly as it does in the app. Publishing your own photo never does.
Feed captions carry one attribution line on FreeFree-plan feed posts get a short ✨ pith.day/p/<handle> line appended, and the response shows you the exact caption before you see it on Instagram. Paid plans post your caption untouched.

What it costs

The connector is included on every plan, free one included. There is no separate MCP fee and no card needed to start.

PlanWhat you get
Free10 publishes of your own content a day. 5 AI-made stories a rolling 30 days. One Instagram account.
Pro — $49/moUnlimited stories, unlimited publishes, reels, no attribution line.

Security and privacy

  • OAuth 2.1 authorization server run by pith.day: PKCE S256, Dynamic Client Registration, Client ID Metadata Documents, opaque tokens stored hashed.
  • Scopes are granular — view, edit, publish, checkout — and shown to you on the approval screen before anything connects.
  • Pith reads your Instagram profile and publishes what you ask it to publish. It does not read your DMs, your followers, or anyone else's account.
  • Checkout links are handed to you to open. Nothing is ever charged by an assistant.
  • Revoke any connection from Settings → Connected apps. It takes effect immediately.

FAQ

No — this repository is the documentation and the manifest for a hosted service. The server itself is the pith.day product. You connect to it; you do not run it.

No. Pith's Meta app is approved at standard access, so any Instagram Business or Creator account can connect through the normal Instagram login.

Not today. Instagram stories, feed posts, carousels and reels are what it does.

Anything that speaks remote MCP over streamable HTTP with OAuth: Claude and Claude Code, Cursor, VS Code, and a growing list of others.

The post is written down before it is sent, so a retry resumes the same post instead of creating a second one. Carousels in particular are not idempotent on Instagram's side, and this is handled.

First-class. The product was built in Hebrew and English, and generated story text renders correctly in both.


Connect it

Two minutes, once. Publish your own content free, and see whether the drafts earn their place.

Connect Pith →

Links

Advanced
Delivery
pith-mcp MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
Catalog kind
mcp-server
Gateway key
io-github-pith-day-pith-mcp
Source
github.com/pith-day/pith-mcp
Hosted endpoint
https://pith.day/api/mcp