Skip to main content
Glama
HasData

Instagram MCP Server

Instagram MCP 服务器

一个托管的模型上下文协议(MCP)服务器,为 Claude、Cursor、Windsurf 以及任何其他 MCP 客户端提供两个只读的 Instagram 工具。通过用户名查找公开个人资料,并以结构化 JSON 的形式浏览其公开帖子信息流。

它读取有关账号的公开数据。它不会扮演账号。整个流程中没有任何需要连接的内容,也不涉及您的任何账号。

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

Glama score tool contract MCP Tools npm PyPI License

目录

Related MCP server: Social MCP Connector

你需要什么

一个支持流式 HTTP 并带有自定义请求头的 MCP 客户端。一个来自仪表盘的 HasData API 密钥,免费创建且无需银行卡,试用额度覆盖 100 次调用。除此之外不需要其他任何东西。这是一个远程服务器,所以最简单的路径就是一个 URL 和一个请求头,无需运行容器。仅支持 stdio 的客户端可以改用 @hasdata/instagram-mcp(npm)或 hasdata-instagram-mcp(PyPI)启动器。

快速开始

URL

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

传输方式

HTTP,流式

认证请求头

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 的个人资料,告诉我粉丝数、类别以及简介中的每一个链接。

一次调用,10 积分。对于公开账号,个人资料响应已经携带最近十二条帖子,所以关于近期活动的后续问题无需第二次调用。

比较 @nasa、@natgeo 和 @bbcearth 的粉丝数、已发布帖子的数量,以及各自是否为企业账号。

三次调用,30 积分。每个用户名一次。

浏览 @nasa 最近五十条帖子,列出每个话题标签及其出现次数。

五次调用,50 积分。每次调用返回十二条帖子,五十条需要五页。

对于 @natgeo 最近十二条帖子,给出点赞数、评论数以及每条配文中提到的账号。

一次调用,10 积分。互动计数和提及的账号已经解析在帖子对象中。

有两件事让这些成为可能。话题标签和提及的账号会以从配文中解析出的数组形式返回,由 agent 来计数,而不是对正文运行正则表达式。而且个人资料查询会在同一个响应中返回最近的信息流。这就是为什么这么多研究类问题可以在一次调用中解决。

工具

两个工具,都是只读的,都以公开账号的用户名为键。下面的示例是从真实调用中精简而来,其中的数字会随着账号发布内容而变化。请把它们当作结构来理解。每个工具名称都链接到其端点参考文档。

示例是有效负载,而不是整个响应。一个 tools/call 结果携带一个文本块,该文本本身是 JSON,包含 url、status、text 和 json,抓取的数据位于 json 下。从原始 JSON-RPC 响应来看,路径是 result.content[0].text,解析后取 .json。聊天客户端会为您解开这一层,而直接与该端点通信的代码则不会。

获取 Instagram 个人资料

hasdata_instagram_profile_getInstagramProfile

通过用户名获取一个公开个人资料。

参数

类型

必填

备注

handle

string

是

不带 @ 的用户名,与个人资料 URL 中显示的一致

返回 id、username、fullName、biography、businessCategory、verified、isBusinessAccount 和 isProfessionalAccount,计数器 followersCount、followsCount、postsCount、highlightsCount 和 igtvVideoCount,profilePicUrl 和 profilePicUrlHD 两者,以及数组 latestPosts、latestIgtvVideos 和 relatedProfiles。

核心身份字段以及粉丝数和关注数对于每个公开账号都会返回。除此之外的字段取决于账号本身公开了哪些内容,所以请为可选字段读取时提供默认值。

链接存在于两个不同的字段中。bioLinks 是简介中所有链接的数组。externalUrls 尽管名字是复数,却是一个单一字符串,它保存主要链接,有时带有数组版本所没有的尾部斜杠。当你想获取全部链接时,请读取 bioLinks。

latestPosts 和 latestIgtvVideos 携带的字段并不相同。视频条目增加了 taggedUsers,而这里的帖子对象省略了 posts 工具会包含的 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 自己为该账号提供的建议列表,有几十个条目。这是一种不用猜测用户名就能扩大竞争对手集合的廉价方式。

获取 Instagram 帖子

hasdata_instagram_posts_getInstagramPosts

按页获取一个用户名的公开帖子信息流。

参数

类型

必填

备注

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 形式表达的同一个下一页,当你希望手动复现 agent 的调用时会很有用。

错误与失败路径

你的客户端几乎不会在工具调用中看到 HTTP 错误码。MCP 层会以 200 响应,并把失败放在结果内部,isError 设为 true,原因以文本形式呈现。Agent 读到的是消息,而你原本可能期望看到状态行。

错误的密钥会以工具输出的形式呈现,而不是连接失败。 列出工具会接受任何非空密钥,客户端完成握手并显示绿色。随后第一次工具调用会返回 isError: true 和文本 HasData API error: 401 Unauthorized。请留意这个字符串,因为流程中更早的阶段不会报告这个问题。

缺少密钥是唯一真正的 HTTP 错误。 授权在任何工具之前运行,连接本身会以 401 失败。

破坏 schema 的参数会在成为请求之前被拒绝。 服务器以 isError: true 和文本 MCP error -32602: Input validation error 响应,并指明字段。不会获取任何内容,也不会产生任何费用。

无法解析的用户名是干净的错误,而不是空数据。 它返回 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 次调用。单价随用量增加而下降,从入门套餐的 每 1,000 次调用 $2.45,到 Business 的 $0.99、Growth 的 $0.83,以及最大型 高容量套餐 的 $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 来发布帖子、阅读评论并管理您所管理的账号。另一些处理私信。参与度分析服务器会在 env 块中要求 INSTAGRAM_USERNAME 和 INSTAGRAM_PASSWORD,按照它们自己的设置说明,因为它们会以您的身份登录并浏览。当任务是运营一个您控制的账号时,所有这些工具都很合适。

这个服务器从不以任何人的身份登录,这是不同的任务。它回答的每个问题都关于一个您不拥有的用户名,而且无论哪个用户名,调用方式都完全相同。

运营账号的服务器

本服务器

它充当的角色

您的账号,通过令牌或会话

无,它读取公开数据

您配置的内容

每个账号的凭据或 Graph API 应用

一个 API 密钥,一次

覆盖哪些用户名

您管理的账号

任何公开用户名

发布与私信

有,这正是重点

不提供

输出

仅限于您运营的账号

任何公开用户名的 JSON,已解析出话题标签和提及

您运行什么

本地 Python 或 Node 进程

一个 URL 和一个请求头

费用

免费

每次调用 10 积分

两行就决定了。如果您需要发帖、评论或回复,这个服务器完全帮不了您。如果您需要在与一百个用户名毫无关系的情况下获取相同字段,那么围绕您自己凭据构建的服务器也同样帮不了您。

决定性的轴是范围,而不是精美程度。围绕您自己的登录信息构建的服务器,无论输出多好,都只能触达您管理的账号。而这一款对任何公开用户名都能回答同一个问题,而且字段以已解析的数组形式返回,聚合起来不花任何成本。

这个服务器不做什么。 不评论、不 Stories、不提供信息流报告之外的 Reels、不私信、不搜索话题标签或地点,也不做任何写入操作。它擅长读取两样东西。

常见问题

什么是 Instagram MCP 服务器?

一个将 Instagram 数据以工具形式暴露给 AI 客户端调用的服务器。客户端通过 Model Context Protocol 发送工具调用,服务器获取数据并返回结构化 JSON,模型处理结果而永远不会看到 HTML 页面。本服务器暴露两个只读工具并远程运行。客户端连接到一个 URL,不启动任何本地进程。

有官方的 Instagram MCP 服务器吗?

Meta 没有发布通用型。有一个面向 Meta 广告的官方 MCP,它覆盖广告账号和广告系列,而不是资料和帖子数据。这个领域里的其他一切都是别人构建的。

哪些数据在范围内?

公开账号的公开资料字段和公开帖子信息流,按用户名访问。私密账号仍会返回其资料头部、关注者数和关注数以及 private: true 标志,但不会返回简介和帖子,因为没有可读取的公开信息流。您对自己使用结果的方式负责,包括遵守 Instagram 的条款和适用于您的法律。

我需要托管或运行任何东西吗?

不需要。这是一个基于 streamable HTTP 的远程 MCP 服务器。无需安装任何东西,无需 Python 环境,无需重启任何进程。

数据是实时的还是缓存的?

实时的。每次调用都会在请求时获取数据,并带有自己的 requestMetadata.id。两次相同的调用是两次独立的获取,而不是重放存储的副本。关注者和点赞等计数器会跟踪账号,并随着账号的变化而变化。

我能获取多少条帖子?

每次调用十二条,一个 Instagram 页面,更多页面来自 pagination.nextPageToken。对于公开账号,资料查找会以零额外成本包含同样的十二条,因此简短的信息流问题往往根本不需要单独的帖子调用。

当 Instagram 更改其标记时会发生什么?

您这边什么都不会发生。我们跟踪更改并保持响应模式稳定,字段名称和类型保持不变。没有值的字段会从条目中缺失,而不是存在但为 null,这就是为什么可选字段应该用默认值来读取。

我可以把一个服务器用于多个平台吗?

可以。apis 参数接受一个列表,?apis=instagram,tiktok,youtube 可让您的智能体同时使用三个平台。

哪些客户端可以使用?

任何支持带自定义请求头的 streamable HTTP 的 MCP 客户端。上面的配置已经过测试。支持 OAuth 的客户端也可以将 URL 添加为连接器。

HasData 链接

产品页面和请求构建器

Instagram Profile API 和 Instagram Posts API

服务器文档

MCP 服务器文档

一个服务器中的全部 57 个工具

HasData/hasdata-mcp

客户端指南

MCP 客户端与集成

我们解析的其他平台

另外 53 个抓取 API

套餐与积分成本

套餐与积分成本

密钥与用量

HasData 控制台

npm 上的 Node 启动器

@hasdata/instagram-mcp

PyPI 上的 Python 启动器

hasdata-instagram-mcp

开发

这个仓库是一个远程服务器的配置和文档。没有构建步骤,也没有需要容器化的东西。

它确实带有一个契约测试。README 承诺了两个具有特定参数的工具,而上游工具列表可能在没有此处提交的情况下发生变化,这会让这个文件悄悄地对你撒谎。测试断言这一承诺,并在每次推送时以及每周在 CI 中运行。

HASDATA_API_KEY=your_key_here npm test

在 PowerShell 中:

$env:HASDATA_API_KEY = "your_key_here"; npm test

最后一项检查会进行真实调用并消耗 10 积分,这就是一只金丝雀的代价,它能因正确的原因而失败。列出工具时,只要密钥非空就会成功,而一个只列出工具的测试即使密钥被撤销也仍然保持绿色。

贡献

对工具表格和响应示例的更正是最有用的贡献,因为这些部分最容易漂移。请包含您进行的调用和收到的响应。来自 fork 的拉取请求在没有密钥的情况下运行测试套件,实时检查会跳过而不是报红。

许可证

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