instagram-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IG_USER_ID | No | Professional account id (defaults to from GET /me) | |
| IG_API_VERSION | No | Graph API version (default v25.0) | |
| IG_ACCESS_TOKEN | Yes | Long-lived Instagram User access token | |
| IG_ENABLE_WRITES | No | Allow publishing, comment moderation and sending DMs (default false) | |
| IG_TOKEN_CACHE_PATH | No | JSON file for refreshed tokens (takes precedence over IG_ACCESS_TOKEN once written) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ig_token_statusA | Checks the configured access token: which account it belongs to, where it comes from (env or refreshed cache), and its expiry when known. Also reports whether write actions are enabled. |
| ig_refresh_tokenA | Refreshes the long-lived access token for another 60 days (the token must be at least 24 hours old and not expired). The new token is saved to IG_TOKEN_CACHE_PATH; without it the new token only lives until the server restarts. |
| ig_get_profileA | Profile of the connected professional account: username, name, bio, followers, follows and media counts. |
| ig_list_mediaA | Posts and reels of the connected account, newest first, with likes and comment counts. Pass next_cursor back as |
| ig_get_mediaC | One post, reel or story by media id, including carousel children. |
| ig_list_storiesA | Currently live stories of the connected account (stories disappear from the API after 24 hours). |
| ig_list_tagged_mediaC | Media from other accounts in which the connected account has been tagged. |
| ig_account_insightsA | Account-level metrics (views, reach, engagement, followers, demographics). Instagram keeps about 90 days of data; some metrics need 100+ followers. Metrics without data come back empty, not as 0. Demographic metrics (follower_demographics, engaged_audience_demographics) need period=lifetime, metric_type=total_value, a timeframe and a breakdown (age, city, country, gender). |
| ig_media_insightsA | Metrics for one post, reel or story. Without |
| ig_list_commentsB | Top-level comments on one of the account's posts or reels, with author, likes and hidden flag. |
| ig_list_repliesC | Replies to a comment on the account's media. |
| ig_reply_commentB | Posts a public reply to a comment. Requires IG_ENABLE_WRITES=true. |
| ig_comment_on_mediaA | Adds a top-level comment to one of the account's posts or reels. Requires IG_ENABLE_WRITES=true. |
| ig_hide_commentA | Hides a comment from the public (or shows it again with hide=false). Requires IG_ENABLE_WRITES=true. |
| ig_delete_commentB | Permanently deletes a comment on the account's media. Cannot be undone. Requires IG_ENABLE_WRITES=true. |
| ig_set_comments_enabledA | Turns comments on or off for one of the account's posts. Requires IG_ENABLE_WRITES=true. |
| ig_publish_imageA | Publishes a single-image feed post from a public JPEG URL. Requires IG_ENABLE_WRITES=true. |
| ig_publish_reelA | Publishes a reel from a public video URL. Video processing can take minutes: if it is not ready within wait_seconds, a pending container_id is returned for ig_publish_container. Requires IG_ENABLE_WRITES=true. |
| ig_publish_storyA | Publishes a story from a public image (JPEG) or video URL. Captions are not supported on stories. Requires IG_ENABLE_WRITES=true. |
| ig_publish_carouselA | Publishes a carousel of 2–10 images and/or videos (counts as one post against the daily limit). If some videos are still processing, returns pending child container_ids: call again with those as items. Requires IG_ENABLE_WRITES=true. |
| ig_get_container_statusB | Processing status of a media container: IN_PROGRESS, FINISHED, PUBLISHED, ERROR or EXPIRED. |
| ig_publish_containerA | Finishes publishing a container returned as pending by an ig_publish_* tool. Requires IG_ENABLE_WRITES=true. |
| ig_publishing_limitA | How many posts the account has published via the API in the last 24 hours (limit: 100; a carousel counts as one). |
| ig_list_conversationsB | Direct-message conversations of the account, most recently updated first. With user_id (an Instagram-scoped id) returns only the conversation with that person. Request-folder threads inactive for 30 days are not returned. |
| ig_get_messagesA | Messages of one conversation with sender, recipient and text. Instagram only returns the 20 most recent messages. |
| ig_send_messageA | Sends a DM with text or one image. Instagram only allows it within 24 hours of the person's last message. recipient_comment_id sends a private reply to a commenter instead (one per comment). Requires IG_ENABLE_WRITES=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Each tool targets a distinctly bounded action: media publishing is split cleanly by type (image/reel/story/carousel), comment operations are separated (list, reply, top-level comment, hide, delete, toggle), and container/status tools are clearly delineated from the publish tools. The only mildly adjacent pair (ig_reply_comment vs ig_comment_on_media) is explicitly distinguished in the descriptions.
Every tool uses the ig_ prefix followed by a consistent verb_noun pattern (ig_list_comments, ig_get_profile, ig_publish_reel, ig_delete_comment). No camelCase or stylistic deviations appear across the full set of 26 tools.
26 tools is on the heavy side and slightly exceeds the comfortable range, but the domain is genuinely broad (posts, reels, stories, carousels, comments, insights, DMs, token lifecycle), so nearly every tool earns its place. There is little obvious redundancy to trim.
The surface covers full lifecycle for the main resources: publishing, retrieval, listing, insights, comment moderation, DM read/send, and token management. Minor gaps exist (e.g., no media deletion or edit, which the Instagram API largely disallows anyway), but core workflows have no dead ends.