Skill107 starsChanged 5 months agoMITView on GitHub
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`.
We split this skill into the rules it gives an agent
3 rules. 0 are common, 1 is distinctive, and 2 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 29
If instagram_current_user_get is not found, the integration to connect is Instagram.
- Distinctive: line 33
Every tool in this skill is named by its canonical tool name.
- Very specific: line 41
If a tool is not found: in Hyper chat, find its toolkit id with discover_toolkits and pass it to enable_toolkit.
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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.
Out of scope — defer to other skills
| 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 |
Requirements
- Hyper MCP installed and connected. https://app.hyperfx.ai/mcp
- Instagram integration connected at https://app.hyperfx.ai/apps — this skill uses the Instagram API with Instagram Login (NOT the older Instagram Graph API via Facebook Login).
- For organization posts to a company page, the connected account must have permission to post for that organization.
If instagram_current_user_get is not found, the integration to connect is Instagram.
How to run the tools in this skill
Every tool in this skill is named by its canonical tool name. Run it with the call your surface gives you:
| Surface | Find a tool | Run it |
| Hyper chat | Call the tool by its name; search_tools(queries=["<provider> <action>"]) shows its parameters | <name>(...) |
| MCP client (Claude, Cursor, Codex, ChatGPT) | search("<what you want to do>"), then describe("<name>") | call_read("<name>", {...}), call_write or call_destructive: the one that describe names in call_with |
| Hyper CLI | hyperai search "<what you want to do>", then hyperai describe <name> | hyperai call <name> --json '{...}' |
If a tool is not found: in Hyper chat, find its toolkit id with discover_toolkits and pass it to enable_toolkit. On an MCP client or the CLI, tell the user which integration to connect in Hyper.
Tool surface
| Tool group | Tools |
| Account | instagram_current_user_get, instagram_users_get (look up any public IG profile by username or ID — useful for researching commenters and DM contacts) |
| Publishing | instagram_photo_containers_create, instagram_reel_containers_create, instagram_carousel_containers_create, instagram_container_status_check, instagram_media_publish, instagram_publishing_limits_check |
| Media library | instagram_media_list, instagram_media_get, instagram_album_children_get, instagram_stories_list, instagram_tagged_media_get |
| Comments | instagram_comments_list, instagram_comments_send, instagram_comments_reply, instagram_comments_hide, instagram_comments_delete, instagram_comments_toggle |
| Direct Messages | instagram_conversations_list, instagram_conversation_messages_get, instagram_messages_get, instagram_messages_send, instagram_media_messages_send, instagram_post_messages_send, instagram_messages_react |
| Insights | instagram_account_insights_get, instagram_media_insights_get |
Critical Rules
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_publishing_limits_checkbefore 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_current_user_getwhen you actually need profile details (username, follower counts, etc.) to display to the user. Useinstagram_users_get(user_id=...)only when looking up a different account.
Phase 1: Account Lookup (optional)
Get the connected account's profile
instagram_current_user_get()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.
Phase 2: Content Publishing
Publishing workflow
- Create a media container (photo, reel, story, or carousel).
- Check container status (required for video / reels — poll until
FINISHED). - Publish the container.
- Verify by listing recent media.
Single photo post
instagram_photo_containers_create(
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_media_publish(
creation_id="<container_id>",
)Reel (short-form video)
instagram_reel_containers_create(
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_container_status_check(container_id="<container_id>")
# Wait until status_code == "FINISHED", poll once per minute, max 5 minutes
instagram_media_publish(creation_id="<container_id>")Story (24-hour expiry)
Note: Story publishing is not yet supported by this MCP integration. To read currently active stories use:
instagram_stories_list()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.
Carousel (2-10 items)
# Step 1: create child containers (each with is_carousel_item=True for photos)
instagram_photo_containers_create(
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_carousel_containers_create(
children=["<child_id_1>", "<child_id_2>", "<child_id_3>"],
caption="Carousel caption",
)
# Step 3: publish
instagram_media_publish(creation_id="<carousel_container_id>")Content limits
| 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 | — |
Phase 3: Comment Moderation
Read comments
instagram_comments_list(media_id="<media_id>")Post a comment
instagram_comments_send(media_id="<media_id>", message="Great post!")Reply to a comment
instagram_comments_reply(comment_id="<comment_id>", message="Thanks!")Moderate comments
# Hide spam / inappropriate comments
instagram_comments_hide(comment_id="<comment_id>", hide=True)
# Delete a comment (only the media owner can delete)
instagram_comments_delete(comment_id="<comment_id>")
# Toggle comments on / off for a post
instagram_comments_toggle(media_id="<media_id>", comment_enabled=False)Respond to mentions
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_comments_replywith the comment ID frominstagram_comments_list.
Phase 4: Direct Messages (CRM)
List conversations
instagram_conversations_list()Read messages
# Get message IDs from a conversation
instagram_conversation_messages_get(conversation_id="<conversation_id>")
# Get full message details (only 20 most recent are queryable)
instagram_messages_get(message_id="<message_id>")Send messages
# Text message
instagram_messages_send(
recipient_id="<recipient_igsid>", # From the message's 'from' field
text="Thanks for reaching out!",
)
# Media attachment (image, video, audio, PDF)
instagram_media_messages_send(
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_post_messages_send(
recipient_id="<recipient_igsid>",
post_id="<media_id>", # Must be your own post
)
# React to a message
instagram_messages_react(
recipient_id="<recipient_igsid>",
message_id="<message_id>",
reaction="love",
)Messaging constraints
- The recipient must have initiated the conversation first.
- 24-hour response window from the user's last message (7 days with the Human Agent tag).
- Text messages: UTF-8, max 1000 bytes.
- Media limits: images (PNG / JPEG, 8MB), videos (MP4 / OGG, 25MB), audio (AAC / WAV, 25MB), files (PDF, 25MB).
Phase 5: Analytics & Insights
Account-level insights
instagram_account_insights_get(
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_current_user_get.
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.
Media-level insights
instagram_media_insights_get(
media_id="<media_id>",
metric=["reach", "likes", "comments", "saved", "shares", "total_interactions"],
)- Common metrics (all non-Story media):
reach,saved,likes,comments,shares,total_interactions,views. - Reel-only extras (auto-stripped for non-Reels):
ig_reels_avg_watch_time,ig_reels_video_view_total_time,clips_replays_count,ig_reels_aggregated_all_plays_count. - Story-only metrics:
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 values
| Period | Description |
day | Daily breakdown. |
week | Weekly breakdown. |
days_28 | 28-day breakdown. |
month | Monthly breakdown. |
lifetime | All time (required for follower_count). |
Phase 6: Media & Story Management
Browse media library
# List recent posts (up to 10K)
instagram_media_list(limit=25)
# Get details of a specific post
instagram_media_get(media_id="<media_id>")
# Get carousel children
instagram_album_children_get(media_id="<carousel_media_id>")
# List active stories (24h window)
instagram_stories_list()
# Get tagged media
instagram_tagged_media_get()Other versions15 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 15
- brightdata/skills★ 270same name
- refly-ai/refly-skills★ 203same name
- obra/muse-skills★ 20same name
- AceDataCloud/Skills★ 17same name
- moboutrig/instagram-claude-skill★ 10same name
- abhayla/claude-best-practices★ 9same name
- mediause/agent-skills★ 9same name
- geegewu/gegeewu-open-skill★ 8same name
- jacobwell/muse-skills★ 8same name
- TikHub/tikhub-plugin★ 7same name
5 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use apple_healthkit, device_data and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
jacobwellSkillapple_healthkit
The user's synced Apple Health (HealthKit) data: daily metrics (steps, distance, calories, heart rate, HRV, VO2max), sleep sessions (stages, quality, efficiency), and workouts.
Also in 3 projects that use this
jacobwellSkilldevice_data
Read cached contacts and calendar events from Muse storage. Delete Muse's local copy of either source without modifying paired devices.
Also in 3 projects that use this
- +10 more from jacobwell
In this repository31 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- ad-creative-generationSkill
- amazon-adsSkill
- analytics-insightsSkill
- blog-generationSkill
- brand-contextSkill
- cold-email-outreachSkill
- competitor-intelSkill
- customer-researchSkill
- email-lifecycleSkill
- gmailSkill
- google-adsSkill
- google-sheetsSkill
- hyper-cliSkill
- image-generationSkill
- linkedinSkill
- meta-ads-librarySkill
- meta-adsSkill
- openai-adsSkill
- pinterest-adsSkill
- reddit-adsSkill
- redditSkill
- seo-researchSkill
- slackSkill
- snapchat-adsSkill
- tiktok-adsSkill
- tiktokSkill
- twilioSkill
- video-generationSkill
- youtubeSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

