Skip to main content
Glama
osAlhaddad1

instagram-mcp

by osAlhaddad1

instagram-mcp

MCP-сервер, который предоставляет instagrapi — приватный мобильный API Instagram — как 49 инструментов, которые может вызывать агент.

Чтение включено по умолчанию. Любые действия, изменяющие аккаунт (публикация, лайки, подписка, комментарии, отправка сообщений, удаление), отклоняются, пока вы явно не включите запись.

Установка

cp .env.example .env

Затем заполните .envлибо имя пользователя и пароль, либо куки sessionid, скопированную из браузера, где вы уже вошли в аккаунт (DevTools → Application → Cookies → instagram.com). Путь через sessionid с меньшей вероятностью вызовет запрос на подтверждение входа.

Если у аккаунта включена двухфакторная аутентификация, вставьте «ключ настройки» аутентификатора в INSTAGRAM_TOTP_SEED — коды будут генерироваться автоматически. В противном случае, когда Instagram запросит код, вызовите instagram_login with параметром verification_code.

Проверьте установку, не обращаясь к Instagram:

.venv/Scripts/python smoke_test.py

Related MCP server: Instagram MCP Server

Регистрация сервера

Для этого проекта сервер уже зарегистрирован в ../.mcp.json. Чтобы использовать его в другом месте:

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

Исполняемый файл работает из любого каталога — он всегда читает .env и пишет session.json рядом с этим README.

Включение операции записи

INSTAGRAM_ALLOW_WRITES=true

После этого перезапустите сервер. Пока это false, инструменты записи завершаются с объяснением, а не выполняют действие, поэтому инструменты только для чтения остаются работоспособными.

Инструменты

Группа

Инструменты

Отправка ЛС

instagram_prepare_dm, instagram_find_person, instagram_build_style_profile, instagram_get_style_profile

Поиск по типажу

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

Сессия

instagram_login_status, instagram_login, instagram_account_info

Пользователи

instagram_get_user, instagram_search_users, instagram_get_followers, instagram_get_following, instagram_get_user_medias, instagram_get_user_stories

Записи

instagram_get_media, instagram_get_media_comments, instagram_get_media_likers, instagram_download_media

Поиск

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

Личные сообщения

instagram_list_direct_threads, instagram_get_direct_thread, instagram_send_direct_message *

Взаимодействие

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

Публикация

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

* требует INSTAGRAM_ALLOW_WRITES=true.

Пользователи указываются через username или user_id. Сообщения указываются через аргумент media, который принимает URL поста, короткий код или числовой id страницы.

Пишем ЛС в вашем голосе

Это то, для чего сервер в первую очередь и существует. Проблема в том, что если позволить модели писать ваши сообщения, она пишет правильно — с пунктуацией, заглавными буквами, вежливо — а все, кто вас знает, узнают это мгновенно.

Поэтому instagram_build_style_profile измеряет ваше реальное письмо, на основе ваших исходящих личных сообщений: длину сообщений, использование заглавных, пунктуацию, частоту эмодзи, выбор эмодзи, как вы пишете смех, сокращения, смешение языков и то, отправляете ли вы серии коротких сообщений или одно цельное. Он измеряет это глобально и по каждому контакту, поскольку никто не пишет своей матери так же, как самому близкому другу.

Запустите один раз:

.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])"

После этого instagram_prepare_dm(person="sarah") вернёт — за один вызов — недавнюю переписку, измеренные правила вашего голоса и примеры того, как вы пишете этому конкретному человеку. Этот единственный вызов — весь интерфейс для составления черновика; не нужно вручную собирать отдельные инструменты из тредов.

Профиль хранится в style_profile.json и никогда не отправляется в Instagram. Обновляйте его небольшими порциями по мере изменения вашего стиля.

Навык

~/.claude/skills/instagram-dm/SKILL.md управляет всем рабочим процессом в обычном разговоре — «ответь Ахмеду», «что ответить ей лучше», «проверь мои сообщения в Instagram». Он берёт на себя поиск человека, загрузку вашего голоса, черновик и придерживает дочерний документ для вашего одобрения перед любой отправкой.

Ничто не отправляется без того, чтобы вы сначала увидели точные слова.

Как найти людей, которые подходят под ваших любей

Второе назначение сервера. Вы описываете типаж — женщина, Амстердам, фитнес, около двадцати пяти, блондинка — и получаете ранжированные аккаунты с показателем уверенности по каждому атрибуту.

Сложность в том, что Instagram has no index for any of these criteria. Индексируются только четыре сущности: ник и имя text, хэштеги, геометки мест и граф подписок. К типу которых ни одна характеристика не применима. Поэтому сначала каждый атрибут либо преобразуется в запрос против одного из этикетингов, либо делается позже на основе того, что вернулось — поэтому вместо функции запроса это воронка, которая обменивает полноту на точность.

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

Секрет в работе — instagram_similar_accounts, который читает «Рекомендации для вас» от самого Instagram, мнение от графа взаимных подписок. Как только у вас появляется один подходящий профиль, его развитие вглубь вдругой атрибут намного лучше поиска по ключевым словам, поэтому текстовые и хэштег-запросы нужны в основном как первый якорь.

Локация — это ещё одна стоит потребить. Поле city в Instagram почти всегда пустое и иногда ошибочно — запрос вернул место “Hollanda” с координатами в Александрии, Египет, а названия мест сильно размываются: один город может быть "Amsterdam, Netherlands", "Amsterdam Canal District", "Red Light District, Amsterdam" and "Amsterdam Canal River". Координаты присутствуют всегда, поэтому геометки группируются по позиции, а не по названию — разночтения объединяются, а неправильная запись исключётся.

Одна идея, на которую опирался дизайн, исчезла. Instagram генерирует альтернативный текст для фотографий («можтоможет быть изображение 1 человека, светлые волосы, стоит»), что может Состава את coarse зрения каждый раз— но он доступен только веб-клиенту, и на три ДЕЛ новых записей вернулся пустым. Появившиеся исследование стоит реального взгляда на реальные изображения, и ограничение это отражает, а не делает вид.

Поиск — это задача на диске, а не вызов функции: один реальный поиск — это несколько сотен API-вызовов за десять или двадцать минут с вашего аккаунта, который Instagram наверняка ограничит, поэтому он идёт этапами, переживает крашию иДаёт исплавить свой процесс после двадцати вызовов, а не после трёхсот.

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)

Оценка фотографий

По внешнему виду данных не существуют открытых сигналов, поэтому приходится смотреть на сами фото. instagram_search_shortlist(download_images=true) скачивает у каждого кандидата профильное фото и список последних миниатюр и собирает их в один общий лист, а не отдаёт десяток отдельных файлов.

Это не только аккуратно. Это стоит двенадцатой части внимания, цифры — позволяют ссылаться на тип на крепление, и это делает тяжелейший вопрос ответ без который из этих лиц является владельцем аккаунта? Трыннкам полны друзей, партнёров и клиентов, а решение, принятое по лицу, действительно звучит так же уверенно, как и то, что по правильному лицу. Видя все фотографии рядом, вы можете просто взглянуть на них— найдите повторяющееся лицо, сверьте с плиткой под именем avatar, которая является единственной фото, помещаемой их, и впишите результат в поле confidence. Низкое значение делает весь визуальный анализ более слабо уверенным, а не притворяется, что человек хуже себя.

Скриншот страницы профиля показал бы примерно то же самое, но эта страница лежит в браузерном просмотре для рендера, а эти уже загружены и оплачены.

Интерпретация уверенности

Каждый атрибут несёт в себе два числа, никогда одно: match — насколько убедительны согласие, certainty — насколько можно доверять этим доказательствам. Если модель выдает одно «85%», — она молча их пере умножила и потеряло, какой входной слаб.

Ограничение постей доверия есть и у атрибута, и у источника, поэтому система не может переоценить. Один аватар с данными о цвете волоса — потолок 0.50; прочитано с нескольких дневных записей — 0.80. Страна из собственного поля «аккаунт зарегистрирован в» достигает 0.95. Рост блокируется на 0.15 — фотография не несёт шкалы для сравнения, поэтому height, ethnicity и build здесь рекомендованы: сообщаем, но не запрещено не разрешено перед перемещением в рейтинге и вообще отклоняется, если вы отметите требуется *

Неизвестность — не значит «нет». Атрибут, который никак нельзя вернуть, снижает coverage, не количество match, — а пpadding рейтинг у сторону исходной выборки до той средней точки, где это выяснилось. Так что 0.9 по двум признанным атрибутам потеряет не меньше, чем 0.75 по шести. Информация, помеченная unverified — это слишком мало данных для чьи-то действий.

Результаты существуют только для открытых аккаунтов. Приватные аккаунты откладывается на фильтре, потому что их уровень проверки закрыт. Николееалогично 18 лет никогда не возвращаются: возраст берётся из заявленного года рождения и даты присоединения к Instagram, учитывается нижняя граница этих оценок. Проверяется при достижении и снова на каждом профиле; аудит показал, что вариант без этого условия никто не защищал, потому что пропуская сначала не считывает, но до завершенияпроверки возраст как правило уже прочитан. Каждый кандидат сохраняет всю точную трассировку — какие запросы его нашли и на чём покоится каждый вывод. Поисковые задания хранятся в searches/ и в версиях git они объекты: там собираются чужие профилями и фото.

Как избежать блокировок

instagrapi использует приватный API, которым пользователь мобильного приложения. Instagram находит и блокирует автономные поведения, а заблокированному аккаунт является ваш — поэтому:

  • Сессии кэшируются в session.json и переиспользуются. Многократный вход с нуля — самый быстрый способ вызвать подозрение. Сохраняйте этот файл.

  • Запросы разнесены по времени случайной паузой в INSTAGRAM_DELAY_MININSTAGRAM_DELAY_MAX секунд. Увеличьте её, если Instagram попросит подождать.

  • Отступайте при предупреждениях. «Please wait a few minutes» и «action blocked» означают «остановиться», а не «повторить попытку». Инструменты прямо предупреждают об этом в сообщениях об ошибках.

  • Большие объёмы запросов рискованны. Выгрузка тысяч подписчиков за один раз не похожа на поведение живого человека в приложении.

  • Если экспериментируете, используйте одноразовый или запасной аккаунт.

Структура

Файл

Содержимое

instagram_mcp/server.py

Определения 49 инструментов

instagram_mcp/persona.py

Что такое персона и расчёты достоверности

instagram_mcp/signals.py

Определение персоны по профилю — бесплатно и офлайн

instagram_mcp/names.py

Сопоставление имён с гендерным априором, офлайн

instagram_mcp/discovery.py

Каналы поиска, из которых приходят кандидаты

instagram_mcp/search.py

Поиск персоны как возобновляемое задание на диске

instagram_mcp/sheets.py

Фотографии кандидатов, собранные в один лист для оценки

instagram_mcp/client.py

Вход, сохранение сессии, защита от записи, многопоточность

instagram_mcp/serialize.py

Компактные JSON-представления моделей instagrapi

instagram_mcp/errors.py

Исключения Instagram, превращённые в практические советы

smoke_test.py

Офлайн-проверка: схемы, защитные механизмы, сериализаторы

.env и session.json содержат учётные данные и живые куки авторизации, а searches/ — чужие профили и фотографии. Все три перечислены в .gitignore — оставьте это в силе.

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