Model Context Protocol server for the Instagram Graph API (Business/Creator accounts).
Server has 22 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, parameter descriptions are minimal or missing for many tools. Input schemas are visible but lack detail on constraints, ranges, and formats. Output schemas are not documented. Error handling returns structured dicts but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Composition is sound, tools are single-purpose and chainable. Security: credentials injected via environment (good), but no audit logging or permission gates visible.
Delete a comment owned by the account.
Fetch replies under a specific comment.
Fetch messages in a conversation.
Fetch one media item by ID.
Profile info for the configured Instagram Business/Creator account.
Show publish quota usage in the rolling 24h window.
Recent media for a hashtag (rolling 24h window).
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields without knowing response structure. All 22 tools lack documented return types.
Parameter constraints missing. No min/max for numeric params (limit, max_pages, message_limit), no enum for message_tag, no format specs for URLs. LLMs may pass invalid values.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Clients cannot distinguish safe reads from destructive writes without parsing descriptions. Critical for agent safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Top-ranked media for a hashtag.
Hide (or unhide) a comment.
Walk media pages up to max_pages (default 5 = up to ~125 items).
List top-level comments on a media item, including their replies.
List Instagram DM conversations for the account.
List one page of recent media. `after` is the paging cursor from a prior response.
List the account's currently-live stories (expire after 24h).
List media the account is tagged in.
Publish a 2-10 item carousel. Each item is {image_url: "..."} or {video_url: "..."}.
Publish a single image post. image_url must be a public HTTPS URL.
Publish a Reel. video_url must be a public HTTPS MP4.
Publish a Story. Provide exactly one of image_url or video_url.
Reply to a comment.
Resolve a hashtag string to an IG hashtag ID.
Send a DM. Without a tag this is `RESPONSE` (only valid inside the 24h user-initiated window). Pass message_tag (e.g. HUMAN_AGENT) to escape that constraint.
Error handling returns GraphError.to_dict() but lacks recovery guidance. Errors like 'Invalid hashtag_id' do not suggest next steps (e.g., 'Call search_hashtag first').
Destructive operations (delete_comment, publish_*) lack confirmation/dry-run support. Agents can accidentally delete or publish without verification.