{"_id":"@mikusnuz/meta-mcp","_rev":"7-ee3f8f50ffcd46f509202c5c893943ae","name":"@mikusnuz/meta-mcp","dist-tags":{"latest":"2.1.1"},"versions":{"1.0.0":{"name":"@mikusnuz/meta-mcp","version":"1.0.0","keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"author":{"name":"mikusnuz"},"license":"MIT","_id":"@mikusnuz/meta-mcp@1.0.0","maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"homepage":"https://github.com/mikusnuz/meta-mcp","bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"bin":{"meta-mcp":"dist/index.js"},"dist":{"shasum":"db46d0063f062eb9859fb42fb303411dfda6f724","tarball":"https://registry.npmjs.org/@mikusnuz/meta-mcp/-/meta-mcp-1.0.0.tgz","fileCount":84,"integrity":"sha512-zShK1tRQRT7YZJVZJDkAEvZ8rPTttKRhk7p++l9aX9YgKvnKVrjwUbdzJHwdeC/2u8XYfm/eWYpuVEm+DoTe/A==","signatures":[{"sig":"MEQCICIjcA9UC7vbW5CsWm7wlLhuPXQvH3xAFP5TNLdRkSXwAiBMOxsMkayOImMVmaouSXGQ7VJDh6pF70MYWNp/O7lBQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183108},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"71ef740790b5302af220d0e5fe63e1a26048bb92","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"mikusnuz","email":"jooon530@gmail.com"},"repository":{"url":"git+https://github.com/mikusnuz/meta-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Instagram Graph API, Threads API & Meta platform management","directories":{},"_nodeVersion":"25.6.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-mcp_1.0.0_1771583643873_0.4504297898370462","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@mikusnuz/meta-mcp","version":"1.1.0","keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"author":{"name":"mikusnuz"},"license":"MIT","_id":"@mikusnuz/meta-mcp@1.1.0","maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"homepage":"https://github.com/mikusnuz/meta-mcp","bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"bin":{"meta-mcp":"dist/index.js"},"dist":{"shasum":"1a87c4001a5324bfb00fa9cd047b5d9a9b928baf","tarball":"https://registry.npmjs.org/@mikusnuz/meta-mcp/-/meta-mcp-1.1.0.tgz","fileCount":84,"integrity":"sha512-W11b+VeDrWyu+6JDf6ubP7euNNgS2veJ2SWKti8OAbyPyhlCQLypxZqcqqd0GgDVC2xBN4WD1cfcukuKV2VE/g==","signatures":[{"sig":"MEUCIQDV+d3Td0zL/TCR9DWTdwbkCpbW4EihkPGAdLhu5RxToAIgWLjxDFIvm3UkQ5bJ6s5Q/C3EDXHqTj9DqIqhJjXcFdM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183289},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8129695ecdc14bbb8f5751ee0d2c2e6c8d4b6075","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"mikusnuz","email":"jooon530@gmail.com"},"repository":{"url":"git+https://github.com/mikusnuz/meta-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Instagram Graph API, Threads API & Meta platform management","directories":{},"_nodeVersion":"25.6.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-mcp_1.1.0_1771586383832_0.5890572579803199","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@mikusnuz/meta-mcp","version":"2.0.0","keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"author":{"name":"mikusnuz"},"license":"MIT","_id":"@mikusnuz/meta-mcp@2.0.0","maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"homepage":"https://github.com/mikusnuz/meta-mcp","bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"bin":{"meta-mcp":"dist/index.js"},"dist":{"shasum":"5bd97c15d21de53c506deeeae44fd7f793df8756","tarball":"https://registry.npmjs.org/@mikusnuz/meta-mcp/-/meta-mcp-2.0.0.tgz","fileCount":84,"integrity":"sha512-chdqprFpnZm6UDVsiSmGNtBpBk3XqtcPH0KjKNe7IbD1zA0wPboGo28jKWjyJ1mpo25+DxDSI4XePk8tjefPgw==","signatures":[{"sig":"MEYCIQD88eFVgomaIQ0HOfhmCK80e3TA3fXzsMOGu75NYr7UEgIhAN9nqoEskS3DOgo7SuTPQB05QxiIP18IOX4KpLKqzIek","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":211883},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a49077490349b8fe57bad0fad8367b389e293ee4","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"mikusnuz","email":"jooon530@gmail.com"},"repository":{"url":"git+https://github.com/mikusnuz/meta-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Instagram Graph API, Threads API & Meta platform management","directories":{},"_nodeVersion":"25.6.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-mcp_2.0.0_1773854705724_0.07069082837649887","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@mikusnuz/meta-mcp","version":"2.0.1","keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"author":{"name":"mikusnuz"},"license":"MIT","_id":"@mikusnuz/meta-mcp@2.0.1","maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"homepage":"https://github.com/mikusnuz/meta-mcp","bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"bin":{"meta-mcp":"dist/index.js"},"dist":{"shasum":"dd4d60b269c9d84858a66846c213a14fcb881542","tarball":"https://registry.npmjs.org/@mikusnuz/meta-mcp/-/meta-mcp-2.0.1.tgz","fileCount":84,"integrity":"sha512-0D/JV/952iBJI/QHGCPNtjcGeH+qdKimYZfStq7v1KOIGrKKvhZboED6HQ17Zj5BUqHnSztWBMYJREHNGtv63Q==","signatures":[{"sig":"MEYCIQDV9u4MNprfzuDRMrc4DLXvTQQc81IliVqvFC82N/jfVwIhAPoI2sASzWEveTIeaOBUd71WnUmNyWYO6Kiyf3vmG9e3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216601},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"cf42b66171304e1b43b571c0d02e0479d0aaacc2","mcpName":"io.github.mikusnuz/meta","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"mikusnuz","email":"jooon530@gmail.com"},"repository":{"url":"git+https://github.com/mikusnuz/meta-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Instagram Graph API, Threads API & Meta platform management","directories":{},"_nodeVersion":"25.6.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-mcp_2.0.1_1773944080127_0.4654616253620325","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@mikusnuz/meta-mcp","version":"2.0.2","keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"author":{"name":"mikusnuz"},"license":"MIT","_id":"@mikusnuz/meta-mcp@2.0.2","maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"homepage":"https://github.com/mikusnuz/meta-mcp","bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"bin":{"meta-mcp":"dist/index.js"},"dist":{"shasum":"e84ac0996d510b62e253e432890cac8112546805","tarball":"https://registry.npmjs.org/@mikusnuz/meta-mcp/-/meta-mcp-2.0.2.tgz","fileCount":84,"integrity":"sha512-JJaTcVxz7FjkP478jZfFS1MHUUpknihEdg+KMORLo5u+n4jsKQ0j3/3lOe9FO4zFMY2VBxLowcBdELr36cPa/g==","signatures":[{"sig":"MEYCIQD/g+IdHqE/eRANPBIXMo/C1gQjWWYZapJbOK2kYO5BnQIhAPrfGQhtBMouOZVfqDBW1cC1t5Qo6l07yBRdgRMf0pXX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216508},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5f1d172a3d7971cf5147a75653f09be6ca6da359","mcpName":"io.github.mikusnuz/meta","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"mikusnuz","email":"jooon530@gmail.com"},"repository":{"url":"git+https://github.com/mikusnuz/meta-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Instagram Graph API, Threads API & Meta platform management","directories":{},"_nodeVersion":"25.6.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-mcp_2.0.2_1774313162924_0.0013008292040179725","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@mikusnuz/meta-mcp","version":"2.1.0","keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"author":{"name":"mikusnuz"},"license":"MIT","_id":"@mikusnuz/meta-mcp@2.1.0","maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"homepage":"https://github.com/mikusnuz/meta-mcp","bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"bin":{"meta-mcp":"dist/index.js"},"dist":{"shasum":"617518fa793fe30d5feb40bb89e1678ab64f9a19","tarball":"https://registry.npmjs.org/@mikusnuz/meta-mcp/-/meta-mcp-2.1.0.tgz","fileCount":96,"integrity":"sha512-Ogpbm0N/ivC0NND7P6BOPXB5qX79C6V+0E5a4fdPWUQYG02maUr/bH1WfAANDjBur6uSxv4cI27F8OnrCoHlGw==","signatures":[{"sig":"MEYCIQCC6454gBIhPbnSDxOQnEmA61A7L92pI9fKh96pMExKAgIhALOVmdRSv81+Ca5k9RDyRSWbixdnm1Dc8Xu+lQttMtwH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254238},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"77a150c189f8b42a58476ec636c27804b57d4776","mcpName":"io.github.mikusnuz/meta","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"mikusnuz","email":"jooon530@gmail.com"},"repository":{"url":"git+https://github.com/mikusnuz/meta-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Instagram Graph API, Threads API & Meta platform management","directories":{},"_nodeVersion":"25.6.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/meta-mcp_2.1.0_1786004247441_0.5371220355378445","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@mikusnuz/meta-mcp","version":"2.1.1","mcpName":"io.github.mikusnuz/meta","description":"MCP server for Instagram Graph API, Threads API & Meta platform management","type":"module","bin":{"meta-mcp":"dist/index.js"},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"engines":{"node":">=18"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsx src/index.ts"},"keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"author":{"name":"mikusnuz"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/mikusnuz/meta-mcp.git"},"homepage":"https://github.com/mikusnuz/meta-mcp","bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","zod":"^3.24.2"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.21.0","typescript":"^5.7.0"},"gitHead":"7bf59c85ab9f04b50f13db31d3ae66cdd24cba40","_id":"@mikusnuz/meta-mcp@2.1.1","_nodeVersion":"25.6.1","_npmVersion":"11.9.0","dist":{"integrity":"sha512-2/W6JKh1PaKjMMFFCXpbS6mgPNj636/LsfP/Pg3/Di5tXw1KKNrHakEJH76xs4iSLEF4KMsX8M6LyHyUloPXhg==","shasum":"208c1a85d1011f15af488f1cd2ceb652886ef14e","tarball":"https://registry.npmjs.org/@mikusnuz/meta-mcp/-/meta-mcp-2.1.1.tgz","fileCount":96,"unpackedSize":254238,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICFB+H4PVCawNSJPTfkh2s0ek//MvyEpl5+R4A7gULO6AiBuXT9oKTaxbmi9ZiVjd6Bi+ko29NYOv52ss6dlGhDVpw=="}]},"_npmUser":{"name":"mikusnuz","email":"jooon530@gmail.com"},"directories":{},"maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/meta-mcp_2.1.1_1786005064844_0.5210153900727068"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-20T10:34:03.801Z","modified":"2026-08-06T08:31:05.139Z","1.0.0":"2026-02-20T10:34:04.023Z","1.1.0":"2026-02-20T11:19:44.038Z","2.0.0":"2026-03-18T17:25:05.938Z","2.0.1":"2026-03-19T18:14:40.375Z","2.0.2":"2026-03-24T00:46:03.082Z","2.1.0":"2026-08-06T08:17:27.613Z","2.1.1":"2026-08-06T08:31:04.978Z"},"bugs":{"url":"https://github.com/mikusnuz/meta-mcp/issues"},"author":{"name":"mikusnuz"},"license":"MIT","homepage":"https://github.com/mikusnuz/meta-mcp","keywords":["mcp","meta","instagram","threads","graph-api","model-context-protocol","ai","claude"],"repository":{"type":"git","url":"git+https://github.com/mikusnuz/meta-mcp.git"},"description":"MCP server for Instagram Graph API, Threads API & Meta platform management","maintainers":[{"name":"mikusnuz","email":"jooon530@gmail.com"}],"readme":"**English** | [한국어](README.ko.md)\n\n# meta-mcp\n\n[![npm version](https://img.shields.io/npm/v/@mikusnuz/meta-mcp)](https://www.npmjs.com/package/@mikusnuz/meta-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![MCP Badge](https://lobehub.com/badge/mcp/mikusnuz-meta-mcp)](https://lobehub.com/discover/mcp/mikusnuz-meta-mcp)\n\nFull-coverage MCP server for **Instagram Graph API** (v26.0), **Threads API**, and **Meta platform** management.\n\n## When to Use\n\nTell your AI assistant things like:\n\n- **\"Post a photo to Instagram\"** — publish photos, videos, reels, stories, and carousels\n- **\"Publish a text post on Threads\"** — text posts with polls, GIFs, link attachments, and topic tags\n- **\"Get my Instagram follower count and insights\"** — account and post-level analytics\n- **\"Schedule a carousel post\"** — multi-image albums on Instagram (2-10) or Threads (2-20)\n- **\"Reply to comments on my latest post\"** — read and respond to comments on both platforms\n- **\"Cross-post to Instagram and Threads\"** — use the built-in `content_publish` prompt\n- **\"Get analytics for my Threads account\"** — views, likes, replies, reposts, quotes, clicks\n- **\"Manage Instagram DMs\"** — list conversations, read messages, send replies\n\n> **AI Agent Integration**: See [`llms.txt`](llms.txt) for a machine-readable summary, or copy [`templates/CLAUDE.md`](templates/CLAUDE.md) / [`templates/AGENTS.md`](templates/AGENTS.md) into your project for automatic MCP discovery.\n\n## Features\n\n- **66 tools** across Instagram (33), Threads (27), and Meta platform (6)\n- **Instagram**: Publish photos/videos/reels/stories/carousels with alt text, manage comments, view insights, search hashtags, handle DMs, manage collaboration invites\n- **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\n- **Meta**: Token exchange/refresh/debug, webhook management\n- **2 resources**: Instagram profile, Threads profile\n- **2 prompts**: Cross-platform content publishing, analytics report\n- Rate limit tracking via `x-app-usage` header\n\n## What's New in v2.1.0\n\n- **Graph API v26.0**: Upgraded from v25.0 (no deprecated fields/endpoints from the v26.0 changelog were in use)\n- **Tenor removed**: GIPHY is now the only GIF provider (Tenor was sunset March 31, 2026); `gif_provider` param dropped\n- **Threads Ghost Posts**: `is_ghost_post` on `threads_publish_text` (auto-archived after 24h)\n- **Threads Reply Approvals**: `enable_reply_approvals` on publish tools, plus `threads_get_pending_replies` and `threads_manage_pending_reply`\n- **Threads → Instagram Stories cross-share**: `crossreshare_to_ig` / `crossreshare_to_ig_dark_mode` on all publish tools\n- **Threads Location Tagging**: `location_id` on publish tools, plus `threads_search_locations` and `threads_get_location`\n- **Threads Profile Discovery**: `threads_lookup_profile` and `threads_get_profile_posts` for public profiles\n- **Threads Mentions**: `threads_get_mentions`\n- **Threads oEmbed**: `threads_get_oembed` for embedding public posts\n- **Threads Conversations**: `threads_get_conversation` for flattened (nested) reply threads\n- **Fixed `threads_search_posts`**: now calls the correct `/keyword_search` endpoint with the correct `search_mode`/`search_type` parameters (previous version targeted a non-existent endpoint)\n- Post/reply fields expanded with `is_verified`, `profile_picture_url`, `location_id`, `root_post`, `replied_to`, `reply_audience`\n\n## What's New in v2.0.0\n\n- **Graph API v25.0**: Upgraded from v21.0 (expired Sep 2025) to v25.0 (current)\n- **Fixed deprecated metrics**: `impressions`, `video_views`, `engagement` replaced with `views`, `reach`, `saved`, `shares`\n- **Threads polls**: Create posts with interactive poll attachments\n- **Threads GIFs**: Attach GIFs from GIPHY or Tenor\n- **Threads topic tags**: Categorize posts with topic tags\n- **Threads link attachments**: Attach URL preview cards to text posts\n- **Threads post search**: Search public posts by keyword or topic tag\n- **Threads post deletion**: Delete posts (rate limited to 100/day)\n- **Threads publishing limit**: Check remaining quota\n- **Threads quote posts**: Quote other posts by ID\n- **Threads spoiler flag**: Mark content as spoiler\n- **Threads alt text**: Add accessibility descriptions to all media types\n- **Threads new reply controls**: `parent_post_author_only` and `followers_only` options\n- **Instagram alt text**: Support for photo, reel, and carousel items\n- **Instagram collaboration invites**: Query and respond to collab invites\n- **Updated insights metrics**: New `clicks`, `reposts`, `reels_skip_rate` metrics\n\n## Account Requirements\n\n| Platform | Account Type | Notes |\n|----------|-------------|-------|\n| **Instagram** | Business or Creator account | Personal accounts cannot use the Graph API. Free to switch in Instagram settings |\n| **Threads** | Any account | All Threads accounts can use the API (Instagram account link no longer required since Sep 2025) |\n| **Meta** (token/webhook tools) | Meta Developer App | Create at [developers.facebook.com](https://developers.facebook.com) |\n\n## Installation\n\n### npx (Recommended)\n\n```json\n{\n  \"mcpServers\": {\n    \"meta\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@mikusnuz/meta-mcp\"],\n      \"env\": {\n        \"INSTAGRAM_ACCESS_TOKEN\": \"your_ig_token\",\n        \"INSTAGRAM_USER_ID\": \"your_ig_user_id\",\n        \"THREADS_ACCESS_TOKEN\": \"your_threads_token\",\n        \"THREADS_USER_ID\": \"your_threads_user_id\"\n      }\n    }\n  }\n}\n```\n\n### Manual\n\n```bash\ngit clone https://github.com/mikusnuz/meta-mcp.git\ncd meta-mcp\nnpm install\nnpm run build\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"meta\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/meta-mcp/dist/index.js\"],\n      \"env\": {\n        \"INSTAGRAM_ACCESS_TOKEN\": \"your_ig_token\",\n        \"INSTAGRAM_USER_ID\": \"your_ig_user_id\",\n        \"THREADS_ACCESS_TOKEN\": \"your_threads_token\",\n        \"THREADS_USER_ID\": \"your_threads_user_id\"\n      }\n    }\n  }\n}\n```\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `INSTAGRAM_ACCESS_TOKEN` | For Instagram | Instagram Graph API access token |\n| `INSTAGRAM_USER_ID` | For Instagram | Instagram Business/Creator account ID |\n| `THREADS_ACCESS_TOKEN` | For Threads | Threads API access token |\n| `THREADS_USER_ID` | For Threads | Threads user ID |\n| `META_APP_ID` | For token/webhook tools | Meta App ID |\n| `META_APP_SECRET` | For token/webhook tools | Meta App Secret |\n\nYou 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`.\n\n## Tools\n\n### Meta Platform (6)\n\n| Tool | Description |\n|------|-------------|\n| `meta_exchange_token` | Exchange short-lived token for long-lived token (~60 days) |\n| `meta_refresh_token` | Refresh a long-lived token before expiration |\n| `meta_debug_token` | Inspect token validity, expiration, and scopes |\n| `meta_get_app_info` | Get Meta App information |\n| `meta_subscribe_webhook` | Subscribe to webhook notifications |\n| `meta_get_webhook_subscriptions` | List current webhook subscriptions |\n\n### Instagram — Publishing (6)\n\n| Tool | Description |\n|------|-------------|\n| `ig_publish_photo` | Publish a photo post (supports alt_text) |\n| `ig_publish_video` | Publish a video post |\n| `ig_publish_carousel` | Publish a carousel/album (2-10 items, supports alt_text per item) |\n| `ig_publish_reel` | Publish a Reel (supports alt_text) |\n| `ig_publish_story` | Publish a Story (24hr) |\n| `ig_get_container_status` | Check media container processing status |\n\n### Instagram — Media (5)\n\n| Tool | Description |\n|------|-------------|\n| `ig_get_media_list` | List published media |\n| `ig_get_media` | Get media details |\n| `ig_delete_media` | Delete a media post |\n| `ig_get_media_insights` | Get media analytics (views, reach, saved, shares) |\n| `ig_toggle_comments` | Enable/disable comments on a post |\n\n### Instagram — Comments (7)\n\n| Tool | Description |\n|------|-------------|\n| `ig_get_comments` | Get comments on a post |\n| `ig_get_comment` | Get comment details |\n| `ig_post_comment` | Post a comment |\n| `ig_get_replies` | Get replies to a comment |\n| `ig_reply_to_comment` | Reply to a comment |\n| `ig_hide_comment` | Hide/unhide a comment |\n| `ig_delete_comment` | Delete a comment |\n\n### Instagram — Profile & Insights (5)\n\n| Tool | Description |\n|------|-------------|\n| `ig_get_profile` | Get account profile info |\n| `ig_get_account_insights` | Get account-level analytics (views, reach, follower_count) |\n| `ig_business_discovery` | Look up another business account |\n| `ig_get_collaboration_invites` | Get pending collaboration invites |\n| `ig_respond_collaboration_invite` | Accept or decline collaboration invites |\n\n### Instagram — Hashtags (4)\n\n| Tool | Description |\n|------|-------------|\n| `ig_search_hashtag` | Search hashtag by name |\n| `ig_get_hashtag` | Get hashtag info |\n| `ig_get_hashtag_recent` | Get recent media for a hashtag |\n| `ig_get_hashtag_top` | Get top media for a hashtag |\n\n### Instagram — Mentions & Tags (2)\n\n| Tool | Description |\n|------|-------------|\n| `ig_get_mentioned_comments` | Get comments mentioning you |\n| `ig_get_tagged_media` | Get media you're tagged in |\n\n### Instagram — Messaging (4)\n\n| Tool | Description |\n|------|-------------|\n| `ig_get_conversations` | List DM conversations |\n| `ig_get_messages` | Get messages in a conversation |\n| `ig_send_message` | Send a DM |\n| `ig_get_message` | Get message details |\n\n### Threads — Publishing (7)\n\n| Tool | Description |\n|------|-------------|\n| `threads_publish_text` | Publish a text post (polls, GIFs, link attachments, topic tags, quote posts, spoiler flag, ghost posts, reply approvals, location tag, IG Stories cross-share) |\n| `threads_publish_image` | Publish an image post (alt_text, topic tags, spoiler flag, reply approvals, location tag, IG Stories cross-share) |\n| `threads_publish_video` | Publish a video post (alt_text, topic tags, spoiler flag, reply approvals, location tag, IG Stories cross-share) |\n| `threads_publish_carousel` | Publish a carousel (2-20 items, alt_text per item, reply approvals, location tag, IG Stories cross-share) |\n| `threads_delete_post` | Delete a post (max 100/day) |\n| `threads_get_container_status` | Check container processing status |\n| `threads_get_publishing_limit` | Check remaining publishing quota (250 posts/day) |\n\n### Threads — Media & Search (4)\n\n| Tool | Description |\n|------|-------------|\n| `threads_get_posts` | List published posts (includes topic_tag, poll, GIF, location, verification fields) |\n| `threads_get_post` | Get post details |\n| `threads_get_profile_posts` | List a public profile's posts by username (Profile Discovery) |\n| `threads_search_posts` | Search public posts via `/keyword_search` by keyword or topic tag, filterable by media type and author |\n\n### Threads — Replies (7)\n\n| Tool | Description |\n|------|-------------|\n| `threads_get_replies` | Get top-level replies to a post |\n| `threads_get_conversation` | Get all replies (flattened, including nested) to a post |\n| `threads_reply` | Reply to a post (supports image/video attachments) |\n| `threads_hide_reply` | Hide a reply |\n| `threads_unhide_reply` | Unhide a reply |\n| `threads_get_pending_replies` | Get replies awaiting approval on a post with reply approvals enabled |\n| `threads_manage_pending_reply` | Approve or ignore a pending reply |\n\n### Threads — Profile & Discovery (3)\n\n| Tool | Description |\n|------|-------------|\n| `threads_get_profile` | Get Threads profile info (includes is_verified) |\n| `threads_get_user_threads` | List user's threads |\n| `threads_lookup_profile` | Look up a public profile by username (Profile Discovery) |\n\n### Threads — Mentions (1)\n\n| Tool | Description |\n|------|-------------|\n| `threads_get_mentions` | Get posts where the user was @mentioned |\n\n### Threads — Locations (2)\n\n| Tool | Description |\n|------|-------------|\n| `threads_search_locations` | Search for locations to tag, by query or coordinates |\n| `threads_get_location` | Get a location object by ID |\n\n### Threads — Tools & Resources (1)\n\n| Tool | Description |\n|------|-------------|\n| `threads_get_oembed` | Get embed HTML/metadata for a public post |\n\n### Threads — Insights (2)\n\n| Tool | Description |\n|------|-------------|\n| `threads_get_post_insights` | Get post analytics (views, likes, replies, reposts, quotes, clicks) |\n| `threads_get_user_insights` | Get account-level analytics (also available to Threads profiles without a linked Instagram account) |\n\n## Resources\n\n| Resource URI | Description |\n|-------------|-------------|\n| `instagram://profile` | Instagram account profile data |\n| `threads://profile` | Threads account profile data (includes is_verified) |\n\n## Prompts\n\n| Prompt | Description |\n|--------|-------------|\n| `content_publish` | Cross-post content to Instagram and Threads |\n| `analytics_report` | Generate combined analytics report |\n\n## Setup Guide\n\n### Step 1: Create a Meta Developer App\n\nAll platforms (Instagram, Threads) require a Meta Developer App.\n\n1. Go to [developers.facebook.com](https://developers.facebook.com) and log in\n2. Click **\"My Apps\"** → **\"Create App\"**\n3. Select **\"Other\"** → **\"Business\"** (or \"None\" for personal use)\n4. Enter an app name and create\n\nYour **`META_APP_ID`** and **`META_APP_SECRET`** are in **App Settings → Basic**.\n\n### Step 2: Instagram Setup\n\n> Requires an **Instagram Business or Creator account**. Switch for free in Instagram app → Settings → Account type.\n\n1. In your Meta App, go to **\"Add Products\"** → add **\"Instagram Graph API\"**\n2. Go to **\"Instagram Graph API\" → \"Settings\"** and connect your Instagram Business account via a Facebook Page\n3. Open the [Graph API Explorer](https://developers.facebook.com/tools/explorer/)\n   - Select your app\n   - Add permissions: `instagram_basic`, `instagram_content_publish`, `instagram_manage_comments`, `instagram_manage_insights`, `instagram_manage_contents`, `pages_show_list`, `pages_read_engagement`\n   - Click **\"Generate Access Token\"** and authorize\n4. The generated token is short-lived (~1 hour). Exchange it for a long-lived token (~60 days):\n   ```\n   GET https://graph.facebook.com/v26.0/oauth/access_token\n     ?grant_type=fb_exchange_token\n     &client_id=YOUR_APP_ID\n     &client_secret=YOUR_APP_SECRET\n     &fb_exchange_token=SHORT_LIVED_TOKEN\n   ```\n   Or use the `meta_exchange_token` tool after setup.\n5. **Get your Instagram User ID** — call this with your token:\n   ```\n   GET https://graph.facebook.com/v26.0/me/accounts?access_token=YOUR_TOKEN\n   ```\n   This returns your Facebook Pages. For each page, get the linked Instagram account:\n   ```\n   GET https://graph.facebook.com/v26.0/{page-id}?fields=instagram_business_account&access_token=YOUR_TOKEN\n   ```\n   The `instagram_business_account.id` is your **`INSTAGRAM_USER_ID`** (a numeric ID like `17841400123456789`).\n\n### Step 3: Threads Setup\n\n> Works with **any Threads account** (personal or business). Instagram account link is no longer required since September 2025.\n\n1. In your Meta App, go to **\"Add Products\"** → add **\"Threads API\"**\n2. Go to **\"Threads API\" → \"Settings\"**:\n   - Add your Threads account as a **Threads Tester** under \"Roles\"\n   - Accept the invitation in the Threads app: **Settings → Account → Website permissions → Invites**\n3. Generate an authorization URL:\n   ```\n   https://threads.net/oauth/authorize\n     ?client_id=YOUR_APP_ID\n     &redirect_uri=YOUR_REDIRECT_URI\n     &scope=threads_basic,threads_content_publish,threads_manage_insights,threads_manage_replies,threads_read_replies\n     &response_type=code\n   ```\n   - For local testing, use `https://localhost/` as redirect URI (configure in App Settings → Threads API → Redirect URIs)\n4. After authorization, exchange the code for an access token:\n   ```\n   POST https://graph.threads.net/oauth/access_token\n   Content-Type: application/x-www-form-urlencoded\n\n   client_id=YOUR_APP_ID\n   &client_secret=YOUR_APP_SECRET\n   &grant_type=authorization_code\n   &redirect_uri=YOUR_REDIRECT_URI\n   &code=AUTHORIZATION_CODE\n   ```\n5. Exchange for a long-lived token (~60 days):\n   ```\n   GET https://graph.threads.net/access_token\n     ?grant_type=th_exchange_token\n     &client_secret=YOUR_APP_SECRET\n     &access_token=SHORT_LIVED_TOKEN\n   ```\n6. **Get your Threads User ID** — call this with your token:\n   ```\n   GET https://graph.threads.net/v1.0/me?fields=id,username&access_token=YOUR_TOKEN\n   ```\n   The `id` field is your **`THREADS_USER_ID`** (a numeric ID like `1234567890`).\n\n### Step 4: Configure Environment Variables\n\nSet only the variables for the platforms you use:\n\n```bash\n# Instagram (requires Business/Creator account)\nINSTAGRAM_ACCESS_TOKEN=EAAxxxxxxx...     # Long-lived token from Step 2\nINSTAGRAM_USER_ID=17841400123456789      # Numeric ID from Step 2.5\n\n# Threads (any account)\nTHREADS_ACCESS_TOKEN=THQWxxxxxxx...      # Long-lived token from Step 3\nTHREADS_USER_ID=1234567890               # Numeric ID from Step 3.6\n\n# Meta App (for token management & webhooks)\nMETA_APP_ID=123456789012345              # From App Settings → Basic\nMETA_APP_SECRET=abcdef0123456789abcdef   # From App Settings → Basic\n```\n\n### Token Renewal\n\nAccess tokens expire after ~60 days. Refresh before expiration:\n\n- **Instagram**: Use `meta_exchange_token` with the current valid token\n- **Threads**: Use `meta_refresh_token` or call:\n  ```\n  GET https://graph.threads.net/refresh_access_token\n    ?grant_type=th_refresh_token\n    &access_token=CURRENT_LONG_LIVED_TOKEN\n  ```\n\nYou can check token status anytime with `meta_debug_token`.\n\n## Deprecated Metrics (v22.0+)\n\nThe following Instagram metrics were deprecated in Graph API v22.0 (January 2025) and removed for all versions on April 21, 2025:\n\n| Deprecated Metric | Replacement |\n|-------------------|-------------|\n| `impressions` | `views` |\n| `video_views` | `views` |\n| `plays` | `views` |\n| `clips_replays_count` | `views` |\n| `engagement` | `saves` + `shares` + `likes` + `comments` |\n| `email_contacts` | Removed (no replacement) |\n| `phone_call_clicks` | Removed (no replacement) |\n| `text_message_clicks` | Removed (no replacement) |\n| `get_directions_clicks` | Removed (no replacement) |\n| `website_clicks` | Removed (no replacement) |\n| `profile_views` | Removed (no replacement) |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}