Instagram MCP Server
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
A hosted Model Context Protocol (MCP) server that gives Claude, Cursor, Windsurf and any other MCP client two read-only Instagram tools. Look up a public profile by handle, and walk its public post feed, 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.
- 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 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:
Python instead of Node? Swap the launcher for the PyPI package, which uvx runs without a manual install:
A client with OAuth support can instead add the URL as a custom connector and skip the launcher.
Cursor
.cursor/mcp.json:
Windsurf
~/.codeium/windsurf/mcp_config.json:
Cline
VS Code
.vscode/mcp.json:
Gemini CLI
~/.gemini/settings.json:
Example prompts
Each of these is one tool call unless the count says otherwise.
> Pull the profile for @nasa and 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, @natgeo and @bbcearth on followers, accounts followed and whether each is verified.
*Three calls, 30 credits. One per handle.*
> Walk the last fifty posts from @nasa and 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 |