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: Social MCP Connector

Что вам нужно

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.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses token-based pagination via nextPageToken and limits to public accounts, which is helpful. However, it does not mention error handling, rate limits, authentication requirements, or what happens when an account is not found. For a GET operation, read-only nature is implied but not explicitly stated. This is adequate but leaves some behavioral gaps.

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 well-structured: it starts with a clear title line, then a detailed paragraph, and ends with use cases. It front-loads the core functionality and avoids unnecessary repetition. While slightly verbose with the list of return fields, each sentence adds value and the overall length is appropriate for the complexity of the tool.

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 the tool's moderate complexity (3 parameters, no output schema) and lack of annotations, the description covers the essential aspects: what data is returned, pagination, and the public-account constraint. It does not mention potential errors, maximum limit values, or ordering guarantees, but these are not critical for a basic GET posts endpoint. The description is sufficiently complete for an agent to invoke the tool correctly in typical scenarios.

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 description coverage is 100% for all three parameters (handle, limit, nextPageToken), so the schema already documents their semantics. The description adds no new information about parameters beyond what the schema provides—it merely reiterates the pagination concept. With high schema 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 verb 'Fetches' and the resource 'latest posts of a public Instagram account by username (handle)', and enumerates the returned fields (caption, hashtags, mentions, counts, URLs, dimensions, timestamp, and account info). This specificity distinguishes it from the sibling tool getInstagramProfile, which targets profile data, so an agent can immediately tell them apart.

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?

The description provides concrete use cases: 'monitor competitor content, track engagement of creator posts, or build datasets of account content for vetting and analytics.' This gives clear context for when to use the tool, though it does not explicitly mention exclusions or direct comparisons to the sibling tool. Still, the use cases effectively communicate appropriate scenarios.

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.9/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 of behavioral disclosure. It does state that the profile is public and lists the data returned, implying a read-only fetch. However, it does not disclose potential rate limits, response format, or behavior when a profile is private or nonexistent, which leaves notable gaps for a scraping tool.

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 front-loaded with the core action and return fields, then provides a compact use-case sentence. The use-case list is slightly long with overlapping examples, but every sentence contributes orientation for an agent; it is concise without being terse.

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?

For a one-parameter, read-oriented public profile fetch with no output schema, the description covers the input, the returned data, and typical use cases. It lacks explicit notes on errors, rate limits, or private-account behavior, but these are minor for this simple tool and the description is otherwise complete enough 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?

The schema already documents the only parameter ('handle') with a clear description including the requirement to omit the '@' symbol, so schema description coverage is 100%. The description repeats the handle concept without adding new parameter semantics, so 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 opens with a specific action ('Fetches a public Instagram profile by username (handle)') and names the resource, input, and a concrete list of returned fields (full name, biography, counts, flags, category). This clearly distinguishes it from sibling tools like hasdata_instagram_posts_getInstagramPosts, which targets posts rather than profile metadata.

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?

The description gives concrete application contexts: enriching CRM/lead records, verifying influencer reach, monitoring competitors, and building creator datasets. It does not explicitly state when not to use it or mention alternatives such as the Instagram Posts sibling, but the use-case list makes selection straightforward.

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.

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

TDQS

A3.8/5.0

Scored across 2 tools

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

ActivityActive
ResponsivenessUnresponsive

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
    Not graded
    quality
    D
    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.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables MCP clients to perform live Google searches and retrieve structured SERP data including organic results, AI Overviews, People Also Ask, AI Mode answers, news, shopping, and short-video results via eight read-only tools.
    10
    73 npm
    65 PyPI
    18
    MIT