# Pith — Instagram publishing

**Category:** 🌐 Social Media  
**Repository:** https://github.com/pith-day/pith-mcp  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/pith-instagram-publishing

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

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "pith-instagram-publishing": {
    "command": "npx",
    "args": ["-y","pith-instagram-publishing"]
  }
}
```

## Documentation & README

<!-- Generated by scripts/build-github-mcp-page.ts from lib/growth/github-mcp/. Do not edit by hand. -->

<h1 align="center">Pith — the Instagram MCP server</h1>

<p align="center">
  <b>Publish to Instagram from the chat you are already in.</b><br>
  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.
</p>

<p align="center"><img alt="MCP" src="https://img.shields.io/badge/MCP-streamable_HTTP-17150E?style=flat-square&labelColor=17150E">
  <img alt="auth" src="https://img.shields.io/badge/auth-OAuth_2.1_%C2%B7_PKCE-17150E?style=flat-square&labelColor=17150E">
  <img alt="Instagram" src="https://img.shields.io/badge/Instagram-Graph_API_approved-CCCC25?style=flat-square&labelColor=17150E">
  <img alt="hosted" src="https://img.shields.io/badge/hosted-nothing_to_install-17150E?style=flat-square&labelColor=17150E"></p>

<p align="center">
  <a href="https://pith.day/connect/mcp?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp"><b>Connect Pith →</b></a>
</p>

---

## 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.

<details>
<summary><b>Claude (web, desktop, mobile)</b></summary>

1. Settings → Connectors → Add custom connector.
1. Paste the address above and connect.
1. Sign in with email or Google when Claude opens pith.day, and approve what it asks for.

</details>

<details>
<summary><b>Claude Code</b></summary>

1. Add it once, then `/mcp` to sign in.

```bash
claude mcp add --transport http pith https://pith.day/api/mcp
```

</details>

<details>
<summary><b>Cursor, VS Code, and other config-file clients</b></summary>

1. Add the server to your MCP config:

```json
{
  "mcpServers": {
    "pith": {
      "type": "http",
      "url": "https://pith.day/api/mcp"
    }
  }
}
```

</details>

<details>
<summary><b>Anything else</b></summary>

1. Wherever the app asks for a remote MCP server, paste the address.
1. Transport: streamable HTTP. Auth: OAuth — Dynamic Client Registration and Client ID Metadata Documents both work, so most clients need no manual setup at all.

</details>

### 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, 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

<details>
<summary><b>Is the server open source?</b></summary>

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.

</details>

<details>
<summary><b>Do I need an API key or a Meta developer app?</b></summary>

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

</details>

<details>
<summary><b>Can it post to Facebook, TikTok, or LinkedIn?</b></summary>

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

</details>

<details>
<summary><b>Which clients work?</b></summary>

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

</details>

<details>
<summary><b>What happens if a publish fails halfway?</b></summary>

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.

</details>

<details>
<summary><b>Hebrew and RTL?</b></summary>

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

</details>

---

## Connect it

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

**[Connect Pith →](https://pith.day/connect/mcp?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp)**

## Links

- [Setup guide and the live capability list](https://pith.day/connect/mcp?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp)
- [Help centre: using Pith from an assistant](https://pith.day/help/ai-assistant?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp)
- [pith.day](https://pith.day/?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp)
- [Pricing](https://pith.day/pricing?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp)
- [Privacy](https://pith.day/privacy?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp)
- [Terms](https://pith.day/terms?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp)
- Support: hello@pith.day

<p align="center"><sub><a href="https://pith.day/?utm_source=github&utm_medium=readme&utm_campaign=pith-mcp">pith.day</a> — daily Instagram for small businesses.</sub></p>

