Skip to main content
Glama
HasData

Instagram MCP Server

Instagram MCP Server

Хостируемый сервер Model Context Protocol (MCP), который даёт Claude, Cursor, Windsurf и любому другому MCP-клиенту два инструмента Instagram только для чтения. Найдите публичный профиль по handle и пройдите по его публичной ленте постов в виде структурированного JSON.

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

https://mcp.hasdata.com/api/mcp?apis=instagram

Glama score tool contract MCP Tools npm PyPI License

Содержание

Related MCP server: instagram-mcp

Что вам нужно

MCP-клиент, который поддерживает streamable HTTP с пользовательскими заголовками. Ключ HasData API из панели управления, который можно бесплатно создать без карты; пробный период покрывает 100 вызовов. Больше ничего не нужно. Это удалённый сервер, поэтому самый простой путь — URL и заголовок, без контейнера, который нужно запускать. Клиент только со stdio может вместо этого использовать лаунчер @hasdata/instagram-mcp (npm) или hasdata-instagram-mcp (PyPI).

Быстрый старт

URL

https://mcp.hasdata.com/api/mcp?apis=instagram

Транспорт

HTTP, streamable

Заголовок авторизации

x-api-key: HASDATA_API_KEY

URL сервера одинаков для всех клиентов. Мы используем его на практике в Claude Code и Claude Desktop. Остальные блоки следуют собственному документированному формату каждого клиента для удалённого сервера.

Клиенты с поддержкой OAuth могут добавить тот же URL как коннектор и войти, не помещая ключ в файл конфигурации.

claude mcp add --transport http instagram "https://mcp.hasdata.com/api/mcp?apis=instagram" \
  --header "x-api-key: HASDATA_API_KEY"

Claude Desktop загружает из своего файла конфигурации только локальные (stdio) серверы, поэтому он обращается к удалённому серверу через stdio-лаунчер. Пакет @hasdata/instagram-mcp и есть этот лаунчер, и он читает ключ из окружения.

claude_desktop_config.json:

{
  "mcpServers": {
    "instagram": {
      "command": "npx",
      "args": ["-y", "@hasdata/instagram-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Используете Python вместо Node? Замените лаунчер на пакет PyPI, который uvx запускает без ручной установки:

{
  "mcpServers": {
    "instagram": {
      "command": "uvx",
      "args": ["hasdata-instagram-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Клиент с поддержкой OAuth может вместо этого добавить URL как пользовательский коннектор и пропустить лаунчер.

.cursor/mcp.json:

{
  "mcpServers": {
    "instagram": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "instagram": {
      "serverUrl": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
{
  "mcpServers": {
    "instagram": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "type": "streamableHttp",
      "headers": { "x-api-key": "HASDATA_API_KEY" },
      "disabled": false
    }
  }
}

.vscode/mcp.json:

{
  "servers": {
    "instagram": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

~/.gemini/settings.json:

{
  "mcpServers": {
    "instagram": {
      "httpUrl": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Примеры запросов

Каждый из этих примеров — один вызов инструмента, если не указано иное.

Получите профиль для @nasa и сообщите количество подписчиков, категорию и все ссылки в bio.

Один вызов, 10 кредитов. Для публичного аккаунта ответ профиля уже содержит двенадцать последних постов, поэтому дополнительный запрос о недавней активности не требует второго вызова.

Сравните @nasa, @natgeo и @bbcearth по количеству подписчиков, опубликованным постам и тому, является ли каждый из них бизнес-аккаунтом.

Три вызова, 30 кредитов. По одному на каждый handle.

Пройдитесь по последним пятидесяти постам @nasa и перечислите каждый хэштег с частотой его появления.

Пять вызовов, 50 кредитов. За один вызов приходит двенадцать постов, а пятьдесят требуют пяти страниц.

Для последних двенадцати постов @natgeo покажите лайки, комментарии и упомянутые аккаунты в каждой подписи.

Один вызов, 10 кредитов. Счётчики вовлечённости и упоминания приходят уже разобранными в объектах постов.

Эти примеры работают благодаря двум вещам. Хэштеги и упоминания приходят в виде массивов, извлечённых из подписи, и агент подсчитывает их, а не выполняет регулярное выражение по тексту. А поиск профиля возвращает недавнюю ленту в том же ответе. Поэтому многие исследовательские вопросы укладываются в один вызов.

Инструменты

Два инструмента, оба только для чтения, оба привязаны к handle публичного аккаунта. Примеры ниже сокращены из реальных вызовов, и числа в них меняются по мере того, как аккаунты публикуют посты. Воспринимайте их как схемы. Название каждого инструмента ведёт к справочнику его endpoint.

Примеры — это полезная нагрузка, а не весь ответ. Результат tools/call содержит один текстовый блок, и этот текст сам является JSON, содержащим url, status, text и json, а извлечённые данные находятся в json. В сыром JSON-RPC ответе путь выглядит так: result.content[0].text, затем его нужно распарсить и обратиться к .json. Чат-клиент разворачивает это за вас, а код, обращающийся к endpoint напрямую, — нет.

Получить профиль Instagram

hasdata_instagram_profile_getInstagramProfile

Один публичный профиль по handle.

Параметр

Тип

Обязателен

Примечания

handle

string

да

Имя пользователя без @, как оно указано в URL профиля

Возвращает id, username, fullName, biography, businessCategory, verified, isBusinessAccount и isProfessionalAccount, счётчики followersCount, followsCount, postsCount, highlightsCount и igtvVideoCount, оба поля profilePicUrl и profilePicUrlHD, а также массивы latestPosts, latestIgtvVideos и relatedProfiles.

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

Ссылки находятся в двух разных полях. bioLinks — массив всех ссылок в bio. externalUrls — это одна строка, несмотря на множественное число в названии, и она содержит основную ссылку, иногда с завершающим слэшем, которого нет в версии-массиве. Читайте bioLinks, когда нужны все ссылки.

latestPosts и latestIgtvVideos содержат неодинаковые поля. Видеозаписи добавляют taggedUsers, а объекты постов здесь не содержат productType, который есть в инструменте постов. Код, который обходит оба массива через один парсер, должен обрабатывать дополнительные ключи как необязательные.

{
  "id": "528817151",
  "username": "nasa",
  "fullName": "NASA",
  "biography": "Making the seemingly impossible, possible. ✨",
  "businessCategory": "Government Agencies",
  "bioLinks": [
    "https://www.nasa.gov",
    "https://science.nasa.gov/mission/roman-space-telescope/",
    "http://intern.nasa.gov"
  ],
  "externalUrls": "https://www.nasa.gov/",
  "followersCount": 104397669,
  "followsCount": 92,
  "postsCount": 4887,
  "verified": true,
  "isBusinessAccount": true,
  "latestPosts": [ "…twelve most recent posts, same shape as the posts tool…" ],
  "relatedProfiles": [
    { "id": "…", "username": "…", "fullName": "…", "profilePicUrl": "…" }
  ]
}

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

Получить посты Instagram

hasdata_instagram_posts_getInstagramPosts

Публичная лента постов для одного handle, страница за страницей.

Параметр

Тип

Обязателен

Примечания

handle

string

да

Имя пользователя без @

limit

number

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

nextPageToken

string

pagination.nextPageToken из предыдущего ответа

limit — это приблизительный предел, а не точное количество. Двенадцать постов — это одна страница Instagram и жёсткий максимум для одного вызова, а limit: 50 вернёт двенадцать. Ниже максимума количество оказывается близко к запрошенному числу, но не всегда совпадает с ним; насколько близко — зависит от аккаунта. При проверке на @nasa limit 2 вернул 4 поста, 6 — 6, 11 — 10, а 13 — 12. Относитесь к нему как к «не более чем примерно столько» и читайте длину массива, а не полагайтесь на точное значение.

В ответе повторяются поля идентичности аккаунта вместе с постами. username, id, fullName, verified и оба URL аватара приходят на каждой странице. Удобно для подписи строк, и об этом стоит знать, прежде чем делать отдельный вызов профиля ради этих полей.

Каждый пост содержит id, shortcode, caption, type, productType, hashtags, mentions, likesCount, commentsCount, timestamp, url, displayUrl, images, dimensionsWidth, dimensionsHeight, ownerId и ownerUsername.

{
  "username": "nasa",
  "id": "528817151",
  "fullName": "NASA",
  "verified": true,
  "latestPosts": [
    {
      "id": "3967213292204992434",
      "shortcode": "DcOX3hWFiey",
      "caption": "With your powers combined…\n\nThis colorful picture of the cosmos is the product of teamwork between our @NASAHubble, @NASAWebb, and @NASAChandraXray telescopes. […] \n\n#NASA #Universe #Nebula",
      "type": "Image",
      "hashtags": ["#NASA", "#Universe", "#Nebula"],
      "mentions": ["@NASAHubble", "@NASAWebb", "@NASAChandraXray"],
      "likesCount": 78412,
      "commentsCount": 402,
      "timestamp": "2026-08-18T16:02:11.000Z",
      "url": "https://www.instagram.com/p/DcOX3hWFiey/"
    }
  ],
  "pagination": {
    "morePostsAvailable": true,
    "nextPageToken": "3968050822236429248_528817151",
    "hasdataLink": "https://api.hasdata.com/scrape/instagram/posts?handle=nasa&nextPageToken=3968050822236429248_528817151"
  }
}

Хэштеги и упоминания сохраняют свои префиксы # и @, что важно, если вы сопоставляете их со списком, который собрали сами. morePostsAvailable — флаг, по которому нужно ветвиться при постраничной навигации, а hasdataLink — та же следующая страница, выраженная в виде REST URL; это полезно, когда вы хотите вручную воспроизвести вызов агента.

Ошибки и сценарии сбоев

Ваш клиент почти никогда не видит HTTP-код ошибки от вызова инструмента. Уровень MCP отвечает 200 и помещает сбой внутрь результата, устанавливая isError в true, а причину — в текст. Агент читает сообщение там, где вы могли бы ожидать строку статуса.

Неправильный ключ проявляется как вывод инструмента, а не как неудачное подключение. Список инструментов принимает любой непустой ключ, клиент завершает рукопожатие и показывает зелёный индикатор. Первый вызов инструмента затем возвращается с isError: true и текстом HasData API error: 401 Unauthorized. Следите за этой строкой, потому что ничто раньше в процессе не сообщает о проблеме.

Отсутствующий ключ — это единственная настоящая HTTP-ошибка. Авторизация выполняется до любого инструмента, и само подключение завершается ошибкой 401.

Аргумент, нарушающий схему, отклоняется до того, как становится запросом. Сервер отвечает с isError: true и текстом MCP error -32602: Input validation error, указывая поле. Ничего не извлекается и ничего не списывается.

Handle, который не разрешается в аккаунт, — это чёткая ошибка, а не пустые данные. Возвращается isError: true с HasData API error: 400 Bad Request и requestMetadata.status, установленным в error. Это хороший случай, потому что сбой однозначен. Проверяйте флаг, а не длину массива.

Аккаунт, данные которого не являются публичными, не возвращает ленту постов. Инструменты охватывают публичные аккаунты, и с непубличного читать нечего. Относитесь к отсутствующему latestPosts как к выходу за пределы области действия, а не как к пустой ленте.

Результаты, содержащие данные, также содержат requestMetadata.id, который стоит указывать в обращении в поддержку, а также ссылки html и json на сохранённый артефакт именно этого вызова.

Цены, бесплатный тариф и лимиты

Каждый инструмент Instagram стоит 10 кредитов за успешный вызов. Размер ответа не меняет цену. Профиль с двенадцатью прикреплёнными постами стоит столько же, сколько и профиль без них.

Бесплатная пробная версия — 1 000 кредитов на 30 дней без карты, или 100 вызовов Instagram. После этого активный аккаунт продолжает каждый день получать пополнение в 100 кредитов, когда его баланс опускается ниже 100, так что агент с низким объёмом запросов работает на бесплатном тарифе бессрочно.

Платные тарифы начинаются от $49 в месяц за 200 000 кредитов, или 20 000 вызовов. Цена за единицу снижается с объёмом: от $2.45 за 1 000 вызовов на начальном тарифе до $0.99 на Business, $0.83 на Growth и $0.75 на самых крупных тарифах с высоким объёмом.

Ваш тариф также задаёт число одновременных запросов. Бесплатная пробная версия допускает 1 запрос за раз, Startup — 15, Business — 30, Growth — 50, а тарифы с высоким объёмом — от 200 до 1 500. В любых автоматических процессах обрабатывайте случай превышения лимита с запасом, потому что агент, который рассылает запросы по множеству аккаунтов, упрётся в потолок раньше вас.

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

Выбор инструментов

?apis=instagram открывает ровно эти два инструмента. Параметр принимает список, и ?apis=instagram,tiktok,youtube даёт вашему агенту сразу три социальные платформы. Опустите параметр — и вы получите всё, что предлагает HasData, а это на данный момент 57 инструментов.

Узкий список обычно лучше по умолчанию. Модель, которая выбирает между двумя инструментами, срабатывает правильно чаще, чем та, что выбирает между пятьюдесятью семью, а сами описания инструментов расходуют контекст на каждом шаге.

Сравнение между платформами — обычная причина расширить список. Задайте один и тот же вопрос аккаунту Instagram и аккаунту TikTok — и это будет один промпт, как только доступны обе платформы.

Сравнение с другими серверами

Почти каждый Instagram MCP-сервер устроен иначе, чем этот, и поэтому выбор необычно очевиден.

Популярные серверы управляют аккаунтом. Некоторые оборачивают Instagram Graph API, чтобы публиковать посты, читать комментарии и управлять аккаунтами, которые вы администрируете. Другие работают с личными сообщениями. Серверы анализа вовлечённости требуют INSTAGRAM_USERNAME и INSTAGRAM_PASSWORD в env-блоке, согласно их собственным инструкциям по настройке, потому что они входят в систему и просматривают данные от вашего имени. Все они — правильный инструмент, когда задача — управлять аккаунтом, которым вы владеете.

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

Сервер, управляющий аккаунтом

Этот сервер

Что выступает в роли

Ваш аккаунт, через токен или сессию

Ничего, он читает публичные данные

Что вы настраиваете

Учётные данные или приложение Graph API для каждого аккаунта

Один API-ключ, один раз

Какие аккаунты охватывает

Аккаунты, которыми вы управляете

Любой публичный аккаунт

Публикация и сообщения

Да, в этом суть

Не предлагается

Вывод

Ограничен аккаунтом, которым вы управляете

JSON для любого публичного аккаунта с разобранными хэштегами и упоминаниями

Что вы запускаете

Python или Node процесс локально

URL и заголовок

Стоимость

Бесплатно

10 кредитов за вызов

Решают две строки. Если вам нужно публиковать, комментировать или отвечать, этот сервер вообще не сможет вам помочь. Если вам нужны одни и те же поля по сотне аккаунтов, с которыми у вас нет никаких отношений, сервер, построенный вокруг ваших собственных учётных данных, тоже не поможет.

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

Чего этот сервер не делает. Никаких комментариев, сторис, рилсов кроме тех, что показывает лента, никаких личных сообщений, поиска по хэштегам или геолокации и ничего, что записывает. Он хорошо читает две вещи.

Часто задаваемые вопросы

Что такое Instagram MCP-сервер?

Сервер, который предоставляет данные Instagram в виде инструментов, которые может вызывать ИИ-клиент. Клиент отправляет вызов инструмента по протоколу Model Context Protocol, сервер получает данные и возвращает структурированный JSON, а модель работаеет с результатом и никогда не видит HTML-страницу. Этот сервер предоставляет два инструмента только для чтения и работаеет удалённо. Клиент подключается к URL и не запускает никаких локальных процесов.

Существует ли официальный Instagram MCP-сервер?

Meta не публикует универсальный сервер. Есть официльный MCP для рекламы Meta, и он охватывает рекламные аккаунты и кампании, а не данные профилей и постов. Всё остальное в этой области сделано кем-то другим.

Какие данные входят в область применения?

Публичные поля профиля и публичная лента постов для публичных аккаунтов по имени пользователя. Частный аккаунт по-прежнему возвращает шапку, количество подписчиков и подписок и флаг private: true, но без биографии и без постов, поскольку читать публичную ленту нечего. Вы несёте ответственность за то, как вы используете результаты, включая соблюдение условий Instagram и применимого к вам законодательства.

Нужно ли мне что-либо хостить или запускать?

Нет. Это удалённый MCP-сервер на потоковом HTTP. Ничего устанавливать не нужно, ни окружения Python, ни процессов для перезапуска.

Данные живые или кэшированные?

Живые. Каждый вызов получает данные в момент запроса и несёт собственный requestMetadata.id. Два одинаковых вызова — это две отдельные загрузки, а не воспроизведение сохранённой копии. Счётчики вроде подписчиков и лайков отслеживают аккаунт и меняются вместе с ним.

Сколько постов я могу получить?

Двенадцать за вызов — одна страница Instagram, а дальнейшие страницы берутся из pagination.nextPageToken. Для публичного аккаунта запрос профиля включает те же двенадцать постов без дополнительной платы, так что для коротких вопросов о ленте часто вообще не нужен отдельный вызов постов.

Что произойдёт, если Instagram изменит свою разметку?

Ничего на вашей стороне. Мы отслеживаем изменения и сохраняем стабильной схему ответа, а имена и типы полей остаются неизменными. Поле без значения отсуствует в элементе, а не присуствует со значением null, и именно поэтому опциональные поля следует читать со значением по умолчанию.

Можно ли использовать один сервер для нескольких платформ?

Да. Параметр apis принимает списк, и ?apis=instagram,tiktok,youtube даёт вашем агенту сразу три платформы.

Какие клиенты работают?

Любой MCP-клиент, поддерживающий потоковый HTTP с пользовательскими заголовами. Конфигурации выше протестированы. Клиенты с поддержкой OAuth могут вместо этого добавить URL как коннектор.

Ссылки на HasData

Страницы продуков и конструтор запросов

Instagram Profile API и Instagram Posts API

Документация сервера

Документация MCP-сервера

Все 57 инструментов в одном сервере

HasData/hasdata-mcp

Инструкции для клиентов

MCP-клиенты и интеграции

Другие платформы, которые мы парсим

Ещё 53 API для парсинга

Тарифы и стоимость кредитов

Тарифы и стоимость кредитов

Ключи и использование

Панель управления HasData

Лаунчер для Node на npm

@hasdata/instagram-mcp

Лаунчер для Python на PyPI

hasdata-instagram-mcp

Разработка

Этот репозиторий — конфигурация и документация для удалённого сервера. Здесь нет этапа сборки и нечего контейнеризировать.

В нём есть контрактный тест. README обещает два инструмента с определёнными параметрами, а список инструментов вышестоящего сервера может измениться без коммита в этом репозитории, и тогда этот файл начал бы тихо вас обманывать. Тест проверяет это обещание и запускается еженедельно в CI, а также при каждом пуше.

HASDATA_API_KEY=your_key_here npm test

On PowerShell:

$env:HASDATA_API_KEY = "your_key_here"; npm test

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

Участие в разработке

Самые полезные правки — в таблицах инструментов и примерах ответов, потому что именно эти части расходятся с реальностью. Приложите выполненный вами вызов и полученный ответ. Pull request'ы из форков запускают набор тестов без ключа, а живые проверки пропускаются, а не падают.

Лицензия

MIT. См. LICENSE.

Available Tools

2 tools
hasdata_instagram_posts_getInstagramPostsinstagram_posts: GET /AInspect

Get Instagram Posts

Fetches the latest posts of a public Instagram account by username (handle) and returns each post with caption, hashtags, mentions, likes/comments/plays counts, image and video URLs, dimensions, and timestamp, plus basic account info (full name, profile picture URL, verified/private flags). Supports token-based pagination via nextPageToken to walk older posts. Use to monitor competitor content, track engagement of creator posts, or build datasets of account content for vetting and analytics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoThe maximum number of posts to retrieve per request. Defaults to 12.
handleYesThe Instagram username of the account whose posts you want to scrape, without the `@` symbol.
nextPageTokenNoDefines the next page token. It is used for retrieving the next page results. Use the `nextPageToken` value returned by the previous response.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the read-only nature (fetches), the pagination mechanism via nextPageToken, and limits to public accounts, which is good. However, it does not explicitly state that it performs no mutations, nor does it mention auth requirements, rate limits, or error behavior (e.g., private account handling). These gaps are notable given the absence of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately sized but includes a redundant title phrase ('Get Instagram Posts') that repeats the tool name. It also lists fields in a long enumeration, which is informative but not strictly necessary for operation. It is front-loaded with the main action, but the structure could be tightened without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description sufficiently explains the return payload (post fields, media, account info) and pagination. It covers all parameters and provides usage context. Missing details are mostly error conditions or authentication specifics, which are not critical for a simple GET operation. Overall, it is complete enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter clearly. The description adds marginal value by reinforcing the pagination token's purpose and the handle format (without '@'), but it does not provide semantic details beyond the schema's own descriptions. Baseline 3 is appropriate when schema handles parameter explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('Instagram Posts'), specifies the input (username/handle), and enumerates the exact return fields (caption, hashtags, mentions, counts, URLs, etc.) plus account info. This distinguishes it from the sibling tool (profile get) by resource focus, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit use cases ('monitor competitor content', 'track engagement', 'build datasets') and contextual guidance for when to use this tool. However, it does not mention any exclusions or direct alternatives (like the sibling for profile data), so it misses the full 'when-not-to-use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hasdata_instagram_profile_getInstagramProfileinstagram_profile: GET /AInspect

Get Instagram Profile

Fetches a public Instagram profile by username (handle) and returns full name, biography, external link, profile picture URL, followers count, following count, posts count, verified/private flags, and category. Use to enrich CRM/lead records, verify influencer reach before outreach, monitor competitor accounts, or build datasets of creator metadata for vetting and analytics.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleYesThe Instagram username of the profile you want to scrape, without the `@` symbol.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must carry the burden of behavioral disclosure. It states it fetches public data and lists the returned fields, which is helpful. However, it omits potential rate limits, error behavior, or whether data is live or cached. For a read operation it is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it states the action, lists return fields, then adds use cases. It is front-loaded with the core purpose and each sentence earns its place. Slight trimming of use cases could tighten it, but it remains focused.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema. The description covers what it returns, effectively acting as output documentation. It does not discuss failure modes, but for a basic GET that is acceptable. Overall it is complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, handle, is fully described in the schema (username without @). The description repeats that it's a handle but adds nothing beyond the schema. With 100% schema description coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a public Instagram profile by handle and enumerates the specific data returned (full name, bio, follower counts, flags, etc.). It is distinct from the sibling posts tool, though it does not name it. The verb and resource are explicit, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists concrete use cases (CRM enrichment, influencer verification, competitor monitoring, dataset building), giving context for when to use it. However, it does not explicitly compare to the sibling posts tool or state when not to use it. It provides guidance but lacks exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv1.0.0
    • First observedhasdata_instagram_posts_getInstagramPosts
    • First observedhasdata_instagram_profile_getInstagramProfile

TDQS

A3.8/5.0
Disambiguation5/5

The two tools are completely distinct: one fetches profile metadata, the other fetches posts. There is no overlap in purpose or data returned, making misselection unlikely.

Naming Consistency5/5

Both tool names follow the same pattern: 'hasdata_instagram_<resource>_get<Resource>'. The structure and verb usage are consistent, making them predictable and easy to understand.

Tool Count3/5

With only 2 tools, this is on the thin side for an Instagram server. While they cover the core profile and posts endpoints, the count barely meets the threshold for a reasonable server scope.

Completeness2/5

The server covers only profile and posts, leaving significant gaps such as comments, stories, search, or follower interactions. For a comprehensive Instagram API surface, many common operations are missing, which could cause agent failures when those capabilities are needed.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    Not graded
    maintenance
    Enables access to Instagram data through EnsembleData API, allowing retrieval of user information, posts, reels, follower counts, and search functionality for users, hashtags, and locations.
    9
    -
  • F
    license
    B
    quality
    C
    maintenance
    Provides Instagram analytics, media downloads, and search capabilities through an MCP interface for use with Claude and other MCP clients.
    43
    41
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A remote MCP server that provides tools to query live Meta (Facebook+Instagram) and TikTok organic social data, such as follower counts, insights, recent posts, and aggregated overviews.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides unified access to social media data across nine networks (Instagram, TikTok, YouTube, etc.) through a set of MCP tools for profiles, posts, search, and comments, backed by the SocialBridge API.
    -

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

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