The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Pith — Instagram publishing listing page.
Publish to Instagram from the chat you are already in.
A hosted remote MCP server for Instagram Business and Creator accounts. Your assistant posts your photo with your caption, on your say-so, through the official Instagram Graph API. Nothing to install, no API key to paste, no password to hand over.
Your client will ask for a remote MCP server URL. This is it:
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.
/mcp to sign in.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.whoami again — your account, with canPublish: 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.
| 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. |
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?" |
| 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 full list, generated from the live server — not a highlight reel. The permission column is what your client is granted at connect time.
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 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 |
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 |
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 |
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 |
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 |
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 |
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 |
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.
| 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. |
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. |
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.
Two minutes, once. Publish your own content free, and see whether the drafts earn their place.
pith.day — daily Instagram for small businesses.