Instagram MCP Server
Provides image hosting via Cloudinary for temporary storage and auto-cleanup when publishing to Instagram.
Provides tools for managing and posting Instagram content, including single image and carousel posts via the Instagram Graph API.
Click on "Install 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 MCP ServerConvert the product PDF to carousel images and post it"
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 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 configInstallation
# 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=falseRunning 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-mcpCLI 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.pyTesting
pip install -e ".[dev]"
pytestMCP Tools
Tool | Purpose |
| List local images in content dir |
| Get file metadata (mime, size) |
| list / delete / archive content |
| Update / view / clear captions & hashtags |
| Test Graph API connection |
| Debug token expiry + scopes |
| Post single image (direct upload) |
| Upload to Cloudinary, verify URL |
| Delete a Cloudinary asset |
| Publish via Cloudinary HTTPS URL |
| PDF ā PNG images |
| Group images into carousels |
| Post a carousel + auto-cleanup |
| 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:
App in Development Mode ā switch to Live in Meta Developer dashboard.
Missing approved permissions ā submit App Review for
instagram_basic+instagram_content_publish.Token expired/revoked (60 days) ā generate a fresh long-lived token.
App flagged by Meta ā check the app review status / appeal.
Logs are written to logs/instagram_mcp.log for diagnosis.
Available Tools
14 toolscleanup_cloudinary_assetB
Delete a temporary Cloudinary asset manually.
| Name | Required | Description | Default |
|---|---|---|---|
| public_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes |
TDQS
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.
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.
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.
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.
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.
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.
create_carousel_batchA
Create carousel batches from selected images or PDF pages.
Parameters:
content_ids: Comma-separated list of content IDs (e.g., "image1,image2,image3,image4,image5,image6,image7,image8,image9,image10")
batch_name: Optional name for this batch (e.g., "Q1_Report" or "pdf_name")
images_per_post: How many images per carousel post (default: 5, max: 10 for Instagram)
Example: 10 images with images_per_post=5 creates 2 carousel batches
| Name | Required | Description | Default |
|---|---|---|---|
| batch_name | No | ||
| content_ids | Yes | ||
| images_per_post | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It explains the core behavior (splitting content into batches) and the input format, but lacks details on permissions, side effects, or error handling that would be useful for a mutation tool.
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?
The description is succinct and well-organized: a one-sentence purpose, followed by parameter explanations and a helpful example. Every sentence earns its place without redundancy.
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?
For a 3-parameter create tool with no output schema, the description covers inputs, splitting logic, and naming. It could hint at how to obtain content_ids (e.g., from sister tools) or potential errors, but is otherwise sufficiently complete.
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?
Schema description coverage is 0%, but the description fully compensates by explaining each parameter: content_ids format, batch_name optionality, and images_per_post default/max/behavior. The example further clarifies semantics, adding significant meaning beyond the bare schema.
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?
The description clearly states the verb 'create' and the resource 'carousel batches', mentioning the input source ('selected images or PDF pages'). This distinguishes it from sibling tools like post_carousel_to_instagram (posting) or list_carousel_batches (listing).
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?
Provides clear context that this tool creates batches rather than performing other operations, and includes an example showing how images_per_post affects batch count. However, it does not explicitly mention when to use this tool over alternatives or state any exclusions.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes |
TDQS
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.
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.
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.
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.
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.
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_carousel_batchesA
List all carousel batches and their status.
Shows each batch ID, posted status, image count, and batch progression.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It clearly indicates this is a read-only listing operation and details the output fields (batch ID, posted status, image count, batch progression). It does not mention side effects, pagination, or access requirements, but for a simple list tool the disclosure is adequate and adds value.
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?
The description is two sentences, directly states the tool's action, and front-loads the key purpose. The second sentence adds concise detail about returned fields without any fluff or repetition. Every word earns its place.
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?
Given the tool's simplicity (no parameters, no output schema, clear siblings), the description provides sufficient context. It lists the main output fields and the scope. It does not go into deeper detail like status value enumerations, but that is not strictly necessary for a basic listing tool. It is complete enough for an agent to understand what to expect.
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 has zero parameters and the schema is empty, so there is no parameter information to add. The description indirectly helps by explaining what the output contains, which is relevant context. Baseline for zero parameters is 4, and the description meets that standard with useful output details.
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?
The description uses a specific verb ('List all') and clearly identifies the resource ('carousel batches') and scope ('all'). It also enumerates the returned fields (batch ID, posted status, image count, batch progression), distinguishing it from sibling tools like list_content by focusing specifically on carousel batches.
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?
The description states what the tool does but does not explicitly explain when to use it versus alternatives or when not to use it. The purpose is implied for listing carousel batches, but there is no mention of sibling tools like list_content or post_carousel_to_instagram. Thus, usage guidance is implied rather than explicit.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | list | |
| content_id | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | update | |
| caption | No | ||
| hashtags | No | ||
| content_id | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| batch_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| content_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | Yes | ||
| filename | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v0.2.0- First observed
cleanup_cloudinary_asset - First observed
convert_pdf_to_images - First observed
create_carousel_batch - First observed
debug_instagram_token - First observed
get_content - First observed
list_carousel_batches - First observed
list_content - First observed
manage_content - First observed
manage_metadata - First observed
post_carousel_to_instagram - First observed
post_to_instagram - First observed
publish_image - First observed
test_cloudinary_upload - First observed
test_instagram_connection
TDQS
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.
All tool names consistently use snake_case with a verb_noun or verb_to_noun pattern, creating a predictable and clear naming convention.
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.
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
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
A hosted MCP server for planning, scheduling, media, analytics, and social publishing.
MCP server for QPost ā lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Hosted MCP for Instagram, Facebook, X, LinkedIn, Pinterest, and Ghost. OAuth 2.1, 38 tools.
PostKing MCP server for managing brands, generating posts, scheduling content, and publishing blogs.
Related MCP Servers
- AlicenseAqualityCmaintenanceInstagram MCP server with 23 tools for the Graph API. Manage posts, comments, DMs, stories, hashtags, reels, carousels, and analytics.2333MIT
- AlicenseNot gradedqualityCmaintenanceMCP server providing seamless integration with Instagram's Graph API for business account management, content publishing, and analytics.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Instagram Graph API providing 25 tools for publishing photos, reels, carousels, and stories, managing comments, viewing insights, and searching hashtags.131MIT
- AlicenseNot gradedqualityBmaintenanceA self-hosted MCP server for managing Instagram and Facebook Page content, including posting, scheduling, analytics, and autopilot features.GPL 3.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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