Skip to main content
Glama
Stupidoodle

instagram-mcp

by Stupidoodle

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
INSTAGRAM_PASSWORDYesInstagram password for login
INSTAGRAM_USERNAMEYesInstagram username for login

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{
  "claude/channel": {}
}

Tools

Functions exposed to the LLM to take actions

NameDescription
subscribeA

Subscribe to an Instagram thread and give it a short alias.

This is the ONE place a raw thread id is entered (from list_threads or search_threads). Only subscribed chats deliver events.

Args: chat_id: Thread id, e.g. '340282366841700000000000000000000000001'. alias: Short memorable handle (e.g. 'alex'). Derived from the thread title if omitted.

unsubscribeB

Unsubscribe from a chat. Stops delivering its events.

Args: to: Alias or thread id to unsubscribe.

list_subscriptionsA

List subscribed chats and their aliases.

set_idleA

Tune how long a chat must be quiet before you get an [idle] nudge.

Ramp it up to back off (60 = hourly while they're gone) or 0 to pause. Resets to the default the moment they next message.

Args: minutes: Quiet-time threshold in minutes (0 pauses nudges). to: Chat alias. Omit for the sole subscribed target.

replyA

Send a text message. Address by alias via to, or omit it for the sole target.

Args: text: Message text. to: Chat alias (e.g. "alex"). Omit for the sole subscribed target.

send_fileA

Send a photo or video (Instagram DMs take no other file types).

The path is read on the bridge host (where Instagram is connected).

Args: file_path: Path to the photo or video (on the bridge host). to: Chat alias. Omit for the sole subscribed target. view_mode: "once" (view once) or "replayable" (allow replay) sends it as a disappearing photo/video (videos: H.264 mp4). Omit for a normal one.

send_audioB

Send an audio file as a voice message (bridge converts to .m4a if needed).

The path is read on the bridge host.

Args: file_path: Path to the audio file (on the bridge host). to: Chat alias. Omit for the sole subscribed target.

send_typingA

Optional typing indicator: they see "typing..." while composing is true.

Args: to: Chat alias. Omit for the sole subscribed target. composing: True starts the indicator, false stops it.

mark_readA

Optional read receipt ("Seen") up to the newest of these messages.

Args: message_ids: Message ids from channel events; the newest one is used. to: Chat alias. Omit for the sole subscribed target.

download_attachmentA

Download a message's photo, video or voice clip; returns the path on the bridge host.

View-once media lands in a temporary folder and is deleted soon; never keep it.

Args: message_id: Message id from the channel event. to: Chat alias. Omit for the sole subscribed target.

open_shareA

Open a shared reel, post or story: download it and see what's in it.

Returns the caption, the photos, and per video its file, length in seconds and a preview: 6 evenly spaced frames stitched into one image, left to right, top to bottom. Read the preview first. For a closer look, pull frames yourself: ffmpeg -loglevel error -ss <second> -i <file> -frames:v 1 /tmp/f.jpg (one frame) or -vf fps=2 /tmp/f-%02d.jpg (every half second), then Read them. For what is said, call transcribe_share.

Args: message_id: Message id of the share, from the channel event. to: Chat alias. Omit for the sole subscribed target.

transcribe_shareA

Transcribe what is said in a shared reel's (or post's) videos.

Only when the words matter: music-only reels give noise. Reuses the open_share download.

Args: message_id: Message id of the share, from the channel event. to: Chat alias. Omit for the sole subscribed target.

get_message_idsA

List this account's recent messages with their ids, newest first (for unsend).

That is yours and the ones the owner sent from their phone.

Args: to: Chat alias. Omit for the sole subscribed target. filter: Only messages whose text contains this substring. limit: How many to return (default 10).

unsendA

Unsend a message this account sent, for everyone. Get the id from get_message_ids.

That covers yours and the ones the owner sent from their phone: when the operator tells you to delete one, do it.

Args: message_id: Id of the message. to: Chat alias. Omit for the sole subscribed target.

reactA

React to a message with an emoji. An empty emoji removes your reaction.

Args: message_id: Message id (from a channel event or get_message_ids). emoji: E.g. "❤️"; "" removes your reaction. to: Chat alias. Omit for the sole subscribed target.

list_threadsB

Get direct message threads from inbox.

Args: amount: Maximum number of threads to fetch (default: 20).

Returns: Object with 'threads' array (thread_id, thread_title, users, is_group, is_muted, unread, last_activity_at) and 'count'.

get_threadB

Get a specific thread with its messages.

Args: thread_id: ID of the thread to fetch. amount: Maximum number of messages to fetch (default: 20).

Returns: Thread object with thread_id, thread_title, users, is_group, and a messages array (message_id, sender, text, media_type, timestamp, ...).

search_threadsC

Search threads by username or title.

Args: query: Search query (username or thread title).

Returns: Object with 'query', 'threads' array of matches, and 'count'.

get_pending_threadsB

Get pending message request threads.

Returns: Object with 'threads' array of pending threads and 'count'.

hide_threadC

Hide/delete a thread from inbox.

Args: thread_id: ID of the thread to hide.

mark_thread_unreadB

Mark a thread as unread.

Args: thread_id: ID of the thread to mark unread.

mute_threadC

Mute notifications for a thread.

Args: thread_id: ID of the thread to mute.

unmute_threadB

Unmute notifications for a thread.

Args: thread_id: ID of the thread to unmute.

get_messagesB

Get messages from a thread.

Args: thread_id: ID of the thread to get messages from. amount: Maximum number of messages to fetch (default: 20). offset: Skip the N most recent messages (default: 0).

Returns: Object with 'thread_id', 'messages' (sender, text, media_type, timestamp, seen_since when viewer's, share for a shared reel/post/story), 'count', 'offset', 'has_more'.

get_chat_logA

Get conversation as a readable chat log. Optimized for LLM analysis.

Plain-text chronological log, ~5x smaller than JSON. Use get_messages for structured fields.

Args: thread_id: ID of the thread to get messages from. amount: Maximum number of messages to fetch (default: 50). offset: Skip the N most recent messages (default: 0).

Returns: Object with 'thread_id', 'log' (plain text), 'count', 'offset', 'has_more'.

share_mediaC

Share an Instagram post into a thread.

Args: media_id: ID of the Instagram media/post to share. thread_id: Thread to share it into.

share_profileB

Share a user's Instagram profile into a thread.

Args: user_id: ID of the user profile to share. thread_id: Thread to share it into.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 27 tools

Disambiguation4/5

Most tools target distinct resources+actions (send, react, unsend, mute, subscribe), and descriptions clarify intent well. However, get_thread, get_messages, and get_chat_log all retrieve the same thread content with only format/purpose differences, creating some overlap an agent could misselect between.

Naming Consistency4/5

Names are consistently snake_case verb_noun (list_threads, get_messages, share_media, mark_thread_unread), which is highly readable. Minor deviation: a few bare-verb tools (subscribe, reply, react, unsend) lack the noun component, but they remain clear and consistent within themselves.

Tool Count3/5

27 tools is heavy and slightly over the comfortable range for this domain. Several could be consolidated (the three message-retrieval tools, separate mute/unmute), but the DM bridge legitimately needs subscription, messaging, thread-management, and sharing surfaces.

Completeness4/5

The surface covers a full DM lifecycle: subscribe/unsubscribe to events, send/reply/audio/file, react, unsend, mark read, typing, attachment download, thread management (hide, mute, mark unread), search, and sharing reels/profiles. Minor gaps like group creation or blocking exist but core workflows are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues