instagram-nutrition-mcp
Provides tools for interacting with an Instagram Business or Creator account through Meta's official Instagram API, including checking token validity and expiration, identifying the associated account, and retrieving account details such as username, name, account type, followers, following, and post count. The server is also intended for publishing nutrition content to Instagram, though publishing is still in development.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@instagram-nutrition-mcpcheck my Instagram token and tell me when it expires"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
instagram-nutrition-mcp
An MCP server that lets Claude design and publish nutrition content to an Instagram Business account through Meta's official Instagram API.
Status: in development (MVP in progress).
Requirements
Node.js 22+
An Instagram Business (or Creator) account
A Meta developer app and access token: follow docs/META_SETUP.md. Both Instagram-login (
IGAA…) and Facebook-login (EAA…) tokens work.
Related MCP server: meta-mcp
Setup
npm install
cp .env.example .env # then fill in IG_ACCESS_TOKEN and IG_USER_ID
npm run buildUse it with Claude Code
Register the server (use the absolute path to your clone):
claude mcp add instagram \
-e IG_ACCESS_TOKEN=... -e IG_USER_ID=... \
-- node /abs/path/to/instagram-nutrition-mcp/dist/index.jsYou can leave out the -e flags: the server also reads .env from the repo root.
Then ask Claude things like "how many followers do I have?" or "check my Instagram token".
Tools
Tool | What it does |
| Checks the token works, which account it belongs to, and days until it expires |
| Username, name, account type, followers, following, post count |
Keeping the token valid
Long-lived tokens last 60 days. Run npm run token:refresh every ~50 days (see
docs/META_SETUP.md).
Configuration
Variable | Required | Default |
| yes | |
| for publishing (later) | |
| no |
|
| no |
|
Development
npm run lint
npm run typecheck
npm test
npm run build
npm run inspect # MCP Inspector against dist/index.jsLicense
MIT
Available Tools
2 toolscheck_tokenCheck Instagram tokenARead-only
Check that the Instagram access token works, which account it belongs to, and when it expires (if known). Use this when Instagram calls fail or to see if a refresh is due.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds meaningful context beyond that by saying the result covers validity, owning account, and expiry, including the honest caveat 'if known' that warns the expiry value may be absent. It does not describe what happens on failure or the shape of a failed check, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the core purpose and its outputs front-loaded and the usage condition following immediately. Every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input parameters and no output schema, the description carries the burden of telling the agent what a call returns, and it does so (validity, account, expiry-if-known). The remaining gap is operational: no note on failure handling or on how it differs from get_account_info, which matters for a diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter meaning for the description to add; the baseline of 4 applies. Nothing in the text misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Check') and resource ('Instagram access token') plus the three things it reports: validity, owning account, and expiry. It is clear about what is checked, though it never explicitly distinguishes itself from the sibling get_account_info, which also sounds like it reveals the owning account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete triggering conditions: when Instagram calls fail, and to determine whether a refresh is due. That is strong when-to-use guidance, but there is no exclusion or routing note relative to get_account_info, leaving the agent to infer which tool to pick for account details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_infoGet Instagram account infoARead-only
Get the connected Instagram account's username, name, account type, follower and following counts, and number of posts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-data profile is covered structurally. The description adds value by naming the exact data fields returned, but says nothing about failure modes (e.g., no connected account) or whether counts are live versus cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler; every listed field earns its place by telling the agent what it will receive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the return-value burden and does so by enumerating the fields. Only the error/empty-connection case and data freshness are left unstated, which is minor for a zero-arg read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The field enumeration in the description is a return-value statement rather than parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('Get the connected Instagram account's ...') plus an enumeration of the returned fields makes the purpose unambiguous. It does not differentiate from the sibling check_token, so an agent cannot tell from the text alone which one to reach for when it wants to validate the connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no mention of the only sibling, check_token, which is the obvious alternative for connection-related questions. Usage is only inferable from the field list.
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.
2 tool updates
v0.1.0- First observed
check_token - First observed
get_account_info
TDQS
Scored across 2 tools
check_token is a diagnostic/auth-health tool while get_account_info returns profile metadata, so their primary purposes are distinct. There is mild overlap since check_token also reveals which account the token belongs to, but description context makes the boundary clear enough.
Both tools follow a uniform snake_case verb_noun pattern (check_token, get_account_info). The convention is predictable and easy to extend.
Only two tools exist, both of which are preliminary/setup-oriented (token check and account lookup). For a server branded around Instagram nutrition data, this surface is far too thin to earn its place.
There are no tools to fetch posts, media, captions, or any nutrition-related content, which is the apparent purpose of the server. The surface covers only connectivity and account identity, leaving core workflows as dead ends.
Maintenance
Related MCP Connectors
Live public Instagram and TikTok data for AI assistants: profiles, posts, stories, followers.
Query your Minter.io social media analytics: Instagram, TikTok, X, Facebook, LinkedIn, Threads.
Instagram profiles, follower/following snapshots and changes, with budgeted public lookups.
Instagram profiles, follower/following snapshots and changes, with budgeted public lookups.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Claude to the official Meta Instagram Graph API (read-only) for retrieving Instagram profile, media, insights, and comments as MCP tools over Streamable HTTP.MIT
- AlicenseNot gradedqualityCmaintenanceConnects Claude to Instagram through Meta's official API, enabling users to retrieve account insights, analyze professional profiles, publish photos/carousels/reels/stories, manage comments, read and respond to Direct messages, and call any Graph API endpoint.10 npmMIT
- FlicenseNot gradedqualityAmaintenanceEnables sending, reading, and managing Instagram Direct Messages from your own account through Claude Desktop or Cursor, including sending text, photo, and video messages, listing and searching chats and threads, downloading media from messages, and looking up user profiles, followers, posts, and stories. It also supports marking messages as seen and checking pending inbox threads.-
- AlicenseNot gradedqualityBmaintenanceEnables a single professional Instagram account to be managed through Claude, including reading and replying to comments and direct messages, and viewing account and media statistics. It runs as a remote streamable HTTP server with OAuth-protected access and automatic renewal of the Instagram token.MIT