meta-mcp
The meta-mcp server enables AI assistants to manage Instagram and Threads accounts through the Meta Graph API, offering tools across publishing, engagement, analytics, messaging, and platform administration.
Publishing: Photos, videos, Reels, Stories, and carousels (2–10 items) with captions, alt text, location tags, and user tagging
Media Management: List, retrieve, delete posts; toggle comments; view media-level insights (views, reach, saves, shares)
Comments: Get, post, reply to, hide/unhide, and delete comments
Profile & Insights: Account profile info, account-level analytics, Business Discovery for other accounts, collaboration invite management
Hashtags: Search hashtags, browse recent and top media by hashtag
Mentions & Tags: Get comments/media where the account is @mentioned or tagged
DMs: List conversations, get/send messages, retrieve message details
Threads
Publishing: Text posts (with polls, GIFs, links, topic tags, quote posts, spoiler flags), images, videos, carousels (2–20 items); repost existing threads; check publishing quota (250/day)
Media & Search: List/retrieve published posts; search public posts by keyword or topic tag
Replies: Get replies (top-level or full tree), reply to posts, hide/unhide replies
Mentions: List posts where the user was @mentioned
Profile & Insights: Profile info (including verification status), post-level analytics (views, likes, replies, reposts, quotes, clicks), account-level analytics with follower demographics
Meta Platform Tools
Exchange short-lived tokens for long-lived ones (~60 days), refresh tokens, and debug token status
Retrieve Meta App information
Subscribe to and list webhook notifications (Instagram, page, user objects)
Resources & Prompts
Access Instagram and Threads profile data as resources
Built-in prompts for cross-platform content publishing and analytics reporting
Provides comprehensive Instagram Business/Creator account management via the Instagram Graph API, including publishing photos, videos, reels, stories and carousels with alt text; managing comments, replies, and DMs; viewing media and account insights; searching hashtags; handling collaboration invites; and managing tagged content and mentions.
Supports Meta platform token lifecycle management (exchange, refresh, and debug) and webhook subscription management for Meta Developer Apps.
Enables full Threads API integration for publishing text posts with polls and GIFs, images, videos, and carousels; managing replies (including hide/unhide); searching public posts; deleting content; and viewing post-level and account-level analytics.
meta-mcp
Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.
Prerequisites
Node.js 22+ (LTS recommended)
Related MCP server: Instagram MCP Server
Quick Start
Add to your MCP client config:
{
"mcpServers": {
"meta": {
"command": "npx",
"args": ["-y", "@exileum/meta-mcp"],
"env": {
"INSTAGRAM_ACCESS_TOKEN": "your_ig_token",
"INSTAGRAM_USER_ID": "your_ig_user_id",
"THREADS_ACCESS_TOKEN": "your_threads_token",
"THREADS_USER_ID": "your_threads_user_id"
}
}
}
}Only set the variables for the platforms you use.
Manual Installation
git clone https://github.com/exileum/meta-mcp.git
cd meta-mcp
npm install
npm run build{
"mcpServers": {
"meta": {
"command": "node",
"args": ["/path/to/meta-mcp/dist/index.js"],
"env": {
"INSTAGRAM_ACCESS_TOKEN": "your_ig_token",
"INSTAGRAM_USER_ID": "your_ig_user_id",
"THREADS_ACCESS_TOKEN": "your_threads_token",
"THREADS_USER_ID": "your_threads_user_id"
}
}
}
}Environment Variables
Variable | Required | Description |
| For Instagram | Instagram Graph API access token |
| For Instagram | Instagram Business/Creator account ID (numeric string, or |
| For Threads | Threads API access token |
| For Threads | Threads user ID (numeric string, or |
| For token/webhook tools | Meta App ID (numeric string) |
| For token/webhook tools | Meta App Secret |
| Optional | Meta Graph API version for Instagram and Facebook endpoints — defaults to |
| Optional | Threads API version — defaults to |
| Optional | Transport to serve MCP over — |
| Optional (http) | TCP port for the HTTP transport — defaults to |
| Optional (http) | Bind address for the HTTP transport — defaults to |
| Optional (http) | Comma-separated |
The server validates these at startup. Malformed values for INSTAGRAM_USER_ID, THREADS_USER_ID, or META_APP_ID cause the process to exit with Invalid meta-mcp configuration: …. Setting only one half of a credential pair (e.g., INSTAGRAM_ACCESS_TOKEN without INSTAGRAM_USER_ID) prints a stderr warning and continues; related tool invocations still fail at call time.
HTTP Transport
By default the server speaks MCP over stdio — the right choice for local clients (Claude Desktop, Claude Code, etc.). Set MCP_TRANSPORT=http to instead serve the SDK's Streamable HTTP transport, which enables remote/web-based MCP clients, cloud deployments, and multiple concurrent client sessions.
MCP_TRANSPORT=http MCP_HTTP_PORT=3000 npx @exileum/meta-mcpThe server then listens on http://127.0.0.1:3000/mcp: POST to send messages, GET for the server→client SSE stream, DELETE to end a session. Each client gets an isolated session keyed by the Mcp-Session-Id header, so multiple clients can connect at once.
Security. The transport binds to 127.0.0.1 (loopback) by default and enables DNS-rebinding protection scoped to localhost, so it is not reachable off-host out of the box. To expose it to other machines (e.g. a container), set MCP_HTTP_HOST=0.0.0.0 and run it behind a reverse proxy that terminates TLS and handles authentication — the server itself performs no auth. When bound to a non-loopback address, set MCP_HTTP_ALLOWED_HOSTS to the host:port values clients will use so the Host-header check passes (otherwise rebinding protection is disabled with a stderr warning).
Account Requirements
Platform | Account Type | Notes |
Business or Creator | Personal accounts cannot use the Graph API. Free to switch in settings | |
Threads | Any account | Instagram link no longer required since Sep 2025 |
Meta (token/webhook) | Meta Developer App | Create at developers.facebook.com |
Features
58 tools across Instagram (33), Threads (19), and Meta platform (6)
Instagram: Publish photos/videos/reels/stories/carousels with alt text, manage comments, view insights, search hashtags, handle DMs, manage collaboration invites
Threads: Publish text/images/videos/carousels with polls, GIFs, topic tags, link attachments, alt text, spoiler flags; manage replies; search posts; delete posts; view insights
Meta: Token exchange/refresh/debug, webhook management
2 resources: Instagram profile, Threads profile
2 prompts: Cross-platform content publishing, analytics report
Rate limit tracking via
x-app-usageheader — and automatic client-side throttling at 80% (1s slowdown) / 90% (5s backoff) so a burst of tool calls stays under Meta's per-app quotaAutomatic retry for transient Meta API failures (HTTP
429/500/502/503/504, network errors,fetchtimeouts) with exponential backoff andRetry-Afterhonoring; tunable viaMetaClient'smaxRetriesoption (default 3, set to 0 to disable)Structured error responses with
error_type(auth,validation,rate_limit,server,network,internal), HTTP status, Meta API code/subcode/type, and aremediationhint where actionable — seeCHANGELOG.mdfor the JSON shapeMCP server
instructionssent duringinitializeso clients know required env vars, the two-step publish flow, expected video processing times, and the_rateLimitenvelope without re-reading the READMEMCP
notifications/progressemitted while polling container status during publishing — attach aprogressTokentoig_publish_*/threads_publish_image|video|carouselcalls and the server reports each poll attemptStructured MCP logging via the
notifications/messagechannel (the server declares theloggingcapability) — each API call logsdebug(method + path, never the token-bearing URL), terminal failures logerror(status/code/sanitized message), rate-limit pressure logswarning, andDELETE/publish operations log aninfoaudit line. Clients can raise the floor withlogging/setLevel(default emits all levels, includingdebug)Optional HTTP transport — set
MCP_TRANSPORT=httpto serve the MCP Streamable HTTP transport (stateful multi-session, localhost-bound by default) instead of stdio, for remote/cloud deployments — see HTTP Transport
Tools
Meta Platform (6)
Tool | Description |
| Exchange short-lived token for long-lived token (~60 days). Requires |
| Refresh a long-lived token before expiration. Requires |
| Inspect token validity, expiration, and scopes |
| Get Meta App information |
| Subscribe to webhook notifications |
| List current webhook subscriptions |
Instagram — Publishing (6)
Tool | Description |
| Publish a photo post (supports alt_text, collaborators) |
| [DEPRECATED] Use |
| Publish a carousel/album (2-10 items, supports alt_text per IMAGE item, collaborators) |
| Publish a Reel (supports collaborators) |
| Publish a Story (24hr) |
| Check media container processing status |
Instagram — Media (5)
Tool | Description |
| List published media |
| Get media details |
| Delete a media post (requires Facebook Login) |
| Get media analytics (default views, reach — override |
| Enable/disable comments on a post |
Instagram — Comments (7)
Tool | Description |
| Get comments on a post |
| Get comment details |
| Post a comment |
| Get replies to a comment |
| Reply to a comment |
| Hide/unhide a comment |
| Delete a comment |
Instagram — Profile & Insights (5)
Tool | Description |
| Get account profile info |
| Get account-level analytics (views, reach, follower_count). Optional |
| Look up another business account |
| Get pending collaboration invites |
| Accept/decline a collaboration invite by media_id |
Instagram — Hashtags (4)
Tool | Description |
| Search hashtag by name |
| Get hashtag info |
| Get recent media for a hashtag |
| Get top media for a hashtag |
Instagram — Mentions & Tags (2)
Tool | Description |
| Get details of a specific comment mentioning you (by comment_id from a mention webhook) |
| Get media you're tagged in |
Instagram — Messaging (4)
Tool | Description |
| List DM conversations |
| Get messages in a conversation |
| Send a DM (optional |
| Get message details |
Threads — Publishing (9)
Tool | Description |
| Publish a text post in a single API call ( |
| Publish an image post (supports alt_text, topic tags, spoiler flag, cross-share to IG Stories, geo-gating via |
| Publish a video post (supports alt_text, topic tags, spoiler flag, cross-share to IG Stories, geo-gating via |
| Publish a carousel (2-20 items, supports alt_text per item, cross-share to IG Stories, geo-gating via |
| Delete a post (max 100/day) |
| Check container processing status (unpublished containers only) |
| Check remaining publishing quota (250 posts/day) |
| Repost an existing thread to your profile (requires |
| Search Threads-supported locations by query ( |
Threads — Media & Search (3)
Tool | Description |
| List published posts (includes topic_tag, poll, GIF fields; optional |
| Get post details |
| Search public posts by keyword or tag (requires |
Threads — Replies (4)
Tool | Description |
| Get replies to a post ( |
| Reply to a post (supports image/video attachments) |
| Hide a reply |
| Unhide a reply |
Threads — Mentions (1)
Tool | Description |
| List posts where the user was @mentioned (requires |
Threads — Profile (1)
Tool | Description |
| Get Threads profile info (includes |
Threads — Insights (2)
Tool | Description |
| Get post analytics (views, likes, replies, reposts, quotes, shares) |
| Get account-level analytics (period: day/lifetime; |
Resources
Resource URI | Description |
| Instagram account profile data |
| Threads account profile data (includes is_verified and is_eligible_for_geo_gating) |
Prompts
Prompt | Description | Arguments (all optional) |
| Cross-post content to Instagram and Threads |
|
| Generate combined analytics report |
|
Setup Guide
Step 1: Create a Meta Developer App
Go to developers.facebook.com and log in
Click "My Apps" -> "Create App"
Select "Other" -> "Business" (or "None" for personal use)
Enter an app name and create
Your META_APP_ID and META_APP_SECRET are in App Settings -> Basic.
Step 2: Instagram Setup
Requires an Instagram Business or Creator account. Switch for free in Instagram app -> Settings -> Account type. No Facebook Page linking required — this uses the Instagram API with Instagram Login.
In your Meta App, go to "Instagram" -> "API setup with Instagram business login"
In the "Generate access tokens" section, click "Add account" -> log in to your Instagram account
The generated token is long-lived (~60 days) — no exchange step needed. Copy it as your
INSTAGRAM_ACCESS_TOKEN.To refresh before expiry, use the
meta_refresh_tokentool withplatform: "instagram", or:GET https://graph.instagram.com/refresh_access_token ?grant_type=ig_refresh_token &access_token=LONG_LIVED_TOKEN
Get your Instagram User ID:
GET https://graph.instagram.com/v25.0/me?fields=user_id,username&access_token=YOUR_TOKENThe
user_idis yourINSTAGRAM_USER_ID.Permissions are configured in your app's Instagram settings. Available scopes:
instagram_business_basic— required for all operationsinstagram_business_content_publish— publishing photos, reels, carouselsinstagram_business_manage_comments— reading and managing commentsinstagram_business_manage_messages— DM conversations and messaging
Step 3: Threads Setup
Works with any Threads account. Instagram link no longer required since Sep 2025.
In your Meta App, go to "Add Products" -> add "Threads API"
Go to "Threads API" -> "Settings":
Add your Threads account as a Threads Tester under "Roles"
Accept the invitation in the Threads app: Settings -> Account -> Website permissions -> Invites
Generate an authorization URL:
https://threads.net/oauth/authorize ?client_id=YOUR_APP_ID &redirect_uri=YOUR_REDIRECT_URI &scope=threads_basic,threads_content_publish,threads_manage_insights,threads_manage_replies,threads_read_replies,threads_share_to_instagram,threads_manage_mentions,threads_keyword_search &response_type=codeFor local testing, use
https://localhost/as redirect URI (configure in App Settings -> Threads API -> Redirect URIs).After authorization, exchange the code for an access token:
POST https://graph.threads.net/oauth/access_token Content-Type: application/x-www-form-urlencoded client_id=YOUR_APP_ID &client_secret=YOUR_APP_SECRET &grant_type=authorization_code &redirect_uri=YOUR_REDIRECT_URI &code=AUTHORIZATION_CODEExchange for a long-lived token (~60 days):
GET https://graph.threads.net/access_token ?grant_type=th_exchange_token &client_secret=YOUR_APP_SECRET &access_token=SHORT_LIVED_TOKENGet your Threads User ID:
GET https://graph.threads.net/v1.0/me?fields=id,username&access_token=YOUR_TOKENThe
idfield is yourTHREADS_USER_ID.
Token Renewal
Access tokens expire after ~60 days. Refresh before expiration (token must be at least 24h old):
Instagram: Use
meta_refresh_tokenwithplatform: "instagram", or call:GET https://graph.instagram.com/refresh_access_token ?grant_type=ig_refresh_token &access_token=CURRENT_LONG_LIVED_TOKENThreads: Use
meta_refresh_tokenwithplatform: "threads", or call:GET https://graph.threads.net/refresh_access_token ?grant_type=th_refresh_token &access_token=CURRENT_LONG_LIVED_TOKEN
When you rotate a token through meta_refresh_token or meta_exchange_token, the new token is automatically applied in-memory to the running MCP server — subsequent tool calls use it immediately, no server restart needed. The new token is still returned in the response so you can persist it in your environment for the next process restart. A single [meta-mcp] <Platform> access token updated in-memory after <tool>… line is logged to stderr when this happens.
Check token status anytime with meta_debug_token.
Troubleshooting
Tool failures return isError: true with a JSON body in content[0].text matching the envelope documented in CHANGELOG.md: { error: true, error_type, http_status, code, subcode, type, step, container_id, message, remediation, fbtrace_id, raw }. The fastest path to a fix is to read error_type and the Meta API code, then jump to the matching subsection below. The full code reference is the Meta Graph API error handling guide.
On the publish tools (ig_publish_*, threads_publish_*, threads_reply), errors also include step (container creation / processing / publishing, plus child container creation / child processing / parent container creation / parent processing on carousels) and container_id when one was created. The message mirrors them: "Publish photo failed at processing (container: 17889615324): Container processing timed out after 30s". Use these to decide whether to retry the publish, clean up an orphaned container, or treat the existing container as still reusable.
error_type: "auth" — expired, revoked, or under-scoped token
Triggered by Meta API codes 190, 10, 102, HTTP 401, or type: "OAuthException". Common messages:
Error validating access token: Session has expired— long-lived tokens expire ~60 days after issue.Application does not have permission for this action— the token is missing a scope, or the account is not eligible (e.g., a Personal Instagram account on Graph API endpoints).
What to do:
Run
meta_debug_tokento inspectexpires_at,is_valid, andscopes.If the token is not yet expired but at least 24h old, refresh in place with
meta_refresh_token(platform: "instagram"or"threads") — this extends the lifetime by another ~60 days. If the token is already expired, the refresh endpoint will reject it; regenerate a short-lived token from the Meta App dashboard and exchange it viameta_exchange_token(or run a full re-authorization for Threads).If scopes are missing, regenerate the token with the required permissions:
Instagram:
instagram_business_basic(always required) plusinstagram_business_content_publish,instagram_business_manage_comments,instagram_business_manage_messagesper feature.Threads:
threads_basic,threads_content_publish,threads_manage_insights,threads_manage_replies,threads_read_replies,threads_share_to_instagram,threads_manage_mentions,threads_keyword_searchper feature.
If your Instagram account is Personal, switch to Business or Creator for free in the Instagram app (Settings → Account type and tools → Switch to professional account). The Graph API rejects Personal accounts.
error_type: "rate_limit" — application or user quota exhausted
Triggered by Meta API codes 4, 17, 32, 341, 613, the business-use-case range 80001–80008, or HTTP 429. Includes any OAuthException with code 4 / 17 (these are surfaced as error_type: "rate_limit", not "auth", despite the type field). MetaClient automatically retries HTTP 429 up to 3 times with exponential backoff and honors any Retry-After header — a rate_limit error reaching the caller means the retry budget was exhausted.
What to do:
Inspect the
_rateLimitfield on prior successful tool responses.callCount,totalCpuTime, andtotalTimecome from Meta'sx-app-usageheader; when any approaches100you are near the per-app threshold.meta-mcp already self-throttles once
max(callCount, totalCpuTime, totalTime)crosses 80% (1s slowdown) or 90% (5s backoff) — watch for thewarning-level MCP log message (logger: "meta-client", withusage_pctanddelay_ms) the server emits before each throttled call. Profile reads (ig_get_profile,threads_get_profile, and the matchingmeta-mcp://*/profileresources) and hashtag-name lookups (ig_search_hashtag) are also cached in-process for 5 minutes / 7 days respectively, with cache hits skipping the network entirely. If you are still hittingrate_limiterrors despite all that, reduce request volume further.Threads has hard daily quotas (250 publishes, 100 deletes) — query the remaining quota with
threads_get_publishing_limitbefore bulk operations.
error_type: "validation" — bad parameter, wrong ID, or unsupported field
Triggered by Meta API codes 100, 200, 803, or any unmapped 4xx HTTP status. Common pitfalls:
Wrong user ID format —
INSTAGRAM_USER_IDandTHREADS_USER_IDmust be the numeric ID returned byGET /me?fields=user_id(Instagram) orGET /me?fields=id(Threads), or the literal"me"for the authenticated user. The Instagram username is not accepted.(#100) Messaging is not supportedonig_send_message/ig_get_conversations/ig_get_messages— the account does not have the messaging API enabled. Grantinstagram_business_manage_messageson your token and ensure DMs are enabled in the Instagram app (Settings → Privacy → Messages).Deprecated publish endpoint —
ig_publish_videowas retired by Meta on Nov 9, 2023; useig_publish_reelfor video posts.ig_publish_storyis required for Stories.Mutually exclusive Threads attachments — a
threads_publish_textpost can carry only one oftext_attachment,poll_options,link_attachment, orgif_attachment; combining them is rejected at the schema level.Unsupported
metric/fieldsfor the resource — see the per-tool Meta docs (ig_get_media_insightslists per-media_typevalid metrics in its description).
Other categories
error_type: "server"(codes1,2, HTTP 5xx) — transient Meta outage.MetaClientalready retried500/502/503/504up to 3 times with exponential backoff before surfacing this; check metastatus.com if it persists.error_type: "network"—fetchtimed out or failed before reaching Meta.MetaClientalready retried thrown network errors up to 3 times; verify outbound connectivity if the error keeps reappearing.error_type: "internal"— unexpected condition that did not map to a Meta error code. Therawfield carries the sanitized original message;access_token,client_secret, andinput_tokenvalues are scrubbed to***before reporting.
API Stability
meta-mcp is consumed as an MCP server runtime, not as a library. The supported entry points are:
npx @exileum/meta-mcp(recommended for end users)node dist/index.js(manual installation)
The single programmatic export from the package root, createSandboxServer(): McpServer, exists for the Smithery sandbox runner and is the only stable JavaScript/TypeScript API.
zod and other transitive runtime dependencies are internal and not part of meta-mcp's public API. No zod symbols, types, or schemas flow through dist/index.d.ts, so zod's version may change in any release — including major version bumps — without a corresponding meta-mcp major bump.
@modelcontextprotocol/sdk is the one exception: McpServer (the return type of createSandboxServer()) is imported from that package, so a breaking change to McpServer's public interface would also be a breaking change for meta-mcp's programmatic API. In practice the MCP SDK follows semver, so consumers can treat @modelcontextprotocol/sdk as an implicit peer dependency of the createSandboxServer export.
Only the package root (@exileum/meta-mcp) is a supported import target. Deep imports into the published dist/ tree (e.g. @exileum/meta-mcp/dist/schemas.js) are blocked by the package.json exports map for any spec-compliant resolver and are not part of the public API; they may be renamed, removed, or restructured in any release.
Glama
Contributing
Contributions are welcome. See CONTRIBUTING.md for the dev setup, project layout, the tool-registration recipe, testing, commit conventions, the CHANGELOG flow, and the CI gates. Bug reports and feature requests use the issue templates; pull requests use the PR template.
License
See CHANGELOG.md for release history.
Available Tools
59 toolsig_business_discoveryARead-only
Look up another Instagram Business/Creator account's public info by username.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Fields to retrieve (default: id,username,name,biography,followers_count,follows_count,media_count) | id,username,name,biography,followers_count,follows_count,media_count |
| username | Yes | Instagram username to look up (1-30 chars, letters/numbers/periods/underscores only; without @, leading '@' characters and surrounding whitespace are auto-stripped) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds 'public info' which aligns with read-only behavior but does not elaborate on rate limits, authentication, or other traits. No contradiction.
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. It is concise but could be slightly more structured with a brief note on usage.
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 output schema exists. The description hints at 'public info' but does not specify exact return fields. The default fields in the input schema partially compensate, making it adequate but not 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 provides full descriptions for both parameters (username format/auto-stripping, fields with defaults). The description adds no additional parameter meaning beyond the 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 tool looks up public info of another Instagram Business/Creator account by username, distinguishing it from ig_get_profile which retrieves info for the connected account.
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 for looking up other accounts but does not explicitly state when to use this tool versus alternatives like ig_get_profile. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_delete_commentADestructiveIdempotent
Delete a comment from your media post. This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| comment_id | Yes | Comment ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. Description adds 'irreversible' which aligns but does not expand on behavior beyond annotations. No contradiction.
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 clear sentence with no extraneous words. Efficient and to the point.
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 destructive action with one parameter and annotations, the description provides basic function and irreversibility. However, it omits contextual details like permissions needed or behavior with replies, and does not contrast with ig_hide_comment.
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 covers the single parameter comment_id with pattern and description. Description adds no additional semantics, so baseline score of 3 applies.
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?
Description clearly states 'Delete a comment from your media post' with a specific verb and resource, distinguishing it from siblings like ig_hide_comment (hides instead of deletes) and ig_reply_to_comment (creates new 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 explicit guidance on when to use this tool versus alternatives like ig_hide_comment. The description only notes irreversibility but does not provide context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_delete_mediaADestructiveIdempotent
Delete an Instagram media post (posts, carousels, reels, stories). This action is irreversible. Requires instagram_manage_contents permission (Facebook Login only — not available with Instagram Login).
| Name | Required | Description | Default |
|---|---|---|---|
| media_id | Yes | Media ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true, readOnlyHint=false, idempotentHint=true. The description adds irreversible nature and specific permission requirements, adding value beyond annotations.
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?
Two concise sentences, no redundancy. Action is front-loaded, and essential information (irreversibility, permissions) is included without waste.
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 destructive operation with no output schema, the description covers purpose, irreversibility, and permissions adequately. Slight gap: no mention of idempotency (though annotation covers it).
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?
With 100% schema description coverage, the schema already fully documents the single parameter. The description does not add further semantic details, meeting the baseline of 3.
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 specifies the action (delete), resource (Instagram media), and enumerates types (posts, carousels, reels, stories). This distinguishes it from sibling tools like ig_delete_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?
The description states irreversibility and required permission (instagram_manage_contents, Facebook Login only). It does not explicitly contrast with alternatives, but the context is clear for a deletion tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_account_insightsARead-only
Get Instagram account insights. Use the optional metric_type to control whether results come back as a single total per metric or as a daily breakdown. Note: 'impressions', 'email_contacts', 'phone_call_clicks', 'text_message_clicks', 'get_directions_clicks', 'website_clicks', 'profile_views' were deprecated in v22.0. Use 'views', 'reach', 'follower_count', 'reposts' instead.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Start date (Unix timestamp or ISO 8601) | |
| until | No | End date (Unix timestamp or ISO 8601) | |
| metric | Yes | Comma-separated metrics. Time-series metrics (use period=day/week/days_28): views,reach,accounts_engaged,total_interactions,reposts,profile_links_taps. Lifetime-only metrics (use period=lifetime): follower_count,follower_demographics,engaged_audience_demographics. | |
| period | Yes | Aggregation period. Use 'day', 'week', or 'days_28' for time-series metrics (views,reach,accounts_engaged,total_interactions,reposts,profile_links_taps). Use 'lifetime' only for follower_count and demographic metrics (follower_demographics,engaged_audience_demographics). | |
| metric_type | No | Aggregation shape: 'total_value' for a single aggregated number per metric, 'time_series' for daily breakdowns. Per the Instagram User Insights docs, only 'reach' supports both; most metrics (views, likes, reposts, accounts_engaged, total_interactions, saves, shares, comments, replies, quotes, profile_links_taps, demographics) support only 'total_value'. Omit to use the API default for each metric. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations `readOnlyHint` and `openWorldHint` indicate read-only, non-exhaustive behavior. The description adds valuable context: deprecated metrics, metric_type limitations (most metrics only support total_value), and the ability to choose aggregation shape. No contradictions.
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 with a note, front-loaded with the core purpose. It is efficient but could be slightly more structured (e.g., bullet list for deprecated metrics). No 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?
Given 5 parameters, no output schema, and moderate complexity, the description covers metric options, period constraints, and aggregation shapes. It omits JSON return format but is otherwise sufficient for correct 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 coverage is 100% but the description adds critical information about deprecated metrics and the interplay between `period` and `metric`. It clarifies which metrics work with which periods and that `metric_type` has limited support.
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 retrieves Instagram account insights and specifies the effect of the optional `metric_type` parameter. It is distinct from sibling tools like `ig_get_media_insights` which focus on media-level data.
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 deprecation guidance and explains `metric_type` behavior but does not explicitly state when to use this tool versus alternatives or mention prerequisites. It assumes the tool is for account-level insights, which is clear from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_collaboration_invitesBRead-only
Get pending collaboration invites for the Instagram account. Added in December 2025.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results | |
| before | No | Pagination cursor for previous page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds little beyond annotations (readOnlyHint, openWorldHint). No mention of pagination behavior, rate limits, or authentication requirements.
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?
Concise two sentences. First sentence covers purpose. Second sentence is version metadata, which is not essential but not distracting.
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?
Missing output schema and does not explain what the response contains or how pagination cursors work. Incomplete for a tool with optional parameters and no output schema.
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?
All three parameters have descriptions in the input schema (100% coverage). Description does not add further meaning beyond 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?
Clearly states the action (Get) and resource (pending collaboration invites) with specific scope (for the Instagram account). Distinguishes from sibling tools like ig_respond_collaboration_invite.
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 or when to use alternatives. Lacks context for selection among many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_commentARead-only
Get details of a specific comment.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields (default: id,text,username,timestamp,like_count,hidden,from,parent_id,media) | id,text,username,timestamp,like_count,hidden,from,parent_id,media |
| comment_id | Yes | Comment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate safety. It adds no additional behavioral context (e.g., rate limits, auth needs) but does not contradict annotations.
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 of six words with no fluff. Every word is necessary and front-loaded.
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 with 2 parameters, but there is no output schema to explain return structure. The description does not mention what 'details' includes or error scenarios. With annotations covering safety, it is adequate but not comprehensive.
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 100%, and both parameters have clear descriptions. The description does not add any meaning beyond the schema, so baseline 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 'Get details of a specific comment' clearly states the action (get) and the resource (comment details). It differentiates from siblings like 'ig_get_comments' (list) and 'ig_get_mentioned_comment' by specifying 'specific 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?
The description does not explicitly state when to use this tool versus alternatives like 'ig_get_comments' or when not to use it. The context of 'specific comment' implies use for single comments, but no clear guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_commentsBRead-only
Get comments on a specific Instagram media post.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of comments to return | |
| before | No | Pagination cursor for previous page | |
| fields | No | Comma-separated fields (default: id,text,username,timestamp,like_count,hidden,from,replies{id,text,username,timestamp,like_count,hidden,from}) | id,text,username,timestamp,like_count,hidden,from,replies{id,text,username,timestamp,like_count,hidden,from} |
| media_id | Yes | Media ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true (safe read) and openWorldHint=true (varying response). The description adds no behavioral details like pagination, authentication needs, or whether it returns a list or single comment.
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?
One concise sentence (8 words), but lacks structure. It is efficient but could include more contextual information without being verbose.
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?
Missing explanation about return format (list), pagination support, or how it relates to sibling tools like ig_get_comment. Tool has 5 parameters and no output schema, so more detail 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 coverage is 100% with descriptions for all parameters. The description adds no additional meaning beyond the schema, so baseline 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 verb 'Get', the resource 'comments', and the scope 'on a specific Instagram media post'. It distinguishes from sibling tools like ig_get_comment (singular) and ig_get_replies.
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 vs alternatives such as ig_get_comment or ig_get_replies. No mention of prerequisites or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_container_statusARead-only
Check the processing status of a media container (useful for videos).
| Name | Required | Description | Default |
|---|---|---|---|
| container_id | Yes | Container ID to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds context about checking processing status for videos, which aligns with the annotation. It does not contradict annotations and provides some behavioral context beyond the annotation, but not extensive detail.
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, front-loaded sentence with no superfluous words. It conveys the core purpose efficiently.
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 low complexity (one parameter, no output schema), the description adequately states the purpose and context. However, it does not mention possible return values or status outcomes, which would be helpful for a status check 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 schema has 100% description coverage for the only parameter (container_id). The tool description does not add any extra meaning beyond 'Container ID to check' already in the schema. According to rules, high coverage baseline is 3.
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 'check' and the resource 'processing status of a media container', with a specific use case 'useful for videos'. This distinguishes it from sibling tools like ig_publish_video or ig_get_media, which have different purposes.
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 when to use it (after uploading a video container to check processing), but does not explicitly state when not to use it or provide alternatives. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_conversationsBRead-only
Get Instagram DM conversations list. Requires 'instagram_business_manage_messages' permission and the Instagram Messaging API.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of conversations | |
| before | No | Pagination cursor for previous page | |
| fields | No | Comma-separated fields (default: id,updated_time,participants,messages{id,message,from,created_time}) | id,updated_time,participants,messages{id,message,from,created_time} |
| folder | No | Folder to retrieve (default: inbox) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds the required permission and API dependency, which is useful context beyond annotations. However, it does not disclose pagination behavior, default limits, or data freshness, which are relevant for a listing 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?
Two concise sentences: the first states the purpose, the second gives requirements. No fluff, every sentence 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?
For a listing tool with 5 parameters and no output schema, the description omits important context like pagination, default limit, and output structure. The schema covers parameter descriptions, but the description could be more helpful by noting pagination cursors and default behavior.
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 baseline is 3. The description does not add any parameter-specific details beyond what the schema already provides.
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 'Get Instagram DM conversations list' with a specific verb and resource. It distinguishes itself from sibling tools like ig_get_messages by focusing on conversation lists rather than individual messages, but does not elaborate on the exact scope or filtering.
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 ig_get_messages (for messages within a conversation) or ig_get_media (unrelated). No when-not-to-use or exclusion criteria are given; usage context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_hashtagBRead-only
Get hashtag information by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| hashtag_id | Yes | Hashtag ID (from ig_search_hashtag) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds no behavioral context beyond the verb, such as what specific hashtag information is returned or any edge cases.
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, front-loaded with the key action and resource. No wasted 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 read tool with one parameter and annotations present, the description is adequate but could be improved by detailing the returned hashtag info (e.g., name, media count) since there is no output schema.
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 100% for the single parameter, with a pattern and description linking to ig_search_hashtag. The description does not add extra semantics beyond what the schema provides, so baseline 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 verb 'Get', the resource 'hashtag information', and the method 'by ID'. It distinguishes from sibling tools like ig_search_hashtag (search) and ig_get_hashtag_recent/ig_get_hashtag_top (specific lists).
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 explicit guidance on when to use this tool versus alternatives. The parameter description hints at using it after ig_search_hashtag, but the description itself lacks when/when-not or alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_hashtag_recentBRead-only
Get recent media tagged with a specific hashtag.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results | |
| before | No | Pagination cursor for previous page | |
| hashtag_id | Yes | Hashtag ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, so the description does not need to disclose these. The description adds no extra behavioral context beyond 'get recent media', which is consistent with the annotations. No contradictions.
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 extraneous information. It is appropriately front-loaded and efficient.
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 lacks details about the output (e.g., structure of returned media, pagination behavior) and does not mention that the tool returns a list. Despite the schema having pagination parameters, the description omits this 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 schema covers all parameters (100% coverage), so the description does not need to explain them. The description adds no additional meaning beyond the 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 tool retrieves recent media for a specific hashtag, providing a specific verb and resource. It implicitly distinguishes from sibling tools like ig_get_hashtag (which likely returns hashtag metadata) and ig_get_hashtag_top (top media), but lacks explicit 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?
No guidance is provided on when to use this tool versus alternatives such as ig_get_hashtag_top or ig_search_hashtag. The description only states the tool's function without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_hashtag_topARead-only
Get top (most popular) media tagged with a specific hashtag.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results | |
| before | No | Pagination cursor for previous page | |
| hashtag_id | Yes | Hashtag ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the description's addition of 'top (most popular)' provides some behavioral context about result ordering, but it does not specify the popularity metric (e.g., likes, comments). No contradictions with annotations.
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, front-loaded sentence with no extraneous words. It efficiently conveys the core action and resource.
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 output schema, the description does not explain return fields (e.g., media attributes), which could be important for downstream use. It adequately differentiates from siblings but lacks detail on result format.
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?
Input schema covers all four parameters with descriptions (100% coverage), so the description adds no extra meaning beyond what is already in the schema. Baseline 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 retrieves top (most popular) media for a specific hashtag, distinguishing it from siblings like ig_get_hashtag_recent and ig_get_hashtag by specifying 'top' vs 'recent' or general info.
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 such as ig_get_hashtag_recent or ig_search_hashtag. The description does not mention exclusions or prerequisites, leaving the agent to infer without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_mediaARead-only
Get details of a specific Instagram media post.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields (default: id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,like_count,comments_count) | id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,like_count,comments_count |
| media_id | Yes | Media ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, covering safety. The description adds no behavioral context beyond 'get details', but does not contradict annotations. The bar is lowered by annotations, but the description could still mention error handling or response structure.
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 one short sentence, front-loading the core purpose. No 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 simple read-only tool with annotations and a well-documented schema, the description is almost sufficient. It lacks mention of return behavior (e.g., full object or only requested fields) but the schema and sibling context partially compensate.
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?
Input schema has 100% coverage: media_id described as 'Media ID' and fields described with default and format. The description adds no additional meaning beyond what is in the 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 'Get' and the resource 'details of a specific Instagram media post'. It distinguishes from sibling tools like ig_get_media_list by specifying 'a specific' rather than a list.
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 ig_get_media_list or ig_get_media_insights. The agent receives no temporal, contextual, or exclusionary cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_media_insightsARead-only
Get insights/analytics for a specific media post. Default metrics 'views,reach' are safe for every media type. Metric availability differs by media type — request more selectively to avoid (#100) errors:
IMAGE / VIDEO / CAROUSEL: views, reach, saved, total_interactions, likes, comments (note: 'shares' may return (#100) on IMAGE — test before relying on it)
REEL: views, reach, saved, total_interactions, likes, comments, shares, reposts, reels_skip_rate
STORY: views, reach, total_interactions, navigation, replies, profile_activity, profile_visits, follows Note: 'impressions' and 'video_views' were deprecated in v22.0 — use 'views' instead. See https://developers.facebook.com/docs/instagram-platform/reference/instagram-media/insights/ for the authoritative per-type matrix.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | Comma-separated metrics. Default 'views,reach' is universally supported; override per media type per the tool description. | views,reach |
| media_id | Yes | Media ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses metric availability differences, potential (#100) errors, and deprecation of 'impressions' and 'video_views'. Annotations already indicate readOnlyHint=true and openWorldHint=true, which are consistent. No contradictions.
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?
Description is front-loaded with purpose, then organized with bullet points for metric availability by media type. Every sentence adds value, including the deprecation note and link to authoritative docs. No fluff.
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?
Although no output schema, the description explains exactly what metrics can be retrieved per media type. Provides a link for authoritative matrix. For a read-only analytics tool with clear metric lists, it is 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?
Input schema coverage is 100% with descriptions for both parameters. The description adds significant meaning beyond schema by detailing metric options per media type, which is not in the schema. Default metrics 'views,reach' are explained as universally safe.
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 it gets insights/analytics for a specific media post, distinguishing from siblings like ig_get_account_insights (account-level) and ig_get_media (basic info). The verb 'Get' and specific resource 'insights for a specific media post' provide clear 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?
Provides explicit guidance on default metrics vs selective metrics per media type to avoid (#100) errors. Lists metric availability for IMAGE, VIDEO, CAROUSEL, REEL, and STORY, with notes on deprecations. This helps the agent choose the correct metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_media_listBRead-only
Get list of media published on the Instagram account.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results (max 100, default 25) | |
| before | No | Pagination cursor for previous page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and open-world. The description adds no behavioral details beyond that, such as data freshness, pagination behavior, or types of media returned. It does not contradict annotations, but adds minimal 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 a single, clear sentence with no unnecessary words. It could be slightly more structured (e.g., including a note about pagination), but it is efficient and front-loaded.
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?
There is no output schema, and the description lacks details about the types of media returned (e.g., photos, videos, reels) or pagination specifics. However, schema covers parameters adequately. Overall, it is sufficient but not rich.
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?
All three parameters are documented in the input schema with clear descriptions (e.g., 'Pagination cursor for next page'). The tool description does not add any additional meaning or usage context for the parameters.
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 that the tool retrieves a list of media published on an Instagram account. However, it does not differentiate from sibling tools like ig_get_media (single media) or ig_get_tagged_media (tagged media), missing an opportunity to specify scope.
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 guidance on when to use this tool versus alternatives. With many sibling tools for media retrieval, a brief note on when to choose 'list' over 'get' or 'tagged_media' would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_mentioned_commentARead-only
Get details of a specific comment where the account was @mentioned. Requires the comment_id from a mention webhook notification. Returns a single comment with its associated media.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields (default: id,text,timestamp,username,media{id,media_url,media_type}) | id,text,timestamp,username,media{id,media_url,media_type} |
| comment_id | Yes | Comment ID from a mention webhook notification |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, openWorldHint=true) are consistent. Description adds return value detail (single comment with associated media). No contradictions. Lacks mention of error handling or rate limits.
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?
Two sentences: first states purpose and condition, second states return value. Front-loaded and efficient, no 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?
Simple tool with 2 params, no output schema. Description covers purpose, input requirement, and output. Could be more detailed on return structure, but sufficient for a retrieval 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?
Schema coverage is 100% (both parameters described). Description adds context: comment_id must come from a mention webhook notification. This adds meaning beyond 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?
Description clearly states verb 'Get', resource 'details of a specific comment where the account was @mentioned', and distinguishes from siblings like ig_get_comment by specifying the mention context.
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 precondition: comment_id from a mention webhook notification. Implicitly, for non-mentioned comments, use ig_get_comment. No explicit when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_messageARead-only
Get details of a specific DM message.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields (default: id,message,from,created_time,attachments) | id,message,from,created_time,attachments |
| message_id | Yes | Message ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description provides no additional behavioral context beyond stating the operation, such as permission requirements, error handling, or rate limits. It adds minimal value over annotations.
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 redundant information. Every word serves a purpose, and it is front-loaded with the key action.
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 read operation with annotations, the description is mostly adequate but lacks guidance on usage context vs siblings and does not describe the return format. Given no output schema, some hint about returned fields would improve completeness.
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?
Input schema has 100% description coverage. The description does not elaborate on the fields parameter or provide usage hints beyond what the schema already defines. No added 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 tool retrieves details of a specific DM message. The verb 'Get' and resource 'details of a specific DM message' are precise and distinguish from list-focused siblings like ig_get_messages or mutation tools like ig_send_message.
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 explicit guidance on when to use this tool over alternatives. While it's implied that this tool retrieves a single message, it doesn't state that condition or mention related tools like ig_get_messages for listing messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_messagesBRead-only
Get messages in a specific DM conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of messages | |
| before | No | Pagination cursor for previous page | |
| fields | No | Comma-separated fields (default: id,message,from,created_time,attachments) | id,message,from,created_time,attachments |
| conversation_id | Yes | Conversation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, indicating a safe read operation. The description adds no behavioral details beyond that, but does not contradict annotations.
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, front-loaded sentence that efficiently conveys the core purpose. It is not verbose, but could include slightly more detail without harming conciseness.
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?
With 5 parameters and no output schema, the description should explain pagination (after/before cursors, limit) and return format. It does not, leaving the agent underinformed for proper 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% – all 5 parameters have descriptions in the input schema. The tool description adds no extra parameter context, so baseline score of 3 applies.
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 messages') and the specific resource ('in a specific DM conversation'). This distinguishes it from siblings like ig_get_message (single message) and ig_get_conversations (list conversations).
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 vs alternatives. Given many sibling tools (ig_get_message, ig_get_conversations, ig_send_message), the description should mention when to pick this over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_profileARead-only
Get Instagram Business/Creator account profile information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds no further behavioral context (e.g., authentication requirements, data freshness, or the nature of 'open world' return fields). It does not contradict annotations.
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, direct sentence with no wasted words. It is front-loaded and immediately understandable.
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 read operation with no parameters and good annotations, the description is mostly complete. However, it does not mention expected return fields or output structure, which could help an agent anticipate results.
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 schema coverage is effectively 100%. The description does not add parameter-specific meaning, which is acceptable given no parameters exist. Baseline 4 per rubric.
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 'Get Instagram Business/Creator account profile information', specifying the resource and action. It separates from sibling tools like ig_get_media_list and ig_business_discovery, though it could explicitly note that it retrieves the authenticated user's own profile.
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 such as ig_business_discovery or ig_get_account_insights. No preconditions, exclusions, or recommended use cases are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_repliesBRead-only
Get replies to a specific comment.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of replies to return | |
| before | No | Pagination cursor for previous page | |
| fields | No | Comma-separated fields (default: id,text,username,timestamp,like_count,hidden,from) | id,text,username,timestamp,like_count,hidden,from |
| comment_id | Yes | Comment ID to get replies for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'Get replies' adds no additional behavioral context. The description does not mention pagination, rate limits, or that the tool returns a list of replies, beyond what is implied by the 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 a single concise sentence with no superfluous information. It is front-loaded with the core action and resource.
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?
With 5 parameters, no output schema, and openWorldHint, the description is too minimal. It does not specify that the tool returns a list of replies, nor does it explain the pagination behavior or any additional context needed for proper 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 coverage is 100%, with detailed descriptions for each parameter (e.g., 'after: Pagination cursor for next page'). The description adds no extra meaning beyond what the schema provides, meeting the baseline.
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 'Get replies to a specific comment,' specifying the verb ('Get') and resource ('replies'). The tool name 'ig_get_replies' and description distinguish it from siblings like 'ig_get_comments' (top-level comments) and 'ig_reply_to_comment' (posting replies).
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 such as 'ig_get_comments' or 'ig_get_comment'. There is no mention of context, prerequisites, or situational appropriateness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_get_tagged_mediaARead-only
Get media where the account is tagged (photo tags, not @mentions).
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor for next page | |
| limit | No | Number of results | |
| before | No | Pagination cursor for previous page | |
| fields | No | Comma-separated fields (default: id,caption,media_type,media_url,permalink,timestamp,username) | id,caption,media_type,media_url,permalink,timestamp,username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds clarity that it retrieves photo tags specifically, not @mentions. This additional context is useful beyond annotations.
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?
A single, precise sentence that is front-loaded and contains no extraneous information. 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?
For a simple list tool with no output schema, the description is sufficient. It clarifies the specific type of tagged media, which is helpful given the number of sibling tools.
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 100%, so baseline is 3. The description does not add any extra meaning to the parameters beyond what is in the 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 'Get media' and the resource 'tagged media', and distinguishes from @mentions, which differentiates it from siblings like ig_get_mentioned_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?
The description notes that this retrieves photo tags, not @mentions, giving some exclusion guidance. However, it does not explicitly state when to use this tool over alternatives, such as ig_get_media_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_hide_commentAIdempotent
Hide or unhide a comment on your post.
| Name | Required | Description | Default |
|---|---|---|---|
| hide | Yes | true to hide, false to unhide | |
| comment_id | Yes | Comment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description is consistent with annotations (non-destructive, idempotent) but adds no extra behavioral context beyond what annotations provide.
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 concise sentence with no redundancy. Efficiently conveys the tool's 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?
For a simple toggle action, the description is appropriate. Could mention that hiding is reversible, but the schema already captures the boolean parameter.
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 100% with clear descriptions for both parameters. Description adds no additional semantic value beyond the 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?
Clearly states the action (hide/unhide) and resource (a comment on your post). Distinguishes from siblings like ig_delete_comment and ig_toggle_comments.
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 vs alternatives. Does not differentiate hiding from deleting or other comment actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_post_commentB
Post a top-level comment on a media post.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Comment text (max 2200 chars per Meta's Instagram caption/comment limit) | |
| media_id | Yes | Media ID to comment on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) but no destructive or idempotent effects. The description adds minimal behavioral context beyond the schema, such as that it creates a new comment. Given annotation coverage, this is adequate but lacks details like rate limits or visibility.
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 redundancy. It could benefit from slightly more structure, but it is appropriately concise.
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 write tool with two parameters and no output schema, the description covers the basic purpose. However, it omits details like error conditions, idempotency, or the response format, leaving room for improvement.
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 100% and both parameters have decent descriptions in the schema (max chars for message, pattern for media_id). The description adds no extra parameter meaning beyond what the schema already provides.
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 ('Post') and the specific resource ('a top-level comment on a media post'), distinguishing it from sibling tools like ig_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 is provided on when to use this tool versus alternatives. The description does not mention that replies should use a different tool or any other usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_publish_carouselA
Publish a carousel (album) post with 2-10 images/videos. Each item needs a url (JPEG image or MP4 video) and a type (IMAGE or VIDEO).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of media items | |
| caption | No | Post caption (max 2200 chars) | |
| location_id | No | Facebook Page location ID | |
| collaborators | No | Optional. Up to 3 unique Instagram usernames to invite as collaborators. Per Instagram Graph API: supported for Feed image, Reels, and Carousels — not supported for Stories. Leading '@' characters and surrounding whitespace are auto-stripped before the uniqueness check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false. The description adds no behavioral traits beyond publishing, which is consistent. No contradictions, but limited additional context.
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?
Two sentences, front-loaded with purpose, no wasted words. 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?
Sufficient for a simple tool with full schema coverage and annotations. Does not explain optional parameters like caption or collaborators, but these are described in the schema. No output schema 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 coverage is 100%, so baseline is 3. The description briefly summarizes item requirements (url and type), but adds little meaning beyond what the schema already provides.
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 'publish' and the resource 'carousel (album) post' with constraints (2-10 images/videos). It distinguishes from sibling tools like ig_publish_photo, ig_publish_reel, etc.
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 explicit guidance on when to use this tool versus alternatives. The description implies usage for carousel posts but does not provide when-not-to-use or refer to other publish tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_publish_photoA
Publish a photo to Instagram. Two-step process: creates container then publishes. Requires image_url (publicly accessible HTTPS URL).
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Post caption (max 2200 chars) | |
| alt_text | No | Alt text for accessibility (max 1000 chars per Meta's Instagram media spec) | |
| image_url | Yes | Public HTTPS URL of the image (JPEG only) | |
| user_tags | No | JSON array of user tags: [{username, x, y}] | |
| location_id | No | Facebook Page location ID | |
| collaborators | No | Optional. Up to 3 unique Instagram usernames to invite as collaborators. Per Instagram Graph API: supported for Feed image, Reels, and Carousels — not supported for Stories. Leading '@' characters and surrounding whitespace are auto-stripped before the uniqueness check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the two-step behavioral process beyond the annotations (readOnlyHint=false, destructiveHint=false). It notes that the tool requires a publicly accessible HTTPS URL, adding context about preconditions. No contradictions with annotations. The description adds value, though it could mention error handling or side effects.
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: one for purpose and process, one for a key requirement. It is concise and front-loaded with critical information. However, it could be slightly more structured (e.g., bullet points) for clarity, but overall it is efficient.
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 6 parameters and no output schema, the description covers the process and a key requirement but does not explain return values (e.g., container ID or media ID). It partially compensates for the missing output schema by describing the two-step flow, but completeness is only moderate.
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 parameters. The description repeats the image_url requirement but adds no new meaning for other parameters (e.g., user_tags, location_id). Baseline score of 3 is appropriate because the description does not compensate for the 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 'Publish a photo to Instagram' with a specific verb ('publish') and resource ('photo'). The name 'ig_publish_photo' distinguishes it from sibling publish tools for carousels, reels, stories, and videos, though explicit differentiation is not provided. The purpose is 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?
The description mentions a two-step process (creates container then publishes) and a requirement for a publicly accessible HTTPS URL. However, it does not specify when to use this tool versus siblings like ig_publish_carousel or ig_publish_video, nor does it provide exclusions or alternatives. Usage guidance is implied but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_publish_reelB
Publish a Reel (short video). Waits for video processing.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Reel caption (max 2200 chars) | |
| cover_url | No | Custom cover image HTTPS URL | |
| video_url | Yes | Public HTTPS URL of the video | |
| thumb_offset | No | Thumbnail offset in ms | |
| collaborators | No | Optional. Up to 3 unique Instagram usernames to invite as collaborators. Per Instagram Graph API: supported for Feed image, Reels, and Carousels — not supported for Stories. Leading '@' characters and surrounding whitespace are auto-stripped before the uniqueness check. | |
| share_to_feed | No | Also share to feed (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that it 'waits for video processing', a useful behavioral detail beyond annotations. However, it does not disclose post-processing effects like feed sharing default (share_to_feed defaults true), rate limits, or auth requirements. Annotations indicate a write operation but no destructive hint.
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 very concise (two sentences, 10 words) and front-loaded with the main action. It could be slightly improved by clarifying the output or context, but it is not verbose.
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 output schema is provided, and the description does not mention what the tool returns (e.g., container ID, status). Given the complexity of publishing a reel, more information about the result or processing time would be helpful.
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 100%, so the input schema already describes all parameters. The description adds no additional meaning to any parameter, so it meets the baseline but does not exceed it.
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 publishes a Reel (short video) and mentions waiting for processing. It distinguishes from siblings like ig_publish_video by specifying 'short video', but could be more explicit about its unique role.
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 vs alternatives such as ig_publish_video or ig_publish_story. No mention of prerequisites or best practices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_publish_storyA
Publish a Story (image or video). Stories disappear after 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| media_url | Yes | Public HTTPS URL of the media | |
| media_type | Yes | Story media type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read/write nature. The description adds the key behavioral trait that stories disappear after 24 hours, which is valuable beyond the annotations.
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 extremely concise: two sentences with no wasted words. Every sentence adds essential information (purpose and ephemerality).
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 simple two-parameter tool and no output schema, the description covers purpose and a key behavior but lacks information about return values, error conditions, or media requirements like size limits. It is minimally adequate.
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. The description adds no extra meaning beyond what is in the schema, such as format restrictions or defaults.
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 it publishes a Story (image or video) and mentions the 24-hour disappearance, distinguishing it from sibling tools like ig_publish_photo (permanent feed post) and ig_publish_reel (not necessarily ephemeral).
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 (e.g., ig_publish_photo, ig_publish_reel), nor does it mention prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_publish_videoA
[DEPRECATED] Use ig_publish_reel instead. Publishes via media_type=REELS under the hood; the legacy VIDEO media_type was deprecated by Meta on Nov 9, 2023. Kept for backward compatibility — new integrations should use ig_publish_reel which exposes Reels-specific options (cover_url, share_to_feed).
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | Post caption (max 2200 chars) | |
| video_url | Yes | Public HTTPS URL of the video | |
| location_id | No | Facebook Page location ID | |
| thumb_offset | No | Thumbnail offset in ms | |
| collaborators | No | Optional. Up to 3 unique Instagram usernames to invite as collaborators. Per Instagram Graph API: supported for Feed image, Reels, and Carousels — not supported for Stories. Leading '@' characters and surrounding whitespace are auto-stripped before the uniqueness check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint false). Description adds deprecation context and that it uses media_type=REELS under the hood. No contradiction.
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?
Front-loaded with [DEPRECATED], then concisely explains reason and alternative. Two sentences; no waste.
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?
Schema covers all parameters, annotations present. No output schema but acceptable for deprecated tool. Could mention return value but not critical.
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 100%, so baseline of 3 applies. Description adds no additional parameter details beyond 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?
Clearly states deprecation, specifies alternative tool, and explains what the tool does (publishes video via REELS). Distinct from sibling ig_publish_reel.
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?
Explicitly tells when not to use (new integrations) and recommends ig_publish_reel instead. Also mentions backward compatibility for existing users.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_reply_to_commentC
Reply to a specific comment.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Reply text (max 2200 chars per Meta's Instagram caption/comment limit) | |
| comment_id | Yes | Comment ID to reply to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only and not destructive, but the description adds no extra behavioral context (e.g., side effects, permission requirements, or rate limits). It merely restates the action.
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?
Extremely concise with a single sentence. No wasted words, but could benefit from slightly more detail without losing brevity.
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 output schema and many sibling tools, the description is too minimal. It fails to explain reply behavior, constraints (e.g., threading), or how it differs from similar tools, making it incomplete for effective selection.
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 100% with descriptions for both parameters. The description adds no additional meaning beyond what the schema already provides, achieving baseline expectation.
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 'reply' and the resource 'comment', indicating a specific action. It is distinct from siblings like 'ig_post_comment' (presumably top-level) and 'ig_get_comment', but lacks explicit 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?
No guidance on when to use this tool versus alternatives such as 'ig_post_comment' for top-level comments or other comment-related tools. The description does not mention prerequisites, when-not to use, or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_respond_collaboration_inviteAIdempotent
Accept or decline a collaboration invite by media_id (the IG Media ID of the tagged post; available via the id field returned by ig_get_collaboration_invites). Pass accept: true to accept, accept: false to decline. Per the Instagram Collaboration API. Added in December 2025.
| Name | Required | Description | Default |
|---|---|---|---|
| accept | Yes | true to accept the invite, false to decline | |
| media_id | Yes | IG Media ID of the tagged post (from `ig_get_collaboration_invites` response `id` field) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that the tool is mutating (readOnlyHint=false), idempotent (idempotentHint=true), and not destructive. The description adds no further behavioral context such as side effects, permissions, or rate limits. It is consistent but does not go beyond the annotations.
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 sentences long, with the key purpose and parameter usage in the first sentence, followed by a clarifying second sentence, and a final context sentence. Every sentence adds value, no 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?
Given the low complexity (2 required parameters, no output schema), the description covers the essential functional aspects. It could be more complete by mentioning the expected outcome or error states, but it is sufficient for an agent to invoke 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?
Schema coverage is 100% for both parameters, so the description adds limited new meaning. It does restate the source of media_id (from ig_get_collaboration_invites) and the boolean nature of accept, which is marginally helpful but does not significantly augment the 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 'Accept or decline a collaboration invite by media_id', specifying both the action and the resource. It distinguishes from sibling tool ig_get_collaboration_invites by focusing on responding rather than listing. The verb is specific and the scope is well-defined.
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 explicitly tells the agent to obtain the media_id from ig_get_collaboration_invites, providing a clear prerequisite. It does not, however, elaborate on when to accept vs decline or explicitly state alternatives, but the sibling list makes it obvious this is the only tool for this action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_search_hashtagARead-only
Search for a hashtag ID by name. Required before querying hashtag media. Limited to 30 unique hashtags per 7-day rolling window — meta-mcp caches results in-process to maximize quota utilization on repeated lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Hashtag name to search (without #) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds the quota limit and caching behavior, which are important operational details. No contradictions with annotations.
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?
Two sentences with no wasted words: purpose first, then quota and caching info. Efficiently structured.
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 parameter lookup tool with full schema coverage, the description covers purpose, prerequisite, quota, caching, and implicit return value. No 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 schema already describes the 'q' parameter, but the description adds that the tool returns a hashtag ID (output context), which is not present in the schema or output 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 'Search for a hashtag ID by name' and explains it is a prerequisite for querying hashtag media, distinguishing it from sibling tools that operate on hashtag IDs.
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 specifies 'Required before querying hashtag media' and mentions a quota limit (30 per 7 days), giving clear usage context. However, it does not explicitly list when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_send_messageA
Send a DM to a user. Requires 'instagram_business_manage_messages' permission. The recipient must have messaged the account first. Messaging window depends on messaging_type: RESPONSE/UPDATE allow replies within 24 hours of the user's last message; MESSAGE_TAG with tag=HUMAN_AGENT extends the window to 7 days (human-sent support replies only — the HUMAN_AGENT feature requires App Review and forbids automated use, per https://developers.facebook.com/docs/features-reference/human-agent). Other tag values are Messenger-oriented; HUMAN_AGENT is the documented reliable choice on Instagram.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Message tag, required when messaging_type=MESSAGE_TAG and forbidden otherwise. HUMAN_AGENT extends the window to 7 days for human-sent support replies and is the only tag with documented Instagram support; the remaining values are Messenger-oriented and may be silently rejected on Instagram. | |
| message | Yes | Message text to send (max 1000 UTF-8 bytes per Meta's Instagram Messaging API) | |
| recipient_id | Yes | Instagram-scoped user ID of the recipient | |
| messaging_type | No | Send API messaging classification. RESPONSE = reply within the 24-hour window (default). UPDATE = proactive update within the 24-hour window. MESSAGE_TAG = send outside the 24-hour window using one of the tag values below (Instagram reliably supports HUMAN_AGENT for the 7-day window). See https://developers.facebook.com/docs/messenger-platform/reference/send-api/. | RESPONSE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a mutating but non-destructive operation. Description adds critical behavioral details: permission requirement, recipient constraint, messaging windows, tag restrictions, and references documentation. Missing rate limits or idempotency info.
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 coherent paragraph, each sentence adds value. Slightly verbose but not overly so; could be split for readability but effective.
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 complexity (4 params, enums, no output schema), description covers permissions, recipient constraints, messaging windows, and tag guidance. Lacks output description but likely 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?
Schema covers all 4 parameters with descriptions. Description adds value beyond schema by explaining the business logic of messaging windows, tag reliability, and tag restrictions, enhancing agent understanding.
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?
Description clearly states 'Send a DM to a user.' It uses a specific verb-resource pair and distinguishes from sibling tools (no other send-message tool exists).
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?
Explains when to use (requires permission, recipient must have messaged first) and provides guidance on messaging_type options and tag constraints. Lacks explicit 'when not to use' but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ig_toggle_commentsBIdempotent
Enable or disable comments on an Instagram media post.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true to enable comments, false to disable | |
| media_id | Yes | Media ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (modification) and destructiveHint=false, and idempotentHint=true. The description adds no behavioral context beyond stating the action, such as what happens to existing comments when disabled (e.g., hidden vs deleted), required permissions, or rate limits. The description does not contradict annotations.
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 immediately conveys the tool's purpose. No unnecessary words or redundant 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?
For a simple toggle tool with two parameters and no output schema, the description is adequate but incomplete. It lacks information about the effect on existing comments (e.g., are they hidden or removed when disabled?) and required account permissions. The completeness is acceptable but has notable 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?
Schema coverage is 100% with descriptions for both parameters (media_id and enabled). The tool description does not add further meaning beyond what the schema provides. Baseline score 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 enables or disables comments on an Instagram media post. It uses a specific verb ('toggle') and resource ('comments on a media post'), distinguishing it from sibling tools like ig_hide_comment (which hides a single comment) or ig_delete_comment (which deletes a 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?
The description provides no guidance on when to use this tool versus alternatives such as ig_hide_comment or ig_delete_comment. It does not mention prerequisites, such as needing to be the media owner, nor does it exclude contexts where comments cannot be toggled (e.g., archived posts).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_debug_tokenARead-only
Debug/inspect an access token to check validity, expiration, scopes and associated user.
| Name | Required | Description | Default |
|---|---|---|---|
| input_token | Yes | Access token to inspect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, indicating safe, non-destructive behavior. The description adds value by detailing what information is returned (validity, expiration, scopes, user), providing context beyond the annotations.
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 that efficiently conveys the tool's purpose and capabilities. Every word contributes value, with no redundancy or irrelevant 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 simple inspection tool without an output schema, the description sufficiently explains what the tool does and what it checks. It could be improved by noting the output format or error behavior, but it is adequate.
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 100% with one parameter 'input_token' described as 'Access token to inspect'. The description does not add additional meaning beyond the schema, so baseline 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 debugs/inspects an access token, listing specific checks: validity, expiration, scopes, and associated user. This is specific and distinct from sibling tools like meta_exchange_token and meta_refresh_token.
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. It does not mention scenarios or conditions that warrant using this debug tool over others, leaving the agent without explicit usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_exchange_tokenA
Exchange a short-lived token for a long-lived token (valid ~60 days). Uses platform-specific endpoints: Instagram (graph.instagram.com) or Threads (graph.threads.net). Requires META_APP_SECRET. On success the new token is also applied in-memory to the running server, so subsequent tool calls use it immediately — no restart required (#65).
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Target platform: 'instagram' or 'threads' | |
| short_lived_token | Yes | Short-lived access token to exchange |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral detail: on success, the token is applied in-memory immediately without restart. No contradiction with annotations; adds context beyond them.
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?
Concise and front-loaded, with every sentence adding value. No fluff.
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?
Lacks explanation of the return value (e.g., the new token). However, the tool is simple and the core purpose is clear. Incomplete for an agent to fully understand expected output.
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 already covers both parameters with descriptions (100% coverage). The description adds context about platform endpoints but not significant additional meaning for the parameters themselves.
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?
Clearly states the tool exchanges a short-lived token for a long-lived token with a specific validity (~60 days). Mentions platform-specific endpoints, distinguishing it from siblings like meta_refresh_token and meta_debug_token.
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?
Specifies the requirement of META_APP_SECRET and mentions platform-specific endpoints (Instagram vs Threads). Lacks explicit differentiation from meta_refresh_token but contextually implies its use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_app_infoARead-only
Get Meta App basic information (name, category, namespace, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, so the tool is known to be safe. The description adds specific return fields (name, category, namespace) beyond 'info', but no additional behavioral traits are disclosed.
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 that immediately conveys the purpose. No wasted 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?
Given no parameters and no output schema, the description adequately explains what the tool returns. It could mention that it returns info for the current app, but it is sufficiently complete for a simple lookup.
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 does not need to compensate. Schema coverage is 100% (vacuous), and the description adds no param info, which is acceptable.
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 'Meta App basic information', listing specific fields. It distinguishes from sibling tools which are platform-specific (Instagram, Threads) or for other operations (token, webhook).
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 explicit when-to-use or when-not-to-use guidance is provided. However, as a generic read operation, usage is implied. It does not mention alternatives or context for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_get_webhook_subscriptionsARead-only
List current webhook subscriptions for the Meta App.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, covering safety and response flexibility. The description adds no further behavioral details, which is acceptable but does not enhance transparency beyond annotations.
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 with no redundancy, effectively conveying the tool's purpose concisely.
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 simplicity of the tool (no params, no output schema), the one-line description is minimally adequate. It does not describe the return format or subscription types, which could be helpful, but the tool's scope is limited.
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?
There are no parameters, and the schema coverage is 100% trivially. With zero parameters, the baseline is 4, and the description is not required to add parameter-level detail.
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 'List' and the resource 'current webhook subscriptions' for the 'Meta App', which is specific and distinguishes from sibling tools like meta_subscribe_webhook.
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 for listing subscriptions but does not explicitly state when to use this tool versus alternatives or any exclusions. The context from sibling tools helps, but no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_refresh_tokenA
Refresh a long-lived token before it expires (must be at least 24h old). Uses platform-specific endpoints: Instagram (graph.instagram.com) or Threads (graph.threads.net). Returns a new long-lived token valid for 60 days. On success the new token is also applied in-memory to the running server, so subsequent tool calls use it immediately — no restart required (#65).
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Target platform: 'instagram' or 'threads' | |
| long_lived_token | Yes | Current long-lived access token to refresh |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: token must be at least 24h old, uses platform-specific endpoints, returns a 60-day valid token, and applies the new token in-memory without restart. This is comprehensive for a mutation tool (readOnlyHint=false) and adds significant value over the annotations alone.
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 four sentences, front-loaded with purpose and key constraints. Every sentence adds necessary information (endpoint details, return value, side effect). No fluff or redundancy. Ideal conciseness for its informational load.
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 (two parameters, platform enum, token refresh), the description covers purpose, usage condition, endpoint mapping, return value, and important side effect (in-memory update). No output schema, but the description adequately explains the output (new token). Complete for effective 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 coverage is 100%, so baseline is 3. The description adds meaning by connecting platform to specific endpoints and noting the token's return validity (60 days). This provides context not in the schema, justifying a 4. However, no additional detail on token format or error handling is provided.
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 refreshes a long-lived token, specifying the verb 'refresh' and resource 'long-lived token'. It adds constraints (must be at least 24h old, platform-specific endpoints) and implies the context of token management. While not explicitly differentiating from siblings like meta_exchange_token, the purpose is precise and actionable.
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 specifies when to use the tool: before token expiry and only if the token is at least 24 hours old. It mentions platform-specific endpoints but does not explicitly state when not to use or provide alternatives (e.g., meta_exchange_token for initial token exchange). The guidance is clear but lacks exclusionary context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_subscribe_webhookAIdempotent
Subscribe to webhook notifications for an object (e.g., 'instagram', 'page'). Requires META_APP_ID and META_APP_SECRET.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Comma-separated list of fields to subscribe (e.g., 'messages,feed') | |
| object | Yes | Object type to subscribe to | |
| callback_url | Yes | HTTPS webhook endpoint URL | |
| verify_token | Yes | Verification token for the webhook |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false, which align with a subscription creation that is safe to repeat. The description adds the credential requirement but does not elaborate on side effects, success/failure conditions, or any rate limiting. With annotations present, the bar is lower, and the description provides minimal additional context.
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 of 14 words, front-loading the core action and including the crucial credential requirement. No extraneous 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 4 required parameters, full schema coverage, and no output schema, the description is minimal. It states the purpose and credentials but omits details on error responses, verification process, or any constraints beyond credentials. However, the annotations (idempotentHint, openWorldHint) reduce the need for extensive behavioral description, making it moderately 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 coverage is 100%, so the baseline is 3. The description does not add any extra meaning to parameters beyond their names and schema descriptions; for example, it does not explain the format of 'fields' or 'callback_url' constraints. The value added is neutral.
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 'Subscribe' and identifies the resource as 'webhook notifications for an object' with examples ('instagram', 'page'). It clearly distinguishes from sibling tools which are mostly about data retrieval or publishing operations, not webhook management.
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 mentions the prerequisite 'Requires META_APP_ID and META_APP_SECRET', but does not explicitly state when to use this tool versus alternatives such as meta_get_webhook_subscriptions (for listing existing subscriptions). The guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_delete_postADestructiveIdempotent
Delete a Threads post. This action is irreversible. Rate limited to 100 deletions per 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Threads post ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and readOnlyHint=false, and the description adds concrete details: irreversibility and specific rate limits. This adds value beyond annotations without contradiction.
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?
Two sentences with no wasted words: first states the purpose, second adds critical constraints. Perfectly front-loaded and concise.
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 output schema exists, and the description does not mention the return behavior (e.g., success indication). While the operation is simple, the agent might need to know what to expect after deletion.
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 single parameter post_id is fully described in the input schema with a pattern and description. The description adds no additional semantics; baseline for 100% coverage is 3.
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 'Delete a Threads post,' specifying the action and resource. While it doesn't explicitly differentiate from sibling delete tools like ig_delete_comment, the tool name and context make the distinction 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 warns of irreversibility and a rate limit of 100 deletions per 24 hours, providing important usage constraints. It does not explicitly state when not to use alternatives, but for a delete operation, this is sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_container_statusARead-only
Check the processing status of a Threads media container. Only works with unpublished container IDs (returned from container creation endpoints) — not with published post IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| container_id | Yes | Unpublished container ID to check (from container creation, not a published post ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world hints. The description adds critical behavioral detail that it only works with unpublished container IDs, going beyond annotations.
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?
Two concise sentences with no wasted words, front-loading the purpose and key constraint.
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 tool with one parameter and no output schema, the description fully explains purpose and usage constraint, making it complete for agent decision-making.
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 100% with a clear parameter description. The tool description largely reiterates the same constraint, adding minimal additional meaning.
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 checks the processing status of a Threads media container and distinguishes it by specifying it only works with unpublished container IDs, not published post IDs.
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 explicitly says to use with unpublished container IDs and not with published post IDs, providing clear context. However, it does not name alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_mentionsARead-only
List Threads posts where the authenticated user has been @mentioned. Requires the threads_manage_mentions permission. Posts from private profiles are excluded by the API. Without advanced access approval, only mentions from designated app testers are returned.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor | |
| limit | No | Number of results | |
| since | No | Start Unix timestamp (must be >= 1688540400) | |
| until | No | End Unix timestamp (must be <= now) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: permission requirement, privacy filtering, and tester restrictions. Annotations only indicate readOnly and openWorld, so description fills crucial gaps. No contradiction.
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?
Three concise sentences, each providing unique value: purpose, permission, and limitations. No wasted words. Front-loaded with the core action.
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?
Lacks output description for the list of mentions (no output schema). While constraints are well-covered, the actual response structure is not described, leaving a gap for the agent to understand what fields are returned.
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 100% with parameter descriptions in the schema. Description adds no parameter-specific details, so baseline 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?
Clear verb 'List' and specific resource 'Threads posts where the authenticated user has been @mentioned'. Distinguishes well from sibling tools like threads_get_posts (all posts) and threads_get_replies (replies). Includes permissions and data limitations.
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?
Explicitly states required permission (threads_manage_mentions) and behavioral conditions (private posts excluded, advanced access limitations). However, does not directly compare to alternative tools for when to use this instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_postBRead-only
Get details of a specific Threads post.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated fields (default: id,media_product_type,media_type,media_url,permalink,text,timestamp,shortcode,is_quote_post,has_replies,reply_audience,topic_tag,link_attachment_url,poll_attachment{option_a,option_b,option_c,option_d,option_a_votes_percentage,option_b_votes_percentage,option_c_votes_percentage,option_d_votes_percentage,total_votes,expiration_timestamp},gif_url,alt_text) | id,media_product_type,media_type,media_url,permalink,text,timestamp,shortcode,is_quote_post,has_replies,reply_audience,topic_tag,link_attachment_url,poll_attachment{option_a,option_b,option_c,option_d,option_a_votes_percentage,option_b_votes_percentage,option_c_votes_percentage,option_d_votes_percentage,total_votes,expiration_timestamp},gif_url,alt_text |
| post_id | Yes | Threads post ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, so the read-only nature is clear. The description ('Get details') adds no additional behavioral context beyond what annotations provide, such as rate limits or response characteristics.
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 is front-loaded with the verb and resource, making it easy to parse.
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 read-only tool with clear annotations and a simple parameter set, the description is mostly complete. However, it could mention that the 'fields' parameter allows customizing the returned data, which adds context not covered by annotations or schema alone.
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%, meaning both parameters (post_id and fields) are already described in the schema. The tool description does not add any extra meaning or context for the parameters, so it meets the baseline but does not exceed it.
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 details of a specific Threads post' clearly states the action (get details) and the resource (a specific Threads post), distinguishing it from sibling tools like threads_get_posts (list multiple posts) and threads_get_post_insights (insights for a post).
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. For example, it does not mention that it is for retrieving a single post by ID, while threads_get_posts is for listing multiple posts. There are no when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_post_insightsARead-only
Get insights/analytics for a specific Threads post (views, likes, replies, reposts, quotes, shares).
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | Comma-separated metrics (default: views,likes,replies,reposts,quotes,shares) | views,likes,replies,reposts,quotes,shares |
| post_id | Yes | Threads post ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe read operation. The description adds the list of available metrics, but does not disclose rate limits, authentication needs, error behavior for invalid post IDs, or response structure. With annotations present, the description provides moderate additional context.
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 that concisely conveys the tool's purpose and the metrics available. It is front-loaded and contains no unnecessary words. Every element 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 has no output schema, the description does not explain the return format or structure. For a data retrieval tool with two parameters, it adequately lists the metrics but lacks details on pagination, limits, or response fields. Some additional context would improve completeness.
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 100% and both parameters (post_id, metric) are well-described in the schema. The description merely repeats the metrics listed in parentheses, adding no new meaning beyond the schema. Baseline 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 retrieves insights/analytics for a specific Threads post, listing the metrics (views, likes, replies, reposts, quotes, shares). It uses a specific verb (Get) and resource (post insights), distinguishing it from sibling tools like threads_get_post (content) or threads_get_user_insights (user-level).
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 explicit guidance on when to use this tool versus alternatives. It does not mention when to choose this over similar tools like ig_get_media_insights or threads_get_user_insights, nor does it state prerequisites or context for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_postsARead-only
Get a list of Threads posts published by the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor | |
| limit | No | Number of results (default 25) | |
| since | No | Start date (ISO 8601 or Unix timestamp) | |
| until | No | End date (ISO 8601 or Unix timestamp) | |
| before | No | Pagination cursor | |
| fields | No | Comma-separated fields (default: id,media_product_type,media_type,media_url,permalink,text,timestamp,shortcode,is_quote_post,has_replies,reply_audience,topic_tag,link_attachment_url,poll_attachment{option_a,option_b,option_c,option_d,option_a_votes_percentage,option_b_votes_percentage,option_c_votes_percentage,option_d_votes_percentage,total_votes,expiration_timestamp},gif_url,alt_text) | id,media_product_type,media_type,media_url,permalink,text,timestamp,shortcode,is_quote_post,has_replies,reply_audience,topic_tag,link_attachment_url,poll_attachment{option_a,option_b,option_c,option_d,option_a_votes_percentage,option_b_votes_percentage,option_c_votes_percentage,option_d_votes_percentage,total_votes,expiration_timestamp},gif_url,alt_text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe read operation with potential pagination. The description adds 'list' but no additional behavioral details such as pagination behavior or rate limits. With annotations, the description's contribution is adequate.
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 that is front-loaded and contains no redundant information. Every word contributes to understanding the tool's 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?
For a simple list tool with complete schema annotations and full parameter coverage, the description is sufficient. No output schema is needed as the fields parameter defines return values. The tool's complexity is low, and the description covers the essential 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?
Schema description coverage is 100%, so baseline is 3. Description does not add meaning beyond what the schema provides for parameters like 'after', 'limit', 'since', etc. It is adequate but not compensatory.
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?
Description clearly states 'Get a list of Threads posts published by the authenticated user', which specifies the verb 'Get', the resource 'Threads posts', and the scope 'published by the authenticated user'. It distinguishes from sibling tools like threads_get_post (singular) and threads_get_profile.
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 explicit when-to-use or when-not-to-use guidance is provided. The description implies usage for the authenticated user's posts, but does not mention alternatives like threads_search_posts for other users' posts. The context is clear but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_profileARead-only
Get Threads user profile information including verification status and geo-gating eligibility (is_eligible_for_geo_gating).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true and openWorldHint=true, so the safe nature is clear. The description adds specific output fields but doesn't discuss rate limits or other behaviors. No contradictions.
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?
One efficient sentence conveying purpose and key output fields with no 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 zero-parameter tool, the description provides sufficient information. However, it does not explicitly state that the profile returned is for the authenticated user, and there is no output schema to clarify other fields.
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?
No parameters exist, and schema coverage is 100%. The description adds meaning by listing specific returned fields beyond the 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 it gets Threads user profile information and specifies two data points (verification status and geo-gating eligibility). It distinguishes from sibling tools like ig_get_profile by specifying 'Threads'.
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 vs. alternatives. For example, it doesn't clarify if this returns the authenticated user's profile or if it requires specific permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_publishing_limitARead-only
Check how many posts you can still publish within the current 24-hour window (max 250 posts/day).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world. Description adds useful context about the limit (max 250/day) and what is returned (remaining posts). No contradictions.
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, well-structured sentence. Front-loaded with key action and resource, no extraneous 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 read-only tool with no parameters and no output schema, the description fully explains purpose and return value (remaining posts count). No 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?
Zero parameters with 100% schema coverage. Baseline 4 applies; description adds no param info, but none needed.
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?
Description uses specific verb 'Check' and resource 'how many posts you can still publish' with clear context 'within the current 24-hour window'. Distinguishes from sibling tools focused on publishing or retrieving 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?
Implicitly clear when to use (before posting), but no explicit when-not-to-use or alternative tools mentioned. Given uniqueness, it's adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_repliesARead-only
Get replies for a specific Threads post. By default returns only top-level replies (mode='top_level', endpoint /{post}/replies). Set mode='full_tree' to get the entire conversation flattened — every reply at every nesting level (endpoint /{post}/conversation). Both modes share the same response shape; full_tree additionally populates root_post, replied_to, is_reply so the caller can reconstruct the tree. The default fields differ by mode: top_level requests is_verified and profile_picture_url (always populated for direct replies); full_tree drops them since they are 'Only available on direct replies' per the Threads Replies/Conversations docs and would be undefined for every nested entry. Pass an explicit fields override to re-request them in full_tree if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 'top_level' (default) returns only direct replies; 'full_tree' returns the full conversation tree flattened | |
| after | No | Pagination cursor | |
| limit | No | Number of replies | |
| fields | No | Comma-separated fields override. Default depends on mode: top_level adds is_verified,profile_picture_url, full_tree omits them because they are 'Only available on direct replies' per the Threads Replies/Conversations docs. | |
| post_id | Yes | Threads post ID to get replies for | |
| reverse | No | Reverse chronological order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the readOnlyHint annotation: it explains that full_tree populates extra fields (root_post, replied_to, is_reply) for tree reconstruction and that default fields differ by mode due to API limitations. No contradiction with annotations.
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 dense paragraph. It front-loads the purpose but could be improved by breaking into bullet points for modes and field behavior. Still, it is efficient and contains no 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?
Given the lack of an output schema, the description adequately explains the response shape (shared between modes, extra fields in full_tree) and caveats about field availability. Pagination and reverse parameters are covered in the schema.
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 100%, but the description adds value by explaining the behavioral implications of the 'mode' and 'fields' parameters, such as why default fields differ and how to override them. This goes beyond mere parameter definitions.
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 'Get replies for a specific Threads post' and distinguishes two modes with specific endpoints and behaviors. It differentiates from sibling tools like threads_get_post (single post) and ig_get_replies (Instagram).
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 explicitly explains when to use 'top_level' vs 'full_tree' modes and mentions default behavior. However, it lacks explicit guidance on when not to use this tool versus alternatives like threads_reply or threads_hide_reply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_get_user_insightsARead-only
Get account-level Threads insights (views, likes, replies, reposts, quotes, clicks, followers, follower demographics). Requires period parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Start date (Unix timestamp). Required when period is 'day'. | |
| until | No | End date (Unix timestamp). Required when period is 'day'. | |
| metric | Yes | Comma-separated metrics: views,likes,replies,reposts,quotes,clicks,followers_count,follower_demographics | |
| period | No | Time aggregation period. Use 'day' for time-series metrics (views, likes, replies, reposts, quotes, followers_count). Use 'lifetime' only for follower_demographics. | day |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description does not need to cover safety. However, it adds no behavioral context beyond what's in the schema (e.g., no mention of data availability, rate limits, or pagination). The claim 'Requires period parameter' is slightly inaccurate as period is optional with a default.
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 with a parenthetical list, which is concise and front-loaded. However, it could be more precise about the period parameter's role (e.g., 'day for time-series, lifetime for demographics').
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 output schema, the description does not explain the return format or structure. It also omits guidance on how period affects results (time-series vs demographics). Annotations help, but the description is insufficient for a complex insights 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?
Schema coverage is 100%, so baseline is 3. The description adds value by listing the comma-separated metrics (views, likes, replies, etc.) in natural language, which helps the agent understand the metric parameter options without reading the 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 action (Get), the resource (account-level Threads insights), and lists the specific metrics. It distinguishes itself from sibling tools like threads_get_post_insights and ig_get_account_insights by specifying 'account-level' and 'Threads'.
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 mentions 'Requires period parameter' but provides no guidance on when to use this tool versus alternatives (e.g., post-level insights or Instagram insights). It does not explain when 'day' vs 'lifetime' is appropriate, nor does it note that this is for the authenticated user's own account.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_hide_replyAIdempotent
Hide a reply on your Threads post. Hidden replies are still visible if directly accessed.
| Name | Required | Description | Default |
|---|---|---|---|
| reply_id | Yes | Reply ID to hide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write, non-destructive, idempotent operation. The description adds valuable behavioral context: 'Hidden replies are still visible if directly accessed', which goes beyond what annotations provide.
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?
Two concise sentences with no superfluous information. The first sentence states the primary action, the second adds a key behavioral detail. Front-loaded and efficient.
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 tool with one parameter and no output schema, the description is mostly complete. It explains the effect and visibility nuance. Could be improved by mentioning prerequisites (e.g., must be post owner), but it is adequate.
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 100% with a clear description for 'reply_id'. The description does not add any additional meaning beyond the schema, so baseline 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 action ('Hide a reply') and the resource ('on your Threads post'). It also adds a distinguishing nuance about visibility, which differentiates it from the sibling tool 'threads_unhide_reply'.
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 explicit guidance on when to use this tool versus alternatives (e.g., 'threads_unhide_reply', 'ig_hide_comment'). The purpose is clear, but the context for decision-making is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_publish_carouselA
Publish a carousel post on Threads with 2-20 images/videos. Supports cross-share to Instagram Stories, geo-gating via allowlisted_country_codes, and location tagging via location_id (parent container only).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Caption text | |
| items | Yes | Array of media items | |
| topic_tag | No | Topic tag for the post (1-50 chars, no periods or ampersands) | |
| location_id | No | Location ID for tagging the post. Use threads_search_locations to find IDs. Requires the threads_location_tagging permission on the access token. | |
| quote_post_id | No | ID of a post to quote | |
| reply_control | No | Who can reply to this post. One of: 'everyone' (default — anyone can reply), 'accounts_you_follow' (only profiles the author follows), 'mentioned_only' (only profiles @-mentioned in the post), 'parent_post_author_only' (only the author of the post being replied to — applies when this post is itself a reply, not a quote), or 'followers_only' (only the author's followers). See https://developers.facebook.com/docs/threads/reply-management/ for the authoritative list. | |
| share_to_ig_story | No | Cross-share this post to linked Instagram as a Story. 'light' = normal, 'dark' = dark mode. Requires threads_share_to_instagram permission and a linked Instagram account. The Threads post still publishes even if cross-share fails. | |
| allowlisted_country_codes | No | ISO 3166-1 alpha-2 country codes (e.g., ['US','CA','GB']) restricting post visibility to those countries (geo-gating). Requires the account to be eligible — check `is_eligible_for_geo_gating` via `threads_get_profile`. The creator can always see their own posts regardless. Codes are normalized to uppercase and sent comma-joined (e.g., 'US,CA') as required by the API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: cross-share failure behavior, geo-gating eligibility, location permission requirement, reply control defaults. Annotations are minimal, so description provides useful behavioral insights.
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?
Two short sentences, front-loaded with core purpose, then lists key features. No filler, every word contributes.
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?
Covers core functionality well but lacks details on return values or the container-based publishing process (implied by sibling threads_get_container_status). For an 8-param tool with no output schema, a brief note on response structure would improve completeness.
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%, but description adds synthesized value: explains cross-share, geo-gating, location tagging at a high level, plus detail on allowlisted_country_codes normalization and creator visibility. Goes beyond 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?
Description clearly states 'Publish a carousel post on Threads with 2-20 images/videos', specifying verb, resource, and constraints. Distinguishes from sibling tools like threads_publish_image or threads_publish_video by focusing on multiple media items.
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?
Implies usage for carousel posts via the description. Context is clear relative to siblings, but no explicit when-not-to-use or alternatives beyond the parameter notes (e.g., location_id parent container only).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_publish_imageA
Publish an image post on Threads. Supports topic tag, quote post, alt text, spoiler flag, cross-share to Instagram Stories, geo-gating via allowlisted_country_codes, and location tagging via location_id.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Caption text | |
| alt_text | No | Alt text for accessibility (max 1000 chars) | |
| image_url | Yes | Public HTTPS URL of the image (JPEG/PNG, max 8MB) | |
| topic_tag | No | Topic tag for the post (1-50 chars, no periods or ampersands) | |
| is_spoiler | No | Mark content as spoiler | |
| location_id | No | Location ID for tagging the post. Use threads_search_locations to find IDs. Requires the threads_location_tagging permission on the access token. | |
| quote_post_id | No | ID of a post to quote | |
| reply_control | No | Who can reply to this post. One of: 'everyone' (default — anyone can reply), 'accounts_you_follow' (only profiles the author follows), 'mentioned_only' (only profiles @-mentioned in the post), 'parent_post_author_only' (only the author of the post being replied to — applies when this post is itself a reply, not a quote), or 'followers_only' (only the author's followers). See https://developers.facebook.com/docs/threads/reply-management/ for the authoritative list. | |
| share_to_ig_story | No | Cross-share this post to linked Instagram as a Story. 'light' = normal, 'dark' = dark mode. Requires threads_share_to_instagram permission and a linked Instagram account. The Threads post still publishes even if cross-share fails. | |
| allowlisted_country_codes | No | ISO 3166-1 alpha-2 country codes (e.g., ['US','CA','GB']) restricting post visibility to those countries (geo-gating). Requires the account to be eligible — check `is_eligible_for_geo_gating` via `threads_get_profile`. The creator can always see their own posts regardless. Codes are normalized to uppercase and sent comma-joined (e.g., 'US,CA') as required by the API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint=false), and the description adds behavioral details: cross-share failure handling ('post still publishes'), geo-gating creator visibility, and permission requirements (e.g., threads_location_tagging, threads_share_to_instagram). No contradictions with annotations.
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 listing features—concise but lacking structural breaks. The main purpose is front-loaded, and every element 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?
With 10 parameters, 1 required, and no output schema, the description covers all major features and their nuances (e.g., cross-share failure, geo-gating eligibility). Slightly better than adequate, but could include a usage example or return value hint.
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 100%, but the description significantly enhances understanding: explains how to find location IDs, elaborates reply_control options, normalizes country codes, and clarifies cross-share behavior. This adds value beyond the 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 explicitly states the tool's purpose: 'Publish an image post on Threads.' It lists supported features (topic tag, quote post, alt text, spoiler flag, cross-share, geo-gating, location tagging), clearly distinguishing it from siblings like threads_publish_text and threads_publish_carousel.
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 lists features specific to image posts but does not explicitly state when to use this tool over alternatives. There are no exclusions or conditional guidance, leaving the agent to infer purpose from the listed features.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_publish_textA
Publish a text-only post on Threads. By default publishes in a single API call via auto_publish_text=true (faster and avoids the 4279009 'container not propagated' race condition). Supports optional link attachment, poll, GIF, topic tag, quote post, cross-share to Instagram Stories, geo-gating via allowlisted_country_codes, location tagging via location_id, and text_attachment for long-form content (up to 10,000 chars with optional styling and link). Only one attachment type per post — text_attachment, poll_options, link_attachment, and gif_id+gif_provider are mutually exclusive. Set auto_publish=false to fall back to the legacy two-step create-then-publish flow.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Post text (max 500 chars) | |
| gif_id | No | GIPHY GIF ID. Must be provided together with gif_provider — providing only one returns an error. | |
| alt_text | No | Reserved — must be omitted. alt_text is only supported on image, video, and carousel posts; passing it here raises a Zod schema error. | |
| topic_tag | No | Topic tag for the post (1-50 chars, no periods or ampersands) | |
| is_spoiler | No | Mark content as spoiler | |
| location_id | No | Location ID for tagging the post. Use threads_search_locations to find IDs. Requires the threads_location_tagging permission on the access token. | |
| auto_publish | No | When true (default), combine container creation and publishing into a single API call via auto_publish_text=true — one HTTP request instead of two, and no risk of the 4279009 'container not propagated yet' race. Set to false to fall back to the legacy two-step flow (POST /threads, then POST /threads_publish). | |
| gif_provider | No | GIF provider. Only GIPHY is currently supported. Must be provided together with gif_id — providing only one returns an error. | |
| poll_options | No | Poll options (2-4 choices, each 1-25 chars). Creates a poll attachment. Cannot be combined with text_attachment, link_attachment, or gif_id+gif_provider. | |
| quote_post_id | No | ID of a post to quote | |
| reply_control | No | Who can reply to this post. One of: 'everyone' (default — anyone can reply), 'accounts_you_follow' (only profiles the author follows), 'mentioned_only' (only profiles @-mentioned in the post), 'parent_post_author_only' (only the author of the post being replied to — applies when this post is itself a reply, not a quote), or 'followers_only' (only the author's followers). See https://developers.facebook.com/docs/threads/reply-management/ for the authoritative list. | |
| link_attachment | No | URL to attach as a link preview card (max 5 links per post). Cannot be combined with text_attachment, poll_options, or gif_id+gif_provider. | |
| text_attachment | No | Long-form text attachment (max 10,000 chars). Renders as expandable 'Read more' block beneath the primary text. Cannot be combined with poll_options, link_attachment, or gif_id+gif_provider. | |
| share_to_ig_story | No | Cross-share this post to linked Instagram as a Story. 'light' = normal, 'dark' = dark mode. Requires threads_share_to_instagram permission and a linked Instagram account. The Threads post still publishes even if cross-share fails. | |
| text_attachment_link | No | URL to include inside the text attachment card. Requires text_attachment. | |
| text_attachment_styling | No | Text formatting for the text attachment. Ranges must not overlap. | |
| allowlisted_country_codes | No | ISO 3166-1 alpha-2 country codes (e.g., ['US','CA','GB']) restricting post visibility to those countries (geo-gating). Requires the account to be eligible — check `is_eligible_for_geo_gating` via `threads_get_profile`. The creator can always see their own posts regardless. Codes are normalized to uppercase and sent comma-joined (e.g., 'US,CA') as required by the API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, etc.), so the description shoulders the burden well. It discloses the write/creation nature, the race condition avoidance, the fallback flow, and constraints like alt_text raising an error. However, it does not explicitly discuss all side effects (e.g., rate limits) beyond what's implied.
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 thorough but slightly verbose. It front-loads the main purpose and auto_publish recommendation, then lists features. While every sentence adds value, it could be tightened without losing clarity. Still, it is well-structured.
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 17 parameters and no output schema, the description covers all necessary context: parameter behaviors, constraints, prerequisites (permissions), error conditions, and interactions. It even mentions sibling tools for location search. A remarkably complete description for a complex 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?
With 100% schema coverage, the description adds substantial meaning beyond the input schema. It explains the benefit of auto_publish, mutual exclusivity rules, how allowlisted_country_codes are serialized, and the cross-share behavior. This enriches the agent's understanding of parameter interactions.
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 'Publish a text-only post on Threads' and distinguishes it from sibling tools like threads_publish_image, threads_publish_video, and threads_publish_carousel by specifying 'text-only'. It also details the auto_publish feature, making the purpose very specific.
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 auto_publish=true vs false, explains mutual exclusivity of attachment types, and references sibling tools (threads_search_locations) for location lookup. It also notes required permissions for certain features, leaving no ambiguity about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_publish_videoA
Publish a video post on Threads. Waits for video processing. Supports topic tag, quote post, alt text, spoiler flag, cross-share to Instagram Stories, geo-gating via allowlisted_country_codes, and location tagging via location_id. Note: cross-share to IG Stories may silently fail for video posts (the Threads post still publishes).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Caption text | |
| alt_text | No | Alt text for accessibility (max 1000 chars) | |
| topic_tag | No | Topic tag for the post (1-50 chars, no periods or ampersands) | |
| video_url | Yes | Public HTTPS URL of the video (MP4/MOV, max 1GB, up to 5 min) | |
| is_spoiler | No | Mark content as spoiler | |
| location_id | No | Location ID for tagging the post. Use threads_search_locations to find IDs. Requires the threads_location_tagging permission on the access token. | |
| quote_post_id | No | ID of a post to quote | |
| reply_control | No | Who can reply to this post. One of: 'everyone' (default — anyone can reply), 'accounts_you_follow' (only profiles the author follows), 'mentioned_only' (only profiles @-mentioned in the post), 'parent_post_author_only' (only the author of the post being replied to — applies when this post is itself a reply, not a quote), or 'followers_only' (only the author's followers). See https://developers.facebook.com/docs/threads/reply-management/ for the authoritative list. | |
| share_to_ig_story | No | Cross-share this post to linked Instagram as a Story. 'light' = normal, 'dark' = dark mode. Requires threads_share_to_instagram permission and a linked Instagram account. The Threads post still publishes even if cross-share fails. | |
| allowlisted_country_codes | No | ISO 3166-1 alpha-2 country codes (e.g., ['US','CA','GB']) restricting post visibility to those countries (geo-gating). Requires the account to be eligible — check `is_eligible_for_geo_gating` via `threads_get_profile`. The creator can always see their own posts regardless. Codes are normalized to uppercase and sent comma-joined (e.g., 'US,CA') as required by the API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by revealing two key behavioral traits: it 'waits for video processing' and that 'cross-share to IG Stories may silently fail'. This adds meaningful context about the tool's runtime behavior and potential partial failures.
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 (4 sentences) and front-loaded with the primary action. Every sentence serves a purpose: stating the action, noting the wait behavior, listing features, and warning about a potential silent failure.
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, the description omits information about return values (e.g., post ID or container status) and does not discuss rate limits or authentication beyond what is in the schema. While it covers usage context, it lacks outcome details.
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 already provides detailed descriptions for all 10 parameters (100% coverage). The tool description offers a high-level summary of features but does not add significant semantic value beyond what the schema already documents.
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 'Publish a video post on Threads', specifying the verb (publish) and resource (video post). It distinguishes this tool from sibling publish tools (e.g., threads_publish_image, threads_publish_text) by explicitly focusing on video 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?
The description lists supported features (topic tag, quote post, alt text, etc.) but does not provide explicit guidance on when to use this tool versus alternatives like threads_publish_carousel or threads_publish_image. It implies usage when a video URL is available, but no exclusion criteria or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_replyA
Reply to a Threads post or another reply. Text-only replies publish in a single API call by default (auto_publish_text=true); media replies always use the two-step create-then-publish flow. image_url and video_url are mutually exclusive — provide at most one.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Reply text | |
| image_url | No | Optional image HTTPS URL to attach. Mutually exclusive with video_url. | |
| video_url | No | Optional video HTTPS URL to attach. Mutually exclusive with image_url. | |
| reply_to_id | Yes | Post ID to reply to | |
| auto_publish | No | When true (default) and the reply is text-only (no image_url/video_url), combine container creation and publishing into a single API call via auto_publish_text=true — one HTTP request instead of two, and no risk of the 4279009 'container not propagated yet' race. Ignored for media replies. Set to false to force the legacy two-step flow for text replies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (modifying), openWorldHint=true (creates), but provide no detail on flows. The description adds critical behavioral context: auto_publish behavior, the two-step requirement for media, and the race condition warning. This goes beyond annotations, though it could mention auth or rate limits.
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?
Two sentences, front-loaded with purpose, then key behavioral details. Every sentence earns its place with zero redundancy. Highly concise and structured.
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 5 parameters, 2 required, no output schema, the description covers the core reply functionality and the two distinct flows. It lacks details on return values or error cases, but given the tool's relative simplicity and the schema richness, it is adequately 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 coverage is 100% with decent descriptions, but the tool description provides extra context: the interaction between auto_publish and media type, the mutual exclusivity reminder, and the race condition note. This adds value beyond the schema, justifying a 4.
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 begins with a clear verb+resource combination: 'Reply to a Threads post or another reply.' It distinguishes from sibling tools like threads_get_replies (fetching) and ig_reply_to_comment (Instagram). The mention of text-only vs media flows further clarifies 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?
The description explains when to use the single-step flow (text-only) vs two-step flow (media) and notes mutual exclusivity of image_url/video_url. However, it does not explicitly state when not to use this tool or compare directly to sibling publishing tools like threads_publish_text, which might cause confusion for agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_repostA
Repost an existing Threads post to your own profile. Reposts appear under the Reposts tab on your profile. Requires the threads_content_publish permission. Note: this is a simple repost — for quote-reposts use threads_publish_text with quote_post_id.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Threads post ID to repost |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds context: requires threads_content_publish permission and states the result appears under the Reposts tab. Could note idempotency but still strong.
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?
Description is two sentences: first states core functionality, second adds permission and differentiation. No wasted 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 tool with one parameter and no output schema, the description sufficiently covers purpose, permission, behavior, and alternatives. No 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?
Single parameter post_id is fully covered by schema with pattern and description. The description does not add additional meaning beyond what the schema provides.
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?
Description clearly states the tool reposts a Threads post to the user's own profile, distinguishing it from quote-reposts by mentioning the sibling tool threads_publish_text.
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?
Explicitly specifies when to use (simple repost) and when to use alternative (quote-repost via threads_publish_text with quote_post_id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_search_locationsARead-only
Search Threads-supported locations by keyword or coordinates. Returns a list of location objects (id, name, address, city, country, latitude, longitude, postal_code) whose id can be passed as location_id to the four threads_publish_* tools to tag a post. Either q or both latitude+longitude must be provided. Requires the threads_location_tagging permission; without app approval, the endpoint restricts results to the literal query 'Menlo Park' for testing.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query (e.g., 'Menlo Park'). Either q or both latitude+longitude must be provided. If your app does not yet have the threads_location_tagging permission, the API restricts results to the literal query 'Menlo Park' for testing. | |
| latitude | No | Latitude in decimal degrees (-90..90). Must be provided together with longitude. | |
| longitude | No | Longitude in decimal degrees (-180..180). Must be provided together with latitude. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds behavioral context: requires threads_location_tagging permission, restricts results without app approval to 'Menlo Park'. No contradictions.
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?
Description is 4 sentences, each adding key information: purpose, return format, usage, parameter requirements, and permission context. Front-loaded and efficient with minimal superfluous text.
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?
With 3 parameters, no output schema, but description covers return format (list with fields), parameter constraints, and prerequisites, making it sufficiently complete for an agent to use 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 coverage is 100% with detailed descriptions. Description adds clarity by stating 'Either q or both latitude+longitude must be provided' and notes permission restriction on q, adding value beyond 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?
Description uses specific verb+resource: 'Search Threads-supported locations by keyword or coordinates.' It clearly states what the tool does and distinguishes it from siblings like threads_search_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?
Description tells when to use: to find location IDs for tagging in publish tools. It also mentions required permission and testing restrictions. No explicit 'when not to use', but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_search_postsARead-only
Search for public Threads posts by keyword or topic tag. Requires threads_keyword_search permission.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search keyword or query | |
| after | No | Pagination cursor | |
| limit | No | Number of results (max 100, default 25) | |
| since | No | Start date (Unix timestamp) | |
| until | No | End date (Unix timestamp) | |
| media_type | No | Filter results by media type | |
| search_mode | No | Search by KEYWORD (default) or TAG | |
| search_type | No | Result ordering: TOP (default) or RECENT | |
| author_username | No | Filter results to posts by exact username (server-side filter via Threads /keyword_search; per Threads API the username must be an exact match without '@'; leading '@' characters and surrounding whitespace are auto-stripped if provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds the permission requirement, which is valuable but not extensive. No mention of rate limits, pagination behavior, or result format. It does not contradict annotations.
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 immediately conveys the tool's primary function and a key requirement. No filler or redundant 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?
For a search tool with 9 parameters and no output schema, the description is brief. It covers permission but lacks guidance on return format, pagination details, or when to use this vs. other search tools. The rich schema partially compensates.
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 100%, so each parameter is documented. The description hints at the search_mode parameter ('by keyword or topic tag'), but adds minimal new meaning beyond the schema. Baseline 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 action ('Search'), the resource ('public Threads posts'), and the method ('by keyword or topic tag'). It also specifies the required permission, which distinguishes it from sibling tools like threads_search_locations or ig_search_hashtag.
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 mentions the required permission ('Requires threads_keyword_search permission'), but does not provide explicit guidance on when to use this tool versus alternatives (e.g., threads_get_posts for specific posts). The agent must infer context from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
threads_unhide_replyAIdempotent
Unhide a previously hidden reply on your Threads post.
| Name | Required | Description | Default |
|---|---|---|---|
| reply_id | Yes | Reply ID to unhide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false, so the description does not need to repeat those. However, it does not disclose any additional behavioral traits, such as whether unhiding a reply makes it visible to others or if it triggers notifications. With annotations covering the basics, a score of 3 is appropriate.
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, well-structured sentence that front-loads the action and resource. No extra words or redundant 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?
The tool is simple with one parameter and no output schema. The description, combined with annotations and schema, provides sufficient context for an agent to understand and use the tool. It could optionally mention the inverse relationship with 'threads_hide_reply', but this is not essential.
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 'reply_id' is described in the schema with 'Reply ID to unhide'. The description adds no new meaning beyond what the schema already provides. Since schema coverage is 100%, a score of 3 is baseline.
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 'Unhide' and the resource 'reply', and it distinguishes this tool from its sibling 'threads_hide_reply' by specifying the action is the inverse. The phrase 'on your Threads post' provides additional context.
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 'threads_hide_reply' or 'threads_get_replies'. The description does not mention that it should only be used for previously hidden replies, nor does it exclude other contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, with 'ig_' and 'threads_' prefixes immediately indicating the platform. Even similar operations (e.g., publishing photos vs reels) are unambiguously separated by resource type and action.
Tool names consistently follow a verb_noun pattern with platform prefixes (ig_, threads_, meta_). The naming is highly predictable: get_, post_, publish_, delete_, etc., with only minor deviations like 'ig_toggle_comments' and 'ig_hide_comment' using different verbs.
With 59 tools, the server is well beyond the 25-tool threshold considered too many. While the scope covers two platforms (Instagram and Threads) plus Meta infrastructure, the volume is excessive for a single MCP server, likely causing navigation overhead.
The server covers core content management, publishing, insights, and messaging for both Instagram and Threads, plus token and webhook management. Minor gaps exist (e.g., Instagram ad management, Threads follow/block actions) but the main workflows are well supported.
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
Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.
Create, review, publish and schedule Instagram images, carousels and Reels with AI assistants.
Schedule Instagram reels, manage comment-to-DM automations, and read analytics
Social media automation from your AI assistant: Instagram DMs, scheduling to 9 platforms, analytics.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables AI assistants to interact with Instagram and Facebook accounts through their APIs, supporting messaging, post management, commenting, and content creation.14
- AlicenseNot gradedqualityDmaintenanceEnables AI applications to interact with Instagram Business accounts through the Graph API, supporting profile management, media publishing, insights retrieval, and direct messaging capabilities.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Instagram Business accounts by automating content publishing, scheduling posts, and analyzing performance metrics. Supports posts, stories, reels, and carousels with detailed audience insights and hashtag discovery.
- AlicenseBqualityDmaintenanceConnects AI assistants to Meta's business platforms (Facebook, Instagram, Threads, Ads, Commerce) with 200 tools for publishing, engagement, analytics, ads, and commerce management.10016231MIT
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/exileum/meta-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server