Skip to main content
Glama
Instagram MCP

Instagram MCP

by nelsonrogers

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
INSTAGRAM_MCP_HOMENoWhere the token lives. Defaults to ~/.config/instagram-mcp.
INSTAGRAM_MCP_APP_IDNoOnly for auth --oauth; never stored.
INSTAGRAM_MCP_PROFILENoToken profile, for a second account (auth --profile NAME). Defaults to default.
INSTAGRAM_MCP_TIMEZONENoIANA timezone for days and times, e.g. Europe/Paris. Defaults to the computer's timezone.
INSTAGRAM_MCP_LOG_LEVELNoLogging level, always logged to stderr. Defaults to WARNING.
INSTAGRAM_MCP_APP_SECRETNoOnly for auth --oauth; never stored.
INSTAGRAM_MCP_OUTPUT_DIRNoWhere save_to files go. Defaults to ~/Documents/instagram-mcp.
INSTAGRAM_MCP_API_VERSIONNoGraph API version. Defaults to v26.0.
INSTAGRAM_MCP_REDIRECT_URINoOnly for auth --oauth; never stored.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

Read-only tools for an Instagram Business or Creator account (Meta's official Instagram API).

Getting started: if a tool reports a sign-in problem, call get_instagram_auth_status and relay its next_step. Signing in happens in a terminal (instagram-mcp auth), never in the chat: tokens must not be pasted here.

Picking tools:

  • "How am I doing": get_instagram_performance_summary (period vs previous period).

  • Trends and growth charts: get_instagram_metrics_over_time (day/week/month buckets).

  • Best and worst content: get_instagram_top_media; catalogue: list_instagram_media (include_insights for per-post numbers); specific posts: get_instagram_media_insights.

  • Audience (age, gender, cities, countries; followers or engaged accounts): get_instagram_audience.

  • When to post: get_instagram_online_followers. Live stories: list_instagram_stories.

  • Comments: list_instagram_comments. Mentions/UGC: list_instagram_tagged_media.

  • Benchmarking other accounts: get_instagram_public_account.

  • A full snapshot in one call (monthly reports): get_instagram_report.

  • Anything else: query_instagram_api (raw Graph API GET).

Data notes: every result states its exact date_range and timezone: quote it. Rolling periods end yesterday; Meta's numbers can still change for 48 hours and go back 2 years. Post metrics are lifetime totals. Percentages are 0-100, *_s are seconds. Anything Instagram can't provide is null or listed in unavailable/notes: say so instead of inventing numbers.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_instagram_auth_statusA

Check whether the Instagram server has a working token, which account it reads, which API host it uses, and when the token expires (Instagram Login tokens renew themselves). Call this first if another Instagram tool reports a sign-in problem.

get_instagram_profileA

The connected Instagram account's profile and current counts: username, display name, biography, website, followers, following and number of posts. For performance over a period use get_instagram_performance_summary.

get_instagram_performance_summaryA

Account-level totals for a period, like the Insights overview in the Instagram app: views, reach, accounts engaged, interactions (likes, comments, shares, saves, replies, reposts), profile link taps, follows, unfollows and net follows, each with the previous period and % change, plus engagement rate (interactions / reach). Any range up to 2 years; reach and accounts_engaged need a range of 29 days or less (unique accounts can't be added up). For trends use get_instagram_metrics_over_time; for posts get_instagram_top_media.

get_instagram_metrics_over_timeA

A time series of account metrics by day, week or month, for trend analysis and growth charts (views, reach, interactions, likes, comments, shares, saves, follows, unfollows, net follows, …). One Instagram request per bucket: use week or month for long periods. Buckets cut off by the range are flagged partial=true.

get_instagram_audienceB

Who the audience is: age, gender, age × gender, top cities and top countries of the followers, or of the accounts that engaged with the content. Rows have counts and share_pct; age also has app_share_pct (the app's own rule) and gender share_of_known_pct.

get_instagram_online_followersA

When followers are on Instagram: average followers online per hour of the day, and the best weekday + hour slots, in the report timezone. Use it to pick posting times.

query_instagram_apiA

Run any read-only GET on Meta's Instagram Graph API for the connected account and return Meta's raw JSON: the escape hatch when no other tool fits. Account insights allow at most 30 days between since and until (Unix seconds) and go back 2 years. Pagination: pass 'after' from paging.cursors. Meta's error message is returned if a request is invalid.

list_instagram_mediaA

List the account's posts and reels (newest first) with caption, type, publish time, permalink, likes and comments; optionally with each post's lifetime insights and an embedded thumbnail. Covers the whole history, not just two years. For a ranking within a period use get_instagram_top_media; stories are in list_instagram_stories.

get_instagram_media_insightsA

Every lifetime metric Meta has for specific posts, reels or stories: views, reach, likes, comments, shares, saves, reposts, interactions, engagement rate; follows, profile visits and profile activity for feed posts; average and total watch time and skip rate for reels; replies and navigation for stories.

get_instagram_top_mediaA

Rank the posts published in a period by a lifetime metric (views, reach, interactions, saves, shares, engagement rate, average watch time, …), with all their insights. Also returns how many posts were published in the period.

list_instagram_storiesA

The account's current stories (published in the last 24 hours) with their insights: views, reach, replies, shares, interactions, follows, profile visits and navigation (taps forward/back, exits, swipes). Meta doesn't give access to expired stories.

list_instagram_commentsA

Read comments (username, text, time, likes) on one post or across the latest posts, e.g. to summarise sentiment, find questions or content ideas. Needs the comments permission on the token (instagram_manage_comments or instagram_business_manage_comments).

list_instagram_tagged_mediaA

Public posts by other accounts in which the connected account is tagged (newest first), with owner, caption, likes and comments: useful to track mentions, collaborations and UGC.

get_instagram_public_accountA

Public profile and recent posts of another Business or Creator account (followers, posts, bio, and per post likes, comments and reel views), for benchmarking against peers or vetting partners. Needs a unified login or Facebook Login token.

get_instagram_reportA

Everything about the account for a period in one stable JSON snapshot (schema_version 1): profile, performance totals vs the previous period (with content-type and follower splits), follower audience (gender, age, top 10 cities and countries), every post published in the period with its lifetime insights, and the best hours to post. Sections Instagram can't provide are null or empty and explained in unavailable; the call still succeeds. Shape: docs/report.md.

Prompts

Interactive templates invoked by user choice

NameDescription
instagram_checkupReview how the account performed in a period and suggest what to do next.
post_deep_diveExplain how one post performed and what to learn from it.
audience_portraitDescribe who follows and who engages with the account.
benchmark_accountsCompare the account with similar public accounts.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 15 tools

Disambiguation4/5

Descriptions do an unusually good job of cross-referencing sibling tools (e.g. profile vs performance_summary vs report, top_media vs list_media), so most pairs are clearly separable. The main overlaps are get_instagram_report, which aggregates profile/performance/audience/top_media/best-hours into one call, and get_instagram_media_insights vs get_instagram_top_media, which both surface per-post lifetime insights; agents may hesitate between the rollup and its constituent tools.

Naming Consistency5/5

Every tool follows a consistent verb_noun pattern with a uniform instagram_ namespace (get_/list_/query_), and the get vs list distinction maps cleanly onto single-object vs collection. No camelCase or mixed conventions appear.

Tool Count5/5

15 tools sits at the top of the well-scoped range and each one has a distinct analytical role (account, time series, audience, media, stories, comments, tagged, public, report, raw escape hatch, auth). Nothing looks like filler.

Completeness4/5

For a read-only Instagram analytics domain the surface is very thorough: profile, period totals, trends, audience, posts/reels/stories, comments, tagged media, peer benchmarking, a combined report, and a query_instagram_api escape hatch for uncovered GETs. The only gaps are write operations (publishing, comment replies), which appear deliberately out of scope but could be dead ends for users expecting them.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues