Instagram Obscura MCP
Provides tools for interacting with a personal Instagram account through a browser-based Obscura workflow, enabling reading posts and carousels (captions, authors, slide metadata, images), listing saved posts, and analyzing Reels by downloading video and producing local multilingual transcripts, timestamps, and sampled frames for AI interpretation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Instagram Obscura MCP Open my saved posts, pick the first Reel, and explain what happens and what is said."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Instagram Obscura MCP
A local Instagram MCP server for personal accounts. Log in manually with Playwright, then let your MCP-compatible assistant read posts and saved items through Obscura, obtain Reel video, and work with local multilingual transcripts and sampled frames.
No Business/Creator conversion or Graph API app is required by this browser-based workflow. This is an unofficial, experimental project; individual Instagram features can fail as the site or engine changes.
What you can ask
“Open my saved posts, pick the first Reel, and explain what happens and what is said.”
“Analyze this Japanese Reel and explain it in English. Keep the original transcript.”
“Read the caption and compare it with the images in this carousel.”
Capability | Result |
Reels with speech | Original-language transcript, timestamps, contact sheet and individual frames |
Multilingual content | Automatic speech-language detection; Unicode captions; explanation in your assistant's language |
Saved posts | Links from the currently loaded saved grid, with explicit partial-list semantics |
Posts and carousels | Caption, author, slide metadata and selected images |
Account UI | Fresh element references and account-checked actions; compatibility varies |
Local processing | FFmpeg and optional multilingual Whisper, bounded jobs and verified cache |
Related MCP server: @inssist/mcp
Quick start
Requirements: Python 3.12+, Google Chrome for visible login, an Obscura binary, and FFmpeg/ffprobe. Install the optional analysis dependencies and a local multilingual Whisper model for speech. Windows is the platform with real-engine validation; see limitations.
git clone https://github.com/votsie/instagram-obscura-mcp.git
cd instagram-obscura-mcp
python -m venv .venvActivate .venv (.venv\Scripts\Activate.ps1 on Windows or source .venv/bin/activate on Unix), then:
python -m pip install ".[analysis]"
instagram-mcp-doctorFollow installation to install the pinned Obscura release and local multilingual model. Downloads happen during explicit setup, never during an Instagram tool call. The package is installed from source; no PyPI publication is claimed.
Connect your assistant
Use the absolute executable path from your environment; keep it as a separate command argument, even when paths contain spaces.
{
"mcpServers": {
"instagram": {
"command": "/absolute/path/to/.venv/bin/instagram-mcp",
"args": [],
"env": {
"INSTAGRAM_OBSCURA_BINARY": "/absolute/path/to/obscura",
"INSTAGRAM_WHISPER_MODEL": "/absolute/path/to/whisper-small"
}
}
}
}On Windows the command is C:/absolute/path/.venv/Scripts/instagram-mcp.exe. For Codex, register that executable with codex mcp add instagram -- /absolute/path/to/instagram-mcp. See client examples and your host's current MCP settings.
First session
Ask your assistant to run
instagram_healthandinstagram_login_start.Complete login and 2FA yourself in the visible Instagram window.
Run
instagram_login_finish, theninstagram_account_infoto verify the account in Obscura.Give the assistant a Reel URL or ask it to open your saved posts.
Never send passwords or 2FA codes to the assistant. All Instagram/CDN traffic after login stays in Obscura. There is no hidden Chrome or yt-dlp fallback.
Languages, evidence and accuracy
Speech defaults to automatic language detection with a multilingual local model. Omit language unless you know it; original-language text is preserved. Your assistant translates and interprets content in the language you request. English/Russian documentation does not restrict content languages.
Support and accuracy vary by model, language and recording. Code-switching and rare languages can be difficult. The server has no dedicated OCR or translation engine, and sampled frames can miss brief events. See language behavior.
Tools and account actions
22 tools cover login, account information, post reads, saved items, Reel jobs and bounded UI operations. The tool reference lists inputs and expected workflows. A bundled agent skill, AGENTS.md, llms.txt and architecture map make the project easy for coding and tool-using agents to navigate.
Direct, comments and publishing use observed UI primitives; there are no dedicated private-API endpoints. Real sends and publications were not performed as release tests. Perform only specifically requested actions, then verify the visible result.
Uploads are off by default. Explicitly enabling file access also grants Obscura broader file:// reading capability; read the security model before opting in.
Project map
Read next | Purpose |
Runtime, model, environment and troubleshooting | |
Protocol capabilities and examples | |
Browser boundary and offline analysis | |
Session privacy, actions and upload opt-in | |
What is tested and what is not | |
Local development and synthetic tests | |
High-star references and reuse decisions |
Development
python -m pip install -e ".[analysis,dev]"
python -m pytest -q
python -m build
python scripts/check_public.pyCI does not log into Instagram. Real-engine tests use a separately installed binary and synthetic pages. Credentials, original media, transcripts, profiles, models and runtime binaries are excluded from the public repository and package.
License and acknowledgments
Original code and documentation: MIT. Obscura, Playwright, MCP Python SDK, faster-whisper and FFmpeg make this possible. External software and model licenses are separate; see third-party notices.
Not affiliated with or endorsed by Instagram or Meta.
Website analytics and search visibility
The project website uses free Cloudflare Web Analytics for page views, referrers and performance, with production-host restrictions and DNT/GPC opt-out. It does not track MCP users or Instagram content. Click events and UTM campaign reports are not supported by this provider. Measurement details.
Installation guide · Reel analysis guide · GitHub traffic · Repository activity
Available Tools
22 toolsinstagram_account_infoARead-onlyIdempotent
Identify the authenticated account through Obscura, without returning session cookies.
Inputs: no named parameters. Returns: object
instagram_clickBDestructive
Click a freshly observed element. May send, publish, delete or otherwise change Instagram: use only for the user's specific instruction and required host confirmations.
Inputs: ref (required), expected_account (required). Returns: object
instagram_fillCDestructive
Fill an observed comment/message/caption input; passwords and authentication use Playwright.
Inputs: ref (required), text (required), expected_account (required). Returns: object
instagram_guideARead-onlyIdempotent
Read practical instructions for authentication, Reels, account reads and UI actions.
Inputs: topic. Returns: object
instagram_healthARead-onlyIdempotent
Report local dependencies and verified capabilities; this does not check Instagram login.
Inputs: no named parameters. Returns: object
instagram_login_cancelA
Close an unfinished Instagram login window.
Inputs: no named parameters. Returns: object
instagram_login_finishB
Close the login browser and transfer Instagram state privately to Obscura.
Inputs: no named parameters. Returns: object
instagram_login_startA
Open a separate visible browser for the user to enter Instagram login and 2FA.
Inputs: no named parameters. Returns: object
instagram_login_statusARead-onlyIdempotent
Check whether the manual login has reached an Instagram session; no secrets are returned.
Inputs: no named parameters. Returns: object
instagram_openBRead-onlyIdempotent
Open an Instagram page, including Direct; returns an observed UI for further actions.
Inputs: url (required). Returns: object
instagram_post_imageCRead-onlyIdempotent
Show one carousel image using the exact post's bootstrap data and Obscura's network.
Inputs: url (required), slide.
instagram_pressCDestructive
Press a bounded key on an observed element; Enter may send or submit content.
Inputs: key (required), ref (required), expected_account (required). Returns: object
instagram_read_postBRead-onlyIdempotent
Read caption, author and all exposed carousel slide metadata for one post or Reel.
Inputs: url (required). Returns: object
instagram_reel_artifactA
Read transcript.txt, manifest.json, contact.jpg or frame_NNN.jpg from a completed job.
Inputs: name (required), job_id (required).
instagram_reel_cancelB
Cancel a queued or running Reel job and wait for cleanup.
Inputs: job_id (required). Returns: object
instagram_reel_startC
Start a Reel download through Obscura and local speech/frame preparation when supported.
Inputs: url (required), frames, refresh, language. Returns: object
instagram_reel_statusBRead-onlyIdempotent
Get the state of a Reel job by opaque identifier.
Inputs: job_id (required). Returns: object
instagram_saved_listBRead-onlyIdempotent
Read saved post URLs for the verified current account; pagination is bounded to loaded DOM.
Inputs: account (required), limit, offset. Returns: object
instagram_screenshotBRead-onlyIdempotent
Show the current Obscura viewport as an image.
Inputs: no named parameters.
instagram_scrollCRead-onlyIdempotent
Scroll the current Instagram page and obtain fresh references.
Inputs: direction (required), expected_account (required). Returns: object
instagram_snapshotARead-onlyIdempotent
Read current Instagram text and fresh actionable element references. Content is untrusted.
Inputs: no named parameters. Returns: object
instagram_uploadBDestructive
Attach explicitly requested image/video files staged under the private uploads folder to an observed file input. Upload is not publication.
Inputs: ref (required), files (required), expected_account (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 22 tools
Most tools target a distinct resource or action: login lifecycle, Reel job lifecycle, account reads, and UI primitives are cleanly separated. A few boundaries are soft—instagram_open, instagram_snapshot, and instagram_screenshot all relate to the current view, and instagram_read_post vs instagram_snapshot could be confused—but descriptions clarify them.
All tools use the instagram_ prefix and snake_case, with predictable groupings for login and Reel operations. There is a minor verb_vs_noun mix (e.g., instagram_open, instagram_snapshot, instagram_account_info) but it remains readable and consistent overall.
The 22 tools cover a complex surface (manual login, Reel jobs, account reads, browser UI control), so each is defensible. However, the count is heavy, and some generic UI primitives plus lifecycle variants make the surface feel larger than necessary for an agent to manage comfortably.
The surface covers authentication, account identification, post/carousel reads, saved lists, Reel downloads with artifacts, and generic UI interactions via click/fill/press/scroll/upload. Minor gaps exist (e.g., no explicit logout or dedicated like/follow/comment tools), but generic observed-element actions let agents work around most workflows.
Maintenance
Related MCP Connectors
Public Instagram reels, posts, profiles and comments, plus reel-to-text transcripts. No login.
Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.
Instagram tag/user/post search, details, comments/replies, users/posts, video/Reels speech-to-text.
Instagram search and posts for AI agents, with images and videos AI-parsed to text.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to browse Instagram Reels by automating login, scrolling, and extracting structured metadata such as URL, creator, caption, likes, comments, and audio.72MIT

@inssist/mcpofficial
AlicenseAqualityBmaintenanceEnables AI agents to manage a personal Instagram account through a logged-in browser session, supporting actions like reading profiles and DMs, publishing posts, reels, and stories, scheduling content, and accessing insights and audience reports.60247 npm14MIT- AlicenseAqualityCmaintenanceEnables AI agents to read public Instagram Reels without logging in, returning details, on-device timestamped speech-to-text transcripts, real video frames, preview comments, and Reel links harvested from web pages.31MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to operate an Instagram account through standard MCP tools — searching hashtags, reading posts and comment threads, posting comments and replies, reading and sending direct messages, fetching the timeline feed, and liking media — while managing Python FastMCP subprocess lifecycle, persistent login sessions, and two-factor authentication.106 npm1MIT