Instagram MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GEMINI_API_KEY | No | Optional API key for Gemini AI analysis of reels. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_user_profileA | Get an Instagram user's profile. Args: username: Instagram username (e.g., "instagram", "natgeo") ctx: FastMCP context for progress reporting sections: Comma-separated list of extra sections to scrape. The main profile page is always included. Available sections: posts, reels, tagged, followers, following Examples: "posts,reels", "tagged", "followers,following" Default (None) scrapes only the main profile page. Returns: Dict with url, sections (name -> raw text), and optional references. Sections may be absent if extraction yielded no content for that page. Includes unknown_sections list when unrecognised names are passed. The LLM should parse the raw text in each section. |
| get_user_postsA | Get an Instagram user's posts with structured data. Args: username: Instagram username (e.g., "instagram", "natgeo") ctx: FastMCP context for progress reporting max_posts: Maximum number of posts to retrieve (default 50) Returns: Dict with url, posts list, total_posts count, sections, and references. Each post has: id, shortcode, url, thumbnail_url, media_type. |
| get_user_reelsA | Get an Instagram user's reels with structured data. Returns reel IDs, URLs, thumbnails, and view counts from the grid page without navigating to individual reels (avoids N+1 rate limiting). Args: username: Instagram username (e.g., "instagram", "natgeo") ctx: FastMCP context for progress reporting max_reels: Maximum number of reels to retrieve (default 50) Returns:
Dict with url, reels list, total_reels count, sections, and references.
Each reel has: id, shortcode, url, thumbnail_url, view_count_text, media_type.
Use |
| get_user_storiesA | Get an Instagram user's active stories. Args: username: Instagram username (e.g., "instagram", "natgeo") ctx: FastMCP context for progress reporting Returns: Dict with url and stories list, where each story has: media_url, timestamp, expires_at. |
| get_user_highlightsA | Get an Instagram user's story highlights. Args: username: Instagram username (e.g., "instagram", "natgeo") ctx: FastMCP context for progress reporting Returns: Dict with url and highlights list, where each highlight has: title, cover_url, highlight_id. |
| get_business_insightsA | Get Business/Creator account insights from Professional Dashboard. Note: Professional Dashboard is only available for Business and Creator accounts. Args: ctx: FastMCP context for progress reporting time_range: Time range for insights data (7d, 30d, 90d). Default: "7d" Returns: Dict with url, sections (name -> raw text), and optional references. The LLM should parse the raw text in each section. |
| get_audience_insightsA | Get audience demographics from Professional Dashboard. Note: Professional Dashboard is only available for Business and Creator accounts. Args: ctx: FastMCP context for progress reporting Returns: Dict with url, sections (name -> raw text), and optional references. The LLM should parse the raw text to extract audience demographics. |
| get_content_insightsA | Get content performance insights from Professional Dashboard. Note: Professional Dashboard is only available for Business and Creator accounts. Args: ctx: FastMCP context for progress reporting time_range: Time range for insights data (7d, 30d, 90d). Default: "30d" Returns: Dict with url, sections (name -> raw text), and optional references. The LLM should parse the raw text to extract content performance data. |
| get_activity_insightsB | Get profile activity insights from Professional Dashboard. Note: Professional Dashboard is only available for Business and Creator accounts. Args: ctx: FastMCP context for progress reporting time_range: Time range for insights data (7d, 30d, 90d). Default: "7d" Returns: Dict with url, sections (name -> raw text), and optional references. The LLM should parse the raw text to extract profile activity data. |
| get_post_detailsA | Get detailed post/reel information with structured data. Returns structured data including:
Args: post_url: Full Instagram post URL ctx: FastMCP context for progress reporting include_comments: Whether to include comments in the response Returns: Dict with structured post data: { url, id, shortcode, media_type, caption, timestamp, video_url, thumbnail_url, engagement: {likes, views, comments, shares}, audio: {audio_name, audio_artist}, sections: {main: text} (legacy format) } |
| get_location_postsA | Get posts tagged at a location. Extracts post links from the location grid page and returns them as
structured references. Use Args: location_id: Instagram location ID ctx: FastMCP context for progress reporting max_posts: Maximum number of posts to load (default 50) Returns: Dict with url, sections (name -> raw text), references (post links), and total_posts count. |
| get_hashtag_postsA | Get posts for a hashtag. Extracts post links from the hashtag grid page and returns them as
structured references. Use Args: hashtag: Hashtag to search (without the # symbol) ctx: FastMCP context for progress reporting max_posts: Maximum number of posts to load (default 50) Returns: Dict with url, sections (name -> raw text), references (post links), and total_posts count. |
| get_direct_inboxA | List recent DM conversations from the Instagram direct inbox. Args: ctx: FastMCP context for progress reporting limit: Maximum number of conversations to load (1-50, default 20) Returns: Dict with url, sections (inbox -> raw text), and optional references. |
| get_dm_conversationA | Read a specific DM conversation. Provide either username or thread_id to identify the conversation. Args: ctx: FastMCP context for progress reporting thread_id: Instagram messaging thread ID username: Instagram username of the conversation participant limit: Maximum number of messages to load (1-100, default 50) Returns: Dict with url, sections (conversation -> raw text), and optional references. |
| send_dmA | Send a direct message to an Instagram user. This is a write operation — confirm_send must be True to actually send. Args: username: Instagram username of the recipient message: The message text to send confirm_send: Must be True to send the message ctx: FastMCP context for progress reporting Returns: Dict with url, status, sent (bool), and optional message. |
| search_usersA | Search for Instagram users. Args: query: Search query (e.g., "john doe", "photographer") ctx: FastMCP context for progress reporting max_results: Maximum number of results to return (default 50) Returns: Dict with url, sections (name -> raw text), and optional references. The LLM should parse the raw text to extract individual users and their profiles. |
| search_locationsA | Search for Instagram locations. Args: query: Search query (e.g., "New York", "Paris cafe") ctx: FastMCP context for progress reporting max_results: Maximum number of results to return (default 50) Returns: Dict with url, sections (name -> raw text), and optional references. The LLM should parse the raw text to extract individual locations and their details. |
| follow_userA | Follow a user or send a follow request for private accounts. Navigates to the user's profile and clicks the Follow button. For private accounts, a follow request is sent. Args: username: Instagram username to follow (e.g., "natgeo") ctx: FastMCP context for progress reporting Returns: Dict with url, status, and optional message. |
| unfollow_userA | Unfollow a user. Navigates to the user's profile and clicks the Unfollow button. Args: username: Instagram username to unfollow (e.g., "natgeo") ctx: FastMCP context for progress reporting Returns: Dict with url, status, and optional message. |
| like_postA | Like a post. Navigates to the post and clicks the Like button. Args: post_url: Instagram post URL (e.g., "https://www.instagram.com/p/ABC123/") ctx: FastMCP context for progress reporting Returns: Dict with url, status, and optional message. |
| unlike_postA | Unlike a post. Navigates to the post and clicks the Unlike button. Args: post_url: Instagram post URL (e.g., "https://www.instagram.com/p/ABC123/") ctx: FastMCP context for progress reporting Returns: Dict with url, status, and optional message. |
| save_postB | Save a post to a collection. Navigates to the post and clicks the Save button. Optionally saves to a specific collection. Args: post_url: Instagram post URL (e.g., "https://www.instagram.com/p/ABC123/") ctx: FastMCP context for progress reporting collection: Optional collection name to save the post into Returns: Dict with url, status, and optional message. |
| comment_on_postA | Post a comment on a post. Navigates to the post and submits the comment. confirm_post must be True for the comment to be posted. Args: post_url: Instagram post URL (e.g., "https://www.instagram.com/p/ABC123/") comment: The comment text to post confirm_post: Must be True to actually post the comment ctx: FastMCP context for progress reporting Returns: Dict with url, status, and optional message. |
| transcribe_user_reelsA | Download and transcribe Instagram reels to SRT subtitles. Downloads reels, runs speech-to-text using Whisper via the caption command, and generates SRT subtitle files. Args: username: Instagram username (e.g., "instagram", "natgeo") ctx: FastMCP context for progress reporting max_reels: Maximum reels to transcribe (default: 10) keep_videos: Keep downloaded video files (default: False) Returns: Dict with: - url: Instagram profile URL - transcripts: List of {reel_id, video_url, srt_path, transcript_preview, reel_url} - total_reels: Number processed - temp_dir: Temporary files location - output_dir: SRT output directory |
| transcribe_reelA | Transcribe a single Instagram reel to SRT. Args: reel_url: Full Instagram reel URL (e.g., https://www.instagram.com/reel/ABC123/) ctx: FastMCP context for progress reporting keep_video: Keep downloaded video file (default: False) Returns: Dict with reel_id, srt_path, transcript_preview, etc. |
| analyze_reel_with_geminiA | Analyze Instagram reel using Google Gemini 2.0 Flash. Fast multimodal analysis that understands both audio and visuals. Returns structured insights without local transcription. Speed: ~15-25 seconds per reel (3x faster than local Whisper) Cost: ~$0.00017 per reel (extremely cheap) Args: reel_url: Full Instagram reel URL (e.g., https://www.instagram.com/reel/ABC123/) ctx: FastMCP context for progress reporting analysis_type: Type of analysis: - summary: Quick overview (fastest) - transcript: Full transcription - topics: Extract topics and keywords - quotes: Notable quotes with timestamps - full: Comprehensive analysis (default) Returns: Dict with analysis results in JSON format. Structure depends on analysis_type. |
| bulk_analyze_reels_with_geminiA | Analyze multiple reels from a user with Gemini. Faster than local transcription for bulk analysis. Processes reels sequentially to avoid rate limits. Args: username: Instagram username (e.g., "instagram", "natgeo") ctx: FastMCP context for progress reporting max_reels: Maximum reels to analyze (default: 5) analysis_type: Analysis type (default: summary for speed) Returns: Dict with analyses for each reel. |
| close_sessionA | Close the current Instagram browser session and clean up resources. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ishan-parihar/instagram-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server