Skip to main content
Glama
anas7272

Instagram MCP Server

by anas7272

Instagram MCP Server

A professional, well-structured MCP (Model Context Protocol) server for managing and posting Instagram content — PDF to images, carousel batches, auto-posting, and Cloudinary hosting.

Features

  • šŸ“ø Content management — list, view, delete, archive local images

  • āœļø Metadata — captions & hashtags per content item

  • šŸ“± Post to Instagram — single image or carousel posts via Graph API

  • šŸ–¼ļø PDF → Images — convert PDF pages to PNGs (poppler)

  • šŸŽ  Carousel batches — group images into 2-10 image carousels

  • ā˜ļø Cloudinary — temporary image hosting + auto-cleanup

  • šŸ”‘ Token diagnostics — debug token expiry, scopes, and meta error codes

Related MCP server: instagram-mcp

Project Structure

instagram-mcp/
ā”œā”€ā”€ src/instagram_mcp/          # Main package
│   ā”œā”€ā”€ config.py               # Env, constants, paths
│   ā”œā”€ā”€ logging_setup.py        # Console + file logging
│   ā”œā”€ā”€ errors.py               # Meta error parsing + guidance
│   ā”œā”€ā”€ server.py               # FastMCP registration (thin)
│   ā”œā”€ā”€ __main__.py             # python -m instagram_mcp
│   ā”œā”€ā”€ services/               # External integrations
│   │   ā”œā”€ā”€ instagram.py        #   Graph API client
│   │   ā”œā”€ā”€ cloudinary.py       #   Upload/delete/verify
│   │   └── pdf.py              #   PDF → images
│   ā”œā”€ā”€ storage/                # Local data access
│   │   ā”œā”€ā”€ content.py          #   File resolution
│   │   └── metadata.py         #   JSON load/save
│   └── tools/                  # MCP tool implementations
│       ā”œā”€ā”€ content_tools.py
│       ā”œā”€ā”€ metadata_tools.py
│       ā”œā”€ā”€ instagram_tools.py
│       ā”œā”€ā”€ cloudinary_tools.py
│       └── carousel_tools.py
ā”œā”€ā”€ scripts/                    # CLI utilities
│   ā”œā”€ā”€ check_token.py          #   Validate token + scopes
│   └── refresh_token.py        #   Extend long-lived token
ā”œā”€ā”€ tests/                      # pytest suite (mocked HTTP)
ā”œā”€ā”€ content/                    # Your media files (unchanged)
ā”œā”€ā”€ archive/                    # Archived content
ā”œā”€ā”€ logs/                       # Log files
ā”œā”€ā”€ server.py                   # Backward-compatible entry point
└── pyproject.toml              # Package config

Installation

# Create & activate venv (Windows)
python -m venv .venv
.\.venv\Scripts\Activate.ps1

# Install package (editable)
pip install -e .

Configuration

Copy .env.example → .env and fill in:

# Instagram (required for posting)
INSTAGRAM_ACCESS_TOKEN=your_token_here
INSTAGRAM_BUSINESS_ACCOUNT_ID=your_account_id_here

# Cloudinary (required for publish_image / carousels)
CLOUDINARY_CLOUD_NAME=...
CLOUDINARY_API_KEY=...
CLOUDINARY_API_SECRET=...

# Optional
INSTAGRAM_API_VERSION=v23.0
LOG_LEVEL=INFO
DELETE_LOCAL_AFTER_PUBLISH=false

Running the Server

# Option 1: Backward-compatible (Claude Desktop config)
python server.py

# Option 2: As a package
python -m instagram_mcp

# Option 3: Console script (after pip install -e .)
instagram-mcp

CLI Utilities

# Check your token's validity, expiry, and scopes
python scripts/check_token.py

# Info on refreshing a long-lived token (60 days)
python scripts/refresh_token.py

Testing

pip install -e ".[dev]"
pytest

MCP Tools

Tool

Purpose

list_content

List local images in content dir

get_content

Get file metadata (mime, size)

manage_content

list / delete / archive content

manage_metadata

Update / view / clear captions & hashtags

test_instagram_connection

Test Graph API connection

debug_instagram_token

Debug token expiry + scopes

post_to_instagram

Post single image (direct upload)

test_cloudinary_upload

Upload to Cloudinary, verify URL

cleanup_cloudinary_asset

Delete a Cloudinary asset

publish_image

Publish via Cloudinary HTTPS URL

convert_pdf_to_images

PDF → PNG images

create_carousel_batch

Group images into carousels

post_carousel_to_instagram

Post a carousel + auto-cleanup

list_carousel_batches

List carousels + status

Resource

  • instagram://content/{filename} — access images as base64 blobs for visual analysis.

Troubleshooting: Daily "API access blocked (code 200)"

Run test_instagram_connection and debug_instagram_token to diagnose.

Common causes & fixes:

  1. App in Development Mode → switch to Live in Meta Developer dashboard.

  2. Missing approved permissions → submit App Review for instagram_basic + instagram_content_publish.

  3. Token expired/revoked (60 days) → generate a fresh long-lived token.

  4. App flagged by Meta → check the app review status / appeal.

Logs are written to logs/instagram_mcp.log for diagnosis.

Available Tools

14 tools
cleanup_cloudinary_assetB

Delete a temporary Cloudinary asset manually.

ParametersJSON Schema
NameRequiredDescriptionDefault
public_idYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It states the destructive action ('Delete') but provides no details on error handling, idempotency, permissions, or consequences if the asset doesn't exist. This leaves the agent with incomplete safety/behavioral knowledge.

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 a single, concise sentence that is front-loaded with the action. It wastes no words, though it errs on the side of being too terse. This is acceptable for a simple cleanup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations, no output schema, and a single parameter with no description, the tool description is not complete enough. It doesn't explain the purpose of the cleanup, what happens after deletion, or any edge cases, leaving the agent with insufficient context for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%; the description does not mention 'public_id' at all. The schema only provides a title ('Public Id') without further explanation, and the description fails to clarify what this identifier refers to or how it relates to temporary Cloudinary assets.

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 uses the specific verb 'Delete' and specifies the resource as 'a temporary Cloudinary asset', clearly stating the action and scope. This distinguishes it from sibling tools like 'test_cloudinary_upload' or 'publish_image', which are not deletion operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'manually' implies this tool is for cleaning up temporary assets when automatic cleanup isn't desired or available. However, it offers no explicit when-to-use guidance or alternatives, requiring the agent to infer usage context from the tool's name and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_pdf_to_imagesA

Convert a PDF file to individual PNG images.

Each page becomes a separate image. Images are stored in the content folder with the PDF name as prefix.

Example: document.pdf -> document_page_001.png, document_page_002.png, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behaviors: each page becomes a separate image, storage location (content folder), and filename pattern. It does not mention overwrite behavior or error cases, but the core behavioral contract is clearly communicated.

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?

The description is concise: three short sentences that front-load the core purpose, then provide output details and an illustrative example. Every sentence earns its place with no filler.

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 tool with a single parameter and no output schema, the description gives sufficient context: what it does, where outputs go, and naming convention. It lacks edge-case handling or return-value details, but these are not essential for invoking the tool 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 has one parameter (filename) with no description, and schema coverage is 0%. The tool description compensates partially by showing the example 'document.pdf -> document_page_001.png', implying filename should be a PDF file path. However, it doesn't specify path handling or accepted file extensions beyond the example.

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 uses a specific verb 'Convert' and clearly states the resource (PDF file) and output (PNG images), including the naming convention. It distinguishes itself from sibling content management and posting tools by focusing on the conversion step.

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 does not explicitly mention when to use vs alternatives, but the context is clear: this is for converting PDFs to images, which is a distinct preprocessing step not covered by any sibling tool. The example and output behavior make the intended usage obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

debug_instagram_tokenA

Inspect the configured Instagram access token via Meta's debug_token endpoint.

Reports the token's type, expiry date, and granted scopes. Use this to determine whether the token is expired, about to expire, or lacks the required permissions (instagram_basic, instagram_content_publish).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/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. It mentions using Meta's endpoint and reporting token type, expiry, and scopes, indicating a read-only diagnostic operation. However, it does not disclose potential side effects (e.g., network call, rate limits) or behavior on invalid/missing tokens, leaving some behavioral ambiguity.

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?

The description is concise and well-structured: the first sentence states the core action, the second details the output, and the third explains practical use. No fluff, every sentence adds value.

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 zero-parameter tool with no output schema, the description is reasonably complete. It explains what the tool reports and how to interpret the results (expired, about to expire, missing permissions). Minor gap: it doesn't describe the return format or error handling, but this is acceptable for a simple diagnostic utility.

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 has zero parameters, so the description cannot add parameter-specific meaning beyond the schema. The baseline of 4 is appropriate given no parameters exist and the description focuses on what the tool does with the configured token.

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 tool's function: 'Inspect the configured Instagram access token via Meta's debug_token endpoint.' It also specifies the exact information it reports (type, expiry, scopes), making its purpose distinct from sibling tools that focus on content management, posting, or Cloudinary operations.

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?

Provides explicit guidance on when to use: 'Use this to determine whether the token is expired, about to expire, or lacks the required permissions.' This gives clear context, though it does not name alternative tools for similar diagnostic purposes, which is acceptable given the token inspection is unique among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contentA

Safely locate a local content file and return basic metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. The word 'Safely' suggests a non-destructive read operation, and 'basic metadata' hints at the return type. However, it does not disclose what 'basic metadata' includes, error behavior, or whether the file must exist, leaving notable gaps.

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?

The description is a single sentence, front-loaded with the action, and contains no redundant or filler words. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description gives a basic idea but omits details about the return structure, metadata fields, and error cases. The absence of an output schema increases the need for such context, so the description is only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only loosely ties the filename to 'local content file.' It does not clarify whether the filename is a full path, base name, or extension, nor any required format. The description adds minimal value beyond the schema's bare 'Filename' property.

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 uses a specific verb ('locate') with a clear resource ('local content file') and scope ('return basic metadata'). It distinguishes itself from siblings like list_content (listing all) and manage_content (modifying) by explicitly indicating a safe, read-only lookup action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by contrasting with siblings (e.g., 'Safely locate' vs. manage tools), but it does not explicitly state when to choose this tool over alternatives, nor any exclusions or prerequisites. The guidance is implicit, not direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contentA

List available local images in the content directory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral disclosure burden. It only restates the list operation and does not mention that it is read-only, what the returned data looks like, or whether any side effects occur.

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?

The description is a single, concise sentence with no filler. It front-loads the primary action and resource, earning a perfect score for efficiency.

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 zero-parameter local listing tool, the description sufficiently conveys the core purpose. It does not explain the output format or what 'available' precisely means, but given the tool's simplicity and sibling context, this is acceptable.

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 has zero parameters, so the description is not required to elaborate on parameter meanings. The baseline of 4 applies since there are no parameters to document.

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 specific verb 'List' and resource 'available local images in the content directory.' This distinguishes it from sibling tools like get_content (retrieve) and manage_content (modify), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the verb 'List' and resource scope, suggesting this is the tool to call when enumerating local images. However, there is no explicit guidance on when to choose this over alternatives, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_contentB

Manage Instagram content stored in the content folder.

Actions:

  • list: Show all available content with metadata

  • delete: Permanently delete selected content

  • archive: Move selected content to archive folder

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNolist
content_idNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behaviors: delete is 'permanently delete' and archive moves to an archive folder. With no annotations provided, this adds meaningful context. However, it omits other behavioral details such as authentication requirements, return formats, or side effects for list actions.

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?

The description is concise and well-structured: a brief purpose statement followed by a bulleted action list. Every sentence is informative, front-loaded, and free of unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters and no annotations or output schema, the description covers the main actions and notes the permanent delete behavior. However, it is incomplete regarding parameter dependencies (content_id needed for delete/archive) and expected outputs, and it doesn't address the overlap with list_content, making it only minimally complete.

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 description adds value by enumerating valid action values (list/delete/archive) and their behaviors, which the schema does not provide (no enum or property descriptions). However, it does not explicitly explain that content_id is required for delete/archive or what format it should take, leaving a gap given 0% schema coverage.

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?

The description clearly states the tool manages Instagram content in a specific folder and enumerates three concrete actions (list, delete, archive). However, the verb 'manage' is broad and the description does not explicitly position it against the sibling list_content tool, which likely overlaps with the list action.

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 explicit guidance on when to use manage_content versus sibling tools like list_content or manage_metadata. The action list implies usage for list/delete/archive, but the overlap with list_content for the 'list' action is unaddressed, potentially leading to confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_metadataC

Manage metadata for Instagram content (captions, hashtags, scheduling).

Actions:

  • update: Update caption and/or hashtags

  • view: View current metadata

  • clear: Clear caption and hashtags

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoupdate
captionNo
hashtagsNo
content_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits but only lists actions. It does not mention side effects (e.g., whether clear is permanent), required permissions, or behavior for invalid content_id. The mention of scheduling without a corresponding action adds ambiguity.

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 concise with a clear list of actions. The unsupported mention of 'scheduling' is unnecessary but does not severely impact clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations, no output schema, and minimal description leave the agent without information on return values, error handling, or side effects, especially for the destructive 'clear' action. Given the tool's 4 parameters, more context is needed.

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 has 4 params with 0% description coverage. The description maps actions to caption/hashtags, but does not explain how action interacts with other parameters (e.g., view likely ignores caption/hashtags) or the format of content_id. It adds some meaning but leaves gaps.

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?

The description clearly states the tool manages metadata for Instagram content (captions, hashtags, scheduling) and lists specific actions (update, view, clear). It distinguishes from siblings like manage_content by focusing on metadata, though the mention of scheduling is not backed by any action, which is a minor inconsistency.

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?

No guidance on when to use this tool versus alternatives like manage_content or post_to_instagram. The description simply lists actions without context on when each is appropriate or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_carousel_to_instagramA

Post a carousel batch to Instagram.

Uploads all images in the batch to Cloudinary, creates a CAROUSEL media container via the Instagram Graph API, publishes it, then deletes the local images and Cloudinary temporary assets.

Requires 2-10 images per carousel (Instagram limit).

ParametersJSON Schema
NameRequiredDescriptionDefault
batch_idYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral responsibility. It transparently discloses the full workflow: uploads to Cloudinary, creates a CAROUSEL media container, publishes, then deletes local images and Cloudinary temporary assets. It also notes the 2-10 image limit, giving the agent critical insight into side effects and constraints.

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?

The description is three short paragraphs: main action, detailed workflow, and constraint. Every sentence earns its place with no filler or redundancy. It is front-loaded and highly scannable.

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?

The description covers the key workflow, side effects, and image count requirement well. However, it does not specify what the tool returns on success or failure, and with no output schema, this information is missing. It is otherwise thorough for a multi-step mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, batch_id, is typed as a required string in the schema but has no description. The tool description mentions 'batch' but does not explain what batch_id references, how to obtain it, or its format. With schema description coverage at 0%, the description fails to compensate for the missing parameter semantics.

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 uses the verb 'Post' with a specific resource 'a carousel batch to Instagram', clearly distinguishing it from sibling tools like post_to_instagram (presumably for single images) and create_carousel_batch (for creation). It states the exact action and target, making its purpose immediately clear.

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 context by mentioning it posts a carousel batch and requires 2-10 images, implying it is used after creating a batch. However, it does not explicitly contrast with alternatives like post_to_instagram or state when not to use it, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_to_instagramC

Post content to Instagram using Instagram Graph API.

Prerequisites:

  • Set INSTAGRAM_ACCESS_TOKEN environment variable

  • Set INSTAGRAM_BUSINESS_ACCOUNT_ID environment variable

  • Instagram access token must have appropriate permissions

ParametersJSON Schema
NameRequiredDescriptionDefault
content_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden of behavioral disclosure. It lists prerequisites (environment variables, permissions) but does not mention side effects, rate limits, idempotency, or success/failure behavior. For a mutation tool, this is a significant gap.

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?

The description is concise and well-structured: a single purpose sentence followed by a clean list of prerequisites. Every word earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only one parameter and no output schema, so the description covers basic usage with prerequisites. However, it lacks parameter semantics and behavioral details, making it adequate only at a minimal level. The presence of a similar sibling tool further underscores the need for more context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention the content_id parameter at all. The schema defines it as a required string, but the description provides no context on what 'content' refers to or how content_id maps to a resource. With 0% schema description coverage, this is a clear deficiency.

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?

The description uses the specific verb 'post' with a clear resource 'content to Instagram' and mentions the Instagram Graph API as the mechanism. It implies a single-item post, which distinguishes it from the sibling post_carousel_to_instagram, but it does not explicitly state that distinction, so it falls short of a 5.

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?

The description provides prerequisites but no guidance on when to use this tool versus alternatives like post_carousel_to_instagram. There are no explicit 'use this when' instructions or exclusions, leaving the agent without decision criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_imageC

Publish a local image to Instagram using a Cloudinary-hosted HTTPS image URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
captionYes
filenameYes

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for disclosing side effects. It only says 'publish', which implies a post creation, but does not mention required authentication, irreversible actions, potential failures, or how the Cloudinary URL is processed. The contradictory 'local image' vs 'Cloudinary-hosted URL' adds further opacity.

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 a single concise sentence, front-loaded with the key action. However, it omits critical details and is somewhat awkwardly phrased, but no unnecessary words are present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, no annotations, and only two parameters, the description should provide clear context about workflows, expected inputs, and success/failure behavior. It does none of these, leaving the agent with insufficient information to invoke the tool reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has two parameters (filename, caption) with zero coverage from the description. The description does not explain what 'filename' refers to (local path? Cloudinary public ID?) or how 'caption' is used. The mention of 'local image' and 'Cloudinary-hosted URL' does not map clearly to either parameter, so an agent cannot infer parameter meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('publish') and target ('Instagram'), but the phrase 'local image ... using a Cloudinary-hosted HTTPS image URL' is contradictory and unclear about the actual input source. It also does not distinguish itself from the sibling tool 'post_to_instagram', which likely serves a similar purpose.

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?

No guidance is provided on when to use this tool relative to siblings like 'post_to_instagram' or 'test_instagram_connection'. There is no mention of prerequisites, alternative scenarios, or why one would pick this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_cloudinary_uploadA

Upload a local image to Cloudinary without posting to Instagram.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose side effects. It only states the upload action and the negation of posting, omitting any mention of asset persistence, cleanup, or return values. This leaves behavioral transparency insufficient.

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?

Single sentence, direct, front-loaded with the main purpose, no superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description covers the core purpose but lacks context about side effects, return values, or practical usage, making it somewhat incomplete despite its brevity.

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 coverage is 0%, so the description compensates by indicating 'local image' which implies the filename parameter is a local path. However, it doesn't specify required format or additional constraints, offering only marginal value.

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 action: uploading a local image to Cloudinary, with an explicit exclusion of posting to Instagram. This distinguishes it from sibling tools like post_to_instagram and test_instagram_connection.

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?

It indicates the tool is for uploading without the Instagram step, implying a testing scenario. However, it doesn't explicitly name alternative tools or state when not to use it, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_instagram_connectionA

Test the Instagram Graph API connection and report the exact status.

Use this first whenever posting fails, to determine whether the problem is:

  • Expired/revoked token (code 190 or 200, type OAuthException)

  • Missing permissions (code 10)

  • Rate limiting (code 4 or 32)

  • API version deprecated (code 100)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden. It discloses what the tool checks (token expiry/revocation, permissions, rate limits, API version) using concrete error codes. It doesn't explicitly state whether the operation is read-only or has side effects, but the nature of a 'test connection' tool strongly implies no mutation.

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?

The description is concise and well-structured: a single-sentence purpose statement followed by a compact bulleted list of error codes. Every line provides actionable information without redundancy.

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?

The tool is simple (no params, no output schema), but the description provides strong context: when to use it, what it detects, and how to interpret error codes. It stops short of describing the exact success output format, but for a diagnostic tool the listed error categories and clear purpose make it largely complete.

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 input schema is empty (0 parameters), so the description has no parameter details to add. The baseline of 4 applies because there are no params to explain, and the description appropriately focuses on behavior instead.

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 verb+resource+outcome: 'Test the Instagram Graph API connection and report the exact status.' It clearly distinguishes this diagnostic tool from siblings like debug_instagram_token by focusing on connectivity and error classification rather than token internals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance is given: 'Use this first whenever posting fails.' It also lists specific problem categories (expired token, permissions, rate limit, API deprecation) that align with its purpose, making the intended usage scenario unmistakable.

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. Dates show when Glama detected each change.

  1. 14 tool updatesv0.2.0
    • First observedcleanup_cloudinary_asset
    • First observedconvert_pdf_to_images
    • First observedcreate_carousel_batch
    • First observeddebug_instagram_token
    • First observedget_content
    • First observedlist_carousel_batches
    • First observedlist_content
    • First observedmanage_content
    • First observedmanage_metadata
    • First observedpost_carousel_to_instagram
    • First observedpost_to_instagram
    • First observedpublish_image
    • First observedtest_cloudinary_upload
    • First observedtest_instagram_connection

TDQS

B3.4/5.0
Disambiguation3/5

Several tools overlap in function: list_content and manage_content's list action both list content, and post_to_instagram and publish_image both post to Instagram via different paths. Descriptions help but the boundaries could still confuse an agent.

Naming Consistency5/5

All tool names consistently use snake_case with a verb_noun or verb_to_noun pattern, creating a predictable and clear naming convention.

Tool Count5/5

14 tools is well within the ideal 3-15 range for an Instagram content server, covering posting, content management, metadata, diagnostics, and carousel workflows without feeling bloated.

Completeness3/5

Core posting and content management workflows are covered, but there are notable gaps: no post deletion or status retrieval, and scheduling is mentioned in manage_metadata but not actually implemented as a tool.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server providing seamless integration with Instagram's Graph API for business account management, content publishing, and analytics.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Instagram Graph API providing 25 tools for publishing photos, reels, carousels, and stories, managing comments, viewing insights, and searching hashtags.
    13
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A self-hosted MCP server for managing Instagram and Facebook Page content, including posting, scheduling, analytics, and autopilot features.
    GPL 3.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anas7272/Instagram-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server