# io.github.mikusnuz/meta (npm · @mikusnuz/meta-mcp)

MCP server for Instagram Graph API, Threads API & Meta platform management

- Trust score: 70/100 (medium)
- Change this week: +46
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@mikusnuz/meta-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/mikusnuz-meta/mikusnuz-meta-mcp.md), [page](https://verifymcp.io/servers/mikusnuz-meta/mikusnuz-meta-mcp)

## Channel facts

- Registry: `npm`
- Package: `@mikusnuz/meta-mcp`
- Version: `2.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 132 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3581 tokens (~60/item across 59 items; 57 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add mikusnuz-meta -- npx -y @mikusnuz/meta-mcp
```

### Codex

```bash
codex mcp add mikusnuz-meta -- npx -y @mikusnuz/meta-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mikusnuz-meta": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@mikusnuz/meta-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mikusnuz-meta --command npx --arg -y --arg @mikusnuz/meta-mcp
```

### Hermes

```yaml
mcp_servers:
  mikusnuz-meta:
    command: "npx"
    args: ["-y", "@mikusnuz/meta-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "mikusnuz-meta": {
      "command": "npx",
      "args": [
        "-y",
        "@mikusnuz/meta-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 70, +33)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Stability: unverified → 0.20
- [functional] Licence: MIT

### 2026-08-01 (score 37, +32)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-31 (score 5, −37)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 42, −39)

- [security regression] Known CVEs: partial → unverified
- [security regression] Malware scan: pass → unverified
- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [functional regression] Dependency health: partial → unverified
- [functional regression] License: pass → unverified
- [functional regression] Maintenance: pass → unverified
- [functional] Licence: MIT

### 2026-07-29 (score 81, +55)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: good
- [functional] First check of Schema quality: pass
- [functional] First check of Schema quality: fail
- [functional] Licence: MIT

### 2026-07-28 (score 26, +2)

- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (57)

### `meta_exchange_token` (~50 tokens)

Exchange a short-lived token for a long-lived token (valid ~60 days). Requires META_APP_ID and META_APP_SECRET.

Input parameters:

- `short_lived_token` (string, required): Short-lived access token to exchange

### `meta_refresh_token` (~42 tokens)

Refresh a long-lived token before it expires. Returns a new long-lived token.

Input parameters:

- `long_lived_token` (string, required): Current long-lived access token to refresh

### `meta_debug_token` (~38 tokens)

Debug/inspect an access token to check validity, expiration, scopes and associated user.

Input parameters:

- `input_token` (string, required): Access token to inspect

### `meta_get_app_info` (~24 tokens)

Get Meta App basic information (name, category, namespace, etc.).

### `meta_subscribe_webhook` (~97 tokens)

Subscribe to webhook notifications for an object (e.g., 'instagram', 'page'). Requires META_APP_ID and META_APP_SECRET.

Input parameters:

- `callback_url` (string, required): HTTPS webhook endpoint URL
- `fields` (string, required): Comma-separated list of fields to subscribe (e.g., 'messages,feed')
- `object` (string, required): Object type to subscribe to
- `verify_token` (string, required): Verification token for the webhook

### `meta_get_webhook_subscriptions` (~21 tokens)

List current webhook subscriptions for the Meta App.

### `ig_publish_photo` (~110 tokens)

Publish a photo to Instagram. Two-step process: creates container then publishes. Requires image_url (publicly accessible HTTPS URL).

Input parameters:

- `alt_text` (string): Alt text for accessibility
- `caption` (string): Post caption (max 2200 chars)
- `image_url` (string, required): Public HTTPS URL of the image (JPEG only)
- `location_id` (string): Facebook Page location ID
- `user_tags` (string): JSON array of user tags: [{username, x, y}]

### `ig_publish_video` (~71 tokens)

Publish a video to Instagram feed. Waits for video processing before publishing.

Input parameters:

- `caption` (string): Post caption
- `location_id` (string): Facebook Page location ID
- `thumb_offset` (number): Thumbnail offset in ms
- `video_url` (string, required): Public HTTPS URL of the video

### `ig_publish_carousel` (~67 tokens)

Publish a carousel (album) post with 2-10 images/videos. Each item needs an image_url or video_url.

Input parameters:

- `caption` (string): Post caption
- `items` (array, required): Array of media items
- `location_id` (string): Facebook Page location ID

### `ig_publish_reel` (~98 tokens)

Publish a Reel (short video). Waits for video processing.

Input parameters:

- `alt_text` (string): Alt text for accessibility
- `caption` (string): Reel caption
- `cover_url` (string): Custom cover image URL
- `share_to_feed` (boolean): Also share to feed (default true)
- `thumb_offset` (number): Thumbnail offset in ms
- `video_url` (string, required): Public HTTPS URL of the video

### `ig_publish_story` (~49 tokens)

Publish a Story (image or video). Stories disappear after 24 hours.

Input parameters:

- `media_type` (string, required): Story media type
- `media_url` (string, required): Public HTTPS URL of the media

### `ig_get_container_status` (~36 tokens)

Check the processing status of a media container (useful for videos).

Input parameters:

- `container_id` (string, required): Container ID to check

### `ig_get_media_list` (~62 tokens)

Get list of media published on the Instagram account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `before` (string): Pagination cursor for previous page
- `limit` (number): Number of results (max 100, default 25)

### `ig_get_media` (~62 tokens)

Get details of a specific Instagram media post.

Input parameters:

- `fields` (string): Comma-separated fields (default: id,caption,media_type,media_url,permalink,timestamp,like_count,comments_count)
- `media_id` (string, required): Media ID

### `ig_delete_media` (~48 tokens)

Delete an Instagram media post (posts, carousels, reels, stories). This action is irreversible. Requires instagram_manage_contents permission.

Input parameters:

- `media_id` (string, required): Media ID to delete

### `ig_get_media_insights` (~114 tokens)

Get insights/analytics for a specific media post. Note: 'impressions' and 'video_views' were deprecated in v22.0 — use 'views' instead. Available metrics: views, reach, saved, shares, likes, comments, reposts, reels_skip_rate.

Input parameters:

- `media_id` (string, required): Media ID
- `metric` (string): Comma-separated metrics (default: views,reach,saved,shares). For REEL add: likes,comments,reposts,reels_skip_rate

### `ig_toggle_comments` (~44 tokens)

Enable or disable comments on an Instagram media post.

Input parameters:

- `enabled` (boolean, required): true to enable comments, false to disable
- `media_id` (string, required): Media ID

### `ig_get_comments` (~49 tokens)

Get comments on a specific Instagram media post.

Input parameters:

- `after` (string): Pagination cursor
- `limit` (number): Number of comments to return
- `media_id` (string, required): Media ID

### `ig_get_comment` (~26 tokens)

Get details of a specific comment.

Input parameters:

- `comment_id` (string, required): Comment ID

### `ig_post_comment` (~41 tokens)

Post a top-level comment on a media post.

Input parameters:

- `media_id` (string, required): Media ID to comment on
- `message` (string, required): Comment text

### `ig_get_replies` (~52 tokens)

Get replies to a specific comment.

Input parameters:

- `after` (string): Pagination cursor
- `comment_id` (string, required): Comment ID to get replies for
- `limit` (number): Number of replies to return

### `ig_reply_to_comment` (~38 tokens)

Reply to a specific comment.

Input parameters:

- `comment_id` (string, required): Comment ID to reply to
- `message` (string, required): Reply text

### `ig_hide_comment` (~44 tokens)

Hide or unhide a comment on your post.

Input parameters:

- `comment_id` (string, required): Comment ID
- `hide` (boolean, required): true to hide, false to unhide

### `ig_delete_comment` (~34 tokens)

Delete a comment from your media post. This action is irreversible.

Input parameters:

- `comment_id` (string, required): Comment ID to delete

### `ig_get_profile` (~18 tokens)

Get Instagram Business/Creator account profile information.

### `ig_get_account_insights` (~151 tokens)

Get Instagram account insights. Note: 'impressions', 'email_contacts', 'phone_call_clicks', 'text_message_clicks', 'get_directions_clicks', 'website_clicks', 'profile_views' were deprecated in v22.0. Use 'views', 'reach', 'follower_count', 'reposts' instead.

Input parameters:

- `metric` (string, required): Comma-separated metrics: views,reach,follower_count,reposts,accounts_engaged,total_interactions
- `period` (string, required): Aggregation period
- `since` (string): Start date (Unix timestamp or ISO 8601)
- `until` (string): End date (Unix timestamp or ISO 8601)

### `ig_business_discovery` (~68 tokens)

Look up another Instagram Business/Creator account's public info by username.

Input parameters:

- `fields` (string): Fields to retrieve (default: id,username,name,biography,followers_count,follows_count,media_count)
- `username` (string, required): Instagram username to look up (without @)

### `ig_get_collaboration_invites` (~47 tokens)

Get pending collaboration invites for the Instagram account. Added in December 2025.

Input parameters:

- `after` (string): Pagination cursor
- `limit` (number): Number of results

### `ig_respond_collaboration_invite` (~50 tokens)

Accept or decline a collaboration invite. Added in December 2025.

Input parameters:

- `action` (string, required): Accept or decline the invite
- `invite_id` (string, required): Collaboration invite ID

### `ig_search_hashtag` (~52 tokens)

Search for a hashtag ID by name. Required before querying hashtag media. Limited to 30 unique hashtags per 7-day rolling window.

Input parameters:

- `q` (string, required): Hashtag name to search (without #)

### `ig_get_hashtag` (~33 tokens)

Get hashtag information by ID.

Input parameters:

- `hashtag_id` (string, required): Hashtag ID (from ig_search_hashtag)

### `ig_get_hashtag_recent` (~50 tokens)

Get recent media tagged with a specific hashtag.

Input parameters:

- `after` (string): Pagination cursor
- `hashtag_id` (string, required): Hashtag ID
- `limit` (number): Number of results

### `ig_get_hashtag_top` (~54 tokens)

Get top (most popular) media tagged with a specific hashtag.

Input parameters:

- `after` (string): Pagination cursor
- `hashtag_id` (string, required): Hashtag ID
- `limit` (number): Number of results

### `ig_get_mentioned_comments` (~62 tokens)

Get comments where the account was @mentioned. Returns the media and comment details.

Input parameters:

- `comment_id` (string, required): Comment ID from a mention notification
- `fields` (string): Fields to return (default: id,text,timestamp,username,media)

### `ig_get_tagged_media` (~45 tokens)

Get media where the account is tagged (photo tags, not @mentions).

Input parameters:

- `after` (string): Pagination cursor
- `limit` (number): Number of results

### `ig_get_conversations` (~62 tokens)

Get Instagram DM conversations list. Requires 'instagram_manage_messages' permission and the Instagram Messaging API.

Input parameters:

- `after` (string): Pagination cursor
- `folder` (string): Folder to retrieve (default: inbox)
- `limit` (number): Number of conversations

### `ig_get_messages` (~46 tokens)

Get messages in a specific DM conversation.

Input parameters:

- `after` (string): Pagination cursor
- `conversation_id` (string, required): Conversation ID
- `limit` (number): Number of messages

### `ig_send_message` (~75 tokens)

Send a DM to a user. Requires 'instagram_manage_messages' permission. Can only message users who have messaged you first (24hr window for standard, 7-day for human agent).

Input parameters:

- `message` (string, required): Message text to send
- `recipient_id` (string, required): Instagram-scoped user ID of the recipient

### `ig_get_message` (~27 tokens)

Get details of a specific DM message.

Input parameters:

- `message_id` (string, required): Message ID

### `threads_publish_text` (~218 tokens)

Publish a text-only post on Threads. Supports optional link attachment, poll, GIF, topic tag, and quote post.

Input parameters:

- `alt_text` (string): Alt text for accessibility (max 1000 chars)
- `gif_id` (string): GIF ID from GIPHY or Tenor
- `gif_provider` (string): GIF provider (GIPHY or TENOR). Tenor sunsets March 31, 2026.
- `is_spoiler` (boolean): Mark content as spoiler
- `link_attachment` (string): URL to attach as a link preview card (max 5 links per post)
- `poll_options` (array): Poll options (2-4 choices). Creates a poll attachment.
- `quote_post_id` (string): ID of a post to quote
- `reply_control` (string): Who can reply
- `text` (string, required): Post text (max 500 chars)
- `topic_tag` (string): Topic tag for the post (1-50 chars, no periods or ampersands)

### `threads_publish_image` (~133 tokens)

Publish an image post on Threads. Supports topic tag, quote post, alt text, and spoiler flag.

Input parameters:

- `alt_text` (string): Alt text for accessibility (max 1000 chars)
- `image_url` (string, required): Public HTTPS URL of the image (JPEG/PNG, max 8MB)
- `is_spoiler` (boolean): Mark content as spoiler
- `quote_post_id` (string): ID of a post to quote
- `reply_control` (string): Who can reply
- `text` (string): Caption text
- `topic_tag` (string): Topic tag for the post

### `threads_publish_video` (~146 tokens)

Publish a video post on Threads. Waits for video processing. Supports topic tag, quote post, alt text, and spoiler flag.

Input parameters:

- `alt_text` (string): Alt text for accessibility (max 1000 chars)
- `is_spoiler` (boolean): Mark content as spoiler
- `quote_post_id` (string): ID of a post to quote
- `reply_control` (string): Who can reply
- `text` (string): Caption text
- `topic_tag` (string): Topic tag for the post
- `video_url` (string, required): Public HTTPS URL of the video (MP4/MOV, max 1GB, up to 5 min)

### `threads_publish_carousel` (~83 tokens)

Publish a carousel post on Threads with 2-20 images/videos.

Input parameters:

- `items` (array, required): Array of media items
- `quote_post_id` (string): ID of a post to quote
- `reply_control` (string): Who can reply
- `text` (string): Caption text
- `topic_tag` (string): Topic tag for the post

### `threads_delete_post` (~44 tokens)

Delete a Threads post. This action is irreversible. Rate limited to 100 deletions per 24 hours.

Input parameters:

- `post_id` (string, required): Threads post ID to delete

### `threads_get_container_status` (~32 tokens)

Check the processing status of a Threads media container.

Input parameters:

- `container_id` (string, required): Container ID to check

### `threads_get_publishing_limit` (~33 tokens)

Check how many posts you can still publish within the current 24-hour window (max 250 posts/day).

### `threads_get_posts` (~83 tokens)

Get a list of published Threads posts.

Input parameters:

- `after` (string): Pagination cursor
- `before` (string): Pagination cursor
- `limit` (number): Number of results (default 25)
- `since` (string): Start date (ISO 8601 or Unix timestamp)
- `until` (string): End date (ISO 8601 or Unix timestamp)

### `threads_get_post` (~39 tokens)

Get details of a specific Threads post.

Input parameters:

- `fields` (string): Comma-separated fields
- `post_id` (string, required): Threads post ID

### `threads_search_posts` (~128 tokens)

Search for public Threads posts by keyword or topic tag. Results can be filtered by media type and author.

Input parameters:

- `after` (string): Pagination cursor
- `author_username` (string): Filter results by author username
- `limit` (number): Number of results
- `media_type` (string): Filter results by media type
- `q` (string, required): Search keyword or query
- `search_type` (string): Search by keyword or topic tag (default: keyword)
- `since` (string): Start date (Unix timestamp)
- `until` (string): End date (Unix timestamp)

### `threads_get_replies` (~65 tokens)

Get replies (conversation) for a specific Threads post.

Input parameters:

- `after` (string): Pagination cursor
- `limit` (number): Number of replies
- `post_id` (string, required): Threads post ID to get replies for
- `reverse` (boolean): Reverse chronological order

### `threads_reply` (~66 tokens)

Reply to a Threads post or another reply.

Input parameters:

- `image_url` (string): Optional image URL to attach
- `reply_to_id` (string, required): Post ID to reply to
- `text` (string, required): Reply text
- `video_url` (string): Optional video URL to attach

### `threads_hide_reply` (~38 tokens)

Hide a reply on your Threads post. Hidden replies are still visible if directly accessed.

Input parameters:

- `reply_id` (string, required): Reply ID to hide

### `threads_unhide_reply` (~34 tokens)

Unhide a previously hidden reply on your Threads post.

Input parameters:

- `reply_id` (string, required): Reply ID to unhide

### `threads_get_profile` (~18 tokens)

Get Threads user profile information including verification status.

### `threads_get_user_threads` (~80 tokens)

Get all threads published by the user (alias for threads_get_posts with user context).

Input parameters:

- `after` (string): Pagination cursor
- `limit` (number): Number of results
- `since` (string): Start date (ISO 8601 or Unix timestamp)
- `until` (string): End date (ISO 8601 or Unix timestamp)

### `threads_get_post_insights` (~71 tokens)

Get insights/analytics for a specific Threads post (views, likes, replies, reposts, quotes, clicks).

Input parameters:

- `metric` (string): Comma-separated metrics (default: views,likes,replies,reposts,quotes,clicks)
- `post_id` (string, required): Threads post ID

### `threads_get_user_insights` (~90 tokens)

Get account-level Threads insights (views, likes, replies, reposts, quotes, clicks, followers, follower demographics).

Input parameters:

- `metric` (string, required): Comma-separated metrics: views,likes,replies,reposts,quotes,clicks,followers_count,follower_demographics
- `since` (string): Start date (Unix timestamp)
- `until` (string): End date (Unix timestamp)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/mikusnuz-meta/mikusnuz-meta-mcp#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 70
- 2026-08-01: 37
- 2026-07-31: 5
- 2026-07-30: 42
- 2026-07-29: 81
- 2026-07-28: 26
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/@mikusnuz/meta-mcp
- Socket report: https://socket.dev/npm/package/@mikusnuz/meta-mcp
- Repository: https://github.com/mikusnuz/meta-mcp
- Changelog RSS feed: https://verifymcp.io/servers/mikusnuz-meta/mikusnuz-meta-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/mikusnuz-meta/mikusnuz-meta-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/mikusnuz-meta/mikusnuz-meta-mcp
