Are you the author? Sign in to claim
MCP server for Instagram Graph API, Threads API & Meta platform — 57 tools with Graph API v25.0
English | 한국어
Full-coverage MCP server for Instagram Graph API (v25.0), Threads API, and Meta platform management.
Tell your AI assistant things like:
content_publish promptAI Agent Integration: See
llms.txtfor a machine-readable summary, or copytemplates/CLAUDE.md/templates/AGENTS.mdinto your project for automatic MCP discovery.
x-app-usage headerimpressions, video_views, engagement replaced with views, reach, saved, sharesparent_post_author_only and followers_only optionsclicks, reposts, reels_skip_rate metrics| Platform | Account Type | Notes |
|---|---|---|
| Business or Creator account | Personal accounts cannot use the Graph API. Free to switch in Instagram settings | |
| Threads | Any account | All Threads accounts can use the API (Instagram account link no longer required since Sep 2025) |
| Meta (token/webhook tools) | Meta Developer App | Create at developers.facebook.com |
{
"mcpServers": {
"meta": {
"command": "npx",
"args": ["-y", "@mikusnuz/meta-mcp"],
"env": {
"INSTAGRAM_ACCESS_TOKEN": "your_ig_token",
"INSTAGRAM_USER_ID": "your_ig_user_id",
"THREADS_ACCESS_TOKEN": "your_threads_token",
"THREADS_USER_ID": "your_threads_user_id"
}
}
}
}
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",
"THREADS_ACCESS_TOKEN": "your_threads_token",
"THREADS_USER_ID": "your_threads_user_id"
}
}
}
}
| Variable | Required | Description |
|---|---|---|
INSTAGRAM_ACCESS_TOKEN | For Instagram | Instagram Graph API access token |
INSTAGRAM_USER_ID | For Instagram | Instagram Business/Creator account ID |
THREADS_ACCESS_TOKEN | For Threads | Threads API access token |
THREADS_USER_ID | For Threads | Threads user ID |
META_APP_ID | For token/webhook tools | Meta App ID |
META_APP_SECRET | For token/webhook tools | Meta App Secret |
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.
| Tool | Description |
|---|---|
meta_exchange_token | Exchange short-lived token for long-lived token (~60 days) |
meta_refresh_token | Refresh a long-lived token before expiration |
meta_debug_token | Inspect token validity, expiration, and scopes |
meta_get_app_info | Get Meta App information |
meta_subscribe_webhook | Subscribe to webhook notifications |
meta_get_webhook_subscriptions | List current webhook subscriptions |
| Tool | Description |
|---|---|
ig_publish_photo | Publish a photo post (supports alt_text) |
ig_publish_video | Publish a video post |
ig_publish_carousel | Publish a carousel/album (2-10 items, supports alt_text per item) |
ig_publish_reel | Publish a Reel (supports alt_text) |
ig_publish_story | Publish a Story (24hr) |
ig_get_container_status | Check media container processing status |
| Tool | Description |
|---|---|
ig_get_media_list | List published media |
ig_get_media | Get media details |
ig_delete_media | Delete a media post |
ig_get_media_insights | Get media analytics (views, reach, saved, shares) |
ig_toggle_comments | Enable/disable comments on a post |
| Tool | Description |
|---|---|
ig_get_comments | Get comments on a post |
ig_get_comment | Get comment details |
ig_post_comment | Post a comment |
ig_get_replies | Get replies to a comment |
ig_reply_to_comment | Reply to a comment |
ig_hide_comment | Hide/unhide a comment |
ig_delete_comment | Delete a comment |
| Tool | Description |
|---|---|
ig_get_profile | Get account profile info |
ig_get_account_insights | Get account-level analytics (views, reach, follower_count) |
ig_business_discovery | Look up another business account |
ig_get_collaboration_invites | Get pending collaboration invites |
ig_respond_collaboration_invite | Accept or decline collaboration invites |
| Tool | Description |
|---|---|
ig_search_hashtag | Search hashtag by name |
ig_get_hashtag | Get hashtag info |
ig_get_hashtag_recent | Get recent media for a hashtag |
ig_get_hashtag_top | Get top media for a hashtag |
| Tool | Description |
|---|---|
ig_get_mentioned_comments | Get comments mentioning you |
ig_get_tagged_media | Get media you're tagged in |
| Tool | Description |
|---|---|
ig_get_conversations | List DM conversations |
ig_get_messages | Get messages in a conversation |
ig_send_message | Send a DM |
ig_get_message | Get message details |
| Tool | Description |
|---|---|
threads_publish_text | Publish a text post (supports polls, GIFs, link attachments, topic tags, quote posts, spoiler flag) |
threads_publish_image | Publish an image post (supports alt_text, topic tags, spoiler flag) |
threads_publish_video | Publish a video post (supports alt_text, topic tags, spoiler flag) |
threads_publish_carousel | Publish a carousel (2-20 items, supports alt_text per item) |
threads_delete_post | Delete a post (max 100/day) |
threads_get_container_status | Check container processing status |
threads_get_publishing_limit | Check remaining publishing quota (250 posts/day) |
| Tool | Description |
|---|---|
threads_get_posts | List published posts (includes topic_tag, poll, GIF fields) |
threads_get_post | Get post details |
threads_search_posts | Search public posts by keyword or topic tag |
| Tool | Description |
|---|---|
threads_get_replies | Get replies to a post |
threads_reply | Reply to a post (supports image/video attachments) |
threads_hide_reply | Hide a reply |
threads_unhide_reply | Unhide a reply |
| Tool | Description |
|---|---|
threads_get_profile | Get Threads profile info (includes is_verified) |
threads_get_user_threads | List user's threads |
| Tool | Description |
|---|---|
threads_get_post_insights | Get post analytics (views, likes, replies, reposts, quotes, clicks) |
threads_get_user_insights | Get account-level analytics |
| Resource URI | Description |
|---|---|
instagram://profile | Instagram account profile data |
threads://profile | Threads account profile data (includes is_verified) |
| Prompt | Description |
|---|---|
content_publish | Cross-post content to Instagram and Threads |
analytics_report | Generate combined analytics report |
All platforms (Instagram, Threads) require a Meta Developer App.
Your META_APP_ID and META_APP_SECRET are in App Settings → Basic.
Requires an Instagram Business or Creator account. Switch for free in Instagram app → Settings → Account type.
instagram_basic, instagram_content_publish, instagram_manage_comments, instagram_manage_insights, instagram_manage_contents, pages_show_list, pages_read_engagementGET https://graph.facebook.com/v25.0/oauth/access_token
?grant_type=fb_exchange_token
&client_id=YOUR_APP_ID
&client_secret=YOUR_APP_SECRET
&fb_exchange_token=SHORT_LIVED_TOKEN
meta_exchange_token tool after setup.GET https://graph.facebook.com/v25.0/me/accounts?access_token=YOUR_TOKEN
GET https://graph.facebook.com/v25.0/{page-id}?fields=instagram_business_account&access_token=YOUR_TOKEN
instagram_business_account.id is your INSTAGRAM_USER_ID (a numeric ID like 17841400123456789).Works with any Threads account (personal or business). Instagram account link is no longer required since September 2025.
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
&response_type=code
https://localhost/ as redirect URI (configure in App Settings → Threads API → Redirect URIs)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
GET https://graph.threads.net/access_token
?grant_type=th_exchange_token
&client_secret=YOUR_APP_SECRET
&access_token=SHORT_LIVED_TOKEN
GET https://graph.threads.net/v1.0/me?fields=id,username&access_token=YOUR_TOKEN
id field is your THREADS_USER_ID (a numeric ID like 1234567890).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
# 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
Access tokens expire after ~60 days. Refresh before expiration:
meta_exchange_token with the current valid tokenmeta_refresh_token or 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.
The following Instagram metrics were deprecated in Graph API v22.0 (January 2025) and removed for all versions on April 21, 2025:
| Deprecated Metric | Replacement |
|---|---|
impressions | views |
video_views | views |
plays | views |
clips_replays_count | views |
engagement | saves + shares + likes + comments |
email_contacts | Removed (no replacement) |
phone_call_clicks | Removed (no replacement) |
text_message_clicks | Removed (no replacement) |
get_directions_clicks | Removed (no replacement) |
website_clicks | Removed (no replacement) |
profile_views | Removed (no replacement) |
MIT
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows