meta-mcp
Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.
README
meta-mcp
Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.
Prerequisites
- Node.js 22+ (LTS recommended)
Quick Start
Add to your MCP client config:
{
"mcpServers": {
"meta": {
"command": "npx",
"args": ["-y", "@exileum/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"
}
}
}
}
Only set the variables for the platforms you use.
Manual Installation
git clone https://github.com/exileum/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"
}
}
}
}
Environment Variables
| 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 |
Account Requirements
| Platform | Account Type | Notes |
|---|---|---|
| Business or Creator | Personal accounts cannot use the Graph API. Free to switch in settings | |
| Threads | Any account | Instagram link no longer required since Sep 2025 |
| Meta (token/webhook) | Meta Developer App | Create at developers.facebook.com |
Features
- 57 tools across Instagram (33), Threads (18), 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; manage replies; search posts; delete posts; view insights
- 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
Tools
Meta Platform (6)
| Tool | Description |
|---|---|
meta_exchange_token |
Exchange short-lived token for long-lived token (~60 days). Requires platform (instagram or threads) |
meta_refresh_token |
Refresh a long-lived token before expiration. Requires platform (instagram or threads) |
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 |
Instagram — Publishing (6)
| 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 |
Instagram — Media (5)
| 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 |
Instagram — Comments (7)
| 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 |
Instagram — Profile & Insights (5)
| 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 |
Instagram — Hashtags (4)
| 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 |
Instagram — Mentions & Tags (2)
| Tool | Description |
|---|---|
ig_get_mentioned_comments |
Get comments mentioning you |
ig_get_tagged_media |
Get media you're tagged in |
Instagram — Messaging (4)
| 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 |
Threads — Publishing (7)
| 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) |
Threads — Media & Search (3)
| 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 |
Threads — Replies (4)
| 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 |
Threads — Profile (2)
| Tool | Description |
|---|---|
threads_get_profile |
Get Threads profile info (includes is_verified) |
threads_get_user_threads |
List user's threads |
Threads — Insights (2)
| Tool | Description |
|---|---|
threads_get_post_insights |
Get post analytics (views, likes, replies, reposts, quotes, clicks) |
threads_get_user_insights |
Get account-level analytics |
Resources
| Resource URI | Description |
|---|---|
instagram://profile |
Instagram account profile data |
threads://profile |
Threads account profile data (includes is_verified) |
Prompts
| Prompt | Description |
|---|---|
content_publish |
Cross-post content to Instagram and Threads |
analytics_report |
Generate combined analytics report |
Setup Guide
Step 1: Create 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. No Facebook Page linking required — this uses the Instagram API with Instagram Login.
- In your Meta App, go to "Instagram" -> "API setup with Instagram business login"
- In the "Generate access tokens" section, click "Add account" -> log in to your Instagram account
- The generated token is long-lived (~60 days) — no exchange step needed. Copy it as your
INSTAGRAM_ACCESS_TOKEN.- To refresh before expiry, use the
meta_refresh_tokentool withplatform: "instagram", or:GET https://graph.instagram.com/refresh_access_token ?grant_type=ig_refresh_token &access_token=LONG_LIVED_TOKEN
- To refresh before expiry, use the
- Get your Instagram User ID:
TheGET https://graph.instagram.com/v25.0/me?fields=user_id,username&access_token=YOUR_TOKENuser_idis yourINSTAGRAM_USER_ID. - Permissions are configured in your app's Instagram settings. Available scopes:
instagram_business_basic— required for all operationsinstagram_business_content_publish— publishing photos, reels, carouselsinstagram_business_manage_comments— reading and managing commentsinstagram_business_manage_messages— DM conversations and messaging
Step 3: Threads Setup
Works with any Threads account. Instagram link no longer required since Sep 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:
For local testing, usehttps://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=codehttps://localhost/as redirect URI (configure in App Settings -> Threads API -> Redirect URIs). - 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:
TheGET https://graph.threads.net/v1.0/me?fields=id,username&access_token=YOUR_TOKENidfield is yourTHREADS_USER_ID.
Token Renewal
Access tokens expire after ~60 days. Refresh before expiration (token must be at least 24h old):
- Instagram: Use
meta_refresh_tokenwithplatform: "instagram", or call:GET https://graph.instagram.com/refresh_access_token ?grant_type=ig_refresh_token &access_token=CURRENT_LONG_LIVED_TOKEN - Threads: Use
meta_refresh_tokenwithplatform: "threads", or call:GET https://graph.threads.net/refresh_access_token ?grant_type=th_refresh_token &access_token=CURRENT_LONG_LIVED_TOKEN
Check token status anytime with meta_debug_token.
Glama
License
See CHANGELOG.md for release history.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。