MCP server for Instagram and Facebook analytics via the Graph API
This server presents 19 tools across Instagram and Facebook analytics with complete input schemas and descriptions for all tools. Naming is consistent and verb-based (instagram_list_*, instagram_get_*, facebook_list_*, facebook_get_*). However, descriptions vary significantly in quality, some are detailed with constraints (e.g., instagram_get_account_insights explains metric types and breakdowns), while others are generic and fail to guide LLM tool selection (e.g., facebook_list_known_metrics, instagram_list_accounts). Parameter descriptions are present on most tools but inconsistent in depth. No output schemas are documented, critical for agents planning downstream calls. Error handling and recovery guidance are absent from all tool definitions. Enums are properly declared where applicable (e.g., metric_type, period, breakdown). All tools are read-only, reducing security risk. Per-tool scores range from 45 to 75, dragging the average into the 'fair' range.
Get detailed information about a Facebook Page including name, category, follower count, about section, contact info, and more.
Get the feed (posts) for a Facebook Page.
Fetch page-level insights for a Facebook Page. Common metrics: page_impressions, page_impressions_unique, page_engaged_users, page_post_engagements, page_views_total, page_fans.
Get insights for a specific Facebook post.
List known metrics available for Facebook Pages and Posts.
List all Facebook Pages accessible with the current access token. Use this first to discover page IDs.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., account_id, page_id) needed to chain tools together. This forces agents into expensive discovery loops and risks broken tool chains.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get a list of recent posts from a Facebook Page along with their insights.
Validate a Facebook access token.
Get account-level insights and analytics for Instagram. Supports demographic breakdowns and time series data.
Check the content publishing rate limit status for the Instagram account. Shows current quota usage and limits.
Get top or recent media for a hashtag. Use instagram_get_hashtag_search first to get the hashtag ID.
Search for an Instagram hashtag ID by name. The returned ID can be used with instagram_get_hashtag_media to fetch top/recent media. Limited to 30 unique hashtag searches per 7-day rolling window per account.
Get detailed information about a specific Instagram media post including caption, type, URL, and engagement counts.
Get insights for a specific Instagram media post. Note: Available metrics depend on media type. For Reels/Videos: use views, likes, comments, shares, reach, saved, total_interactions, replies, avg_time_watched, total_time_watched. For Images/Carousels: use likes, comments, reach, saved, shares, total_interactions. Story-specific metrics (replies, navigation) only work on story media.
Get media where the Instagram account is mentioned or tagged by other users.
Get Instagram business account profile information (username, followers, media count, etc.). If account_id is not provided, it will be auto-detected from the environment or discovered automatically.
Get recent Instagram Stories for the account. Stories are only available for 24 hours after posting. Returns story media items with basic fields.
List all available Instagram Business accounts. Use this first to discover account IDs.
Get a list of recent media posts from Instagram account. Returns posts with basic engagement data.
Descriptions for several tools are under 50 characters and lack actionable guidance: instagram_list_accounts ('List all available Instagram Business accounts. Use this first to discover account IDs.' - 85 chars but generic), facebook_list_pages (35 chars), facebook_list_known_metrics (35 chars), facebook_validate_token (50 chars). These are too generic to help LLMs choose between similar tools or understand when to invoke them.
No error handling or recovery guidance. Tool definitions do not document API rate limits, quota constraints, or validation failures. For example, instagram_get_hashtag_search mentions a '30 unique hashtag searches per 7-day rolling window' constraint in the description but provides no guidance on how the LLM should handle hitting this limit or recovering from it.
Parameter descriptions lack explicit constraints and format hints. For example, 'since' and 'until' in instagram_get_account_insights are described as 'Unix timestamp' but do not specify if this is seconds or milliseconds, or if the API validates ranges. 'period' enums are declared but some tools (facebook_get_page_insights) have string 'period' with no enum constraint, inviting hallucinated values.
Some list/pagination tools lack limit constraints and next-cursor guidance. instagram_list_media accepts 'limit' with a note 'max: 100' in description but schema has no maxItems constraint. facebook_list_posts_with_insights has no documented pagination mechanism or cursor/offset pattern, risking context window exhaustion on large pages.
Tool composition fragility: Multiple tools require optional 'account_id' or 'page_id' parameters, with fallback to environment variables. This pattern is not documented in tool descriptions, forcing LLMs to guess whether an ID is required or inferred. If an agent omits the ID and the env var is missing, the tool will fail with unclear error messaging.
facebook_get_page_insights and facebook_get_post_insights expose 'metrics' as free-form string arrays with minItems=1 but no enum. The description suggests 'e.g., page_impressions, page_engaged_users' but does not enumerate all valid metrics. This requires agents to call facebook_list_known_metrics first to discover valid options, adding latency and breaking tool chains.