Best for
- Use when the user mentions Instagram posts, Reels, Stories, carousels, IG DMs, Instagram comments, mentions, profile, or analytics.
hyperfx-ai/marketing-skills/skills/instagram/SKILL.md
Manage Instagram professional accounts via the Hyper MCP — publish photos, Reels, Stories, and carousels; moderate comments and mentions; send Direct Messages; pull account and media insights. Uses the Instagram API with Instagram Login (Business Login). Use when the user mentions Instagram posts, Reels, Stories, carousels, IG DMs, Instagram comments, mentions, profile, or analytics. For paid Instagram advertising, use `meta-ads`.
Decision brief
Complete skill for managing Instagram professional accounts through the Instagram API with Instagram Login (Business Login). Covers content publishing, messaging, comment moderation, insights, and profile management.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/hyperfx-ai/marketing-skills --skill "skills/instagram"Inspect the Agent Skill "instagram" from https://github.com/hyperfx-ai/marketing-skills/blob/bb080b81e2b633c4d46cd8d38d31f14ad95b478a/skills/instagram/SKILL.md at commit bb080b81e2b633c4d46cd8d38d31f14ad95b478a. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Returns: userid, username, name, accounttype, profilepictureurl, followerscount, followscount, mediacount, biography, website.
1. Create a media container (photo, reel, story, or carousel). 2. Check container status (required for video / reels — poll until FINISHED). 3. Publish the container. 4. Verify by listing recent media.
1. Create a media container (photo, reel, story, or carousel). 2. Check container status (required for video / reels — poll until FINISHED). 3. Publish the container. 4. Verify by listing recent media.
instagramcreatephotocontainer( imageurl="https://example.com/photo1.jpg", iscarouselitem=True, )
instagramcreatecarouselcontainer( children=["", "", ""], caption="Carousel caption", )
Permission review
The documentation includes network, browsing, or remote request actions.
image_url="https://example.com/photo.jpg", # Public JPEG URL, max 8MBThe documentation includes network, browsing, or remote request actions.
video_url="https://example.com/video.mp4", # Public MP4/MOV, max 300MB, 3s-15minEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 77 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Complete skill for managing Instagram professional accounts through the Instagram API with Instagram Login (Business Login). Covers content publishing, messaging, comment moderation, insights, and profile management.
| Request | Send them to |
|---|---|
| Paid Instagram / Facebook ads, boosting a post, Advantage+ | meta-ads |
| Competitor ad research from the Meta Ad Library | meta-ads-library |
| TikTok publishing | tiktok |
| LinkedIn document or carousel posts | linkedin |
If instagram_get_me is not in the tool list, stop and tell the user to enable Hyper MCP and connect Instagram.
| Tool group | Tools |
|---|---|
| Account | instagram_get_me, instagram_get_user (look up any public IG profile by username or ID — useful for researching commenters and DM contacts) |
| Publishing | instagram_create_photo_container, instagram_create_reel_container, instagram_create_carousel_container, instagram_check_container_status, instagram_publish_media, instagram_check_publishing_limit |
| Media library | instagram_list_media, instagram_get_media, instagram_get_album_children, instagram_list_stories, instagram_get_tagged_media |
| Comments | instagram_list_comments, instagram_post_comment, instagram_reply_to_comment, instagram_hide_comment, instagram_delete_comment, instagram_toggle_comments |
| Direct Messages | instagram_list_conversations, instagram_get_conversation_messages, instagram_get_message, instagram_send_message, instagram_send_media_message, instagram_send_post_message, instagram_react_to_message |
| Insights | instagram_get_account_insights, instagram_get_media_insights |
CRITICAL: This toolkit uses the Instagram API with Instagram Login (not the older Instagram Graph API via Facebook Login). Metric names and available fields differ from the older API. Always use the metric names documented in this skill.
CRITICAL: The
engagementmetric does NOT exist in this API. Use individual metrics likelikes,comments,shares,total_interactionsinstead.
CRITICAL: The
impressionsmetric is NOT valid for account-level insights. Usereachorviewsinstead.
CRITICAL: Content publishing uses a two-step container workflow: (1) create a media container, (2) publish it. For video content, poll the container status until
FINISHEDbefore publishing.
CRITICAL: Instagram DM responses must be sent within 24 hours of the user's last message (standard messaging window). The Human Agent tag extends this to 7 days if approved.
IMPORTANT: Publishing rate limit is 100 API-published posts per 24-hour rolling window. Carousels count as 1 post. Always call
instagram_check_publishing_limitbefore bulk publishing.
CRITICAL: Do NOT use the
location_idparameter on photo, reel, or carousel containers unless the user explicitly provides a verified Facebook Page ID. This integration uses Instagram Business Login which cannot look up or validate location IDs. Passing an invalid or guessed ID will cause a 400 error (Param location_id is not a valid location page ID). If a user asks for location tagging, explain that they need to provide their Facebook Page ID with location data.
CRITICAL: When passing media URLs (
image_url,video_url,cover_url,media_url) to any Instagram tool, use the URL exactly as returned by the source tool — most commonly theurlfield fromread_fileordisplay_file. Do NOT:
- Reconstruct or shorten the URL.
- Drop, change, or invent any query parameters (signatures, timestamps, etc.).
- Substitute a different host.
- Copy a URL from memory or transcribe it character-by-character — call
read_fileagain instead.Hyper-hosted CDN URLs are automatically resized and re-signed for Meta when needed, so just hand them through verbatim. A single-character corruption in a presigned signature causes Meta to return a misleading
9004 / 2207052: Only photo or video can be accepted as media typeerror.
IMPORTANT: Most tools act on the authenticated account automatically — you do NOT need to pass a
user_id. The toolkit resolves it from the access token internally. Only callinstagram_get_mewhen you actually need profile details (username, follower counts, etc.) to display to the user. Useinstagram_get_user(user_id=...)only when looking up a different account.
instagram_get_me()
Returns: user_id, username, name, account_type, profile_picture_url, followers_count, follows_count, media_count, biography, website.
You do not need to thread the user_id into other tool calls — they resolve it automatically.
FINISHED).instagram_create_photo_container(
image_url="https://example.com/photo.jpg", # Public JPEG URL, max 8MB
caption="Your caption here #hashtag",
alt_text="Accessibility description",
)
# Returns container ID
instagram_publish_media(
creation_id="<container_id>",
)
instagram_create_reel_container(
video_url="https://example.com/video.mp4", # Public MP4/MOV, max 300MB, 3s-15min
caption="Reel caption #reels",
cover_url="https://example.com/cover.jpg", # Optional cover image
share_to_feed=True,
)
# MUST poll status for video content
instagram_check_container_status(container_id="<container_id>")
# Wait until status_code == "FINISHED", poll once per minute, max 5 minutes
instagram_publish_media(creation_id="<container_id>")
Note: Story publishing is not yet supported by this MCP integration. To read currently active stories use:
instagram_list_stories()If the user asks to post a story, inform them this capability is not yet available and suggest posting a Reel with
share_to_feed=Trueas an alternative.
# Step 1: create child containers (each with is_carousel_item=True for photos)
instagram_create_photo_container(
image_url="https://example.com/photo1.jpg",
is_carousel_item=True,
)
# Repeat for each image / video
# Step 2: create the carousel container with child IDs
instagram_create_carousel_container(
children=["<child_id_1>", "<child_id_2>", "<child_id_3>"],
caption="Carousel caption",
)
# Step 3: publish
instagram_publish_media(creation_id="<carousel_container_id>")
| Type | Format | Max size | Duration |
|---|---|---|---|
| Photo | JPEG | 8MB | — |
| Reel | MP4 / MOV | 300MB | 3s – 15min |
| Story image | JPEG | 8MB | — |
| Story video | MP4 / MOV | 100MB | 3s – 60s |
| Caption | Text | 2200 chars | 30 hashtags, 20 @tags |
| Carousel | Mixed | 2 – 10 items | — |
instagram_list_comments(media_id="<media_id>")
instagram_post_comment(media_id="<media_id>", message="Great post!")
instagram_reply_to_comment(comment_id="<comment_id>", message="Thanks!")
# Hide spam / inappropriate comments
instagram_hide_comment(comment_id="<comment_id>", hide=True)
# Delete a comment (only the media owner can delete)
instagram_delete_comment(comment_id="<comment_id>")
# Toggle comments on / off for a post
instagram_toggle_comments(media_id="<media_id>", comment_enabled=False)
Note: Mention-specific tools (
instagram_reply_to_mention,instagram_get_mentioned_media,instagram_get_mentioned_comment) are not yet available in this MCP integration. Mentions appear as comments on your media — respond to them usinginstagram_reply_to_commentwith the comment ID frominstagram_list_comments.
instagram_list_conversations()
# Get message IDs from a conversation
instagram_get_conversation_messages(conversation_id="<conversation_id>")
# Get full message details (only 20 most recent are queryable)
instagram_get_message(message_id="<message_id>")
# Text message
instagram_send_message(
recipient_id="<recipient_igsid>", # From the message's 'from' field
text="Thanks for reaching out!",
)
# Media attachment (image, video, audio, PDF)
instagram_send_media_message(
recipient_id="<recipient_igsid>",
media_type="image", # image, video, audio, or file
media_url="https://example.com/photo.jpg",
)
# Share a published post via DM
instagram_send_post_message(
recipient_id="<recipient_igsid>",
post_id="<media_id>", # Must be your own post
)
# React to a message
instagram_react_to_message(
recipient_id="<recipient_igsid>",
message_id="<message_id>",
reaction="love",
)
instagram_get_account_insights(
metric=["reach", "profile_views", "follower_count", "accounts_engaged", "total_interactions"],
period="week",
)
Note: Some metrics (
profile_views,total_interactions, demographic metrics) requireinstagram_business_manage_insightspermission and a Business account — they will be silently omitted for Creator accounts. If a metric is missing from the response, check the account type returned byinstagram_get_me.
Valid account metrics:
| Metric | Description |
|---|---|
reach | Unique accounts that saw any content. |
follower_count | Total followers (lifetime period only). |
website_clicks | Clicks on the website link in the profile. |
profile_views | Profile page views. |
online_followers | Followers online at a given time. |
accounts_engaged | Unique accounts that interacted. |
total_interactions | Total likes, comments, shares, saves, replies. |
likes | Total likes across all content. |
comments | Total comments across all content. |
shares | Total shares across all content. |
saves | Total saves across all content. |
replies | Total replies (stories / messages). |
follows_and_unfollows | Net follower changes. |
profile_links_taps | Taps on profile links. |
views | Total content views. |
engaged_audience_demographics | Demographics of the engaged audience. |
reached_audience_demographics | Demographics of the reached audience. |
follower_demographics | Demographics of followers. |
Invalid account metrics: impressions, email_contacts, phone_call_clicks, text_message_clicks, get_directions_clicks.
instagram_get_media_insights(
media_id="<media_id>",
metric=["reach", "likes", "comments", "saved", "shares", "total_interactions"],
)
reach, saved, likes, comments, shares, total_interactions, views.ig_reels_avg_watch_time, ig_reels_video_view_total_time, clips_replays_count, ig_reels_aggregated_all_plays_count.reach, replies, follows, navigation, profile_visits, profile_activity, views.Tip: When unsure if media is a Reel, just use the common metrics. Reel-only metrics sent to non-Reel media will be auto-stripped by the server.
Invalid media metrics: engagement, impressions, plays, saves — for media use saved (not saves; saves is account-level only).
| Period | Description |
|---|---|
day | Daily breakdown. |
week | Weekly breakdown. |
days_28 | 28-day breakdown. |
month | Monthly breakdown. |
lifetime | All time (required for follower_count). |
# List recent posts (up to 10K)
instagram_list_media(limit=25)
# Get details of a specific post
instagram_get_media(media_id="<media_id>")
# Get carousel children
instagram_get_album_children(media_id="<carousel_media_id>")
# List active stories (24h window)
instagram_list_stories()
# Get tagged media
instagram_get_tagged_media()
Frequently asked questions
Complete skill for managing Instagram professional accounts through the Instagram API with Instagram Login (Business Login). Covers content publishing, messaging, comment moderation, insights, and profile management.
The source record exposes this install command: npx skills add https://github.com/hyperfx-ai/marketing-skills --skill "skills/instagram". Inspect the command and pinned source before running it.
Static rules flagged network in the source; the page lists the matching lines and excerpts.
Alternatives
NVIDIA/skills
Use this skill when the user wants to deploy, run, debug, tear down, or call the REST API of the RTVI-CV 2D detection / tracking microservice. Trigger when the user says things like 'deploy rtvi-cv', 'start warehouse 2d', 'add a stream', 'check rtvi-cv health', or 'stop the perception container'. Not for VLM, embedding, or analytics — use the matching vss-* skill.
UiPath/skills
UiPath Coded Apps — scaffold, build, run, and deploy Coded Web Apps and Coded Action Apps: React/TypeScript apps that call UiPath Cloud APIs via the `@uipath/uipath-typescript` SDK and ship to Automation Cloud (push/pull to Studio Web, pack, publish, deploy, OAuth-PKCE). Also generates live analytics & governance dashboards from a plain-language request, wired to tenant data via the Insights real-time API, with edit and deploy flows. For RPA→uipath-rpa, Python agents→uipath-agents, Maestro flows
NVIDIA/skills
Deploy and operate the RTVI-CV-3D microservice as MV3DT (`MODE=mv3dt`): per-camera DeepStream perception plus BEV Fusion over calibrated cameras. Supports the bundled sample dataset, custom video files, and RTSP streams, and chains to `vss-generate-video-calibration` when calibration is missing. Use `vss-deploy-profile` for the full warehouse blueprint and `vss-deploy-detection-tracking-2d` for single-camera 2D detection.
kychee-com/run402
Provision Postgres + REST API + auth + content-addressed storage + serverless functions + email — paid with x402 USDC on Base. Prototype tier is free on testnet. Use when the user asks to build a webapp, deploy a site, create a database, generate images, or mentions Run402.