Pith — the Instagram MCP server
MCP serverCommunicationPublish 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.
No other account needed.
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.
- Settings → Connectors → Add custom connector.
- Paste the address above and connect.
- Sign in with email or Google when Claude opens pith.day, and approve what it asks for.
- Add it once, then
/mcpto sign in.
claude mcp add --transport http pith https://pith.day/api/mcp
- Add the server to your MCP config:
{
"mcpServers": {
"pith": {
"type": "http",
"url": "https://pith.day/api/mcp"
}
}
}
- Wherever the app asks for a remote MCP server, paste the address.
- 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
whoami— shows nothing is connected yet.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.whoamiagain — your account, withcanPublish: true.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, free | Hand 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 one | Pith 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 chat | Products 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.
| When | What 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 publishes | Through 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 machine | It 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 credential | OAuth 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, always | Every 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 demo | A 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.
| Tool | What it does | Permission |
|---|---|---|
whoami | See which pith.day account is connected and what it's allowed to do | view |
get_tenant | Pull your profile: voice, active flow, Instagram connection, timezone | view |
onboard_tenant | Set up a new business from its Instagram handle. Scrape, brand voice, first drafts | edit |
connect_instagram | Get a one-time link that connects your Instagram account for publishing | edit |
The daily drafts
The morning inbox, by chat. This is where most of the day happens.
| Tool | What it does | Permission |
|---|---|---|
list_drafts | See what's waiting for approval this morning | view |
get_draft | Read one draft in full, image included | view |
update_draft | Approve, reject, reword, or schedule a draft for later | edit |
generate_draft | Ask for today's drafts now instead of waiting for the morning run | edit |
regenerate_draft | Rewrite a draft's text, optionally with a new angle | edit |
Publishing
Your own content publishes free; drafts only ever from one you approved. The same rule as the app.
| Tool | What it does | Permission |
|---|---|---|
publish_post | Publish your own image and caption to Instagram now. Story, feed post, or carousel | publish |
publish_draft | Post an approved draft to Instagram now | publish |
download_draft_image | Get the story image to post yourself | publish |
The week ahead
Plan posts by date without opening the calendar.
| Tool | What it does | Permission |
|---|---|---|
get_schedule | See everything queued and when it goes out | view |
edit_schedule | Add, move, or remove a scheduled post. Including filling a whole week | edit |
Your Brand DNA
The voice every draft is written from. Describe the change in words.
| Tool | What it does | Permission |
|---|---|---|
get_brand_dna | Read your voice, palette, and posting beats | view |
refine_brand_dna | "Warmer voice", "add a Friday specials beat", and it's changed | edit |
brand_dna_drift | Accept or dismiss a suggested update when your feed moves on | edit |
regenerate_brand_dna | Start the voice profile over from your current Instagram | edit |
curate_images | Keep only the photos worth generating stories from | edit |
Photos & products
The raw material the daily drafts are built from.
| Tool | What it does | Permission |
|---|---|---|
list_assets | Browse your uploads and your scraped Instagram photos | view |
add_asset | Add a photo from a link | edit |
delete_asset | Remove a photo you uploaded | edit |
refresh_scrape | Pull your latest Instagram photos after your grid changes | edit |
list_products | See the products your daily posts rotate through | view |
manage_product | Add a product, rename it, retire it, set its description or price, or attach photos to it | edit |
set_website | Tell pith your business website so it can learn from it | edit |
refresh_website | Re-read your website for brand details, products, and photos | edit |
Your daily flow
Which loop feeds the mornings. Recycling, a campaign, products, or fresh ideas.
| Tool | What it does | Permission |
|---|---|---|
get_flow | See which flow is running and how it's set up | view |
set_flow | Switch flows or adjust the one you're on | edit |
list_events | Read the activity log. Why a draft was skipped or a publish didn't land | view |
Plan & billing
Read-only, except for handing you a checkout link. Nothing is ever charged by the assistant.
| Tool | What it does | Permission |
|---|---|---|
get_usage | Check what's left this month and your posting streak | view |
get_billing_status | See your plan and subscription state | view |
get_checkout_url | Get an upgrade link to open yourself. It never charges on its own | checkout |
Settings
The switches you'd otherwise hunt for in the app.
| Tool | What it does | Permission |
|---|---|---|
set_automation | Change your posting time, timezone, daily email, or WhatsApp pings | edit |
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 for | Either 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 timer | Pith 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 minute | When 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 slot | Asking 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 Free | Free-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.
| Plan | What you get |
|---|---|
| Free | 10 publishes of your own content a day. 5 AI-made stories a rolling 30 days. One Instagram account. |
| Pro — $49/mo | Unlimited 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.
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