instagram-mcp
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.pyRelated 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_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_MIN–INSTAGRAM_DELAY_MAXсекунд. Увеличьте её, если Instagram попросит подождать.Отступайте при предупреждениях. «Please wait a few minutes» и «action blocked» означают «остановиться», а не «повторить попытку». Инструменты прямо предупреждают об этом в сообщениях об ошибках.
Большие объёмы запросов рискованны. Выгрузка тысяч подписчиков за один раз не похожа на поведение живого человека в приложении.
Если экспериментируете, используйте одноразовый или запасной аккаунт.
Структура
Файл | Содержимое |
| Определения 49 инструментов |
| Что такое персона и расчёты достоверности |
| Определение персоны по профилю — бесплатно и офлайн |
| Сопоставление имён с гендерным априором, офлайн |
| Каналы поиска, из которых приходят кандидаты |
| Поиск персоны как возобновляемое задание на диске |
| Фотографии кандидатов, собранные в один лист для оценки |
| Вход, сохранение сессии, защита от записи, многопоточность |
| Компактные JSON-представления моделей instagrapi |
| Исключения Instagram, превращённые в практические советы |
| Офлайн-проверка: схемы, защитные механизмы, сериализаторы |
.env и session.json содержат учётные данные и живые куки авторизации, а searches/ — чужие профили и фотографии. Все три перечислены в .gitignore — оставьте это в силе.
Maintenance
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
- FlicenseNot gradedqualityCmaintenanceEnables LLMs to interact with Instagram through a comprehensive toolkit for account management, content creation, messaging, social graph analysis, and content discovery.11
- AlicenseNot gradedqualityDmaintenanceEnables AI applications to interact with Instagram Business accounts through the Graph API, supporting profile management, media publishing, insights retrieval, and direct messaging capabilities.MIT
- FlicenseNot gradedqualityDmaintenanceEnables 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.
- AlicenseAqualityCmaintenanceEnables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.594610MIT
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.
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/osAlhaddad1/instagram-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server