VoiceOS Instagram Integration
Интеграция VoiceOS с Instagram
Управляйте своим аккаунтом Instagram голосом прямо из выреза Mac. Спрашивайте, как дела у аккаунта, читайте комментарии и личные сообщения, публикуйте фото или карусель, перетащив её на вырез и проговорив подпись.
Требуется бизнес-аккаунт или аккаунт автора. API Instagram не предоставляет статистику, комментарии, личные сообщения или публикацию для личного аккаунта — это правило Meta, а не наше, и обойти его невозможно.
Чтобы переключить: приложение Instagram → ваш профиль → меню ☰ → Настройки и конфиденциальность → Тип аккаунта и инструменты → Переключиться на профессиональный аккаунт. Выберите Автор или Бизнес, затем следуйте подсказкам. Это бесплатно, обратимо и не делает ваш аккаунт публичным, если он был закрытым. После этого переподключите эту интеграцию.
Настройка
Шесть шагов. Шаги 3 и 4 нужны только если вы хотите публиковать; для чтения они не требуются.
1. Установите зависимости
cd instagram
bun install2. Подключите Instagram через Composio
Composio — это транспорт для аутентификации и API, на котором работает эта интеграция.
Получите API-ключ в панели Composio.
Добавьте Instagram как приложение в вашем проекте Composio. Это создаст конфигурацию аутентификации, необходимую для процесса подключения.
Сам OAuth-запрос Instagram вы одобрите на шаге 6 — пока здесь ничего делать не нужно.
3. Создайте ретрансляционный бакет для фото (Cloudflare R2)
Instagram никогда не принимает байты изображений. Meta вместо этого загружает публичный URL с помощью собственного краулера. Поэтому фото, которое вы перетаскиваете на вырез, загружается в ваш собственный бакет R2, передаётся Instagram как ссылка и удаляется через несколько секунд.
В панели Cloudflare → R2:
Создайте бакет.
Откройте его → Настройки → Публичный URL для разработки → Включить. Скопируйте этот URL. Бакет должен быть публичным, иначе Meta не сможет загрузить фото.
Управление токенами API → Создать токен API с доступом только к этому бакету и правами на чтение и запись объектов. Секрет показывается один раз — скопируйте его сейчас.
Необязательно, но рекомендуется: добавьте правило жизненного цикла для удаления объектов через 1 день. Интеграция сама удаляет каждое фото; это подстраховка на случай редкого сбоя.
Пропустите весь этот шаг, если вам нужно только читать. account_pulse, post_insights, activity и dm_thread работают без бакета. Только create_post и schedule_post требуют его.
4. Передайте серверу ключи
Создайте файл .env в этой папке:
COMPOSIO_API_KEY=
# Cloudflare R2 — publishing only, leave blank if you are read-only
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=
R2_PUBLIC_URL=R2_ACCOUNT_ID находится на странице R2 → Обзор в Cloudflare, в правом верхнем углу. R2_PUBLIC_URL — это публичный URL для разработки из шага 3.
Если VoiceOS запросит эти значения как поля настройки, этот ввод имеет приоритет, а файл служит только запасным вариантом для запуска сервера отдельно.
5. Установите в VoiceOS
Сначала закройте VoiceOS. Он держит
config.jsonв памяти и перезаписывает его при выходе, поэтому всё, что записано, пока он работает, молча теряется — без каких-либо ошибок. Установщик откажется работать, если увидит, что VoiceOS запущен.
osascript -e 'quit app "VoiceOS"'
python3 install-into-voiceos.py
open -a VoiceOSЭто скопирует данную папку в ~/Library/Application Support/VoiceOS/custom-mcps/, перенесёт ключи из шага 4 и зарегистрирует интеграцию. Простого cp недостаточно — VoiceOS также нужны две записи в config.json (одна указывает, как запускать сервер, другая содержит манифест), и их запись — основная часть работы скрипта. Он сначала создаёт резервную копию config.json.
Команда | Что делает |
| Сообщает, что установлено. Ничего не меняет, безопасно при запущенном VoiceOS. |
| Повторно копирует после редактирования исходников. Цикл «правка → тест». |
| Также обновляет |
| Удаляет регистрацию и установленную копию. |
--update каждый раз заново вычисляет confirmTools из манифеста. Это важнее, чем кажется: именно этот список VoiceOS использует для определения, какие инструменты требуют карточки подтверждения, и устаревшая запись, оставшаяся после переименования, позволила бы публиковать пост без карточки вообще.
6. Подключите аккаунт
Скажите «Как там мой Instagram?». Если Instagram ещё не привязан, вы получите карточку Подключить Instagram со ссылкой OAuth. Одобрите её один раз — и всё готово.
Если сказано, что аккаунт личный, вернитесь к рамке вверху этой страницы.
Related MCP server: Automation MCP
Инструменты
Инструмент | Что делает | Пример запроса | Требует подтверждения? |
| Профиль, количество подписчиков и постов, недавний охват и просмотры профиля, а также сетка последних постов | «Как там мой Instagram?» · «Сколько у меня подписчиков?» | Нет |
| Всё об одном посте: лайки, комментарии, репосты, сохранения, охват, показы и изображение | «Как там мой последний пост?» | Нет |
| Новые комментарии к вашим постам, недавние личные сообщения и любые запланированные посты, которые не прошли или ещё в очереди | «Что нового в Instagram?» · «Мой запланированный пост опубликован?» | Нет |
| Недавние сообщения с одним человеком и отмечает их прочитанными | «Покажи мои сообщения с Джоной» · «Кай ответил?» | Нет |
| Публикует фото или карусель, которую вы перетащили на вырез, с подписью, которую вы произнесли или которую написали за вас | «Опубликуй это фото в Instagram» | Да |
| Ставит тот же пост в очередь на публикацию позже, до 24 часов вперёд | «Запланируй это на завтра в 9 утра» | Да |
Перетащите фото на вырез и произнесите команду в том же дыхании — «опубликуй эти два с подписью о хакатоне». Оба инструмента записи показывают вам фото, подпись и (для расписания) точное время на карточке до того, как что-либо уйдёт в публикацию.
Как обрабатываются ваши фото
Стоит прочитать один раз, потому что один шаг удивляет людей.
Фото преобразуется в JPEG на вашем Mac с помощью
sips(встроено в macOS). Instagram не принимает ничего другого.Оно загружается в ваш бакет R2 под случайным неподбираемым именем и остаётся публично доступным несколько секунд. Это неизбежно: краулер Meta анонимен и не может войти в систему, поэтому публичный URL — единственный способ, которым Instagram примет фото.
Instagram загружает его и публикует пост.
Файл удаляется из бакета — при успехе и при ошибке, в блоке
finally. Правило жизненного цикла из шага 3 — подстраховка.
Бакет принадлежит вам. Ничего не хранится на чужих серверах, и эта интеграция не сохраняет копии ваших фото.
Запланированные посты выполняются на вашем Mac, а не на серверах Instagram — у Instagram нет API для планирования. Таймер macOS launchd срабатывает в указанную вами минуту и публикует пост. Поэтому Mac должен быть включён и не спать. Если он был выключен, когда пост должен был выйти, пост помечается как пропущенный, а не публикуется с опозданием на часы, и instagram_activity сообщит вам об этом при следующем запросе.
Не входит в v1
Сознательно исключено, чтобы вы знали заранее:
Отправка личных сообщений. Meta блокирует отправку сообщений через API через общее приложение Instagram в Composio — возвращает ошибки «вне разрешённого окна», даже если 24-часовое окно заведомо открыто. Интеграция читает личные сообщения, но не может их отправлять. Отвечайте в приложении Instagram.
Ответы на комментарии. То же ограничение транспорта.
Видео и Reels. Только фото и фото-карусели. Публикация видео требует возобновляемой загрузки, которой в этой сборке нет.
Истории. Не поддерживаются инструментарием.
Планирование более чем на 24 часа. Потолок сознательный: каждый лишний час — это ещё один способ, которым отложенная задача портится там, где её никто не видит — фото удаляется, ключ ротируется, соединение отзывается.
Чтение других аккаунтов. Только ваш подключённый аккаунт.
Устранение неполадок
Симптом | Причина |
«Instagram пока не поддерживается» или инструменты не появляются | Установка не зарегистрировалась. Запустите |
Всё возвращает карточку подключения | Срок действия токена истёк или соединение было отозвано. Снова одобрите ссылку OAuth на карточке. |
Публикация сообщает, что ретранслятор не настроен | Одно из пяти значений |
Публикация не удаётся с ошибкой «Instagram отклонил это изображение» | Неправильное соотношение сторон (Instagram допускает от 4:5 до 1.91:1) или размер более 8 МБ после конвертации. |
Запланированный пост так и не вышел | Спросите «что нового в Instagram?» — неудачный или пропущенный пост будет указан там с причиной. |
Разработка
bun install
bun test # 224 unit and failure-injection tests
bunx tsc --noEmit -p tsconfig.jsonТри правила, которые защищают тесты, полезно знать перед редактированием:
stdout — это провод MCP. Один
console.logв опубликованном коде — и VoiceOS не сможет разобрать поток JSON-RPC, поэтому интеграция молча исчезнет из маршрутизации до перезапуска приложения. Всё логируется черезconsole.error;stdoutGuard.ts— первый импорт вserver.tsи переназначает консоль для зависимостей, которые этого не делают.Никогда не собирайте строку оболочки из пути к файлу. Фото приходят от перетаскивания файла на вырез. Только
execFile(cmd, [args])— файл с именемholiday.png; rm -rf ~— это один непрозрачный аргумент дляsips, и тестtest/media-paths.test.tsэто проверяет.Имена инструментов и описания должны точно совпадать с манифестом в обе стороны.
server.tsиvoiceos.integration.json— две копии одного контракта.
confirmations/post_composer.html — источник истины для карточки перед публикацией; манифест содержит её копию в виде строки. Если вы редактируете HTML, копию нужно перегенерировать, иначе карточка, показанная перед необратимой публикацией, будет устаревшей.
This server cannot be deployed
Maintenance
Related MCP Connectors
Manage your Instagram in chat: stats, comments, DMs, publishing and scheduling after you approve.
1Create, review, publish and schedule Instagram images, carousels and Reels with AI assistants.
Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.
- ReelDropOAuthio.reeldrop
Schedule Instagram reels, manage comment-to-DM automations, and read analytics
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI interaction with native macOS applications including Messages, Notes, Mail, Calendar, and Maps through natural language. It allows users to automate tasks like sending messages, managing contacts, and scheduling events across the Apple ecosystem.306 npmMIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to automate macOS desktop tasks including mouse control, keyboard input, screenshots, window management, and UI interaction.11 npm413MIT
- AlicenseNot gradedqualityDmaintenanceGives AI assistants full macOS desktop control via screenshots, mouse, keyboard, scrolling, and app management.446 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI to control Apple Mac apps like Messages, Notes, Contacts, Mail, Reminders, Calendar, and Maps through natural language commands.306 npmMIT