English | 한국어
meta-mcp
Full-coverage MCP server for Instagram Graph API (v26.0), Threads API, and Meta platform management.
When to Use
Tell your AI assistant things like:
- "Post a photo to Instagram" — publish photos, videos, reels, stories, and carousels
- "Publish a text post on Threads" — text posts with polls, GIFs, link attachments, and topic tags
- "Get my Instagram follower count and insights" — account and post-level analytics
- "Schedule a carousel post" — multi-image albums on Instagram (2-10) or Threads (2-20)
- "Reply to comments on my latest post" — read and respond to comments on both platforms
- "Cross-post to Instagram and Threads" — use the built-in
content_publishprompt - "Get analytics for my Threads account" — views, likes, replies, reposts, quotes, clicks
- "Manage Instagram DMs" — list conversations, read messages, send replies
AI Agent Integration: See
llms.txtfor a machine-readable summary, or copytemplates/CLAUDE.md/templates/AGENTS.mdinto your project for automatic MCP discovery.
Features
- 66 tools across Instagram (33), Threads (27), and Meta platform (6)
- Instagram: Publish photos/videos/reels/stories/carousels with alt text, manage comments, view insights, search hashtags, handle DMs, manage collaboration invites
- Threads: Publish text/images/videos/carousels with polls, GIFs, topic tags, link attachments, alt text, spoiler flags, ghost posts, reply approvals, location tags, and Instagram Stories cross-sharing; manage replies and pending reply approvals; search posts and locations; profile/mentions discovery; oEmbed; view insights; delete posts
- Meta: Token exchange/refresh/debug, webhook management
- 2 resources: Instagram profile, Threads profile
- 2 prompts: Cross-platform content publishing, analytics report
- Rate limit tracking via
x-app-usageheader
What's New in v2.2.1
- Photos, image Stories, and every carousel child and parent now wait for container processing before publication. Processing errors stop the publish request.
- Mentioned comments use the Instagram user field expansion with documented default fields.
What's New in v2.2.0
- Fixed Instagram business discovery and collaboration invite requests. Use
media_idandacceptfor invites;invite_idandactionremain supported aliases. - Account insights support
metric_type,breakdown, and demographictimeframe. Metrics such asviewsselecttotal_valueautomatically. - Standalone videos now publish as Reels shared to the feed. Photo, Reel, and carousel publishing support AI info and paid-partnership labels; Reels also support
trial_params. - Public Threads oEmbed works without a token. Includes the token refresh, Instagram Messaging, publishing, and reply handling fixes since v2.1.1.
What's New in v2.1.0
- Graph API v26.0: Upgraded from v25.0 (no deprecated fields/endpoints from the v26.0 changelog were in use)
- Tenor removed: GIPHY is now the only GIF provider (Tenor was sunset March 31, 2026);
gif_providerparam dropped - Threads Ghost Posts:
is_ghost_postonthreads_publish_text(auto-archived after 24h) - Threads Reply Approvals:
enable_reply_approvalson publish tools, plusthreads_get_pending_repliesandthreads_manage_pending_reply - Threads → Instagram Stories cross-share:
crossreshare_to_ig/crossreshare_to_ig_dark_modeon all publish tools - Threads Location Tagging:
location_idon publish tools, plusthreads_search_locationsandthreads_get_location - Threads Profile Discovery:
threads_lookup_profileandthreads_get_profile_postsfor public profiles - Threads Mentions:
threads_get_mentions - Threads oEmbed:
threads_get_oembedfor embedding public posts - Threads Conversations:
threads_get_conversationfor flattened (nested) reply threads - Fixed
threads_search_posts: now calls the correct/keyword_searchendpoint with the correctsearch_mode/search_typeparameters (previous version targeted a non-existent endpoint) - Post/reply fields expanded with
is_verified,profile_picture_url,location_id,root_post,replied_to,reply_audience
What's New in v2.0.0
- Graph API v25.0: Upgraded from v21.0 (expired Sep 2025) to v25.0 (current)
- Fixed deprecated metrics:
impressions,video_views,engagementreplaced withviews,reach,saved,shares - Threads polls: Create posts with interactive poll attachments
- Threads GIFs: Attach GIFs from GIPHY or Tenor
- Threads topic tags: Categorize posts with topic tags
- Threads link attachments: Attach URL preview cards to text posts
- Threads post search: Search public posts by keyword or topic tag
- Threads post deletion: Delete posts (rate limited to 100/day)
- Threads publishing limit: Check remaining quota
- Threads quote posts: Quote other posts by ID
- Threads spoiler flag: Mark content as spoiler
- Threads alt text: Add accessibility descriptions to all media types
- Threads new reply controls:
parent_post_author_onlyandfollowers_onlyoptions - Instagram alt text: Support for photo, reel, and carousel items
- Instagram collaboration invites: Query and respond to collab invites
- Updated insights metrics: New
clicks,reposts,reels_skip_ratemetrics
Account Requirements
Installation
Requires Node.js 20 or later, including the MCP host's npx environment.
npx (Recommended)
{
"mcpServers": {
"meta": {
"command": "npx",
"args": ["-y", "@mikusnuz/meta-mcp"],
"env": {
"INSTAGRAM_ACCESS_TOKEN": "your_ig_token",
"INSTAGRAM_USER_ID": "your_ig_user_id",
"INSTAGRAM_MESSAGING_ACCESS_TOKEN": "your_page_access_token",
"INSTAGRAM_PAGE_ID": "your_linked_page_id",
"THREADS_ACCESS_TOKEN": "your_threads_token",
"THREADS_USER_ID": "your_threads_user_id"
}
}
}
}
Manual
git clone https://github.com/mikusnuz/meta-mcp.git
cd meta-mcp
npm install
npm run build
{
"mcpServers": {
"meta": {
"command": "node",
"args": ["/path/to/meta-mcp/dist/index.js"],
"env": {
"INSTAGRAM_ACCESS_TOKEN": "your_ig_token",
"INSTAGRAM_USER_ID": "your_ig_user_id",
"INSTAGRAM_MESSAGING_ACCESS_TOKEN": "your_page_access_token",
"INSTAGRAM_PAGE_ID": "your_linked_page_id",
"THREADS_ACCESS_TOKEN": "your_threads_token",
"THREADS_USER_ID": "your_threads_user_id"
}
}
}
}
Environment Variables
You only need to set the variables for the platforms you use. For example, if you only use Threads, just set THREADS_ACCESS_TOKEN and THREADS_USER_ID.
Tools
Meta Platform (6)
Instagram — Publishing (6)
Instagram — Media (5)
Instagram — Comments (7)
Instagram — Profile & Insights (5)
Instagram — Hashtags (4)
Instagram — Mentions & Tags (2)
Instagram — Messaging (4)
Threads — Publishing (7)
Threads — Media & Search (4)
Threads — Replies (7)
Threads — Profile & Discovery (3)
Threads — Mentions (1)
Threads — Locations (2)
Threads — Tools & Resources (1)
Threads — Insights (2)
Resources
Prompts
Setup Guide
Step 1: Create a Meta Developer App
All platforms (Instagram, Threads) require a Meta Developer App.
- Go to developers.facebook.com and log in
- Click "My Apps" → "Create App"
- Select "Other" → "Business" (or "None" for personal use)
- Enter an app name and create
Your META_APP_ID and META_APP_SECRET are in App Settings → Basic.
Step 2: Instagram Setup
Requires an Instagram Business or Creator account. Switch for free in Instagram app → Settings → Account type.
- In your Meta App, go to "Add Products" → add "Instagram Graph API"
- Go to "Instagram Graph API" → "Settings" and connect your Instagram Business account via a Facebook Page
- Open the Graph API Explorer
- Select your app
- Add permissions:
instagram_basic,instagram_content_publish,instagram_manage_comments,instagram_manage_insights,instagram_manage_contents,instagram_manage_messages,pages_show_list,pages_read_engagement,pages_manage_metadata - Click "Generate Access Token" and authorize
- The generated token is short-lived (~1 hour). Exchange it for a long-lived token (~60 days):
Or use theGET https://graph.facebook.com/v26.0/oauth/access_token ?grant_type=fb_exchange_token &client_id=YOUR_APP_ID &client_secret=YOUR_APP_SECRET &fb_exchange_token=SHORT_LIVED_TOKENmeta_exchange_tokentool after setup. - Get your Instagram User ID — call this with your token:
This returns your Facebook Pages. For each page, get the linked Instagram account:GET https://graph.facebook.com/v26.0/me/accounts?fields=id,name,access_token&access_token=YOUR_TOKEN
TheGET https://graph.facebook.com/v26.0/{page-id}?fields=instagram_business_account&access_token=YOUR_TOKENinstagram_business_account.idis yourINSTAGRAM_USER_ID(a numeric ID like17841400123456789). For the DM tools, the matching Page'sidisINSTAGRAM_PAGE_IDand itsaccess_tokenisINSTAGRAM_MESSAGING_ACCESS_TOKEN. Do not use the IG User ID or the user token in their place.
Step 3: Threads Setup
Works with any Threads account (personal or business). Instagram account link is no longer required since September 2025.
- In your Meta App, go to "Add Products" → add "Threads API"
- Go to "Threads API" → "Settings":
- Add your Threads account as a Threads Tester under "Roles"
- Accept the invitation in the Threads app: Settings → Account → Website permissions → Invites
- Generate an authorization URL:
https://threads.net/oauth/authorize ?client_id=YOUR_APP_ID &redirect_uri=YOUR_REDIRECT_URI &scope=threads_basic,threads_content_publish,threads_manage_insights,threads_manage_replies,threads_read_replies,threads_keyword_search,threads_manage_mentions,threads_delete,threads_location_tagging,threads_profile_discovery &response_type=code- For local testing, use
https://localhost/as redirect URI (configure in App Settings → Threads API → Redirect URIs)
- For local testing, use
- After authorization, exchange the code for an access token:
POST https://graph.threads.net/oauth/access_token Content-Type: application/x-www-form-urlencoded client_id=YOUR_APP_ID &client_secret=YOUR_APP_SECRET &grant_type=authorization_code &redirect_uri=YOUR_REDIRECT_URI &code=AUTHORIZATION_CODE - Exchange for a long-lived token (~60 days):
GET https://graph.threads.net/access_token ?grant_type=th_exchange_token &client_secret=YOUR_APP_SECRET &access_token=SHORT_LIVED_TOKEN - Get your Threads User ID — call this with your token:
TheGET https://graph.threads.net/v1.0/me?fields=id,username&access_token=YOUR_TOKENidfield is yourTHREADS_USER_ID(a numeric ID like1234567890).
Step 4: Configure Environment Variables
Set only the variables for the platforms you use:
# Instagram (requires Business/Creator account)
INSTAGRAM_ACCESS_TOKEN=EAAxxxxxxx... # Long-lived token from Step 2
INSTAGRAM_USER_ID=17841400123456789 # Numeric ID from Step 2.5
INSTAGRAM_MESSAGING_ACCESS_TOKEN=EAA... # Page token from Step 2.5 (DM tools only)
INSTAGRAM_PAGE_ID=123456789012345 # Linked Facebook Page ID (DM tools only)
# Threads (any account)
THREADS_ACCESS_TOKEN=THQWxxxxxxx... # Long-lived token from Step 3
THREADS_USER_ID=1234567890 # Numeric ID from Step 3.6
# Meta App (for token management & webhooks)
META_APP_ID=123456789012345 # From App Settings → Basic
META_APP_SECRET=abcdef0123456789abcdef # From App Settings → Basic
Token Renewal
Access tokens expire after ~60 days. Refresh before expiration:
- Instagram: Use
meta_refresh_tokenwithplatform=instagram(requiresMETA_APP_IDandMETA_APP_SECRET) - Threads: Use
meta_refresh_tokenwithplatform=threadsor call:GET https://graph.threads.net/refresh_access_token ?grant_type=th_refresh_token &access_token=CURRENT_LONG_LIVED_TOKEN
You can check token status anytime with meta_debug_token.
Deprecated Metrics (v22.0+)
The following Instagram metrics were deprecated in Graph API v22.0 (January 2025) and removed for all versions on April 21, 2025:
License
MIT