Skip to main content
Glama
instagram-nutrition-mcp

instagram-nutrition-mcp

by Ammar-daham

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 build

Use 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.js

You 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

check_token

Checks the token works, which account it belongs to, and days until it expires

get_account_info

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

IG_ACCESS_TOKEN

yes

IG_USER_ID

for publishing (later)

IG_API_VERSION

no

v24.0

IG_TOKEN_STORE

no

.tokens/token.json

Development

npm run lint
npm run typecheck
npm test
npm run build
npm run inspect   # MCP Inspector against dist/index.js

License

MIT

Available Tools

2 tools
check_tokenCheck Instagram tokenA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 infoA
Read-only

Get the connected Instagram account's username, name, account type, follower and following counts, and number of posts.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 2 tool updatesv0.1.0
    • First observedcheck_token
    • First observedget_account_info

TDQS

A3.6/5.0

Scored across 2 tools

Disambiguation4/5

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.

Naming Consistency5/5

Both tools follow a uniform snake_case verb_noun pattern (check_token, get_account_info). The convention is predictable and easy to extend.

Tool Count2/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects 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 npm
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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