Skip to main content
Glama
HasData

Instagram MCP Server

Instagram MCP Server

ホスト型のModel Context Protocol (MCP) サーバーで、Claude、Cursor、Windsurf、その他のMCPクライアントに読み取り専用のInstagramツールを2つ提供します。ハンドルで公開プロフィールを検索し、公開投稿フィードを構造化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" }
    }
  }
}

NodeではなくPythonを使う場合は?ランチャーを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" }
    }
  }
}

プロンプト例

各項目は、特に呼び出し回数が示されていない限り、1回のツール呼び出しです。

@nasaのプロフィールを取得して、フオロワー数、カテゴリ、bio内のすべてのリンクを教えてください。

1回の呼び出し、10クレジット。公開アカウントの場合、プロフィール応答には直近12件の投稿がすでに含まれているため、最近のアクティビティに関する追確認に2回目の呼び出しは不です。

@nasa、@natgeo、@bbcearthを、フオロワー数、公開投稿数、それぞれがビジネスアカウントかどうかで比較してください。

3回の呼び出し、30クレジット。ハンドルごとに1回です。

@nasaの直近50件の投稿を取得し、すべてのハッシュタグを出現回数とともにリストアップしてください。

5回の呼び出し、50クレジット。1回の呼び出しで12件の投稿が届き、50件なら5ページ必です。

@natgeoの直近12件の投稿について、いいね数、コメント数、各キャプションで言及されているアカウントを教えてください。

1回の呼び出し、10クレジット。エンゲージメント数とメンションは投稿オブジェクト内でパース済みとして得られます。

これを可にしているのは2つの点です。ハッシュタグとメンションはキャプションからパースされた配列として届き、エージェントは散文に対して正規表現を実行する代わりにそれらを数えます。さらに、プロフィール検索は同じレスポンス内で最近のフィードを返します。そのため、多くの調査質問が1回の呼び出しで完結します。

ツール

2つのツールはいずれも読み取り専用で、どちらも公開アカウントのハンドルをキーにします。以下のサンプルは実際の呼び出しから抜粋したもので、数値はアカウントの投稿に応じて変わります。形として捉えてください。各ツール名はエンドポイントのリファレンスにリンクしています。

サンプルはペイロードであり、レスポンス全体ではありません。tools/callの結果には1つのテキストブロックが含まれ、そのテキスト自体がurl、status、text、jsonを持つJSONで、スクレイピングされたデータはjsonの下にあります。生のJSON-RPCレスポンスからは、パスはresult.content[0].textをパースした後の.jsonです。チャットクライアントはそれを自動的に展開しますが、エンドポイントに直接通信するコードは展開しません。

Instagramのプロフィールを取得する

hasdata_instagram_profile_getInstagramProfile

ハンドルで公開プロフィールを1件取得します。

パラメーター

型

必須

備考

handle

string

はい

@を含まないユーザー名(プロフィールURLに表示されている形式)

id、username、fullName、biography、businessCategory、verified、isBusinessAccount、isProfessionalAccount、カウンターのfollowersCount、followsCount、postsCount、highlightsCount、igtvVideoCount、profilePicUrlとprofilePicUrlHDの両方、そして配列のlatestPosts、latestIgtvVideos、relatedProfilesを返します。

中核となる識別フィールドとフオロワー数・フオロー中数は、公開アカウントであれば必ず返ります。それ以のフィールドはアカウント自身が公開している内容によって異なるため、オプションのフィールドはデフォルト値付きで読むようにしてください。

リンクは、同じものではない2つのフィールドに格納されています。bioLinksは、bio内のすべでのリンクの配列です。externalUrlsは複数形の名前ですが単一の文字列で、主要なリンクを保持しており、配列版にはない末尾のスラッシュが付くことがあります。すべでのリンクが欲しければbioLinksを読んでください。

latestPostsとlatestIgtvVideosは、同じフィールドを持つわけではありません。ビデオ項目にはtaggedUsersが追られますが、こちらの投稿オブジェクトには、投稿ツールが含めるproductTypeがありません。両方の配列を1つのパーサーで処理するコードは、追のキーをオプションとして扱う必があります。

{
  "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

1つのハンドルの公開投稿フィードを、ページごとに取得します。

パラメーター

型

必須

備考

handle

string

はい

@を含まないユーザー名

limit

number

1回のレスポンスに含まれる投稿数のおおよその上限。実際の最大は12件で、それより大きい値を指定しても追加取得されません

nextPageToken

string

前回のレスポンスのpagination.nextPageToken

limitは正確な件数ではなく、おおよその上限です。12件がInstagramの1ページ分であり、1回の呼び出しでの絶対的な上限です。limit: 50でも12件が返ります。上限未満では、返る件数は指定した数値に近くなりますが、必ずしも一致するとは限らず、その近さはアカウントによって異なります。@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を返します。フロー内のそれより前の段階では何も問題を報告しないため、この文字列に注意してください。

**

無料トライアルはカード不要で30日間1,000クレジット、またはInstagram呼び出し100回です。その後も、アクティブなアカウントは残高が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です。無人で動作するものでは、オーバーフローを防御的に処理してください。複数のハンドルに処理を広げるエージェントは、あなたが気づく前に上限に達するためです。

ページングは1回ごとに1呼び出しを消費します。2つのアカウントにわたって100件の投稿を辿るプロンプトは、18回の呼び出しと180クレジットになります。トライアルは、深いフィードクロールよりもプロフィール比較のほうが長く持ちます。

ツールの選択

?apis=instagram は、正確にこの2つのツールを公開します。このパラメータはリストを受け取り、?apis=instagram,tiktok,youtube とすると、エージェントに一度に3つのソーシャルプラットフォームを提供します。パラメータを省略すると、HasDataが公開しているすべて(現在は57ツール)を取得します。

狭いリストが通常はより良いデフォルトです。2つのツールから選ぶモデルは、57個から選ぶモデルよりも正しく選択できる頻度が高く、ツールの説明自体も毎ターンコンテキストを消費します。

リストを広げる一般的な理由は、クロスプラットフォーム比較です。InstagramのハンドルとTikTokのハンドルに同じ質問をする場合、両方が公開されていれば1つのプロンプトで済みます。

他のサーバーとの比較

ほとんどすべてのInstagram MCPサーバーは、このサーバーとは異なることをします。そのため、選択肢は異例なほど明確です。

人気のあるものはアカウントを操作します。Instagram Graph APIをラップして、投稿の公開、コメントの読み取り、管理しているアカウントの管理を行うものもあります。ダイレクトメッセージを扱うものもあります。エンゲージメント分析サーバーは、独自のセットアップ手順に従って、envブロック内で INSTAGRAM_USERNAME と INSTAGRAM_PASSWORD を要求します。あなたとしてログインして閲覧するからです。これらはすべて、自分が管理するアカウントを運用する仕事には適切なツールです。

このサーバーは誰としてもログインしません。これは別の仕事です。このサーバーが答えるすべての質問は、あなたが所有していないハンドルに関するものであり、どのハンドルであっても呼び出しは同じです。

アカウント操作サーバー

このサーバー

動作対象

トークンまたはセッションを介したあなたのアカウント

なし。公開データを読み取るだけ

設定するもの

アカウントごとの認証情報またはGraph APIアプリ

APIキー1つを一度だけ

対象のハンドル

管理しているアカウント

任意の公開ハンドル

投稿とメッセージ

はい。それが目的です

提供なし

出力

実行中のアカウントに限定

任意の公開ハンドルのJSON。ハッシュタグとメンションも解析

実行するもの

ローカルのPythonまたはNodeプロセス

URLとヘッダー

費用

無料

1回の呼び出しにつき10クレジット

決め手となるのは2つの行です。投稿、コメント、返信が必要なら、このサーバーはまったく役に立ちません。関係のない100のハンドルにわたって同じフィールドが必要なら、自分の認証情報を中心に構築されたサーバーも役に立ちません。

決め手となる軸は、完成度ではなく対象範囲です。自分のログインを中心に構築されたサーバーは、出力がどれだけ優れていても、管理しているアカウントにしかアクセスできません。このサーバーは任意の公開ハンドルに対して同じ質問に答えます。フィールドは解析済みの配列として返り、集計にコストがかかりません。

このサーバーがしないこと。 コメントも、ストーリーも、フィードが報告する範囲を超えるリールも、ダイレクトメッセージも、ハッシュタグや位置情報の検索も、書き込み操作も一切ありません。2つのものをよく読み取ります。

FAQ

Instagram MCPサーバーとは何ですか?

Instagramのデータを、AIクライアントが呼び出せるツールとして公開するサーバーです。クライアントはModel Context Protocolを介してツール呼び出しを送信し、サーバーがデータを取得して構造化されたJSONを返します。モデルは結果を処理し、HTMLページを見ることはありません。このサーバーは2つの読み取り専用ツールを公開し、リモートで動作します。クライアントはURLに接続し、ローカルプロセスを起動しません。

公式のInstagram MCPサーバーはありますか?

Metaは汎用のものを公開していません。Meta広告向けの公式MCPは存在し、広告アカウントとキャンペーンを対象としており、プロフィールや投稿データは対象外です。この分野の他のものはすべて、誰か他の人が構築したものです。

対象となるデータは何ですか?

公開アカウントの公開プロフィールフィールドと公開投稿フィードで、ハンドル単位です。非公開アカウントでも、ヘッダー、フォロワー数、フォロー数、private: true フラグは返りますが、読み取る公開フィードがないため、プロフィール文も投稿もありません。結果の利用方法については、Instagramの利用規約およびあなたに適用される法令への遵守を含め、あなたに責任があります。

何かをホストまたは実行する必要がありますか?

いいえ。これはストリーマブルHTTP上のリモートMCPサーバーです。インストールするものも、Python環境も、再起動するプロセスもありません。

データはライブですか、それともキャッシュされていますか?

ライブです。各呼び出しはリクエスト時に取得し、独自の requestMetadata.id を持ちます。同じ呼び出し2回は、保存されたコピーの再生ではなく、2回の別々の取得です。フォロワー数やいいね数などのカウンターはアカウントを追跡し、アカウントとともに変動します。

投稿は何件取得できますか?

1回の呼び出しにつき12件、Instagramの1ページ分です。さらにページを取得するには pagination.nextPageToken を使います。公開アカウントの場合、プロフィール検索には同じ12件が追加費用なしで含まれるため、短いフィードの質問では投稿呼び出しが不要なことがよくあります。

Instagramがマークアップを変更したらどうなりますか?

あなた側では何も起きません。私たちが変更を追跡し、レスポンススキーマを安定に保ちます。フィールド名と型も変わりません。値がないフィールドは、nullで存在するのではなく、アイテムから欠落します。そのため、オプショナルなフィールドはデフォルト値付きで読むべきです。

1つのサーバーを複数のプラットフォームで使えますか?

はい。apis パラメータはリストを受け取り、?apis=instagram,tiktok,youtube とすると、エージェントに一度に3つのプラットフォームを提供します。

どのクライアントが動作しますか?

カスタムヘッダーをサポートするストリーマブルHTTPを持つ任意のMCPクライアントです。上記の設定はテスト済みです。OAuthをサポートするクライアントは、代わりにコネクタとしてURLを追加できます。

HasData リンク

プロダクトページとリクエストビルダー

Instagram Profile API と Instagram Posts API

サーバードキュメント

MCPサーバードキュメント

1つのサーバーにある全57ツール

HasData/hasdata-mcp

クライアントのチュートリアル

MCPクライアントとインテグレーション

その他に解析対象のプラットフォーム

さらに53のスクレイパーAPI

プランとクレジット費用

プランとクレジット費用

キーと利用状況

HasData ダッシュボード

npm の Node ランチャー

@hasdata/instagram-mcp

PyPI の Python ランチャー

hasdata-instagram-mcp

開発

このリポジトリは、リモートサーバーの設定とドキュメントです。ビルドステップも、コンテナ化するものもありません。

コントラクトテストは備えています。READMEは特定のパラメータを持つ2つのツールを約束していますが、アップストリームのツールリストはここでのコミットなしに変更されることがあり、その場合、このファイルは静かに嘘をつくことになります。テストはその約束を検証し、毎週CIで、また毎回のプッシュ時にも実行されます。

HASDATA_API_KEY=your_key_here npm test

PowerShell の場合:

$env:HASDATA_API_KEY = "your_key_here"; npm test

最後のチェックは実際の呼び出しを行い、10クレジットを消費します。これは、正しい理由で失敗できるカナリーの価格です。ツールの一覧取得は空でないキーがあれば成功し、ツールを一覧するだけのテストは、失効したキーでもグリーンのままです。

コントリビューション

ツールの表とレスポンスサンプルの訂正が最も有用なコントリビューションです。それらは乖離しやすい部分だからです。実行した呼び出しと、受け取ったレスポンスを含めてください。フォークからのプルリクエストは、キーなしでスイートを実行し、ライブチェックは赤(失敗)にならず、スキップされます。

ライセンス

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