Mcp Instagram Dm

io.github.KynuxDevPublished by GitHub account KynuxDevv2.1.1Updated Oct 24, 2026

Read, send, search & manage Instagram DMs through AI assistants. 15 tools, cookie auth.

Overview

AI-generated overview

Lets an assistant read, search, send, and manage Instagram Direct Messages using your own session cookies.

What you can do
Bridges an MCP-compatible assistant to Instagram's private web API through 15 tools. Read tools list the inbox, fetch thread messages with auto-pagination, show pending DM requests, and return user or thread details. Write tools send text or links, start new threads, react with emoji, unsend your own messages, mark threads seen, and approve pending requests. Search tools find conversations, messages within a thread, and users.
When to use it
Useful if you want to triage, search, or reply to Instagram DMs in natural language from a desktop assistant instead of the app. Best for personal, low-volume use by someone comfortable handling their own session cookies.
Requirements
Runs locally over stdio, typically via npx mcp-instagram-dm, so Node.js is needed. Requires three environment variables from your logged-in Instagram browser session: INSTAGRAM_SESSION_ID, INSTAGRAM_CSRF_TOKEN, and INSTAGRAM_DS_USER_ID. Optional INSTAGRAM_RATE_LIMIT_MS controls pagination delay. Desktop clients only; network access to Instagram is required.
Before you install
It asks for live Instagram session cookies (INSTAGRAM_SESSION_ID, INSTAGRAM_CSRF_TOKEN, INSTAGRAM_DS_USER_ID), which grant full account access and must never be shared or committed. Tools send messages, start threads, react, unsend, and approve requests, so an assistant can act on your account. It uses Instagram's unofficial web API, which may break, and misuse risks account restrictions; the project states personal use only.

Installation

In SourceWeft

  1. Open Mcp Instagram Dm in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

📨 MCP Instagram DM

Control your Instagram DMs with AI

Read, send, search, and manage Instagram Direct Messages through natural language with any MCP-compatible AI assistant.

[npm version] [npm downloads] [GitHub stars]

[CI] [License: MIT] [Node.js] [TypeScript] [MCP]


A Model Context Protocol server that bridges Instagram Direct Messages with AI assistants like Claude, Cursor, and any MCP-compatible client.

Cookie-based authentication — no API keys, no OAuth, just works.


Getting Started · Features · Configuration · Tools Reference · Contributing


💡 If you find this useful, please consider giving it a ⭐ — it helps others discover the project!


⚡ Getting Started

Get up and running in under 60 seconds:

1. Add to your MCP config (Claude Desktop, Claude Code, or Cursor):

json
{  "mcpServers": {    "instagram": {      "command": "npx",      "args": ["-y", "mcp-instagram-dm"],      "env": {        "INSTAGRAM_SESSION_ID": "your_session_id",        "INSTAGRAM_CSRF_TOKEN": "your_csrf_token",        "INSTAGRAM_DS_USER_ID": "your_user_id"      }    }  }}

2. Talk to your AI assistant:

"Read my Instagram DMs"

That's it — you're ready. 🎉

Need help getting your cookies? See Configuration below.

🎬 What It Looks Like

You:    "Show me my unread Instagram DMs"Claude: Fetching your inbox...
        📬 Inbox (3 conversations)
        [UNREAD] john_doe (thread_id: 340282366841710300...)          Last: [2026-03-29 14:23:01] john_doe: Hey, are you free tonight?
        [UNREAD] [GROUP] project_team (thread_id: 340282366841710301...)          Last: [2026-03-29 13:45:22] alice: Meeting moved to 3pm
        jane_smith (thread_id: 340282366841710302...)          Last: [2026-03-29 10:12:45] You: Thanks! See you then
You:    "Reply to john_doe: Yeah, let's meet at 7!"Claude: ✅ Message sent: "Yeah, let's meet at 7!"

✨ Features

15 tools across three categories — everything you need to manage your Instagram DMs:

📥 Read & Monitor

ToolDescription
instagram_get_inboxList recent DM conversations with unread/group/muted indicators
instagram_get_threadGet messages from a conversation (auto-paginates — fetch 500+ messages at once)
instagram_get_pendingList pending DM requests waiting for your approval
instagram_user_infoGet any user's profile: bio, followers, posts, verification
instagram_thread_infoThread metadata: participants, group info, mute/archive status

✏️ Send & Manage

ToolDescription
instagram_send_messageSend a text message in any thread
instagram_send_linkShare a URL with optional caption
instagram_create_threadStart a new DM with one or multiple users
instagram_like_messageReact to any message with any emoji
instagram_unsend_messageUnsend your own messages
instagram_mark_seenMark a conversation as read
instagram_approve_pendingApprove a pending DM request

🔍 Search & Discover

ToolDescription
instagram_search_inboxSearch conversations by username or name (scans all pages)
instagram_search_messagesFind messages containing specific text within a thread
instagram_search_usersSearch Instagram users to start new conversations

📦 Installation

npx (recommended — zero install)

bash
npx mcp-instagram-dm

npm global

bash
npm install -g mcp-instagram-dmmcp-instagram-dm

From source

bash
git clone https://github.com/KynuxDev/mcp-instagram-dm.gitcd mcp-instagram-dmnpm install && npm run buildnode dist/index.js

🔧 Configuration

Getting Your Cookies

  1. Open instagram.com in Chrome and log in
  2. Press F12 → Application tab → Cookies → https://www.instagram.com
  3. Copy these three values:
Cookie NameEnvironment VariableDescription
sessionidINSTAGRAM_SESSION_IDYour session token
csrftokenINSTAGRAM_CSRF_TOKENCSRF protection token
ds_user_idINSTAGRAM_DS_USER_IDYour numeric user ID

💡 Tip: You can also run node get-cookies.js for a guided walkthrough.

Environment Variables

VariableRequiredDefaultDescription
INSTAGRAM_SESSION_ID✅—Your Instagram session cookie
INSTAGRAM_CSRF_TOKEN✅—CSRF token from cookies
INSTAGRAM_DS_USER_ID✅—Your numeric user ID
INSTAGRAM_RATE_LIMIT_MS—300Delay between paginated API requests (ms)

Client Setup

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "instagram": {      "command": "npx",      "args": ["-y", "mcp-instagram-dm"],      "env": {        "INSTAGRAM_SESSION_ID": "your_session_id",        "INSTAGRAM_CSRF_TOKEN": "your_csrf_token",        "INSTAGRAM_DS_USER_ID": "your_user_id"      }    }  }}
Claude Code

Add to your project's .mcp.json:

json
{  "mcpServers": {    "instagram": {      "command": "npx",      "args": ["-y", "mcp-instagram-dm"],      "env": {        "INSTAGRAM_SESSION_ID": "your_session_id",        "INSTAGRAM_CSRF_TOKEN": "your_csrf_token",        "INSTAGRAM_DS_USER_ID": "your_user_id"      }    }  }}
Cursor

Add to .cursor/mcp.json in your project:

json
{  "mcpServers": {    "instagram": {      "command": "npx",      "args": ["-y", "mcp-instagram-dm"],      "env": {        "INSTAGRAM_SESSION_ID": "your_session_id",        "INSTAGRAM_CSRF_TOKEN": "your_csrf_token",        "INSTAGRAM_DS_USER_ID": "your_user_id"      }    }  }}

💬 Usage Examples

Just talk naturally to your AI assistant:

What you sayWhat happens
"Read my unread Instagram DMs"Fetches inbox with unread indicators
"Send 'Hey!' to @username"Finds the thread and sends the message
"Search my DMs for messages about 'meeting'"Scans thread messages for the keyword
"Start a new conversation with @johndoe"Creates a new thread and sends your message
"Show me pending DM requests and approve them"Lists and approves pending requests
"What's @user's profile info?"Fetches full profile details
"Get the last 200 messages with @friend"Auto-paginates to fetch all messages
"React with 🔥 to the last message"Sends emoji reaction to any message

📖 Tools Reference

View all 15 tools with parameters
ToolDescriptionParameters
instagram_get_inboxList DM conversationslimit?, cursor?
instagram_get_threadGet thread messages (auto-paginates)thread_id, limit?, cursor?
instagram_get_pendingList pending requestslimit?, cursor?
instagram_user_infoGet user profileuser_id
instagram_thread_infoGet thread detailsthread_id
instagram_send_messageSend text messagethread_id, text
instagram_send_linkShare a URLthread_id, url, text?
instagram_create_threadStart new DMrecipient_ids[], text
instagram_like_messageReact with emojithread_id, item_id, emoji?
instagram_unsend_messageUnsend a messagethread_id, item_id
instagram_mark_seenMark as readthread_id, item_id
instagram_approve_pendingApprove requestthread_id
instagram_search_inboxSearch conversationsquery, max_pages?
instagram_search_messagesSearch within threadthread_id, query, max_messages?
instagram_search_usersFind usersquery

🏗️ Architecture

┌─────────────────────┐     MCP (stdio)     ┌──────────────────────┐│   AI Assistant       │◄──────────────────►│   MCP Server          ││   (Claude, Cursor)   │                     │   src/index.ts        │└─────────────────────┘                     │   15 tools            │                                             └──────────┬───────────┘                                                        │                                             ┌──────────▼───────────┐                                             │   Instagram Client    │                                             │   src/instagram.ts    │                                             │   Cookie auth + HTTP  │                                             └──────────┬───────────┘                                                        │                                             ┌──────────▼───────────┐                                             │   Instagram Web API   │                                             │   (Private endpoints) │                                             └──────────────────────┘

Design principles:

  • Single dependency — only @modelcontextprotocol/sdk. No axios, no puppeteer, no bloat.
  • TypeScript strict — zero any types, fully typed interfaces in src/types.ts
  • Auto-pagination — request 500 messages and the server handles the rest with rate limiting
  • 14+ message types — text, media, voice, reels, links, clips, GIFs, posts, stories, and more

🔒 Security

  • Session cookies are never logged or stored beyond runtime
  • All credentials are read from environment variables only
  • No data is sent to any third-party service
  • See SECURITY.md for reporting vulnerabilities

⚠️ Disclaimer

This project uses Instagram's unofficial web API, which may change without notice.

  • Personal use only — do not use for spam, mass messaging, or automation that violates Instagram's Terms of Service
  • Your session cookies are sensitive credentials — never share or commit them
  • This project is not affiliated with, endorsed by, or connected to Meta or Instagram
  • Use at your own risk — the authors are not responsible for any account restrictions

🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for development setup and guidelines.

If you'd like to support the project financially, consider sponsoring on GitHub.

📄 License

MIT — Made with ❤️ by Kynux


If this project helped you, consider giving it a ⭐

Report Bug · Request Feature · Contribute

Source: README.md at commit 6e435f1

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v2.1.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts