MCP INSTAGRAM B2 TECH

Model Context Protocol · Instagram API (Instagram Login)

Publish to Instagram
straight from Claude.

An MCP server that connects Claude to your Instagram professional account — plan the post in the conversation and publish 2–10 image carousels without opening the app. Embedded OAuth login. Status: LIVE.

6 tools + 1 prompt · embedded OAuth · multi-tenant · free

2–10 image carousels Preview before publish confirm=true to publish 60-day token renewed by cron Automatic media pipeline Multi-tenant on Vercel OAuth 2.1 Authorization Server 2–10 image carousels Preview before publish confirm=true to publish 60-day token renewed by cron Automatic media pipeline Multi-tenant on Vercel OAuth 2.1 Authorization Server
What it is

Your Instagram, driven in natural language

MCP INSTAGRAM B2 TECH is a Model Context Protocol server that gives Claude real access to your professional account — not a chatbot that guesses, but typed calls against the Instagram API (Instagram Login).

Real connection

Claude publishes to your account

Connect a professional account (Business or Creator) with Instagram Business Login embedded in the flow, then ask for the post in natural language: Claude drafts the slides and caption, shows a preview and only publishes once you confirm.

Media pipeline

From image to feed, no manual hosting

Each image is a public HTTPS URL or base64/bytes: uploads are converted to JPEG (Pillow) and hosted in a public Supabase Storage bucket, where Meta fetches them. Every media container is polled until FINISHED before publishing.

Status

LIVE in production

Multi-tenant deploy at mcp-instagram.vercel.app — encrypted tokens in Supabase, and we are the OAuth 2.1 Authorization Server. Same stack as the Meta Ads, Google Ads, GTM and Cloudflare MCPs.

What it already does

The complete tool catalog

6 tools and 1 prompt — from auth to carousel publish. Everything below is already implemented and live.

Auth

4 tools
  • instagram_loginStarts connecting an account via Instagram Business Login (on hosted, the connector handles this automatically).
  • instagram_submit_callbackFinishes login by submitting the pasted redirect URL.
  • instagram_token_statusReports whether the credential is valid and how many days until it expires.
  • instagram_refresh_tokenRefreshes the long-lived token (no-op if it is under 24h old).

Connected account

1 tool
  • get_connected_accountThe connected professional account — id and username. One token = one account; no account list to get wrong.

Publishing

1 · confirm=true
  • create_carouselPublishes a 2–10 image carousel. With confirm=false it returns only a preview; the feed changes only with confirm=true.

MCP prompt

1 prompt
  • plan_carousel_postTakes a topic, drafts the slides and caption, and walks create_carousel through preview → explicit confirmation.

From topic to feed in one conversation: plan_carousel_postcreate_carousel (preview) → confirm=true → post is live.

Write-safety model

Claude never posts on its own

A feed post speaks to your audience in your name. That's why every publish goes through explicit barriers — you are always in control of what shows up on your profile.

Preview before publishing

create_carousel with confirm=false returns the post plan — images, order and caption — without touching the publish API.

Publishing requires confirm=true

The feed only changes with explicit confirmation. The plan_carousel_post prompt follows the same ritual: draft → preview → confirm.

Containers only publish FINISHED

Each media container's status_code is polled until FINISHED before publishing — no half-baked posts from media still processing.

Tenant is never an argument

The tenant is derived from the embedded Authorization Server's access token — each login only sees its own account. No tool accepts "which client".

Tokens encrypted at rest

Long-lived tokens with AES-256-GCM in Supabase, default-deny RLS and the service key server-side only. instagram_token_status shows validity and days until expiry.

Temporary media, deleted in 72h

Uploads live in the public bucket only long enough for Meta to fetch them: the cleanup-media cron deletes each object 72 hours after publishing.

How to connect

Up and running in minutes

Add the connector, log in with your Instagram account and publish your first carousel in the same conversation. Zero installation — we host the server.

Hosted service

Hosted — mcp-instagram.vercel.app

Add the MCP server as a connector in Claude and log in. Nothing to install; we handle OAuth and tokens.

  1. Add the connector. On Claude.ai → Settings → Connectors → Add custom connector, paste https://mcp-instagram.vercel.app/api/mcp. On Claude Code, use the command below.
    # Claude Code
    claude mcp add --transport http \
      instagram https://mcp-instagram.vercel.app/api/mcp
  2. Log in with Instagram. The OAuth handshake (our Authorization Server → Instagram Business Login) runs automatically when you connect; on Claude Code, complete it via /mcp.
  3. Confirm. Run instagram_token_status to validate the credential and get_connected_account to see the connected account. Ready to publish.
After connecting

First post — the flow in practice

From topic to published carousel, all inside the same conversation with Claude.

  1. Ask for the post. Use the plan_carousel_post prompt with a topic — Claude drafts the slides and caption.
    # in Claude
    plan_carousel_post("3 Claude Code tips")
  2. Review the preview. create_carousel with confirm=false returns images, order and caption — without publishing anything.
  3. Confirm. Happy with it? The same call with confirm=true publishes the carousel to the connected account.

Frequently asked questions

Still have a question? Write to bruno@b2tech.io.

How much does it cost?
MCP Instagram is free. All you need is an Instagram professional account (Business or Creator).
Is it safe? Can Claude post on its own?
No. create_carousel with confirm=false returns only a preview of the post — images, order and caption. Your feed only changes when you confirm with confirm=true, and the plan_carousel_post prompt follows the same ritual.
What kind of account do I need?
An Instagram professional account (Business or Creator). The server uses the Instagram API with Instagram Login — you log in directly with your Instagram account, no linked Facebook Page required.
How does the 60-day token work?
Instagram Business Login exchanges the authorization code for a short-lived token and then a long-lived token (~60 days), refreshed in place — there is no refresh token. instagram_refresh_token refreshes it on demand (no-op if the token is under 24h old) and the daily refresh-tokens cron automatically extends tokens close to expiry.
Where do my images live?
Public HTTPS JPEG URLs are used as-is. Uploads (base64/bytes) are converted to JPEG with Pillow and hosted in a public Supabase Storage bucket just long enough for Meta to fetch them — the cleanup-media cron deletes each object 72 hours after publishing.
Is there a publishing limit?
The Instagram API allows 100 published posts per account every 24 hours — and a whole carousel counts as a single post. For Claude-assisted publishing, that limit is comfortable.
Can I run the server on my own machine?
No — the server's source code is private and it is offered as a hosted service at mcp-instagram.vercel.app. You just add the connector in Claude and log in with your account; isolation is per tenant, with tokens encrypted (AES-256-GCM) server-side.
Start now

Stop assembling posts on your phone.
Ask Claude — it plans, previews and publishes.

2–10 image carousels on your professional account, with embedded OAuth, an automatic media pipeline and publishing only with confirm=true. Free and live.

6 tools + 1 prompt · embedded OAuth · multi-tenant on Vercel