Skip to main content
Glama
osAlhaddad1

instagram-mcp

by osAlhaddad1

instagram-mcp

Un servidor MCP que expone instagrapi — la API móvil privada de Instagram — como 49 herramientas que un agente puede llamar.

La lectura viene activada de série. Todo lo que cambie la cuenta (publicar, seguir, dar me gusta, comentar, enviar mensajes diretos, elimir) se rechaza hasta que actives explícitamente la escritura.

Puesta en marcha

cp .env.example .env

Luego rellena .env con o bien un nombre de usuario y una contraseña, o bien una cookie sessionid copiada de un navegador donde ya se hayas iniciado sesión (DevTools → Application → Cookies → instagram.com). La vía de la sessionid tiene menos probabilidades de desencaddenar un desafío de acceso.

Si la cuenta usa verificación en dos pasos, peg the «clave de configuración» del autenticador en INSTAGRAM_TOTP_SEP y los códigos se te generarán de forma. De lo contrario, cuando Instagram pida un código, llama a instagram_login con erification_code.

Comprueba la instalación sin tocar Instagram:

.venv/Scripts/python smoke_test.py

Related MCP server: Instagram MCP Server

Registro del servidor

Ya está registrado para este proyectro en ../.wh.json. Para usarlo en otro sitio:

claude mcp add instagram -- "C:\Users\osami\OneDrive\Documents\GitHub\ayham project 2\instagram-mcp\.venv\Scripts\instagram-mcp.exe"

El ejecutable funciona desde cualquier directir: siempre la lee .env y escribe session.json al lado de este README.

Activar las acciones de escritura

INSTAGRAM_ALLOW_WRITES=true

Reinicia el servidor después. Mientras este valor seafalse, las herramientas de escritura fallan con una evacuación en lugar de ejecutar cualquiera, así que las herramientas de solo lectura siguen utilizables.

Herramientas

Group

Tools

Escritura de DMs

instagram_prepare_dm, instagram_find_person, instagram_build_style_profile, instagram_get_style_profile

Búsqueda de perfil

instagram_search_start, instagram_search_recall, instagram_search_gate, instagram_search_expand, instagram_search_enrich, instagram_search_signals, instagram_search_shortlist, instagram_search_judge, instagram_search_results, instagram_search_list

Sesión

instagram_login_status, instagram_login, instagram_account_info

Usuarios

instagram_get_user, instagram_search_users, instagram_get_followers, instagram_get_following, instagram_get_user_medias, instagram_get_user_stories

Publicaciones

instagram_get_media, instagram_get_media_comments, instagram_get_media_likers, instagram_download_media

Descubrimiento

instagram_get_timeline_feed, instagram_get_hashtag_info, instagram_get_hashtag_medias, instagram_search_locations, instagram_get_location_medias, instagram_search_posts, instagram_similar_accounts, instagram_account_about

Mensajes directos

instagram_list_direct_threads, instagram_get_direct_thread, instagram_send_direct_message *

Interacción

instagram_like_media *, instagram_unlike_media *, instagram_comment_media *, instagram_follow_user *, instagram_unfollow_user *

Publicación

instagram_upload_photo *, instagram_upload_video *, instagram_upload_reel *, instagram_upload_album *, instagram_upload_story *, instagram_delete_media *

* requiere INSTAGRAM_ALLOW_WRITes=true.

Los usuarios se identificano con username or user_it. Y las publicaciones se identifican con an argument media que aceptauna URL de la publicación, un shortcode o un id sen "las.

Escribir DMs con tu propia voz

Para esto sirve el servidor principalmente. El problema de que la que un modelo escribe tus mensajes es que lo hace correctly — con puntuación, mayúsculas, cortesía — y cualquiera que konoz ca se da cuenta al instante.

Por eso instagram_build_style_profile mide cómo escribo de verdad, de tus propios DMs envíados: longitud del mensaje, `use de mayúsculas, puntuación final, taza de emojis, cuáles emojis, cómo escribe la risa, abreviaturas, mezcla de idiomas y si envíías ráfagas de mensajes cortos en vezo de un único mensaje redatado. Lo registra globalmente y por contact — por que nadie escribe a su madre como escribe a su mejor amigo.

Ejecuta al una vez:

.venv/Scripts/python -c "import asyncio,json;from instagram_mcp.server import server;print(asyncio.run(server.call_tool('instagram_build_style_profile',{})).content[0].text[:400])"

A partir de ese momento, instagram_prepare_dm(person="sarah") devuelve — en una sola llamada — la conversación reciente, las reglas medidas de tu voz y muestras de cómo le escribo a esa persona concreta. Esa única llamada es toda la interfaz de redacción; no hace falta coser "a mano" los hilos crus de las herramientas de mensajes.

El perfil queda cacheado en style_profile.json y no se envía nunca a Instagram. Reféscalo de vez en cuando, según de su evolución tu forma de escribrir.

El skill

~/.claude/skills/instagram-dm/SKILL.md dirge todo el flujo de trabajo en la normal: "responde a emed", "¿qué le digo?", "revís mis mensajes de IG". Se encarga de encontrar a la persona, cargar tu voz, redactar y retener el borrador until que "approves" before that.

Nada se envía sin que veas las palabras exactas antes.

Encontrar personas que encajen con un perfil

La otra cosa para la que sirve el servidor. Describes algo — mujer, Amsterdam, fitness, a mediados de los veinte, rubia — y recibes aún perfiles ordenados con un índice de confianza por atributo.

Lo difício es que Instagram no tiene índice para nada de esto. Índiza cuatro cosas: el texto del nombre de usuario y del nombre, los hashtags, las geoetiquetas de lugar y el grafo de seguimientos. Un perfil no es ninguna de esas cuatro. Así que cada attributo se convierte en una prueba contra una de esas cuatro cosas, or se infiere con posterioridad de lo que vuelve — lo que convierte esto en un embudo que cambia el volume de datos (cobertura) por precisión, no en una consulta.

recall   hundreds of candidates, mostly wrong, from many cheap probes
gate     free: drops private accounts and shops
expand   chaining off the best survivors — the highest-precision channel
enrich   ~3 API calls each. The expensive stage, so it runs on a ranked subset
signals  free: name, pronouns, geotag clusters, captions, category, birth years
judge    vision, on the shortlist only, from one contact sheet per candidate
results  ranked, with every piece of evidence attached

Lo que lo hace funcionar es instagram_similar_accounts, que lee del propio grafo de "Suggested for you" de Instagram, construido con el comportamiento de seguir a las mismas personas que ya "modelo". Una vez que tienes un buen match, encadenar a partir de él supera con mucho a cualquier búsqueda por palabras clave — por eso las sondas de texto y de hashtags existen sobre todo para encontrar primer punto de apafo.

La ubicación es el otro aspecto que merece la pena conocer. El campo city de Instagram es casi siempre null y de vez en cuando erróneo — una sonda en vivo devoló un lugar llamado "Hollanda" con coordenadas que apuntaban a Alejandría, Egipto — y los nombres de los lugares se fragmentan mal, y una misma city llega como "Amsterdam, Netherlands", "Amsterdam Canal District", "Red Light Amsterdam" y "Ámsterdam Canal River". Las coorden que siempre están, así que las geoetiquetas se agrupan por posición y no por contener: las variantes se funden y la entrada mal etiquetada se excluye a sí misma.

Una cosa en la que el diseño se apoyaba originalmente ha resultado no existir. Instagram genera texto alternativo para las fotos ("may be an image of 1 person, blonde hair, standing"), which would have been a coarse, free look at every post — but only to the web clienty regresó vacío en las treinta y dos publicaciones de una sonda en vivo. La apariencia therefore costs a real look at real images, and the ceilings reflect that rather than pretending otherwise.

instagram_search_start(persona={"gender": {"value": "female", "required": true},
                                "city": "Amsterdam", "niche": ["fitness"],
                                "age_band": [24, 32], "hair": "blonde"})
instagram_search_recall(search_id, probes={"hashtags": [{"tag": "fitgirlnl"}],
                                           "places":   [{"query": "Amsterdam gym"}],
                                           "accounts": [{"query": "amsterdam fitness"}]})
instagram_search_gate(search_id)      # free
instagram_search_expand(search_id)    # chain off the best
instagram_search_enrich(search_id, limit=40)
instagram_search_signals(search_id)   # free, and resolves most personas outright
instagram_search_results(search_id, limit=20)

Juzgar las fotos

La apariencia es lo único que no alcanza ninguna señal gratuita, así que hay que aire. instagram_search_shortlist(download_images=true) recupera la foto de perfil y las miniaturas recientes de cada candidato y las compone in una single a numbered contact sheet, en lugar de entregar una docena de archivos sueltos.

No es solo más ordenado. Cuesta un dos veces y media de la atención, los números permiten que un juicio cite la casilla de otra que viene, y hace que la echoing — cuál de estas caras es el titular de la cuenta? — Los feeds están llenos de amigos, parejas y clientes. Un juicio hecho sobre la cara equivocada suena exactamente tan seguro como uno hecho sobre la buena. Ver cada foto lado a lado convierte eso en algo que only puedes mirar: encuentra la cara recurrente, comprué if the contrast with the tile avatar, which is the only photo that you know is them, and report the result as owner_face_confidence. Un valor bajo ahí debilita la firmeza con la que se sostiene cada lectura visual, en lugar de pretender que la persona encaja peor de lo que lo hace.

Una captura de pantalla de la página del perfil mostraría mucho lo mismo, ju soó la página de usuario necesitaría de un navegador con la sesión iniciada para renderizarse, mientras que estas miniaturas ya se descargaron y se pagaron por ellas.

Leer la confianza

Cada attributo tiene dos números, nunca uno: match indica lo bien que está de acuerdo la evidencia; certainty set inicate up to qué el point "se puede fiar". Un modelo que devuelve un único "85%" los ha multiplicado silenciosamente y ha reasonable "cuál de los dos era débil".

La "certainty" está acotada por attribute and by source, de modo que el sistema no puede exagerar. El color de pelo, por ejem, leído en un único avatar, has a maximum of 0.45; if it "many publications in daylight pode 0.80. Country from Instagram's own "account based" in "alcanza 0.95. La literal: estatura has a maximum of 0.55 — a photograph lacks any reference "scale" — and "the height, ethnicity, build are for guidance only" and ethnicity y build son orientativos: se communican, nunca se les permite move a ranking, and poa and if los mark as obligatorios, they fit rejected.

" Desconocido no es «no». Un attributo que nobody can observed reduce la cobertura", no el match, and la" ranking se estrecha hacia el prior según lo la "po that has been verified — así que un 0.9 scored "con dos attributes observados lose against a 0.75 with seis. Scualquiera that it's marked with unverified was too little score for *mieja" confirming "act".

Results are for public accounts. Las privadas se rechazan in la "puerta" because no se pueden verificar. No se includes nunca a personas of under 18: "fun age" is not ready if from declared birth year and from "fecha de alta of Instagram, the decisive lower end of that estimate, y el "control" runs when "age for first "puede leer" and also in each "exit" — a "an audit found que la versión original, que only check in formula, no protected "nothing" — because the "atching" if it runs before "he" has leído a la "cuenta" any age. Toda candidate keeps the full "provenance" — que sondas the "encontraron" and in the que "se bas cada conclusión". The jobs of "search" "live" in searches/ and "gitignored": they contain other "people's profiles and photos".

No to que te bloqueen

instagrapi handlinga la API privada que usa la app de móvil. Instagram detects and

  • Las sesiones se guardan en caché en session.json y se reutilizan. Iniciar sesión desde cero repetidamente es la forma más rápida de que te marquen la cuenta. Conserva ese archivo.

  • Las solicitudes se espacian con una pausa aleatoria de los INSTAGRAM_DELAY_MININSTAGRAM_DELAY_MAX segundos. Auméntala si Instagram empeca a pedirte que esperes.

  • Cede ante las advertencias. "Espere unos minuos" y "acción bloqueada" significan parar, no renentar. Las herramientas lo indican así en sus mensajes de error.

  • Las lecturas masivas son arriesgadas. Bajar miles de seguidores de una sola vez no se parece en nada a un humano usando la app.

  • Usa una cuenta deshechable o secundaria si estás haciendo pruebas.

Estructura

Archivo

Contenido

instagram_m_cp/server.py

La 49 defiicones de herramientas

instagram_m_cp/persona.py

Qué es una persona y los cálculo de confianza

instagram_m_cp/signals.py

Leer una persona de un perfil, gratis y sin conexión

instagram_m_cp/names.py

Los nombres de pila a un prior de género, sin conexión

instagram_m_cp/discovery.py

Los canales de recuperación por los que surgen los candatos

instagram_m_cp/search.py

Un búsqueda de persona como trabajo reanudable en disco

instagram_m_cp/sheets.py

Fotos de candatos, compuestas en una sola hoja de evaluación

instagram_m_cp/client.py

Inicio de sesión, persiste la sesión, guard de escritura y hilos

instagram_m_cp/serialize.py

Vistas JSON compac de los modelos de instagrapi

instagram_m_cp/errors.py

Excepciones de Instagram, converted en consejos úüles

smoke_test.py

Comprobación sin conexión: esqueme, guardas, y serializa

.env y session.json contienen las credenciales y las cookies de autenticación víveis, y searches/ guarda los periles y fotos de otras persones. Los tres estan en .gitignore — mantén los así.

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI applications to interact with Instagram Business accounts through the Graph API, supporting profile management, media publishing, insights retrieval, and direct messaging capabilities.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Instagram Business accounts by automating content publishing, scheduling posts, and analyzing performance metrics. Supports posts, stories, reels, and carousels with detailed audience insights and hashtag discovery.
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.
    59
    46
    10
    MIT

View all related MCP servers

Related MCP Connectors

  • Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.

  • 60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.

  • Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.

View all MCP Connectors

Latest Blog Posts

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/osAlhaddad1/instagram-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server