HasData Instagram
Overview
Description from the maker (original English)
Public Instagram profiles and post feeds by handle, with hashtags and mentions parsed.
PopNx MCP’s three pillars
These three are never merged into one score: opinions, measurements and popularity are different things.
- User voiceiNo reviews yetReviews open together with accounts in a later step
- Our basic checksi1 of 1 passedChecked from public information; code not scanned yet
- UsageiVery new↓ 94/wk · ★ –
What you can do with it
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
- Connection: Computer or cloud
- Transport: stdio, Streamable HTTP
- Category: Marketing & social media
- You need to fill in: HASDATA_API_KEY, x-api-key
Install
Pick the AI app you use, then copy the settings.
Before you install
- Basic checks: 1 of 1 passed
- Runs on the maker’s server: what you ask it goes through their server.
- You fill in yourself:
HASDATA_API_KEY,x-api-key
Values marked secret are keys to your account. Never share them or paste them into a chat.
You need
- Runs in the cloudNothing to install; it connects over the internet
- npmNode.js installed (for the npx command)
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
This address needs a key in a request header, which the add-connector menu cannot set. Use Claude Code, Cursor or VS Code instead.
Or run it on your computer
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"instagram": {
"command": "npx",
"args": [
"-y",
"@hasdata/instagram-mcp"
],
"env": {
"HASDATA_API_KEY": "your-value"
}
}
}
}Run this in your terminal
claude mcp add --transport http instagram 'https://mcp.hasdata.com/mcp?apis=instagram' --header 'x-api-key: your-value'Or run it on your computer
claude mcp add instagram --env HASDATA_API_KEY=your-value -- npx -y @hasdata/instagram-mcpFill in the empty values before running it.
Or copy the settings yourself
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"instagram": {
"url": "https://mcp.hasdata.com/mcp?apis=instagram",
"headers": {
"x-api-key": "your-value"
}
}
}
}Or run it on your computer
Or copy the settings yourself
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"instagram": {
"command": "npx",
"args": [
"-y",
"@hasdata/instagram-mcp"
],
"env": {
"HASDATA_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Or copy the settings yourself
Paste into .vscode/mcp.json in your project
{
"servers": {
"instagram": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=instagram",
"headers": {
"x-api-key": "your-value"
}
}
}
}Or run it on your computer
Or copy the settings yourself
Paste into .vscode/mcp.json in your project
{
"servers": {
"instagram": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@hasdata/instagram-mcp"
],
"env": {
"HASDATA_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This address needs a key in a request header, which the add-connector menu cannot set. Use Claude Code, Cursor or VS Code instead.
Your choice stays on this device in a cookie; no account needed.
Values you fill in
- HasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.
x-api-keysecret required HTTP headerHasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
What it can do
We have not read this server’s tool list yet; we check endpoints in rotation.
Basic checksi
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
- ✓ Pass
Maker matches the repo
The registry name was verified against the domain hasdata.com (the registry checks domain ownership)
- … Not checked yet
Still maintained
We have not read this repo from GitHub yet
- … Not checked yet
Has a licence
We have not read this repo from GitHub yet
- … Not checked yet
Endpoint responds
Not checked yet; we check endpoints in rotation
- … Not checked yet
Sign-in with OAuth
Not checked yet; we check endpoints in rotation
- … Not checked yet
No hidden instructions in tool descriptions
Not checked yet; we read the tool list when we check the endpoint
Compared with others in Marketing & social mediai
- More stars than 0% of the other 3592 servers in this category
- Published to the registry more recently than 38% of the other 3592 servers in this category
- Basic checks equal to or better than 100% of the other 3592 servers in this category
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
Common questions
Is HasData Instagram safe?
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
What keys or codes does it need?
You need to fill in: HASDATA_API_KEY, x-api-key
Does it run on my computer or in the cloud?
Either way works: install it on your computer or connect to the cloud version.
Is it still maintained?
The GitHub repo last changed –, and the latest version (1.0.8) reached the registry 44 days ago.
Which apps can use it?
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
What can I use instead?
In the same category: MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
Alternatives
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Google Analytics MCP
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
BibiGPT YouTube Video Summarizer
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
README from the maker
Open the README
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Instagram MCP Server
A hosted Instagram MCP server that gives Claude, Cursor, Windsurf and any other MCP client read-only Instagram tools. Look up a public profile by handle, walk its public post feed and read the comments on a public post or reel, as structured JSON.
It reads public data about accounts. It does not act as an account. There is nothing to connect and no account of yours involved anywhere in the flow.
1,000 free credits every month, no card required, which is 100 Instagram calls.
https://mcp.hasdata.com/mcp?apis=instagram
- Prompts and resources
Contents
- What you need
- Quick start
- Example prompts
- Tools
- Errors and failure paths
- Pricing, free tier and limits
- Tool selection
- How it compares
- FAQ
- HasData links
- Development
- Contributing
- License
What you need
An MCP client that speaks streamable HTTP with custom headers. A HasData API key from the dashboard, free to create with no card, and the free tier covers 100 calls a month. Nothing else. This is a remote server, so the simplest path is a URL and a header, with no container to run. A stdio-only client can use the @hasdata/instagram-mcp (npm) or hasdata-instagram-mcp (PyPI) launcher instead.
Quick start
| URL | https://mcp.hasdata.com/mcp?apis=instagram |
| Transport | HTTP, streamable |
| Auth header | x-api-key: HASDATA_API_KEY |
The server URL is the same for every client. We run it hands-on in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.
Clients with OAuth support can add the same URL as a connector and sign in without putting a key in a config file.
Claude Code
claude mcp add --transport http instagram "https://mcp.hasdata.com/mcp?apis=instagram" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Claude Desktop loads only local (stdio) servers from its config file, so it reaches a remote server through a stdio launcher. The @hasdata/instagram-mcp package is that launcher, and it reads the key from the environment.
claude_desktop_config.json:
{
"mcpServers": { "instagram": { "command": "npx", "args": ["-y", "@hasdata/instagram-mcp"], "env": { "HASDATA_API_KEY": "YOUR_KEY" } } } }
Python instead of Node? Swap the launcher for the PyPI package, which uvx runs without a manual install:
{
"mcpServers": { "instagram": { "command": "uvx", "args": ["hasdata-instagram-mcp"], "env": { "HASDATA_API_KEY": "YOUR_KEY" } } } }
A client with OAuth support can instead add the URL as a custom connector and skip the launcher.
Cursor
.cursor/mcp.json:
{
"mcpServers": { "instagram": { "url": "https://mcp.hasdata.com/mcp?apis=instagram", "headers": { "x-api-key": "HASDATA_API_KEY" } } } }
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": { "instagram": { "serverUrl": "https://mcp.hasdata.com/mcp?apis=instagram", "headers": { "x-api-key": "HASDATA_API_KEY" } } } }
Cline
{
"mcpServers": { "instagram": { "url": "https://mcp.hasdata.com/mcp?apis=instagram", "type": "streamableHttp", "headers": { "x-api-key": "HASDATA_API_KEY" }, "disabled": false } } }
VS Code
.vscode/mcp.json:
{
"servers": { "instagram": { "type": "http", "url": "https://mcp.hasdata.com/mcp?apis=instagram", "headers": { "x-api-key": "HASDATA_API_KEY" } } } }
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": { "instagram": { "httpUrl": "https://mcp.hasdata.com/mcp?apis=instagram", "headers": { "x-api-key": "HASDATA_API_KEY" } } } }
Example prompts
Each of these is one tool call unless the count says otherwise.
Pull the profile for
@nasaand tell me the follower count, whether it is verified, and every link in the bio.
*One call, 10 credits. For a public account the profile response already carries the twelve most recent posts, so a follow-up about recent activity needs no second call.*
Compare
@nasa,@natgeoand@bbcearthon followers, accounts followed and whether each is verified.
*Three calls, 30 credits. One per handle.*
Walk the last fifty posts from
@nasaand list every hashtag with how often it appears.
*Five calls, 50 credits. Twelve posts arrive per call, and fifty takes five pages.*
For the last twelve posts on
@natgeo, list the accounts mentioned in each caption and the type of each post.
*One call, 10 credits. Mentions and hashtags arrive parsed out of the caption in the post objects.*
Two things make these work. Hashtags and mentions arrive as arrays parsed out of the caption, and an agent counts them instead of running a regex over prose. And a profile lookup returns the recent feed in the same response. That is why so many research questions land in a single call.
Tools
| Tool | What it returns |
|---|---|
hasdata_instagram_comments_getInstagramComments | Fetches the comments on a public post or reel by its URL and returns the post itself with its caption, media, likesCount, commentsCount and timestamp, then each comment with its text, like count, timestamp and author. 10 credits a call |
hasdata_instagram_posts_getInstagramPosts | Fetches the latest posts of a public Instagram account by username (handle) and returns each post with its id, shortcode, caption, type, productType, permalink, media URLs and pixel size, like and comment counts, the posting time, plus hashtags, mentions, tagged users and carousel members. 10 credits a call |
hasdata_instagram_profile_getInstagramProfile | Fetches a public Instagram profile by username (handle) and returns id, full name, biography, bio links, profile picture URL, followers and following counts, the verified flag and the twelve most recent posts. 10 credits a call |
Three tools, all read-only. Two are keyed on a public account handle, the third on the URL of a single post. Samples below are trimmed from real calls, and the numbers in them move as accounts post. Read them as shapes. Each tool name links to its endpoint reference.
The samples are the payload, not the whole response. A tools/call result carries one text block, and that text is itself JSON holding url, status, text and json, with the scraped data under json. From a raw JSON-RPC response the path is result.content[0].text, parsed, then .json. A chat client unwraps that for you and code talking to the endpoint directly does not.
Get an Instagram profile
hasdata_instagram_profile_getInstagramProfile
One public profile by handle.
| Parameter | Type | Required | Notes |
|---|---|---|---|
handle | string | yes | Username without the @, as it appears in the profile URL |
Returns id, username, fullName, biography, verified, the counters followersCount and followsCount, profilePicUrl, the internal fbid, the bioLinks array and latestPosts.
What is guaranteed and what is not, measured across twenty accounts: id, username, followersCount, followsCount, profilePicUrl and fbid came back every time. fullName, biography, verified, bioLinks and latestPosts came back for every public account and are the ones to read with a default.
A private account answers with
private: trueand little else. No bio, no counters beyond the follower numbers, no posts. Branch on that flag before you touch the rest of the payload.
bioLinksis an array of objects, not strings. Each entry carriesurl,title, Instagram's ownredirectUrlwrapper andlinkType. Read.urlwhen you want the destination.
{
"id": "528817151", "username": "nasa", "fullName": "NASA", "biography": "Making the seemingly impossible, possible. ✨", "verified": true, "followersCount": 104345698, "followsCount": 91, "profilePicUrl": "https://scontent.cdninstagram.com/v/t51.2885-19/…", "fbid": "17841401474538262", "bioLinks": [ { "url": "https://www.nasa.gov", "title": "NASA.gov Homepage", "redirectUrl": "https://l.instagram.com/?u=https%3A%2F%2Fwww.nasa.gov%2F&e=…", "linkType": "external" } ], "latestPosts": [ "…the most recent posts, same shape as the posts tool…" ] }
Get Instagram posts
hasdata_instagram_posts_getInstagramPosts
The public post feed for one handle, page by page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
handle | string | yes | Username without the @ |
limit | number | Approximate ceiling on posts in one response. Twelve is the real maximum, and larger values do not fetch more | |
nextPageToken | string | The pagination.nextPageToken from the previous response |
limitis a rough cap rather than an exact count. Twelve posts is one Instagram page and the hard ceiling for a single call, andlimit: 50returns twelve. Below the ceiling the count lands near the number you asked for without always matching it, and how near depends on the account. Measured on@nasa, a limit of 2 returned 4 posts, 6 returned 6, 11 returned 10 and 13 returned 12. Treat it as "no more than roughly this many" and read the array length rather than assuming it.
The response carries posts and pagination, and nothing else. Earlier versions repeated the account's identity fields alongside the feed, so code written against that shape needs a profile call for the name and avatar.
Each post carries id, shortcode, caption, type, productType, url, ownerUsername, ownerId, displayUrl and images, the pixel size as dimensionsWidth and dimensionsHeight, and hasdataLink, a ready-made link to the comments endpoint for that post. hashtags and mentions appear only when the captio
Only the beginning is shown; read the rest in the repo