Instagram MCP

Instagram MCP Server

How an Instagram MCP server publishes, reads insights and moderates comments through Meta’s official APIs — the two ways to connect an account, what each can do, and what Meta’s review still limits.

An Instagram MCP server lets Claude, ChatGPT, Cursor or any MCP client work with an Instagram Professional account through Meta’s official Instagram APIs: publish a photo, reel or carousel, read account and per-post insights, and read, answer or hide comments. MCP Ads does this two ways, because Meta offers two genuinely different Instagram integrations. Instagram Login connects an account with its own Instagram username and password — no Facebook account, no Page — and exposes 12 instagram_login_ tools. The Facebook route reaches the Instagram account through the Facebook Page it is linked to, and adds stories, scheduling, mentions, hashtag search and posting one image to many client accounts at once. Instagram is also a set of ad placements, and those run through the Meta Ads tools. This page explains which route to use, what the tools actually do, and — since it matters more than the tool list — where Meta’s App Review currently limits publishing.

What a call looks like

These are real tool names from the live server, with the shape of what they return.

YouHow did the account do over the last 28 days?
Toolinstagram_login_insights
{
  "data": [
    { "name": "reach",          "total_value": { "value": 48210 } },
    { "name": "views",          "total_value": { "value": 131905 } },
    { "name": "profile_views",  "total_value": { "value": 2214 } },
    { "name": "accounts_engaged", "total_value": { "value": 3877 } }
  ]
}
YouPost this reel with the caption I wrote, and share it to the feed.
Toolinstagram_login_publish_reel
{
  "container_id": "17912345678901234",
  "published": { "id": "18034567890123456" }
}
YouWhich comments on yesterday’s post have not been answered?
Toolinstagram_login_comments
{
  "data": [
    { "id": "17987654321098765", "username": "maya.runs", "text": "Does this come in a size 8?", "like_count": 3 },
    { "id": "17987654321098766", "username": "coach_lev", "text": "Great tips, saved.", "like_count": 1 }
  ]
}
YouPost the new product shot to all five client accounts.
Toolmeta_ads_bulk_create_instagram_post
{
  "results": [
    { "page_id": "104512345678901", "instagram_account_id": "17841400000000001", "media_id": "18045678901234567", "ok": true },
    { "page_id": "104512345678902", "ok": false, "error": "Page token lacks instagram_content_publish" }
  ]
}

Two ways to connect an Instagram account

Meta runs two Instagram APIs that speak a similar dialect but are separate products, with separate permission names, separate hosts and separate App Review submissions. Both require a Professional (Business or Creator) account — Meta does not let any app publish to, or read insights from, a personal account. Which one to use depends on the account owner, not on preference:

  • Instagram Login — the account owner signs in at instagram.com. No Facebook account or Page is involved. Use it for creators and clients who run Instagram and nothing else. Tools are prefixed instagram_login_.
  • Facebook Page route — the Instagram account is reached through the Facebook Page it is linked to, with a Facebook login that has a role on that Page. Use it when you also manage the Page, or manage many client accounts through Business Manager. Tools are prefixed meta_ads_ (meta_ads_instagram_media, meta_ads_create_instagram_post and so on).
  • Both can be connected at once; they are separate connections and do not interfere with each other or with the Meta Ads connection.

What the Instagram Login tools do

The 12 Instagram Login tools cover the day-to-day loop of posting, measuring and replying for one or several connected accounts. Every tool takes an optional connection_id, so an agency can connect several creators and name the one it means.

  • Account — instagram_login_accounts, instagram_login_profile (username, followers, media count)
  • Publishing — instagram_login_publish_photo, instagram_login_publish_reel (waits for Instagram to finish encoding, and hands back the container id if it is still encoding when the wait runs out), instagram_login_publish_carousel (2 to 10 images), instagram_login_container_status
  • Insights — instagram_login_insights for reach, views, profile views and accounts engaged; instagram_login_media_insights for one post’s reach, saves, shares and total interactions; instagram_login_media for recent posts with like and comment counts
  • Comments — instagram_login_comments, instagram_login_reply_to_comment, and instagram_login_hide_comment, which hides a comment from everyone but its author and can be reversed — the moderation action to prefer over deletion

What the Facebook Page route adds

The Page route has the broader Instagram surface — 18 Instagram tools inside the Meta tool set — because the Facebook-login API exposes more: meta_ads_create_instagram_story (image or video, with link stickers), meta_ads_create_instagram_reel, meta_ads_schedule_instagram_post for a future publish time, meta_ads_publish_page_post_to_instagram to cross-post a Page post that has an image or video, meta_ads_bulk_create_instagram_post to publish the same image to several clients’ accounts in one call (each account succeeds or fails independently), meta_ads_instagram_mentions for posts and comments that tag you, meta_ads_instagram_stories, meta_ads_delete_instagram_post, and the Business Discovery tools meta_ads_instagram_competitor_analysis and meta_ads_instagram_hashtag_posts, which read another Business account’s public profile or recent posts on a hashtag.

Where Meta’s App Review stands, and what that means for you

Publishing and comment moderation on Instagram need permissions that Meta grants only after App Review. At the time of writing, the review of the Facebook-route permissions — instagram_basic, instagram_content_publish and instagram_manage_comments among them — has not been approved, and Meta honours unapproved permissions only for people with a role on our Meta app. In practice that means Facebook-route publishing will be refused by Meta for customer accounts until the review passes. Instagram Login is a separate Meta app with its own review; if Meta has not granted a permission for your account, the tool returns Meta’s permission error rather than pretending to post. Reading Instagram placement performance in your ads is unaffected, because it uses the approved ads permissions. We would rather you find this out here than on the first failed post: use the 3-day trial to run one read and one publish on your own account before you rely on it.

Instagram as an ad placement

Paid Instagram is not a separate platform; it is placements inside Meta Ads — Feed, Stories, Reels and Explore — and it runs through the Meta Ads tools with the ads permissions Meta has approved. meta_ads_placements breaks performance down by publisher platform and placement, meta_ads_ad_performance adds placement and device breakdowns at ad level, meta_ads_update_adset_targeting changes publisher_platforms and placements on an ad set, meta_ads_create_story_ad_creative builds a vertical Story or Reels creative, and meta_ads_boost_existing_post turns an existing organic post into an ad in an ad set you choose. Those campaigns are created paused like every Meta campaign in MCP Ads. The Meta Ads MCP page covers that side in full.

Things Instagram makes every integration live with

These are Instagram’s rules rather than this server’s, and each has broken a real post at least once:

  • Media must be at a public URL. Instagram downloads the file itself, so a local file, a signed private link or localhost fails — with an error about the container, not the URL.
  • JPEG is the dependable image format. PNG is rejected often enough not to rely on it.
  • Publishing is always two steps, a container and then a publish, and video containers need time to encode first.
  • Meta retired the impressions and plays metrics on 21 April 2025 and folded them into views, so older reports and new ones do not line up on those columns.

Other Instagram MCP servers, and when to use one

Meta’s own MCP server, the Meta-hosted Ads MCP at mcp.facebook.com/ads, is for paid ads; it does not post to Instagram or moderate comments. For organic Instagram there are community servers on GitHub, such as mcpware/instagram-mcp and AleemHaider/instagram-mcp, that wrap the same official Instagram Graph API and run on your own machine with your own Meta developer app and token. If you already have a Meta app with the Instagram permissions approved, that is a free and perfectly reasonable route. MCP Ads is the better fit when Instagram is one of the accounts you run alongside Meta Ads, Google Ads and GA4 and you want them in one conversation, when you manage many client accounts, or when you would rather not create and maintain a Meta app — at $49/month flat after a 3-day trial (pricing).

Questions

Can I connect Instagram without a Facebook account?

Yes. Instagram Login signs in at instagram.com with the account’s own credentials; no Facebook account or Page is involved. The account must be a Professional (Business or Creator) account, which is a free switch in the Instagram app. The Instagram guide walks through both routes.

Can it publish stories?

Through the Facebook Page route, yes: meta_ads_create_instagram_story publishes an image or video story. The Instagram Login tools cover photos, reels and carousels but not stories.

Can customers publish today?

Not on every route. Meta has not yet approved the Facebook-route publishing and comment permissions, so Meta refuses those calls for customer accounts until it does. Instagram Login is reviewed separately. Reads of your ads, including Instagram placement performance, are not affected.

Can it schedule posts?

meta_ads_schedule_instagram_post schedules a post for a future time on the Facebook Page route. The Instagram Login tools publish immediately.

Can it read DMs?

No. None of the Instagram tools read or send direct messages.

Why did my post fail with a media container error?

Almost always the file URL. Instagram fetches the media itself, so it must be publicly reachable and should be a JPEG for images. A private, signed or localhost URL produces an error that names the container rather than the URL.

Related

Connect an account and try it

Add MCP Ads to Claude or ChatGPT with one URL, authorise an ad account in the browser, and ask it something.