Instagram MCP Server
This Instagram MCP Server enables AI assistants to interact with Instagram and Facebook accounts through a REST API with remote HTTPS access.
Capabilities:
Messaging: Send text/media messages (images, videos, audio), react to messages with emoji reactions (love, like, haha, wow, sad, angry), and use human agent tags for extended messaging windows
Conversation Management: List conversations, retrieve messages from specific threads, and find conversations by user ID
Profile Management: Access your Instagram business profile and Facebook page information, and look up other user profiles
Content Viewing: Browse posts/reels with pagination, get detailed post information including carousel items, and view comments
Engagement: Reply to comments and respond to messages on both platforms
Content Creation: Post images/videos to Instagram (including Reels) and create Facebook posts with text, links, or photos, all with captions and optional metadata
Remote Deployment: Deploy to cloud platforms (Vercel, Railway, Render, etc.) with API key authentication for secure team access and monitoring via health check endpoints
Provides tools for sending Messenger messages, creating posts with text/links/photos, viewing page posts, managing comments, accessing inbox conversations, and retrieving page information through Facebook's Graph API.
Enables sending messages, viewing and creating posts and reels, managing comments and replies, accessing inbox conversations, and retrieving profile information through Instagram's Business 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 Serversend a message to @john_doe saying 'Hey, check out this new post!'"
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
An HTTP MCP (Model Context Protocol) server for interacting with Instagram and Facebook APIs. Deploy this server to any cloud platform and access it remotely via HTTPS from any MCP client.
This server enables AI assistants to send messages, view posts, manage comments, and interact with your Instagram/Facebook accounts through a REST API.
Features
Messaging
Send text messages on Instagram and Facebook Messenger
Send media (images, videos, audio)
React to messages
Human agent tag support for extended messaging windows
Inbox / Conversations
List all conversations
Get messages from specific conversations
Find conversations by user ID
Profile
Get your Instagram business profile
Get your Facebook page info
Look up user profiles
Posts
View your Instagram posts and reels
View your Facebook page posts
Get detailed post information including carousel items
Comments
View comments on posts
Reply to comments
Content Creation
Post images to Instagram
Post videos/reels to Instagram
Post to Facebook (text, links, photos)
Architecture
This is an HTTP-based MCP server using Express.js:
Transport: HTTP/HTTPS (not stdio)
Deployment: Cloud platforms (Vercel, Railway, Render, DigitalOcean, etc.)
Access: Remote access from anywhere via HTTPS
Authentication: API key-based (MCP_API_KEY)
Protocol: RESTful HTTP endpoints following MCP specification
Why HTTP?
✅ Remote Access - Access from any machine, not just locally ✅ Team Sharing - Multiple team members can use the same server ✅ Scalable - Deploy to cloud platforms with auto-scaling ✅ Secure - HTTPS encryption + API key authentication ✅ Simple - Just like any REST API you're used to
Endpoints
POST /mcp- MCP protocol endpoint (handles all tool calls)GET /health- Health check endpoint
Installation
cd instagram-mcp-server
npm install
npm run buildConfiguration
Create a .env file based on .env.example:
cp .env.example .envRequired environment variables:
Variable | Description |
| Your Facebook Page ID |
| Page Access Token with required permissions |
| (Optional) Instagram Business Account ID |
| (Optional) Graph API version (default: v24.0) |
Getting Your Access Token
Create or select your app
Generate a Page Access Token with these permissions:
pages_messagingpages_manage_metadatapages_read_engagementinstagram_basicinstagram_manage_messagesinstagram_manage_commentsinstagram_content_publish
Running the Server
This is an HTTP MCP server that can be deployed anywhere and accessed remotely.
Local Development
# Development mode with auto-reload
npm run dev
# Production mode
npm run build
npm startThe server will start on http://localhost:3000 (or custom PORT from .env)
Endpoints:
POST /mcp- MCP protocol endpointGET /health- Health check endpoint
Test the Server
# Health check
curl http://localhost:3000/health
# List available tools
curl -X POST http://localhost:3000/mcp \
-H "Authorization: Bearer my-secret-api-key-12345" \
-H "Content-Type: application/json" \
-d '{"method": "tools/list"}'Connecting MCP Clients
Claude Code
Add the server to Claude Code using the CLI:
# For production (deployed server)
claude mcp add-json --scope user instagram '{
"type": "http",
"url": "https://your-domain.com/mcp",
"headers": {
"Authorization": "Bearer your-mcp-api-key"
}
}'
# For local testing
claude mcp add-json --scope user instagram '{
"type": "http",
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer my-secret-api-key-12345"
}
}'Other MCP Clients
Any MCP-compatible client can connect via HTTP:
const response = await fetch('https://your-domain.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-mcp-api-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
method: 'tools/call',
params: {
name: 'send_message',
arguments: {
platform: 'instagram',
recipientId: '123456',
text: 'Hello!'
}
}
})
});Available Tools
Messaging
send_message- Send text/media message to Instagram or Facebooksend_reaction- React to a message
Conversations
get_conversations- List inbox conversationsget_conversation_by_user- Find conversation by user IDget_conversation_messages- Get messages from a conversation
Profiles
get_user_profile- Get a user's profileget_my_instagram_profile- Get your IG profileget_my_facebook_page- Get your FB page info
Posts
get_posts- List your postsget_instagram_post_details- Get detailed post info
Comments
get_post_comments- Get comments on a postreply_to_comment- Reply to a comment
Content Creation
post_to_instagram- Create Instagram post/reelpost_to_facebook- Create Facebook post
Available Resources
The server also exposes these resources for easy access:
instagram://profile- Your Instagram profilefacebook://page- Your Facebook pageinstagram://inbox- Instagram DM inboxfacebook://inbox- Facebook Messenger inboxinstagram://posts- Recent Instagram postsfacebook://posts- Recent Facebook posts
Development
# Run in development mode (auto-reload)
npm run dev
# Build for production
npm run build
# Run production build
npm startNote: A stdio version is also available for local-only use. Run with
npm run dev:stdioornpm run start:stdio
Deployment
Deploy to Vercel
Install Vercel CLI:
npm i -g vercelCreate
vercel.json:
{
"version": 2,
"builds": [{
"src": "dist/index.js",
"use": "@vercel/node"
}],
"routes": [{
"src": "/(.*)",
"dest": "/dist/index.js"
}],
"env": {
"FB_PAGE_ID": "@fb_page_id",
"IG_ACCOUNT_ID": "@ig_account_id",
"FB_PAGE_ACCESS_TOKEN": "@fb_page_access_token",
"FB_API_VERSION": "v24.0",
"MCP_API_KEY": "@mcp_api_key"
}
}Deploy:
npm run build
vercel --prodSet environment variables in Vercel dashboard
Deploy to Railway
Create
railway.toml:
[build]
builder = "NIXPACKS"
buildCommand = "npm install && npm run build"
[deploy]
startCommand = "npm start"
restartPolicyType = "ON_FAILURE"
restartPolicyMaxRetries = 10Deploy:
# Install Railway CLI
npm i -g @railway/cli
# Login and deploy
railway login
railway init
railway upSet environment variables in Railway dashboard
Deploy to Render
Create account at https://render.com
Create new Web Service
Configure:
Build Command:
npm install && npm run buildStart Command:
npm startAdd environment variables
Deploy to DigitalOcean/VPS
# SSH into your server
ssh user@your-server
# Clone repo
git clone https://github.com/yourusername/instagram-mcp-server.git
cd instagram-mcp-server
# Install dependencies and build
npm install
npm run build
# Create .env file with your credentials
nano .env
# Run with PM2 for process management
npm install -g pm2
pm2 start npm --name "instagram-mcp" -- start
pm2 save
pm2 startupEnvironment Variables for Production
Required:
FB_PAGE_ID- Your Facebook Page IDFB_PAGE_ACCESS_TOKEN- Page Access TokenIG_ACCOUNT_ID- Instagram Business Account IDFB_API_VERSION- Graph API version (default: v24.0)MCP_API_KEY- Secret key for MCP endpoint authenticationPORT- Server port (default: 3000)
Security Notes
⚠️ IMPORTANT: When deploying publicly:
Always set
MCP_API_KEY- Never deploy without authenticationUse HTTPS only - Encrypt all traffic
Rotate tokens regularly - Update access tokens periodically
Use environment variables - Never commit secrets to git
Rate limiting - Consider adding rate limiting for production
License
MIT
Available Tools
14 toolsget_conversation_by_userC
Get conversation ID for a specific user
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform | |
| userId | Yes | The user ID to find conversation for |
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 states 'Get conversation ID', implying a read-only operation, but doesn't disclose behavioral traits like whether it requires authentication, rate limits, error conditions, or what happens if no conversation exists. The description is minimal and lacks necessary context for safe invocation.
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, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place, achieving maximum clarity in minimal space.
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 complexity (a lookup tool with 2 required parameters), no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., a conversation ID string or an object), error handling, or usage context. For a tool with no structured support, more detail is needed to be 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 100%, with both parameters ('platform' and 'userId') documented in the schema. The description adds no additional meaning beyond what the schema provides, such as explaining the relationship between platform and user ID or format details. Baseline 3 is appropriate since the schema does the heavy lifting.
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 'Get' and the resource 'conversation ID', specifying it's for a 'specific user'. It distinguishes from siblings like 'get_conversation_messages' (which retrieves messages) and 'get_conversations' (which likely lists multiple conversations), but doesn't explicitly contrast them. The purpose is specific but lacks explicit sibling differentiation.
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 no guidance on when to use this tool versus alternatives. It doesn't mention when to use it over 'get_conversations' for a list or 'get_conversation_messages' for content, nor does it specify prerequisites or exclusions. Usage is implied by the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversation_messagesC
Get messages from a specific conversation
| Name | Required | Description | Default |
|---|---|---|---|
| conversationId | Yes | The conversation ID | |
| limit | No | Number of messages to retrieve (default: 25) |
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 of behavioral disclosure. It states the action ('Get messages') but lacks details on permissions, rate limits, pagination, or response format. For a read operation with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.
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, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
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 and output schema, the description is incomplete for a tool with two parameters. It doesn't address behavioral aspects like error handling, message ordering, or what data is returned, leaving the agent with insufficient context for reliable use.
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 100%, with clear documentation for both parameters (conversationId and limit). The description adds no additional semantic context beyond implying retrieval from a conversation, which the schema already covers. This meets the baseline for high schema coverage without extra 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 verb ('Get') and resource ('messages from a specific conversation'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential sibling tools like 'get_conversations' or 'send_message' that might also involve conversation data, missing full differentiation.
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 no guidance on when to use this tool versus alternatives. With siblings like 'get_conversations' (likely listing conversations) and 'send_message' (likely sending messages), there's no indication of context, prerequisites, or exclusions for selecting this specific retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationsC
Get list of conversations/inbox for Instagram or Facebook. Returns conversation IDs and participant info.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform to get conversations from | |
| folder | No | Inbox folder (default: inbox) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns 'conversation IDs and participant info,' which is helpful, but lacks details on permissions, rate limits, pagination, error handling, or whether it's read-only. For a tool with zero annotation coverage, this leaves significant gaps in understanding its operational behavior.
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 front-loaded, consisting of a single sentence that directly states the tool's purpose and return value. There is no unnecessary verbiage, and it efficiently communicates core information. However, it could be slightly more structured by separating usage notes from the main purpose.
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 moderate complexity (2 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and return data, but lacks details on behavioral traits, error cases, and differentiation from siblings. Without annotations or an output schema, more context would improve completeness for effective agent use.
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 has 100% description coverage, clearly documenting both parameters ('platform' and 'folder') with enums and defaults. The description adds no additional semantic context beyond what the schema provides, such as explaining folder differences or platform-specific nuances. Given the high schema coverage, the baseline score of 3 is appropriate.
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 purpose: 'Get list of conversations/inbox for Instagram or Facebook.' It specifies the verb ('Get'), resource ('conversations/inbox'), and target platforms. However, it doesn't explicitly differentiate from sibling tools like 'get_conversation_by_user' or 'get_conversation_messages', which reduces it from a perfect score.
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 minimal guidance on when to use this tool. It mentions the platforms (Instagram/Facebook) and folder types, but offers no explicit advice on when to choose this over alternatives like 'get_conversation_by_user' or 'get_conversation_messages', nor does it specify prerequisites or exclusions. This leaves usage context largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instagram_post_detailsB
Get detailed information about a specific Instagram post including carousel children
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | The Instagram post/media ID |
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 of behavioral disclosure. It states the tool retrieves information (implying a read-only operation) and mentions 'carousel children' as included details, but it doesn't cover aspects like authentication requirements, rate limits, error handling, or the format of returned data. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
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, efficient sentence that front-loads the core purpose without unnecessary words. It directly states what the tool does ('Get detailed information') and adds valuable context ('including carousel children'), making every part of the sentence earn its place. No fluff or redundancy is 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's low complexity (1 parameter, no nested objects) and high schema coverage, the description is minimally adequate. However, with no annotations and no output schema, it fails to provide complete context—e.g., it doesn't explain what 'detailed information' includes beyond carousel children or how results are structured. This leaves room for improvement in guiding an agent effectively.
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 has 100% description coverage, with the parameter 'postId' documented as 'The Instagram post/media ID.' The description doesn't add any semantic details beyond this, such as examples or constraints on the ID format. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
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 purpose: 'Get detailed information about a specific Instagram post including carousel children.' It specifies the verb ('Get'), resource ('Instagram post'), and scope ('detailed information...including carousel children'), which distinguishes it from generic 'get' operations. However, it doesn't explicitly differentiate from sibling tools like 'get_posts' or 'get_post_comments', which slightly reduces clarity.
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 no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_posts' (which might list posts) or 'get_post_comments' (which might focus on comments), nor does it specify prerequisites or exclusions. Without such context, an agent must infer usage based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_facebook_pageB
Get your Facebook page information
| 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 the full burden of behavioral disclosure. It implies a read operation ('Get') but lacks details on permissions, rate limits, or response format. This is inadequate for a tool that likely involves API calls and user data.
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, clear sentence with no wasted words. It's front-loaded and efficiently conveys the core purpose, making it easy for an agent to parse quickly.
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 and output schema, the description is incomplete. It doesn't explain what 'page information' includes (e.g., fields returned), authentication requirements, or error handling, leaving significant gaps for a tool interacting with a social media platform.
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 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add parameter details, but that's acceptable here, earning a baseline score for zero-parameter tools.
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 ('Get') and resource ('your Facebook page information'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_my_instagram_profile' beyond the platform name, missing specific scope details that would warrant a perfect score.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), context (e.g., personal vs. business pages), or comparisons to siblings like 'get_user_profile', leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_instagram_profileB
Get your own Instagram business account profile
| 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 full burden of behavioral disclosure. It states the tool retrieves profile data, implying a read-only operation, but doesn't specify critical details like authentication needs, rate limits, error conditions, or what data is included in the profile. This leaves significant gaps in understanding how the tool behaves in practice.
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, clear sentence with no wasted words, making it highly efficient and front-loaded. It directly communicates the core functionality without unnecessary elaboration, which is ideal for a simple tool with no parameters.
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 (0 parameters, no output schema), the description is adequate for basic understanding but incomplete for practical use. It lacks details on authentication, return format, and error handling, which are essential for an agent to invoke it correctly in a real-world context, especially with no annotations to fill these gaps.
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 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description adds value by clarifying that it retrieves 'your own' profile, which provides semantic context beyond the empty schema. However, it doesn't elaborate on implicit parameters like authentication, preventing a perfect score.
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 ('Get') and resource ('your own Instagram business account profile'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'get_user_profile' by specifying 'your own' profile rather than a general user profile. However, it doesn't explicitly contrast with all siblings like 'get_instagram_post_details' or 'get_posts', keeping it from a perfect score.
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 context by specifying 'your own' profile, suggesting this tool is for retrieving the authenticated user's business account data rather than arbitrary profiles. However, it lacks explicit guidance on when to use this versus alternatives like 'get_user_profile' or prerequisites such as authentication requirements, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_commentsC
Get comments on a post
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform | |
| postId | Yes | The post ID to get comments for | |
| limit | No | Number of comments to retrieve (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Get comments on a post' implies a read operation but reveals nothing about permissions needed, rate limits, pagination behavior (beyond the limit parameter), error conditions, or what format the comments are returned in. This is inadequate for a tool with 3 parameters and no output schema.
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 maximally concise - a single four-word phrase that communicates the core purpose without any wasted words. It's appropriately sized for a straightforward retrieval tool and front-loads the essential information.
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 3 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't address behavioral aspects like authentication requirements, error handling, or return format. For a tool that retrieves social media comments (which can have complex structures and access controls), 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 description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning about parameters beyond what's in the schema - it doesn't explain platform differences, postId format requirements, or how limit interacts with pagination. Baseline 3 is appropriate when schema does the heavy lifting.
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 'Get comments on a post' clearly states the action (get) and resource (comments on a post), making the tool's purpose immediately understandable. However, it doesn't distinguish itself from potential sibling tools like 'get_conversation_messages' or 'reply_to_comment' that might also involve comment retrieval in different contexts.
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 no guidance on when to use this tool versus alternatives. With siblings like 'get_conversation_messages' and 'reply_to_comment' that might handle comments differently, there's no indication of context, prerequisites, or exclusions for this specific comment retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postsC
Get posts from your Instagram account or Facebook page
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform to get posts from | |
| limit | No | Number of posts to retrieve (default: 25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral context. It doesn't disclose whether this is a read-only operation (implied by 'Get'), authentication requirements, rate limits, pagination behavior, or what format the posts are returned in. For a tool with no annotations, this leaves significant gaps in understanding how it behaves.
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, efficient sentence with zero wasted words. It's appropriately sized for a simple retrieval tool and gets straight to the point without unnecessary elaboration.
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 no annotations and no output schema, the description is incomplete. It doesn't explain what 'posts' means in this context (recent posts? all posts? specific types?), doesn't mention authentication requirements, and provides no information about return format or structure. For a social media API tool, this leaves too many questions unanswered.
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 100%, so the schema already documents both parameters thoroughly. The description doesn't add any meaning beyond what the schema provides about platform selection or limit defaults. It doesn't explain the implications of choosing different platforms or how the limit parameter affects results.
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 'Get' and the resource 'posts', specifying the sources as 'your Instagram account or Facebook page'. It distinguishes from siblings like get_instagram_post_details (specific post details) and get_conversations (messages), but doesn't explicitly differentiate from get_my_facebook_page or get_my_instagram_profile which retrieve profile/page info rather than posts.
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 is provided. It doesn't mention when to choose get_posts over get_instagram_post_details for detailed post info, or when to use it versus get_my_facebook_page for page metadata. The description only states what it does, not when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileC
Get profile information for a user on Instagram or Facebook
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform | |
| userId | Yes | The user ID to get profile for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read operation, it doesn't specify whether this requires authentication, rate limits, privacy restrictions, or what format/profile fields are returned. For a social media API tool with zero annotation coverage, this leaves significant behavioral questions unanswered.
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, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a simple retrieval tool and front-loads the essential information without unnecessary elaboration.
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 social media profile retrieval tool with no annotations and no output schema, the description is insufficient. It doesn't explain what profile information is returned, authentication requirements, platform-specific differences, or error conditions. Given the complexity of social media APIs and the lack of structured behavioral information, this description leaves too many practical questions unanswered.
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 mentions 'Instagram or Facebook' which aligns with the platform parameter's enum values, and 'user' which relates to userId. However, with 100% schema description coverage where both parameters are already documented in the schema, the description adds minimal value beyond what's already structured. The baseline of 3 is appropriate when the schema does the heavy lifting.
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 ('Get profile information') and target resource ('for a user on Instagram or Facebook'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'get_my_instagram_profile' or 'get_my_facebook_page', which appear to retrieve profile information for the authenticated user rather than a specified user ID.
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 no guidance on when to use this tool versus alternatives like 'get_my_instagram_profile' or 'get_my_facebook_page'. It doesn't mention prerequisites, authentication requirements, or any context about when this tool is appropriate versus other profile-related tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_facebookC
Create a new post on your Facebook page
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Post text content | |
| link | No | URL to share (optional) | |
| photoUrl | No | URL of photo to post (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states it creates a post without disclosing behavioral traits like required permissions, rate limits, whether it's idempotent, or what happens on failure. 'Create' implies a mutation, but no safety or operational details are given.
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, clear sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.
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 mutation tool with no annotations and no output schema, the description is incomplete. It lacks context on authentication needs, error handling, return values, or how it differs from siblings. Given the complexity and missing structured data, more detail is warranted.
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 100%, so parameters are fully documented in the schema. The description adds no additional meaning beyond implying a post can include text, links, or photos, which is already clear from parameter names. Baseline 3 is appropriate as the schema does the heavy lifting.
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 ('Create a new post') and target resource ('on your Facebook page'), which distinguishes it from sibling tools like 'post_to_instagram' or 'get_posts'. However, it doesn't specify what type of post (text, link, photo) beyond what's implied by parameters, keeping it from a perfect score.
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 versus alternatives like 'post_to_instagram' or 'send_message', nor any prerequisites such as needing a Facebook page or authentication. The description only states what it does, not when or why to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_to_instagramC
Create a new post on Instagram (image or video/reel)
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Post caption | |
| imageUrl | No | URL of image to post (for image posts) | |
| videoUrl | No | URL of video to post (creates a Reel) | |
| locationId | No | Optional location ID to tag |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states it creates posts. It lacks behavioral details such as authentication requirements, rate limits, whether posts are public/private, or what happens on success/failure. This is inadequate for a mutation tool with zero annotation coverage.
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, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to scan and understand quickly.
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 mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like authentication, error handling, or response format, leaving significant gaps for an AI agent to use it 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?
Schema description coverage is 100%, so the schema fully documents all 4 parameters. The description adds minimal value by implying imageUrl vs. videoUrl usage for different post types, but doesn't provide additional semantics beyond what the schema already specifies.
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 ('Create a new post') and resource ('on Instagram'), specifying it can be for images or videos/reels. It distinguishes from siblings like post_to_facebook by platform, but doesn't explicitly differentiate from other Instagram-related tools (e.g., get_posts).
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 is provided. It doesn't mention prerequisites (e.g., authentication), when to choose image vs. video, or how it differs from other Instagram tools like get_posts or get_instagram_post_details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_commentC
Reply to a comment on a post
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform | |
| commentId | Yes | The comment ID to reply to | |
| message | Yes | Reply message text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as permission requirements, rate limits, whether replies are editable, or what happens on failure. For a mutation tool, this is a significant gap in transparency.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.
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 complexity (a mutation with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects, error handling, or return values, leaving critical gaps for agent 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 100%, so parameters are well-documented in the schema. The description adds no additional meaning beyond implying 'commentId' and 'message' usage, but doesn't explain parameter interactions or constraints, meeting the baseline for high 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 action ('Reply to') and target ('a comment on a post'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'send_message' or 'send_reaction' that might also involve communication, so it doesn't fully distinguish from alternatives.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing comment IDs from 'get_post_comments'), exclusions, or comparisons to siblings like 'send_message' for different contexts, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageC
Send a message to a user on Instagram or Facebook Messenger. Can send text or media (image, video, audio).
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform to send message on | |
| recipientId | Yes | The user ID to send the message to | |
| text | No | Text message content (optional if sending media) | |
| mediaUrl | No | URL of media to send (optional) | |
| mediaType | No | Type of media being sent | |
| isHumanAgent | No | Set to true if message is from human agent (extends messaging window) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool sends messages but doesn't disclose behavioral traits like authentication requirements, rate limits, whether messages are reversible, delivery confirmation, or error handling. This is inadequate 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 a single, efficient sentence that front-loads the core purpose and key capabilities. Every word earns its place with no redundancy or unnecessary details.
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 mutation tool with no annotations and no output schema, the description is incomplete. It lacks information about behavioral aspects like permissions, side effects, response format, and error conditions, which are critical for proper usage.
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 100%, so the schema fully documents all 6 parameters. The description adds minimal value by mentioning platforms and media types, which are already covered by the schema's enum and descriptions. Baseline 3 is appropriate as the schema does the heavy lifting.
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 ('send a message'), target ('to a user'), platforms ('Instagram or Facebook Messenger'), and content types ('text or media'). It distinguishes from read-only sibling tools like get_conversation_messages, but doesn't explicitly differentiate from send_reaction or reply_to_comment.
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 send_reaction or reply_to_comment. It mentions platforms and content types but doesn't provide context about appropriate scenarios, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_reactionC
Send a reaction to a message on Instagram
| Name | Required | Description | Default |
|---|---|---|---|
| recipientId | Yes | The user ID | |
| messageId | Yes | The message ID to react to | |
| reaction | Yes | Reaction type (e.g., love, like, haha, wow, sad, angry) |
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 of behavioral disclosure. It states the action ('send') but does not clarify permissions required, rate limits, whether the reaction is reversible, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly.
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 complexity (a mutation with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It does not address behavioral aspects like error handling, response format, or usage constraints, which are critical for an agent to invoke the tool correctly in a real-world scenario.
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 100%, so the schema already documents all three parameters with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as examples of reaction usage or context for recipientId/messageId. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('send a reaction') and target resource ('to a message on Instagram'), which is specific and unambiguous. However, it does not explicitly differentiate from sibling tools like 'send_message' or 'reply_to_comment', which might involve similar messaging contexts but different actions.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing an existing message), exclusions, or comparisons to siblings like 'send_message' or 'reply_to_comment', leaving the agent to infer usage context solely from the tool name and parameters.
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
v1.0.0- First observed
get_conversation_by_user - First observed
get_conversation_messages - First observed
get_conversations - First observed
get_instagram_post_details - First observed
get_my_facebook_page - First observed
get_my_instagram_profile - First observed
get_post_comments - First observed
get_posts - First observed
get_user_profile - First observed
post_to_facebook - First observed
post_to_instagram - First observed
reply_to_comment - First observed
send_message - First observed
send_reaction
TDQS
Most tools have distinct purposes targeting specific resources like conversations, posts, profiles, or actions like posting and messaging. However, get_conversations and get_conversation_by_user could cause confusion as both relate to conversations, though their descriptions clarify one lists conversations and the other gets a specific conversation ID.
Tools follow a consistent verb_noun pattern (e.g., get_conversations, post_to_instagram) with clear actions like get, post, reply, and send. Minor deviations exist, such as get_conversation_by_user using 'by_user' instead of a more uniform structure like get_conversation_for_user, but overall naming is predictable and readable.
With 14 tools, the count is well-scoped for managing Instagram and Facebook interactions, covering key areas like messaging, posting, and profile management. Each tool appears to serve a specific function without redundancy, making the set comprehensive yet manageable.
The toolset provides strong coverage for core social media operations, including CRUD-like actions for posts, messages, and profiles. Minor gaps exist, such as no tools for deleting posts or managing comments beyond replying, but agents can likely work around these with the available tools for basic workflows.
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
Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.
Social media automation from your AI assistant: Instagram DMs, scheduling to 9 platforms, analytics.
Create, review, publish and schedule Instagram images, carousels and Reels with AI assistants.
Post, schedule, and track social posts on X, Bluesky, LinkedIn, Instagram and more from AI agents.
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/osborn1997/instagram-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server