# INSSIST (npm · @inssist/mcp)

Drive your own logged-in Instagram session via the INSSIST extension: read, publish, DMs, analytics.

- Trust score: 82/100 (high trust)
- Change this week: −2
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

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

## Channel facts

- Registry: `npm`
- Package: `@inssist/mcp`
- Version: `2.0.0`
- 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-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 93 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 48/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 43 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 76/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7683 tokens (~128/item across 60 items; 60 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 80/100
  - Stability observed for 24 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.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 61 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the INSSIST MCP server?

INSSIST runs locally as an npm package, launched with npx -y @inssist/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add inssist-inssist-mcp -- npx -y @inssist/mcp
```

### Cursor

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

### VS Code

```json
{
  "servers": {
    "inssist-inssist-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@inssist/mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add inssist-inssist-mcp -- npx -y @inssist/mcp
```

### opencode

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

### OpenClaw

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

### Hermes

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

### Netclaw

```json
{
  "McpServers": {
    "inssist-inssist-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@inssist/mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add inssist-inssist-mcp -t stdio -c npx -a -y @inssist/mcp
```

### Other

```json
{
  "mcpServers": {
    "inssist-inssist-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@inssist/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-11-05 (score 82, −3)

- [functional] Stability: pass → 0.80

### 2026-10-30 (score 85, +1)

- [security] Stability: 0.97 → pass

### 2026-10-28 (score 84, −1)

- [functional] Stability: pass → 0.93

### 2026-10-18 (score 85, +1)

- [security] Stability: 0.97 → pass

### 2026-10-16 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-14 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-13 (score 82, +1)

- [functional improvement] Security disclosure: unverified → pass

### 2026-10-12 (score 81, −3)

- [functional] Stability: pass → 0.80

## MCP tools (60)

### `account_info` (~49 tokens)

Account info

List connected browser instances, the account each is logged into, other available accounts, and the default target. `proTrialDaysLeft` > 0 means PRO write tools answer for that many more days.

### `account_switch` (~134 tokens)

Account switch

Switch the browser profile to another logged-in account (see account_info). Later calls act as it; reloads open Instagram tabs. Switching to the active account is a no-op.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `userId` (string): Target account id from account_info. This or username required.
- `username` (string): Target account username. This or userId required.

### `antibot_export` (~60 tokens)

Antibot export

Export the full antibot follower analysis (risk + type per follower) to a CSV file; returns the path. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `antibot_report` (~75 tokens)

Antibot report

Follower quality analysis from the last antibot scan: totals by risk and type, plus the flagged (unreviewed high/medium-risk) followers. Empty until a scan has run. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `antibot_scan` (~104 tokens)

Antibot scan

Start a follower scan scoring each follower bot/suspicious/fresh/clean. Runs in the background; poll antibot_report. Detection only — removes no one. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.

### `comment_add` (~112 tokens)

Comment add

Post a comment on a post. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `post` (string, required): Post: media id, shortcode, or URL.
- `text` (string, required): Comment text.

### `comment_delete` (~130 tokens)

Comment delete

Delete a comment — your own, or any on your own post. Permanent. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `commentId` (string, required): Comment to delete (from comments_list).
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `post` (string, required): The comment's post: media id, shortcode, or URL.

### `comment_like` (~123 tokens)

Comment like

Like a comment, or unlike with `unlike: true`. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `commentId` (string, required): Comment to like (from comments_list).
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `unlike` (boolean): True to remove a like; default false.

### `comment_reply` (~139 tokens)

Comment reply

Reply to a comment. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `commentId` (string, required): Comment being replied to (from comments_list).
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `post` (string, required): The comment's post: media id, shortcode, or URL.
- `text` (string, required): Reply text. Lead with @handle to notify the parent author.

### `comments_list` (~142 tokens)

Comments list

List comments on a post and their replies. (Requires INSSIST PRO.)

Input parameters:

- `cursor` (string): Resume token from a previous call's nextCursor. Omit for the first page.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `post` (string, required): Post: media id, shortcode, or URL.
- `replies` (string): A comment id: fetch that comment's replies instead of the post's top-level comments.

### `dm_accept` (~96 tokens)

DM accept

Accept a pending DM message request, moving it into the inbox. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `thread_id` (string, required): Request id from dm_requests.

### `dm_list` (~96 tokens)

DM list

List recent DM conversations, the last message, and whether a reply is awaited. Returns Instagram's single inbox page, which cannot be paged further. Read-only.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.

### `dm_mark_seen` (~102 tokens)

DM mark seen

Mark a DM conversation as read (up to its latest message), clearing its unread flag. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `thread_id` (string, required): Conversation id from dm_list.

### `dm_read` (~148 tokens)

DM read

Read a DM conversation's messages, oldest first. Returns the newest `limit` messages; raise `limit` to reach older ones. `has_more` means older messages were cut off. Read-only. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `limit` (number): How many of the newest messages to return, 1-200 (default 20).
- `thread_id` (string, required): Conversation id from dm_list.

### `dm_remove` (~103 tokens)

DM remove

Decline and remove a pending DM message request (from dm_requests). Does not touch inbox chats. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `thread_id` (string, required): Request id from dm_requests.

### `dm_requests` (~103 tokens)

DM requests

List pending DM message requests (cold inbound from non-connections, which do not appear in dm_list until accepted). Returns Instagram's single requests page, which cannot be paged further. Read-only.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.

### `dm_send` (~165 tokens)

DM send

Send a text message by thread_id (from dm_list) or username. A username never messaged before gets a new conversation, which lands in their message requests; those cold sends are capped per day. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `text` (string, required): Message text.
- `thread_id` (string): Conversation id from dm_list. Provide this or `username`.
- `username` (string): Recipient handle. Provide this or `thread_id`.

### `downloads_cancel` (~65 tokens)

Downloads cancel

Cancel a download started with downloads_start: stops it and deletes its saved data. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `jobId` (string, required): Job id from downloads_start.

### `downloads_start` (~291 tokens)

Downloads start

Download media to this machine: a whole account's posts/reels/stories/highlights via `username`, or one post via `url` — give exactly one. Returns a job id immediately; runs in the background, poll downloads_status. Files land in a timestamped INSSIST/@username/ folder with json+csv manifests. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `limit` (number): Cap per media type. Omit for everything. Only for a username download.
- `media` (array): Any of: posts, stories, highlights, reels (default all). "posts" = photos, videos, carousels and every reel shared to the grid. "reels" = reels missing from the grid: cover image and counts only, no…
- `url` (string): Permalink of one post to download (/p/, /reel/ or /tv/). Mutually exclusive with username; `media` and `limit` do not apply.
- `username` (string): Account to download in full. Private only if followed. Omit when downloading a single post.

### `downloads_status` (~106 tokens)

Downloads status

Progress of a downloads_start job: items saved per type and whether it finished, paused or failed. Once on disk, reports the folder and json-manifest path (each file with likes, comments, caption). Omit jobId to list all downloads. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `jobId` (string): Job id from downloads_start. Omit to list all.

### `draft_create` (~430 tokens)

Draft create

Create a draft post in INSSIST Post Assistant from photos/videos. Not published/scheduled — follow with draft_schedule or draft_publish using the returned draftId. Opens an Instagram tab if needed. (Requires INSSIST PRO.)

Input parameters:

- `assets` (array, required): Photos/videos in carousel order. Absolute local path or http(s) url. jpg/png/webp/mp4/mov/webm. Up to 20.
- `caption` (string): Caption, incl. hashtags and @mentions.
- `closeFriends` (boolean): Story only: share with Close Friends instead of everyone.
- `collaborators` (array): Usernames to invite as collaborators (co-authors), without @. Up to 5. Each is asked to accept, and the post then shows on their profile too. Posts and reels only.
- `disableComments` (boolean): Turn off commenting.
- `hideLikes` (boolean): Hide like and view counts.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `linkUrl` (string): Story only: http(s) URL for a link sticker.
- `location` (string): Place name to tag; first Instagram match wins.
- `mentions` (array): Usernames to tag in the photo, without @. Up to 20. Not the same as writing @name in the caption.
- `musicTrackId` (string): Track id from music_search. Needs a one-time audio permission in INSSIST.
- `musicTrackName` (string): Track title from music_search, shown as label. Optional.
- `shareToFeed` (boolean): Reel only: also show it in the feed. Default true.
- `stickerText` (string): Story only: text sticker content.
- `stretchToFill` (boolean): Fill the frame instead of letterboxing (default true). Crops a non-9:16 photo to fill a story; a no-op for a regular post unless the image is outside Instagram's allowed ratios.
- `type` (string): Publish as: post (default), reel or story.

### `draft_delete` (~91 tokens)

Draft delete

Remove a post from INSSIST Post Assistant, with its media. Only touches the INSSIST queue: a published entry is cleared from the list, the Instagram post itself is never affected. (Requires INSSIST PRO.)

Input parameters:

- `draftId` (string, required): Post id from draft_create or draft_list.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `draft_get` (~92 tokens)

Draft get

Read one Post Assistant post by id: status, schedule, full caption, assets, music, place, mentions and the last error. Same fields as draft_list, with the caption untruncated. (Requires INSSIST PRO.)

Input parameters:

- `draftId` (string, required): Post id from draft_create or draft_list.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `draft_list` (~104 tokens)

Draft list

List Post Assistant posts across all logged-in accounts: drafts, scheduled, recently published/failed. Soonest scheduled first, undated drafts last. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `limit` (number): Max posts, 1-200, default 50.
- `status` (string): Filter: draft, scheduled, publishing, published, failed, retrying.

### `draft_publish` (~89 tokens)

Draft publish

Publish a draft to Instagram now — immediate and cannot be undone here. Waits up to ~45s for the result; a slower upload continues in the background (see draft_list). (Requires INSSIST PRO.)

Input parameters:

- `draftId` (string, required): Post id from draft_create or draft_list.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `draft_reorder` (~98 tokens)

Draft reorder

Reorder scheduled posts by permuting the times they already hold: same slots, reassigned in the order listed. All must be already scheduled; to move to a new time use draft_schedule. (Requires INSSIST PRO.)

Input parameters:

- `draftIds` (array, required): Scheduled post ids in wanted order, earliest slot first. At least two.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `draft_schedule` (~125 tokens)

Draft schedule

Schedule an existing draft for a date/time; publishes automatically then (Chrome must be running and online). Use draft_create first, or draft_list for a draftId. (Requires INSSIST PRO.)

Input parameters:

- `at` (string, required): Publish time, ISO 8601. No offset = browser local time, e.g. "2026-08-22T18:30". Must be future.
- `draftId` (string, required): Post id from draft_create or draft_list.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `draft_update` (~421 tokens)

Draft update

Edit an unpublished post: caption, scheduled time, type, music, place, tags or framing. Pass at least one field; others unchanged. Published or publishing posts cannot be edited. (Requires INSSIST PRO.)

Input parameters:

- `at` (string): New publish time for an already scheduled post, ISO 8601, must be future. To schedule a draft for the first time use draft_schedule.
- `caption` (string): New caption, replaces the old one. Empty string clears it.
- `closeFriends` (boolean): Story only: share with Close Friends instead of everyone.
- `collaborators` (array): Usernames to invite as collaborators (co-authors), without @, replacing the current ones. Up to 5. Empty array removes them all.
- `disableComments` (boolean): Turn off commenting.
- `draftId` (string, required): Post id from draft_create or draft_list.
- `hideLikes` (boolean): Hide like and view counts.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `linkUrl` (string): Story only: http(s) URL for a link sticker.
- `location` (string): Place name to tag; first Instagram match wins. Empty string removes the place.
- `mentions` (array): Usernames to tag in the photo, without @, replacing the current tags. Empty array removes them all.
- `musicTrackId` (string): Track id from music_search to attach. Empty string removes the track.
- `musicTrackName` (string): Track title from music_search, shown as label. Optional, goes with musicTrackId.
- `shareToFeed` (boolean): Reel only: also show it in the feed. Default true.
- `stickerText` (string): Story only: text sticker content.
- `stretchToFill` (boolean): true fills the frame (crops letterbox), false letterboxes. Omit to leave framing as is.
- `type` (string): Change how it publishes: post, reel or story.

### `events_check` (~180 tokens)

Events check

New Instagram activity since a cursor, in one request: never waits. Returns the events and the cursor to pass back next time. First call without a cursor returns only the cursor. Check on the schedule the user asked for, minutes apart, not in a loop. Read-only. (Requires INSSIST PRO.)

Input parameters:

- `cursor` (string): From the previous events_check answer. Omit on the first call.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `kinds` (array): Any of: dm, dm_requests, comments, likes, follows, mentions. Default: dm and dm_requests, the cheapest to check.

### `follow_requests_list` (~102 tokens)

Follow requests list

List pending follow requests to your account. (Requires INSSIST PRO.)

Input parameters:

- `cursor` (string): Resume token from a previous call's nextCursor. Omit for the first page.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.

### `follower_remove` (~130 tokens)

Follower remove

Remove an account from your followers without blocking it. They are not notified and can follow again. Use this, not ig_block, when asked to remove a follower. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `user` (string, required): Account: username, profile URL, or numeric id.

### `growth_configure` (~218 tokens)

Growth configure

Set lead-engagement config: source accounts, likes per lead, leads scanned per source, skip filters. Partial — only fields you pass change. Editing interrupts a run in progress. (Requires INSSIST PRO.)

Input parameters:

- `bannedUsernames` (string): Space-separated @usernames to skip.
- `bannedWords` (string): Space-separated words; skip leads whose posts contain them.
- `custom` (boolean): Take leads from the given `sources` (true) or from accounts you follow (false).
- `excludedSources` (string): Space-separated @usernames excluded from source scanning.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `leadsToScan` (number): Leads to scan per source (>=1).
- `maxLikes` (number): Max likes per lead (>= minLikes).
- `minLikes` (number): Min likes per lead (>=1).
- `sources` (string): Space-separated @usernames to pull leads from; used when custom=true.

### `growth_export` (~57 tokens)

Growth export

Export lead-engagement results (leads and likes made) to a CSV file; returns the path. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `growth_pause` (~55 tokens)

Growth pause

Turn off lead engagement for the logged-in account. No further likes are made until growth_start. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `growth_start` (~71 tokens)

Growth start

Turn on lead engagement: scan the configured sources and like leads’ posts, paced by the like budget and rate-limit backoff. Runs in the background; poll growth_status. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `growth_status` (~66 tokens)

Growth status

Lead-engagement state for the logged-in account: on/off, current config, leads and sources found, likes made, and remaining daily like budget. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `ig_action` (~220 tokens)

Instagram action

Like, unlike, follow or unfollow. One target per call. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `postId` (string): Target post for "unlike", as returned by a preceding like. Ignored by the other types.
- `shortcode` (string): Alternative target for "unlike": the post shortcode from a permalink (/p/<shortcode>/).
- `type` (string, required): Exactly one of: "like", "unlike", "follow", "unfollow". No other value is accepted.
- `username` (string): Target account, without @. Required for like, follow and unfollow; ignored by unlike. For "like" INSSIST picks which recent post of that account to like.

### `ig_block` (~134 tokens)

Instagram block

Block an account, or unblock with `unblock: true`. Blocking cuts all contact and hides your profile from them. Rate-limited calls return `done: false`. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `unblock` (boolean): True to unblock; default false.
- `user` (string, required): Account: username, profile URL, or numeric id.

### `ig_fetch_post` (~161 tokens)

Instagram fetch post

Fetch one post by url or shortcode: caption, owner, media type, like/comment counts, timestamp, media urls. Works for /p/, /reel/, /tv/. Like ig_fetch_posts plus owner and full-size media.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `shortcode` (string): Post shortcode on its own, e.g. ABC123. Give this or url.
- `url` (string): Post permalink, e.g. https://www.instagram.com/p/ABC123/. Give this or shortcode.

### `ig_fetch_posts` (~152 tokens)

Instagram fetch posts

Fetch most recent posts of an account: caption, media type, likes, comments, timestamp, shortcode, permalink. Newest first. Pages internally; returns nextCursor when more remain.

Input parameters:

- `cursor` (string): Resume token from a previous call's nextCursor. Omit for newest.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `limit` (number): Max posts to return, 1-1500, default 50.
- `username` (string, required): Account username.

### `ig_fetch_profile` (~95 tokens)

Instagram fetch profile

Fetch profile of an account: bio, links, follower/following/post counts, flags, viewer relationship.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `username` (string, required): Account username.

### `ig_fetch_saved` (~95 tokens)

Instagram fetch saved

List your saved posts, newest first.

Input parameters:

- `cursor` (string): Resume token from a previous call's nextCursor. Omit for the first page.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.

### `ig_fetch_stories` (~96 tokens)

Instagram fetch stories

Fetch an account's currently live stories, as the session sees them. Empty when none or not viewable.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `username` (string, required): Account username.

### `ig_post_delete` (~122 tokens)

Instagram post delete

Permanently delete a published Instagram post. Own posts only. This cannot be undone. To remove an unpublished draft or a scheduled post from the queue, use draft_delete instead. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `post` (string, required): Post: media id, shortcode, or URL.

### `ig_post_edit` (~117 tokens)

Instagram post edit

Edit a published Instagram post's caption. Own posts only. (Requires INSSIST PRO.)

Input parameters:

- `caption` (string, required): The new caption. Pass an empty string to clear it.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `post` (string, required): Post: media id, shortcode, or URL.

### `ig_search` (~148 tokens)

Instagram search

Search Instagram accounts and hashtags by free text (the app's search box). Turn a half-remembered name into a username for the other ig_* tools. For taggable places, use location_search.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `query` (string, required): What to search for. A leading @ or # is ignored.
- `type` (string): "account" or "hashtag". Omit to search both, which costs two requests.

### `insights_collect` (~154 tokens)

Insights collect

Start (or refresh) an analytics scan of an account. Runs in the background and shows in INSSIST's Insights dashboard; poll insights_report for progress and results. (Requires INSSIST PRO.)

Input parameters:

- `followers` (boolean): Also scan followers for audience stats. Slower.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `postsLimit` (number): Max posts to scan, 1-1500. Omit for the default.
- `username` (string, required): Account to analyze.

### `insights_report` (~107 tokens)

Insights report

Read an insights_collect scan: progress while scanning, then metrics — engagement, best times, weekday/hour heatmap, post types, top posts, trends, posting frequency, follower growth. If followers were scanned, also audience quality (bot/suspicious/fresh/clean) and mutual overlap. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `username` (string, required): Account passed to insights_collect.

### `location_search` (~128 tokens)

Location search

Search Instagram places by name for their ids, to tag a post. Pass a returned name to draft_create's `location`. Only places with coordinates (the taggable ones) are returned.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `query` (string, required): Place name or address to look for, e.g. "blue bottle coffee" or "new york".

### `music_search` (~113 tokens)

Music search

Search Instagram's music library by title or artist. Returns track ids for draft_create's musicTrackId.

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `limit` (number): Max tracks, 1-50, default 20.
- `query` (string, required): Track title or artist.

### `note_set` (~133 tokens)

Note set

Set the logged-in account's Note. ≤60-chars. Atop the DM inbox avatar, gone in 24h. Pushes you to the top of the DM list. Empty text clears it. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `text` (string): Note text (≤60 chars). Empty or omitted clears the current note.

### `notifications_list` (~125 tokens)

Notifications list

Recent notifications: comments, likes, follows, mentions. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `limit` (number): Max notifications to return, 1-200, default 50. Newest first.
- `type` (string): Filter: all (default), comments, likes, follows or mentions.

### `peers_export` (~98 tokens)

Peers export

Export a full followers/following list to a CSV file; returns the file path. Run peers_scan first for other accounts. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `type` (string): List: followers (default) or following.
- `username` (string): Account to export, without @. Omit for the logged-in account.

### `peers_report` (~168 tokens)

Peers report

Read a page of a collected followers/following list (from/limit). Own account uses stored data, richer (adds `mutual`, `followedOn`; `mutual` is null when not checked yet); other accounts need peers_scan first. Whole list: peers_export. (Requires INSSIST PRO.)

Input parameters:

- `from` (number): Zero-based offset into the list, default 0.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `limit` (number): Page size, 1-1000, default 100.
- `type` (string): List: followers (default) or following.
- `username` (string): Account whose list to read, without @. Omit for the logged-in account.

### `peers_scan` (~114 tokens)

Peers scan

Start collecting an account's followers or following. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `type` (string): Collect followers (default) or following.
- `username` (string): Account to scan, without @. Omit for the logged-in account.

### `profile_update` (~127 tokens)

Profile update

Edit the logged-in account's bio (the text under the name on the profile). Own account only; changing bio links is not supported (app-only). Other profile fields are left untouched. (Requires INSSIST PRO.)

Input parameters:

- `bio` (string, required): The new bio text. Pass an empty string to clear it.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.

### `story_viewers` (~129 tokens)

Story viewers

See who viewed one of your active stories. (Requires INSSIST PRO.)

Input parameters:

- `cursor` (string): Resume token from a previous call's nextCursor. Omit for the first page.
- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.
- `storyId` (string, required): Story media id, from ig_fetch_stories. Must be one of your own active stories.

### `unfollowers_export` (~58 tokens)

Unfollowers export

Export the full list of accounts that unfollowed you to a CSV file; returns the path. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `unfollowers_report` (~79 tokens)

Unfollowers report

List accounts that unfollowed you in the last 7 days, from stored scan data. Run unfollowers_scan to refresh; poll `scanning` and `lastScanOn` for freshness. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.

### `unfollowers_scan` (~106 tokens)

Unfollowers scan

Start an unfollower scan for the logged-in account. Runs in the background through INSSIST's paced follower crawl; poll unfollowers_report for progress and results. (Requires INSSIST PRO.)

Input parameters:

- `instance` (string): Optional. Browser instance id from account_info; defaults to the active one.
- `instant` (boolean): Optional. Skip INSSIST's action pacing and run now — use only when the user asked for an unspaced or burst action.

## Diagnostics

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

## Score history

- 2026-11-05: 82
- 2026-11-04: 85
- 2026-11-03: 85
- 2026-11-02: 85
- 2026-11-01: 85
- 2026-10-31: 85
- 2026-10-30: 85
- 2026-10-29: 84
- 2026-10-28: 84
- 2026-10-27: 85
- 2026-10-26: 85
- 2026-10-25: 85
- 2026-10-24: 85
- 2026-10-23: 85
- 2026-10-22: 85
- 2026-10-21: 85
- 2026-10-20: 85
- 2026-10-19: 85
- 2026-10-18: 85
- 2026-10-17: 84
- 2026-10-16: 84
- 2026-10-15: 83
- 2026-10-14: 83
- 2026-10-13: 82
- 2026-10-12: 81
- 2026-10-11: 84
- 2026-10-05: 82
- 2026-10-04: 82
- 2026-10-03: 81
- 2026-10-02: 81

## Common questions

### What is the INSSIST MCP server?

INSSIST is an MCP server listed in the public MCP registry as io.github.inssist/inssist-mcp. Drive your own logged-in Instagram session via the INSSIST extension: read, publish, DMs, analytics. This page covers its npm package (@inssist/mcp).

### Is the INSSIST MCP server safe to use?

INSSIST scores 82 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the INSSIST MCP server expose?

INSSIST exposes 60 tools: account_info, account_switch, antibot_export, antibot_report, antibot_scan, and 55 more. Their descriptions and schemas cost roughly 7,651 tokens of context every time the server is loaded.

### Is the INSSIST MCP server still maintained?

INSSIST is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the INSSIST MCP server under?

INSSIST declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the INSSIST MCP server?

VerifyMCP ran 16 checks on INSSIST, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/@inssist/mcp
- Socket report: https://socket.dev/npm/package/@inssist/mcp
- Repository: https://github.com/inssist/mcp
- Website: https://inssist.com/feature-guides/inssist-mcp-server-for-ai-agents
- Changelog RSS feed: https://verifymcp.io/servers/inssist-inssist-mcp/inssist-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/inssist-inssist-mcp/inssist-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/inssist-inssist-mcp/inssist-mcp.json
- HTML version of this page: https://verifymcp.io/servers/inssist-inssist-mcp/inssist-mcp
