Skip to main content
Glama
subzeroid

HikerAPI — Instagram MCP

hikerapi-mcp

npm version npm downloads License: MIT

MCP server for HikerAPI — Instagram data API. Available on npm: hikerapi-mcp.

Generates MCP tools from the HikerAPI OpenAPI spec at startup. HikerAPI only exposes read (GET) endpoints — each tool maps 1:1 to one of them (GET /v2/user/by/username → get_v2_user_by_username). By default you get a core set of ~45 tools, one per task, each with a description that tells the assistant when to use it; HIKERAPI_TOOLS=all exposes every non-deprecated endpoint (100+).

Get 100 Free API Requests

Sign up with this link and get 100 free HikerAPI requests — no credit card required. Enough to wire up the MCP server, try a few prompts in Claude/Cursor/Codex, and evaluate the data quality before committing.

Get your free 100 requests here

Related MCP server: DataLikers — Instagram & TikTok MCP

Quick start

  1. Get an API key at hikerapi.com/tokens.

  2. Add the server to your AI assistant.

  3. Ask your assistant something like:

    • "Get the Instagram profile for @nasa."

    • "Find the top 5 recent posts under the hashtag #photography."

    • "Show stories for the user with id 25025320."

Claude Code

claude mcp add hikerapi -e HIKERAPI_KEY=your-api-key -- npx -y hikerapi-mcp

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "hikerapi": {
      "command": "npx",
      "args": ["-y", "hikerapi-mcp"],
      "env": {
        "HIKERAPI_KEY": "your-api-key"
      }
    }
  }
}

Cursor / Windsurf

Same shape as Claude Desktop — put the block under mcpServers in the app's MCP config file.

Zed

Add to ~/.config/zed/settings.json:

{
  "context_servers": {
    "hikerapi": {
      "command": "npx",
      "args": ["-y", "hikerapi-mcp"],
      "env": {
        "HIKERAPI_KEY": "your-api-key"
      }
    }
  }
}

OpenAI Codex

Append to ~/.codex/config.toml:

[mcp_servers.hikerapi]
command = "npx"
args = ["-y", "hikerapi-mcp"]

[mcp_servers.hikerapi.env]
HIKERAPI_KEY = "your-api-key"

Tools

Tools are generated at startup from the live HikerAPI OpenAPI spec.

HikerAPI has 100+ GET endpoints, and most of them are version variants of the same call (v1 / v2 / gql / g2). Handing all of them to an assistant makes it pick the wrong one, so the default core set keeps one endpoint per task:

Group

Tools

Examples

Profiles

16

get_v2_user_by_username, get_gql_user_medias, get_g2_user_followers

Posts, comments, likers

8

get_v2_media_info_by_url, get_v2_media_comments, get_v2_media_likers

Search

7

get_v2_fbsearch_accounts, get_v2_fbsearch_reels, get_v1_search_hashtags

Hashtags

4

get_v2_hashtag_medias_top, get_v2_hashtag_medias_recent

Locations

3

get_g2_location_by_id, get_v1_location_medias_recent_chunk

Stories, highlights, links

5

get_v2_story_by_url, get_v2_highlight_by_id, get_v1_share_by_url

Audio

1

get_v2_track_by_id

Core tools carry hand-written descriptions (what the tool does, when to prefer a sibling, pagination, billing) and every tool is annotated read-only. The list lives in src/curated.ts.

Set HIKERAPI_TOOLS=all to expose every non-deprecated endpoint instead — same tool names as before, so existing prompts keep working. Tool names mirror their endpoint (GET /v2/user/by/username → get_v2_user_by_username); call tools/list over MCP for the current list with parameter schemas. Legacy and System groups are excluded in both modes.

Configuration

Variable

Description

Required

HIKERAPI_KEY

Your HikerAPI access key (sent as x-access-key header)

yes

HIKERAPI_URL

Base URL. Default: https://api.hikerapi.com (alias https://api.instagrapi.com)

no

HIKERAPI_SPEC_URL

OpenAPI spec URL. Default: ${HIKERAPI_URL}/openapi.json

no

HIKERAPI_TOOLS

core (default): curated set, one tool per task. all: every non-deprecated endpoint

no

HIKERAPI_TAGS

Whitelist: only include operations with these tags (comma-separated)

no

HIKERAPI_EXCLUDE_TAGS

Blacklist: additional tags to exclude (on top of default Legacy,System)

no

HIKERAPI_TIMEOUT_MS

Per-request timeout for API calls. Default: 30000

no

HIKERAPI_SPEC_TIMEOUT_MS

Timeout for the startup spec fetch. Default: 60000

no

HIKERAPI_MAX_RESPONSE_BYTES

Max bytes read from each API response. Default: 10485760 (10 MB)

no

HIKERAPI_MAX_SPEC_BYTES

Max bytes read from the OpenAPI spec. Default: 8388608 (8 MB)

no

Legacy and System tags are excluded by default. Deprecated operations are also skipped.

If HIKERAPI_URL points to a host other than api.hikerapi.com or api.instagrapi.com, the server prints a warning on startup — your key will be sent there, so only use it for a self-hosted or proxied HikerAPI.

Requests are sent with User-Agent: hikerapi-mcp/<version>.

Example — expose every endpoint of the most common groups:

"env": {
  "HIKERAPI_KEY": "...",
  "HIKERAPI_TOOLS": "all",
  "HIKERAPI_TAGS": "User Profile,Post Details,Search,Hashtags,Stories"
}

How it works

AI Assistant ←stdio→ hikerapi-mcp ──https──> api.hikerapi.com
                          │
                          └─ fetches /openapi.json once on startup,
                             builds one MCP tool per GET endpoint
                             (core set by default)

Tool arguments map to the endpoint's query and path parameters. The response body is returned as-is (JSON text). Non-2xx responses are surfaced as tool errors with the HTTP status and body.

Development

git clone https://github.com/subzeroid/hikerapi-mcp.git
cd hikerapi-mcp
npm install
npm run build
HIKERAPI_KEY=your-key node dist/index.js

Run in watch mode:

HIKERAPI_KEY=your-key npm run dev

Run tests (unit + stdio smoke tests against a local mock server, no network/API key required):

npm test

License

MIT

Available Tools

44 tools
get_g2_location_by_idA
Read-only

Get an Instagram location by id: name, latitude/longitude, category and description. Use get_v1_fbsearch_places or get_v1_location_search to find the id first, and the location media tools for posts made there. Live request to Instagram, billed per call. (GET /g2/location/by/id)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, openWorld, non-destructive), and the description adds genuinely useful context beyond them: it is a live Instagram request billed per call, plus the underlying endpoint. It doesn't mention rate limits or failure modes, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight block: purpose and returned fields first, then routing guidance, then billing/endpoint note. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description compensates by listing the returned fields, and it covers the prerequisite for the required id. Billing and routing are covered; only id format details are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single `id` parameter has no description in the schema, so the description must compensate. It does add meaning by explaining where the id comes from (the two search tools), though it doesn't specify the id's format. Solid but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('an Instagram location by id') and enumerates the returned fields (name, latitude/longitude, category, description). It is clearly distinguishable from the location media and search siblings named in the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use `get_v1_fbsearch_places` or `get_v1_location_search` to obtain the id, and the location media tools for posts at the location. Both the prerequisite and the alternative siblings are named with their selection condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_g2_user_followersA
Read-only

List accounts that follow an Instagram user, one page per call. Use it to page through the follower list; use get_v1_user_search_followers to look for specific names among them and get_g2_user_following for accounts the user follows. Pass user_id; for the next page pass the cursor from the previous response as page_id. Live request to Instagram, one billed request per page. (GET /g2/user/followers)

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNo
user_idYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuinely new operational context absent from annotations: it is a live Instagram request with one billed request per page, which matters for cost planning. It stops short of describing result shape or when the list ends, keeping it just under full marks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: purpose first, then sibling routing, then paging and cost. Every clause is load-bearing and nothing is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the missing return-related context an agent needs (one page per call, cursor chaining, billing per page) for a two-parameter read tool. Nothing essential to correct invocation is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden and largely does: `user_id` identifies the target account and `page_id` is explicitly defined as the cursor taken from the previous response. It omits any format hint for `user_id` (numeric vs. username-derived), leaving one small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List accounts that follow an Instagram user') with pagination scope ('one page per call'), and explicitly distinguishes itself from the two most confusable siblings by naming them. An agent can identify this tool's job without inspecting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: use `get_v1_user_search_followers` to search names among followers and `get_g2_user_following` for the reverse direction. It also states the paging procedure (pass the previous response's cursor as `page_id`), covering both when-to-use and how-to-continue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_g2_user_followingA
Read-only

List accounts an Instagram user follows, one page per call. Use it to page through the following list; use get_v1_user_search_following to look for specific names in it and get_g2_user_followers for the user's followers. Pass user_id; for the next page pass the cursor from the previous response as page_id. Live request to Instagram, one billed request per page. (GET /g2/user/following)

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNo
user_idYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint, openWorldHint, non-destructive), so the bar is lower. The description adds genuinely non-structured context: 'Live request to Instagram, one billed request per page', which signals cost and rate behavior the agent cannot infer from annotations. It stops short of describing response shape, but the pagination/billing disclosure is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then usage routing, then parameter mechanics, then the operational note and endpoint. Four compact sentences with zero filler; every clause carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 compensates by explaining the one-page-per-call pagination model and where the cursor comes from in the response. For a two-parameter paging tool this is nearly complete; a brief note on what a page contains or when the list ends would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does: it explains passing user_id and, critically, that page_id is the cursor from the previous response for the next page. That is meaningful semantics beyond the bare 'Page Id'/'User Id' titles. Minor gap: no explanation of cursor lifetime or expiry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List accounts an Instagram user follows') and immediately differentiates itself from siblings by naming get_v1_user_search_following and get_g2_user_followers. An agent can identify this tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('page through the following list') and names the alternatives with the conditions that select them ('to look for specific names' vs 'for the user's followers'). This is exactly the when/when-not guidance the dimension calls for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gql_comment_likers_chunkA
Read-only

Get users who liked one comment on an Instagram post, one page per call. Pass comment_id and media_id; paginate with end_cursor from the previous response. Use get_v2_media_likers for likers of the post itself. Live request to Instagram, billed per call. (GET /gql/comment/likers/chunk)

ParametersJSON Schema
NameRequiredDescriptionDefault
media_idNo
comment_idNo
end_cursorNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover read-only safety, but the description adds value beyond them: it discloses that this is a live, billed, paginated request ('Live request to Instagram, billed per call'). It does not describe auth requirements or rate limits, which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then parameters, then alternative and cost. Every sentence carries necessary information with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, parameters, pagination, alternative tool, and billing, which is strong for a 3-param tool with no output schema. It could be more complete by addressing the deprecated media_id flag and the optionality of parameters, but the main operational details are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It names comment_id, media_id, and end_cursor and explains end_cursor semantics, which is useful. However, it does not flag that media_id is deprecated, nor clarify that both comment_id and media_id are optional in the schema, leaving a gap for such sparse schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get users who liked one comment on an Instagram post') and adds scope ('one page per call'). It also names the sibling it is not ('Use get_v2_media_likers for likers of the post itself'), so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives pagination guidance ('paginate with end_cursor from the previous response') and explicitly routes post-level likers to get_v2_media_likers. No when-not-to-use exclusions beyond that, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gql_media_usertagsA
Read-only

Get the users tagged in Instagram videos; pass up to 10 media ids in media_ids. Use it for reels and videos, because the get_v2_media_info_* tools do not return user tags for video. Live request to Instagram, billed per call. (GET /gql/media/usertags)

ParametersJSON Schema
NameRequiredDescriptionDefault
media_idsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: it is a live Instagram request billed per call, which warns the agent about cost and latency. It omits rate-limit and pagination/response-shape details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence with the endpoint in parentheses; the key constraint (up to 10 ids, video only) is front-loaded and every clause carries information. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-output-schema tool with annotations covering safety, the description covers purpose, scoping, cost, and the id limit. Missing only return-format/pagination expectations, which keeps it short of a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single parameter, so the description must compensate. It does by stating the cardinality constraint ('up to 10 media ids') and the parameter name in `media_ids`, which is not in the schema. It does not state the id format or that the parameter is optional, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the users tagged in Instagram videos') and explicitly scopes it to video/reel media. It contrasts itself with the get_v2_media_info_* siblings, so an agent can select it without schema comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use rule ('for reels and videos') plus the rationale that the media_info tools don't return tags for video, which names the alternatives. It does not address the non-video case (e.g., whether get_v2_user_tag_medias covers photos), so it stops short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gql_user_aboutA
Read-only

Get the "About this account" panel for an Instagram user id: verified status, country of registration, account creation date and former usernames. Use it for account provenance checks; use get_v2_user_by_id for the regular profile. Live request to Instagram, billed per call. (GET /gql/user/about)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-structured context: this is a live request to Instagram billed per call, which matters for cost-conscious agents. It stops short of describing error or rate-limit behavior, so it is not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence front-loads the resource and returns, followed by a routing clause and a terse cost/endpoint parenthetical. No filler sentences; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully enumerates the returned fields, which is the key missing piece for this tool. It also discloses the cost model and underlying endpoint. Only minor gaps remain (no pagination/error semantics, no id format), which are low-impact for a single-id read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'id' parameter is undocumented in the schema, so the description carries the burden. It partially compensates by naming the domain ('an Instagram user id'), but gives no format guidance (numeric vs. opaque GraphQL id) beyond that. Minimum-viable for a one-param tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (the 'About this account' panel for an Instagram user id), then enumerates the exact fields returned (verified status, registration country, creation date, former usernames). It explicitly distinguishes itself from the lookalike sibling get_v2_user_by_id, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both the positive condition ('Use it for account provenance checks') and the alternative with its selecting condition ('use get_v2_user_by_id for the regular profile'). This is explicit when-to-use and when-to-use-something-else guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gql_user_mediasA
Read-only

List an Instagram user's posts, one page per call. Use it to read an account's feed; use get_v2_user_clips for reels only and get_v2_user_tag_medias for posts the user is tagged in. Pass user_id; for the next page pass the cursor from the previous response as profile_grid_items_cursor. flat=true flattens nested media objects into a single list. Live request to Instagram, billed per call. (GET /gql/user/medias)

ParametersJSON Schema
NameRequiredDescriptionDefault
flatNoFlatten nested media objects into a single list
user_idYes
profile_grid_items_cursorNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful context beyond annotations: pagination mechanism (one page per call, cursor), billing per call, and that it is a live Instagram request. Annotations already cover read-only and open-world safety, so the description enriches rather than duplicates. Does not detail rate limits or response shape, but this is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first sentence, then covers alternatives, parameters, and billing in compact sentences. Every sentence adds distinct value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a paginated read tool: covers purpose, alternatives, pagination flow, parameter usage, billing, and endpoint. No output schema exists, and the description does not describe the response structure, but for a list tool with a cursor pattern this is largely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 33%, so the description must compensate. It explains that user_id identifies the account, that profile_grid_items_cursor is the cursor from the previous response for pagination, and that flat flattens nested objects. This adds significant meaning beyond the schema for two of three params, though user_id format is still unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List an Instagram user's posts') and explicitly differentiates from siblings get_v2_user_clips (reels) and get_v2_user_tag_medias (tagged posts). Includes the endpoint for disambiguation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use this tool ('read an account's feed') and names the alternatives for reels and tagged posts with their distinguishing conditions. No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gql_user_repostsA
Read-only

List content an Instagram user has reposted, one page per call. Use get_gql_user_medias for the user's own posts. Pass user_id; for the next page pass the cursor from the previous response as repost_next_max_id. flat=true returns a simple items list. Live request to Instagram, billed per call. (GET /gql/user/reposts)

ParametersJSON Schema
NameRequiredDescriptionDefault
flatNoFlatten nested response into simple items list
user_idYes
repost_next_max_idNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds context the annotations cannot convey: it is a live request to Instagram (hence open-world/non-deterministic), it is billed per call, and results are paginated one page at a time. It does not describe failure modes or rate limits, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences plus an endpoint tag, with the purpose front-loaded and the sibling disambiguation before the mechanics. No filler and nothing repeated from the schema beyond necessary clarification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema, paginated, billed read tool, the description supplies everything needed to invoke and continue calls correctly, including the response-cursor contract. It stops just short of describing response shape or error behavior, which is acceptable given there is no output schema to lean on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only `flat` is documented), so the description must compensate, and it does: `user_id` is framed as the required subject, `repost_next_max_id` is explained as the cursor from the previous response, and `flat=true` is restated as returning a simple items list. It adds the pagination semantics the schema lacks, though not full type/format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List content an Instagram user has reposted') and immediately distinguishes it from the closest sibling, `get_gql_user_medias` for the user's own posts. An agent can select between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative tool and the condition that selects it ('Use `get_gql_user_medias` for the user's own posts'), and explains the pagination workflow explicitly (pass `user_id`; feed the previous response's cursor back as `repost_next_max_id`). Both the when-to-use and the how-to-continue are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_fbsearch_placesA
Read-only

Search Instagram places by name (query), optionally with lat and lng. Use it to find a location id for get_g2_location_by_id and the location media tools; use get_v1_location_search when you only have coordinates. Live request to Instagram, billed per call. (GET /v1/fbsearch/places)

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lngNo
queryYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond them: it is a live external request to Instagram that is billed per call, which an agent should weigh before invoking. It stops short of covering rate limits or failure/empty-result behaviour.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences plus an endpoint reference, with the core action and required parameter front-loaded and no filler. Every clause adds routing, parameter, or cost information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent what the result is for (finding a location id), which is the key missing piece. It omits response shape and result limits, but for a simple three-parameter search that is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and does name all three parameters meaningfully: `query` as the place name, and `lat`/`lng` as optional geo context. It does not explain the surprising preset coordinate defaults or accepted formats, so it compensates well but not completely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search Instagram places by name') and immediately names the scope of the optional geo parameters. It is clearly distinguishable from siblings like get_v1_location_search and get_v1_search_hashtags without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use this to obtain a location id for get_g2_location_by_id and the location media tools, and switch to get_v1_location_search when only coordinates are available. This is textbook when/when-not/alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_hashtag_by_nameA
Read-only

Get an Instagram hashtag by exact name (no # and no special characters). Use it for the hashtag's own info; use get_v2_hashtag_medias_top or get_v2_hashtag_medias_recent for its posts and get_v1_search_hashtags when unsure of the exact tag. Live request to Instagram, billed per call. (GET /v1/hashtag/by/name)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPlease make sure to use a clean hashtag without any special symbols. **Good one**: love, sea, dog, 공구 **Bad one**: #dog, sea_., tanjung.., #공구.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, openWorldHint, destructiveHint=false), so the bar is lower. The description adds genuinely non-obvious operational context: it is a live request to Instagram and is billed per call. It does not cover rate limits or failure modes, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste, front-loaded with the primary action, then alternatives, then cost/endpoint. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-param read tool with no output schema, the description covers purpose, routing, input constraints, cost, and the underlying endpoint. It is complete enough to invoke correctly; only the response shape is left unspecified, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself gives detailed good/bad examples of the name format, so the schema carries the parameter burden. The description's 'no # and no special characters' restates the schema rather than adding new syntax or format detail; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get an Instagram hashtag by exact name') and immediately scopes it against siblings: this tool returns the hashtag's own info, not its posts. An agent can distinguish it from get_v2_hashtag_medias_top and get_v1_search_hashtags without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is provided: use get_v2_hashtag_medias_top/get_v2_hashtag_medias_recent for posts, and get_v1_search_hashtags when the exact tag is unknown. It also states the precondition for correct use (exact name, no # or special characters).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_hashtag_medias_clips_chunkA
Read-only

List reels under an Instagram hashtag, one page per call. Use get_v2_hashtag_medias_top or get_v2_hashtag_medias_recent for all post types and get_v2_fbsearch_reels to search reels by free text. Pass name without #; paginate with max_id from the previous response. Live request to Instagram, billed per call. (GET /v1/hashtag/medias/clips/chunk)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPlease make sure to use a clean hashtag without any special symbols. **Good one**: love, sea, dog, 공구 **Bad one**: #dog, sea_., tanjung.., #공구.
max_idNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context beyond annotations with 'one page per call', 'Live request to Instagram, billed per call', and pagination via max_id from the previous response. These are valuable operational traits not captured by readOnlyHint/openWorldHint. It stops short of describing rate limits, error behavior, or response shape, but it is well above baseline with annotations already covering safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences plus an endpoint tag. Information is front-loaded: purpose first, then alternatives, then usage mechanics. No redundant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (2 params, no output schema) this is nearly complete for correct invocation: purpose, sibling routing, pagination, and billing are all covered. Minor gaps remain around error behavior and what the paged response contains, but those are largely outside the description's burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%. The description adds meaningful semantics for `name` (pass without #) and `max_id` (paginate with value from the previous response), which the schema only partially documents. However, the detailed formatting examples for `name` live in the schema description, not here, so the description does not fully compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List reels under an Instagram hashtag') with clear scope and pagination model ('one page per call'). It explicitly differentiates itself from three named siblings, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternatives with explicit conditions: use get_v2_hashtag_medias_top/recent for all post types, and get_v2_fbsearch_reels for free-text reel search. It also gives preconditions for the name parameter and the pagination mechanism, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_highlight_by_urlA
Read-only

Get one Instagram story highlight by its link. For share links that contain /s/, call get_v1_share_by_url first to resolve them. Use get_v2_highlight_by_id when you have the id. Live request to Instagram, billed per call. (GET /v1/highlight/by/url)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, openWorld, non-destructive). The description adds two facts not in the structured data: it is a live request to Instagram and it is billed per call, which affects call budgeting. It stops short of describing pagination or response shape, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core action, then the two routing rules, then the billing caveat. No filler and the parenthetical endpoint path is a useful anchor.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so return values need not be documented, and the sibling routing plus billing note covers what an agent needs to call it correctly. The only residual gap is the exact URL format accepted, which the description only partially addresses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'url' property has no description. The prose implies the argument is a highlight link and adds a format nuance (share links containing /s/ must be resolved first), but it never states the expected URL form or what an invalid/non-highlight URL does. Marginal compensation for a real coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get one Instagram story highlight by its link') and explicitly differentiates itself from the two nearest siblings by URL vs. id vs. share-link resolution. An agent can distinguish it from get_v2_highlight_by_id and get_v1_share_by_url without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules: use get_v1_share_by_url first for /s/ share links, and use get_v2_highlight_by_id when the id is known. This is when-to-use and when-to-use-something-else guidance in two clauses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_location_medias_recent_chunkA
Read-only

List recent posts made at an Instagram location, one page per call. Pass location_pk; paginate with max_id from the previous response. Use get_v1_location_medias_top_chunk for top posts. Live request to Instagram, billed per call. (GET /v1/location/medias/recent/chunk)

ParametersJSON Schema
NameRequiredDescriptionDefault
max_idNo
location_pkYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful operational context beyond that: one page per call, pagination via max_id, and that this is a live billed request to Instagram. It stops short of describing rate limits or failure modes, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, each earning its place: purpose, pagination mechanics, alternative sibling, then cost/nature of the call. The primary action and the required parameter are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 partly fills that gap by framing the response as one page per call with a max_id cursor. Cost and live-request nature are disclosed. What a page actually contains (fields per post) is left implicit, which is a minor residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it tells the agent to pass location_pk and that max_id comes from the previous response for pagination. That gives meaning to both parameters beyond their bare names and types, though it doesn't state location_pk's expected format or source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List recent posts made at an Instagram location') and immediately distinguishes itself from the sibling by naming get_v1_location_medias_top_chunk for top posts. An agent can pick between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to pass location_pk, to paginate with max_id from the previous response, and to use the top-posts sibling instead when appropriate. Both the when-to-use and the alternative are stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_location_medias_top_chunkA
Read-only

List top posts made at an Instagram location, one page per call. Pass location_pk; paginate with max_id from the previous response. Use get_v1_location_medias_recent_chunk for the newest posts. Live request to Instagram, billed per call. (GET /v1/location/medias/top/chunk)

ParametersJSON Schema
NameRequiredDescriptionDefault
max_idNo
location_pkYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: one page per call, cursor-style pagination using max_id from the prior response, and that this is a live Instagram request billed per call. It stops short of covering failure modes or rate limits, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the verb/resource, then pagination mechanics, then the sibling disambiguation, then the cost caveat. Every sentence adds information an agent needs; nothing is restated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 conveys the essential return contract indirectly (one page per call, next cursor via max_id) plus cost and the underlying endpoint. It does not describe the post fields returned, which is a minor gap for a list endpoint but not a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden and largely does: it tells the agent to pass location_pk and explains max_id as a continuation cursor taken from the previous response. It does not clarify accepted location_pk formats or that it is an integer PK, which leaves a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List top posts made at an Instagram location') and scopes the result as 'top' rather than 'recent'. It explicitly names the sibling get_v1_location_medias_recent_chunk as the tool for newest posts, so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the selection condition directly: use this for top posts, use get_v1_location_medias_recent_chunk for the newest posts. It also pre-empts the pagination workflow ('one page per call', 'paginate with max_id from the previous response'), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_search_hashtagsA
Read-only

Search Instagram hashtags by keyword. Use it when unsure of the exact tag; use get_v1_hashtag_by_name for one known hashtag. Live request to Instagram, billed per call. (GET /v1/search/hashtags)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false. The description adds genuinely non-redundant context: it is a live upstream request and is billed per call, which matters for agent budgeting and retry decisions. It stops short of describing rate limits or result volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses: purpose, routing rule, cost note. Front-loaded with the purpose and free of filler; the trailing endpoint path is the only slightly extraneous element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-param read tool with no output schema, the description covers purpose, alternative routing, and cost/latency behavior. The main gap is what the result contains (hashtag list vs. metadata), though that is a minor omission given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One required parameter with 0% schema description coverage, so the description carries the burden. 'Search hashtags by keyword' conveys that query is a keyword string, which is meaningful but thin — no format, length, or multi-term guidance. Baseline for a single undocumented param is around 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (Instagram hashtags) with the discriminating scope (by keyword). It explicitly names the sibling get_v1_hashtag_by_name as the alternative, so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('when unsure of the exact tag') and an explicit alternative for the opposite case (one known hashtag -> get_v1_hashtag_by_name). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_search_musicA
Read-only

Search Instagram music tracks by keyword (song or artist). Use get_v2_track_by_id for one known track. Live request to Instagram, billed per call. (GET /v1/search/music)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful non-schema context that annotations cannot express: this is a live upstream Instagram request and is billed per call, which materially affects how an agent should budget invocations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose before the alternative and the cost note. Every sentence adds signal, though the trailing '(GET /v1/search/music)' endpoint path is mild boilerplate that an agent rarely needs given the tool name already encodes the versioned route.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description would be the place to sketch return shape, and it does not. However, for a single-parameter search tool it covers purpose, the key alternative, and the notable live/billed behavior, leaving only result-format details unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there is one required parameter, so the description must carry the load. It does specify the query accepts a song or artist keyword, which is real semantic guidance beyond the bare schema field name; only the exact matching behavior (fuzzy vs exact, pagination) is left unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+domain ('Search Instagram music tracks by keyword') and immediately clarifies the query accepts song or artist names. It explicitly contrasts itself with the sibling get_v2_track_by_id, so an agent can disambiguate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear routing rule: keyword search here, but use get_v2_track_by_id when you already know a single track. It does not cover other plausible alternatives in the large sibling set (e.g. hashtag/location search), but for a music search the primary alternative is named and its trigger condition is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_share_by_urlA
Read-only

Resolve an Instagram share link (a URL that contains /s/) to the object it points to: returns its id (pk) and type. Works for stories and highlights only; then call get_v2_story_by_id or get_v2_highlight_by_id with the id. For post links use get_v2_media_info_by_url. Live request to Instagram, billed per call. (GET /v1/share/by/url)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint). The description adds real context beyond that: it is a live request to Instagram that is billed per call, plus the chaining workflow. It doesn't discuss failure modes (e.g., non-share URLs or expired links), so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by scope, follow-up routing, the alternative for posts, and billing/endpoint. No sentence is redundant; each adds a distinct, actionable fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a resolve tool with no output schema, the description supplies the return shape (id/pk and type), the workflow to continue with, the sibling alternative, and billing cost. Nothing essential to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the parameter. It compensates by defining the url as a link that contains /s/ and explaining that it resolves to a pk and type, which is meaningful semantics for the single argument. It omits format details like full URL vs. path fragment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Resolve) and resource (Instagram share link containing /s/), and explicitly says what it returns: the object's id (pk) and type. It distinguishes itself from siblings by naming get_v2_media_info_by_url for post links, so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes applicability ('Works for stories and highlights only'), names the follow-up calls (get_v2_story_by_id or get_v2_highlight_by_id with the returned id), and redirects post links to get_v2_media_info_by_url. Both when-to-use and when-not/alternative are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_user_search_followersA
Read-only

Search within an Instagram user's followers by name or username. Use it to check whether specific accounts follow a user; use get_g2_user_followers to list all followers. Pass user_id and query; force=true skips the account privacy check. Live request to Instagram, billed per call. (GET /v1/user/search/followers)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoSkip account privacy check
queryYes
user_idYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/openWorld/non-destructive, so the bar is lower, yet the description adds real operational context: `force=true` skips the account privacy check, the call is a live Instagram request, and it is billed per call. It does not mention rate limits or rate-limiting behavior, keeping it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core purpose and the sibling disambiguation, then usage, parameter notes, and operational caveats. Every sentence earns its place with no repetition of structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search endpoint with annotations covering the safety profile and no output schema requiring return-value explanation, the description supplies everything needed: purpose, alternative, parameter guidance, and cost/privacy caveats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only `force` is documented), so the description carries the rest. It explains that `user_id` and `query` are the inputs and clarifies the meaning of `force` as skipping the privacy check, compensating well for the schema gap even though it doesn't detail query-matching syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (an Instagram user's followers) with the scoping qualifier 'by name or username', and explicitly distinguishes itself from the sibling `get_g2_user_followers`. An agent can route between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case ('check whether specific accounts follow a user') and names the alternative tool for the contrasting case ('list all followers'). This is exactly the when/when-not/alternative guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v1_user_search_followingA
Read-only

Search within the accounts an Instagram user follows by name or username. Use it to check whether a user follows specific accounts; use get_g2_user_following to list all of them. Pass user_id and query; force=true skips the account privacy check. Live request to Instagram, billed per call. (GET /v1/user/search/following)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoSkip account privacy check
queryYes
user_idYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely new operational context: it is a live request to Instagram, it is billed per call, and `force=true` bypasses the account privacy check. It stops short of describing result volume or pagination, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then the alternative, then parameters and cost, ending with the endpoint. Sentences are dense and earn their place, though the mocked endpoint parenthesis adds little for an agent that already has the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, 3-parameter search tool with no output schema, the description covers purpose, alternative, key parameter behavior, billing, and privacy-bypass semantics. Missing only return-shape hints (e.g., result limits or pagination), which are minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%: only `force` carries a schema description, while `query` and `user_id` have none. The description partially compensates by clarifying that the query matches 'by name or username' and that `force=true` skips the privacy check, but it adds no format or constraint detail for `user_id`. With the low coverage, this lands at the baseline rather than above it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (accounts an Instagram user follows) with a scoping qualifier ('by name or username'). It explicitly distinguishes itself from the sibling `get_g2_user_following`, so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the selecting condition ('use it to check whether a user follows specific accounts') and names the alternative with its own purpose ('use `get_g2_user_following` to list all of them'). This is an explicit when-to-use / when-to-use-something-else statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_fbsearch_accountsA
Read-only

Search Instagram accounts by keyword. Use it to find a profile when you do not know the exact handle; use get_v2_user_by_username for an exact handle. Paginate with page_token from the previous response. Live request to Instagram, billed per call. (GET /v2/fbsearch/accounts)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
safe_intNoConvert all big integers to strings
page_tokenNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered. The description adds genuinely non-derivable context: this is a live (non-cached) request to Instagram billed per call, plus the pagination contract for `page_token`. It does not disclose rate limits or what a result record contains, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each load-bearing: purpose, routing alternative, pagination and cost. Front-loaded with the primary action and closed with the underlying endpoint. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search endpoint with no output schema, the description covers the essentials an agent needs: what it searches, the alternative for exact handles, how to paginate, and that calls are billed. Only the `safe_int` parameter and the shape of returned account records remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the description has to carry more weight. It does explain keyword semantics for `query` and the pagination role of `page_token`, but adds nothing about `safe_int` beyond the schema's own thin description. Partial compensation justifies the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search Instagram accounts by keyword') and immediately distinguishes itself from the closest sibling by naming `get_v2_user_by_username` for exact-handle lookups. An agent can select between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool ('when you do not know the exact handle') and names the alternative plus its selection condition. The pagination instruction adds a concrete procedural norm.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_fbsearch_reelsA
Read-only

Search Instagram reels by keyword. Use it to find short videos about a topic; use get_v1_hashtag_medias_clips_chunk for reels under one specific hashtag. Paginate with reels_max_id and rank_token from the previous response. Live request to Instagram, billed per call. (GET /v2/fbsearch/reels)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
safe_intNoConvert all big integers to strings
rank_tokenNo
reels_max_idNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value beyond that: it discloses that this is a live Instagram request billed per call, and that pagination relies on reels_max_id and rank_token from the previous response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero padding. Purpose is front-loaded, the alternative follows, and pagination/cost details are packed at the end. Every clause carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description covers selection, cost model, and pagination mechanics, which is most of what an agent needs. It does not hint at the response shape, though the pagination note indirectly signals the return fields an agent will reuse.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (safe_int only), so the description must compensate. It explains the origin and use of rank_token and reels_max_id as pagination cursors from the prior response, which the schema does not say. It leaves query semantics and the safe_int flag to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (search reels by keyword) and immediately distinguishes it from the nearest sibling by naming get_v1_hashtag_medias_clips_chunk as the hashtag-scoped alternative. An agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('find short videos about a topic') plus an explicit when-not/alternative ('use get_v1_hashtag_medias_clips_chunk for reels under one specific hashtag'). Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_fbsearch_topsearchA
Read-only

Search Instagram for top content by keyword. Use it for a broad first look; use get_v2_fbsearch_accounts to search only accounts, get_v2_fbsearch_reels only reels and get_v1_search_hashtags only hashtags. Paginate with next_max_id from the previous response. Live request to Instagram, billed per call. (GET /v2/fbsearch/topsearch)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
safe_intNoConvert all big integers to strings
next_max_idNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, non-destructive, openWorld). The description adds pagination mechanism ('Paginate with next_max_id'), cost model ('billed per call'), and endpoint nature ('Live request to Instagram')—genuine behavioral context beyond annotations. Doesn't cover rate limits or error behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then routing, then pagination/cost. Every sentence earns its place; zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 33% param coverage, the description covers purpose, alternatives, pagination, and billing—most of what an agent needs. It stops short of describing return shape (top results structure) or query syntax, minor gaps for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, and the description explains next_max_id usage for pagination (which is the one parameter the schema leaves undocumented beyond its title). 'safe_int' and 'query' are not elaborated in the description. Baseline 3 given the partial schema coverage and the useful next_max_id hint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Search Instagram for top content by keyword') and explicitly differentiates from three named siblings (accounts, reels, hashtags). An agent can select this tool over get_v2_fbsearch_accounts/reels without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'Use it for a broad first look' paired with three named alternatives and the narrowing condition ('search only accounts', 'only reels', 'only hashtags'). Provides both when-to-use and when-to-use-alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_hashtag_medias_recentA
Read-only

List recent posts under an Instagram hashtag, one page per call. Use get_v2_hashtag_medias_top for top posts and get_v1_hashtag_medias_clips_chunk for reels only. Pass name without #; for the next page pass next_page_id from the previous response as page_id. Live request to Instagram, billed per call. (GET /v2/hashtag/medias/recent)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
page_idNoUse value of field `next_page_id` from response for getting next page
safe_intNoConvert all big integers to strings

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds genuinely useful context beyond that: one page per call (pagination semantics), a live request to Instagram, and per-call billing. It does not describe rate limits or error behavior, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences plus an endpoint tag. The core action leads, sibling routing follows, then parameter mechanics and cost. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the one response detail an agent needs for continuation (next_page_id). Billing and pagination behavior are stated. Only the absence of error/limit behavior keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (name and page_id lack inline descriptions; safe_int is documented). The description compensates with two non-obvious details: pass `name` without the '#' character, and page_id should come from the previous response's next_page_id. It says nothing about safe_int, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List recent posts under an Instagram hashtag') and immediately scopes it against siblings by naming get_v2_hashtag_medias_top for top posts and get_v1_hashtag_medias_clips_chunk for reels. An agent can distinguish this tool from its nearest neighbors without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use the top-posts tool for top posts, the clips tool for reels, and this one for recent posts. It also gives the pagination workflow (pass next_page_id from the previous response as page_id), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_hashtag_medias_topA
Read-only

List top posts under an Instagram hashtag, one page per call. Use get_v2_hashtag_medias_recent for the newest posts and get_v1_hashtag_medias_clips_chunk for reels only. Pass name without #; for the next page pass next_page_id from the previous response as page_id. Live request to Instagram, billed per call. (GET /v2/hashtag/medias/top)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
page_idNoUse value of field `next_page_id` from response for getting next page
safe_intNoConvert all big integers to strings

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it is a live request to Instagram and billed per call, and it returns one page per call. It stops short of rate-limit or error-handling details, but with annotations carrying the safety burden this is a strong addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then alternatives, then parameter usage, then the live/billing caveat. Every sentence earns its place, though the parenthetical endpoint at the end is slightly redundant for an agent that already has the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, paginated listing tool with no output schema, the description covers the essential operational facts: pagination flow, sibling routing, and cost model. It doesn't explain the full shape of returned media objects, but that omission is minor since no output schema is provided and the key pagination field is mentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: page_id and safe_int have schema descriptions, but name does not. The description compensates by specifying that name is passed without '#' and by explaining how to set page_id from the previous response's next_page_id. safe_int is left to the schema, which is sufficient given its existing description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List top posts under an Instagram hashtag') and explicitly distinguishes itself from two sibling tools by naming them and their scopes. An agent can tell exactly what this tool returns versus alternatives without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs when to use alternatives: 'get_v2_hashtag_medias_recent' for newest posts and 'get_v1_hashtag_medias_clips_chunk' for reels only. Also gives clear pagination guidance ('for the next page pass next_page_id... as page_id') and a formatting rule ('Pass name without #'), leaving no ambiguity about invocation context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_highlight_by_idA
Read-only

Get one Instagram story highlight by id. Use get_v2_user_highlights to list a user's highlights and get_v1_highlight_by_url when you have a link. Live request to Instagram, billed per call. (GET /v2/highlight/by/id)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
safe_intNoConvert all big integers to strings

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful non-schema context: it is a live request to Instagram and is billed per call, which affects agent retry/caching decisions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, then sibling routing, then cost/endpoint metadata. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with no output schema, the definition covers purpose, alternatives, cost, and endpoint. The only omission is the expected format of the required id argument, which an agent would have to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% — the required 'id' parameter has no description, and the description does not clarify its format (numeric pk vs. shortcode). The only documented parameter, safe_int, is explained solely in the schema, so the description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get one Instagram story highlight by id') and immediately contrasts itself with two named siblings, so an agent can distinguish it from get_v2_user_highlights and get_v1_highlight_by_url without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use get_v2_user_highlights to list a user's highlights and get_v1_highlight_by_url when you have a link. The condition that selects this tool (you already have an id) is clearly implied by contrast.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_media_commentsA
Read-only

Get comments on an Instagram post, about 15 per call. Pass the media id; for the next page pass the page id from the previous response as page_id. Use get_v2_media_comments_replies for replies under one comment and get_v2_media_likers for users who liked the post. Live request to Instagram, one billed request per page. (GET /v2/media/comments)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
page_idNo
safe_intNoConvert all big integers to strings
can_support_threadingNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds valuable context beyond that: 'about 15 per call' indicates return size, and 'Live request to Instagram, one billed request per page' discloses cost and network behavior. It does not cover rate limits or error handling, but the added billing and pagination context is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and pagination instructions, followed by alternative tool routing and billing context. Every sentence earns its place, and the GET endpoint note at the end is compact and useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only paginated endpoint with no output schema, the description covers purpose, pagination, alternatives, and cost. The only notable gap is the unexplained `can_support_threading` parameter, but the tool's core usage is fully described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must compensate. It explains the two most important parameters (`id` and `page_id`) clearly, but `can_support_threading` is left completely undocumented in both the schema and the description. The description adds meaning for the key parameters but does not fully close the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get comments on an Instagram post') and explicitly distinguishes itself from siblings by naming `get_v2_media_comments_replies` and `get_v2_media_likers`. An agent can identify the tool's scope without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use instructions: pass the media `id`, use `page_id` from the previous response for pagination, and use alternative tools for replies and likers. The conditions that select each alternative are clearly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_media_comments_repliesA
Read-only

Get replies under one comment of an Instagram post. Use it to read a thread; use get_v2_media_comments for the top-level comments. Pass media_id and comment_id (both from the comments tool); paginate with min_id from the previous response. Live request to Instagram, billed per call. (GET /v2/media/comments/replies)

ParametersJSON Schema
NameRequiredDescriptionDefault
min_idNo
media_idYes
safe_intNoConvert all big integers to strings
comment_idYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/open-world/non-destructive, but the description adds cost and latency context that annotations cannot: 'Live request to Instagram, billed per call', plus the underlying endpoint. It doesn't mention rate limits or response shape, but for a read tool the added cost disclosure is genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences plus an endpoint tag; purpose, routing, parameter provenance, and cost are all front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated read endpoint with no output schema, the description supplies everything needed to call it correctly: required inputs and their source, the pagination mechanism, and the cost model.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25%, so the description must compensate, and it does: it explains that media_id and comment_id both come from the comments tool and that min_id is the pagination cursor from the previous response. Only safe_int is left to its schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get replies under one comment of an Instagram post') and explicitly contrasts with the sibling top-level comments tool. An agent can distinguish it from get_v2_media_comments without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('read a thread') and names the alternative tool for the other case ('use get_v2_media_comments for the top-level comments'). It also states where the required IDs come from, removing inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_media_info_by_codeA
Read-only

Get an Instagram post or reel by its shortcode (the part after /p/ or /reel/ in the link). Use get_v2_media_info_by_url when you have a full link and get_v2_media_info_by_id for a numeric media id. Returns the media object, or 404 for deleted or unavailable posts; promoted (ad) posts may also return 404. User tags are not included for videos, use get_gql_media_usertags for those. Live request to Instagram, billed per call. (GET /v2/media/info/by/code)

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
safe_intNoConvert all big integers to strings

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/openWorld/destructive=false, but the description adds substantial extra context: 404 for deleted/unavailable and promoted posts, user tags absent for videos, and that this is a live billed request. Error and cost behavior are disclosed 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then alternative routing, then behavioral caveats and billing, ending with the endpoint. Dense but every sentence carries distinct, useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-output-schema tool, the description covers input meaning, sibling routing, error cases, and cost. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% (safe_int documented, code not). The description compensates by defining 'code' as the shortcode segment after /p/ or /reel/, which is meaningfully more than the schema's bare string title. It doesn't elaborate on safe_int, but the schema already does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) plus resource (Instagram post or reel) and clarifies the key input ('shortcode, the part after /p/ or /reel/'). It explicitly distinguishes itself from get_v2_media_info_by_url and get_v2_media_info_by_id, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit alternatives keyed to input form: use by_url for a full link, by_id for a numeric media id, and get_gql_media_usertags for user tags on videos. This is when-to-use-this vs when-to-use-siblings guidance with concrete conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_media_info_by_idA
Read-only

Get an Instagram post or reel by numeric media id. Use get_v2_media_info_by_code for a shortcode and get_v2_media_info_by_url for a full link. Returns the media object, or 404 for deleted or unavailable posts; promoted (ad) posts may also return 404. User tags are not included for videos, use get_gql_media_usertags for those. Live request to Instagram, billed per call. (GET /v2/media/info/by/id)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
safe_intNoConvert all big integers to strings

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint), and the description adds substantial context beyond them: 404 on deleted/unavailable posts, 404 for promoted (ad) posts, missing user tags on videos, and that this is a live billed request.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by disambiguation, then behavioral caveats, and closes with the endpoint. Every sentence carries distinct information and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 compensates by describing the return (media object) and failure modes (404). Combined with the sibling routing and billing note, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: safe_int is documented in the schema, while id is not. The description adds meaning to id ('numeric media id') but says nothing about safe_int. This is the baseline expected when the schema partially carries parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get an Instagram post or reel by numeric media id') and immediately distinguishes itself from sibling tools by_code and by_url. An agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names alternatives and the conditions that select them: by_code for shortcodes, by_url for full links, and get_gql_media_usertags for user tags on videos. This is prescriptive when-to-use guidance with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_media_info_by_urlA
Read-only

Get an Instagram post or reel by its link (instagram.com/p/... or /reel/...). Use get_v2_media_info_by_code for a bare shortcode. Returns the media object, 404 for deleted or unavailable posts and 400 for links that are not posts: use get_v2_story_by_url for story links and get_v1_share_by_url for /s/ share links. Promoted (ad) posts may also return 404. Live request to Instagram, billed per call. (GET /v2/media/info/by/url)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
safe_intNoConvert all big integers to strings

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld/non-destructive; the description adds rich behavioral context the annotations cannot convey: 404 for deleted/unavailable/promoted posts, 400 for non-post links, and that it is a live Instagram request billed per call. This is exactly the extra context annotations don't supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then routing alternatives, then error/billing semantics, then the HTTP endpoint. Dense but every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description states what is returned ('the media object') and enumerates the error conditions (404 deleted/unavailable/promoted, 400 non-post). For a 2-param read tool this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% – url is self-evident and safe_int is documented in the schema. The description adds the accepted URL formats for url, but does not explain safe_int or its default. Baseline 3 is appropriate when the schema carries most of the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get an Instagram post or reel by its link'), gives the exact URL forms it accepts, and explicitly routes bare shortcodes to the sibling get_v2_media_info_by_code. It is unmistakably distinct from the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use rules: use get_v2_media_info_by_code for bare shortcodes, get_v2_story_by_url for story links, get_v1_share_by_url for /s/ share links, and the accepted URL patterns (instagram.com/p/..., /reel/...). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_media_likersA
Read-only

Get users who liked an Instagram post, by media id. Use get_gql_comment_likers_chunk for likers of a single comment and get_v2_media_comments for commenters. Live request to Instagram, billed per call. (GET /v2/media/likers)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
safe_intNoConvert all big integers to strings

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint, destructiveHint=false, openWorldHint), but the description adds genuinely non-redundant behavior: it is a live Instagram request billed per call, and it exposes the underlying endpoint. It does not disclose pagination or rate/volume limits, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences plus a parenthetical endpoint; the core purpose is front-loaded and every clause (scope, alternatives, billing, endpoint) carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still conveys what is returned (users) and the key cost/network characteristics. Missing only return-shape and pagination detail, which is a minor gap for a simple list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: `safe_int` is documented in the schema while `id` is not. The description partially compensates by clarifying that `id` is the media id rather than a user or comment id, but it says nothing about when or why to use `safe_int`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get users who liked an Instagram post') with the identifying key ('by media `id`'), and explicitly distinguishes itself from the two closest siblings that also return engagement actors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes adjacent needs to alternatives: `get_gql_comment_likers_chunk` for comment likers and `get_v2_media_comments` for commenters, which implies this tool is for post-level likers. It lacks an explicit statement of prerequisites (e.g. public account, id source), so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_story_by_idA
Read-only

Get one Instagram story by its id. Use get_v2_story_by_url when you have a story link and get_v2_user_stories to list a user's active stories. Live request to Instagram, billed per call. (GET /v2/story/by/id)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
safe_intNoConvert all big integers to strings

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds genuinely useful context beyond that: it is a live network request to Instagram and is billed per call, which affects cost-aware invocation. Return format and failure behavior are not described, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, each earning its place: purpose, routing, and cost. The primary intent is front-loaded and the endpoint path is a compact trailing annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-record read tool with an output schema absent but a simple return shape, the description covers routing, cost, and safety. It omits only minor detail about what is returned or error behavior, which is a small gap for a getter of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: safe_int carries its own description while id does not. The description implies id is the story identifier but adds no format, type, or validation detail beyond the schema and tool name. A baseline 3 is appropriate when the schema does most of the work and the description contributes nothing param-specific.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get one Instagram story by its id') and explicitly disambiguates from sibling tools by name. An agent can route between story-by-id, story-by-url, and user-stories without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the two alternatives explicitly with the condition that selects each: get_v2_story_by_url when you hold a link, get_v2_user_stories to list a user's active stories. This is textbook when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_story_by_urlA
Read-only

Get one Instagram story by its link. For share links that contain /s/, call get_v1_share_by_url first to resolve them. Use get_v2_story_by_id when you have the id. Live request to Instagram, billed per call. (GET /v2/story/by/url)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
safe_intNoConvert all big integers to strings

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint=false, so safety is covered. The description adds real value beyond that: it is a live request to Instagram billed per call, which is a cost/latency signal the annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core action, followed by routing, cost, and endpoint. Every sentence earns its place and the endpoint is a bonus for verification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, open-world lookup with no output schema, the description covers action, alternatives, and cost. It could say more about what a returned story contains or error/auth behavior, but it is largely sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: safe_int is documented in the schema but url has no description field. The description adds only that the input is a story 'link' and notes the /s/ share-link caveat, which is useful but thin relative to the undocumented url format expectations. Baseline 3 fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get), resource (one Instagram story), and access path (by its link), and explicitly distinguishes itself from get_v2_story_by_id. An agent can tell it apart from the many sibling getters without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: resolve /s/ share links via get_v1_share_by_url first, and use get_v2_story_by_id when an id is available. When-to-use and when-to-use-alternatives are both present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_track_by_idA
Read-only

Get an Instagram music track by track_id. Use get_v1_search_music to find tracks by keyword. For the next page pass next_page_id from the previous response as page_id. Live request to Instagram, billed per call. (GET /v2/track/by/id)

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNoUse value of field `next_page_id` from response for getting next page
safe_intNoConvert all big integers to strings
track_idYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, so safety is covered. The description adds genuinely useful operational context beyond them: it is a live Instagram request billed per call, and it explains the pagination handoff. It stops short of describing rate limits or what a failed lookup returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler, with the core purpose front-loaded and pagination and billing details following in priority order. Every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with no output schema, the description covers identity, alternative, pagination and cost. Only the safe_int parameter and any error/empty-result behavior are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%; page_id is documented in the schema and echoed in the description, and track_id is self-evident. The third parameter, safe_int, is left unexplained in the description, so it adds little beyond the schema for a moderate-coverage case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), a specific resource ('Instagram music track'), and the identifying key ('track_id'). It also distinguishes itself from the sibling get_v1_search_music, which is the keyword-search counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use this tool for lookup by id, use get_v1_search_music to find tracks by keyword, and pass next_page_id as page_id for the next page. Both the when and the alternative are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_by_idA
Read-only

Get an Instagram profile by numeric user id. Use it when you already have the id from another tool; use get_v2_user_by_username when you only have a handle. Returns the same user object. Live request to Instagram, billed per call. (GET /v2/user/by/id)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
safe_intNoConvert all big integers to strings

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint and destructiveHint. The description adds genuinely useful context beyond them: it is a live request to Instagram and is billed per call, which affects agent invocation strategy. It also notes the return is the same user object as the username variant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler, with the core purpose and the sibling routing front-loaded and the billing caveat last.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter lookup with no output schema, the definition covers what the tool does, when to use it, what it returns, and its cost profile. The only minor gap is the undocumented safe_int parameter, which is unaddressed in both schema and description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: safe_int is documented inline but id is not. The description adds 'numeric user id,' which clarifies the id parameter's expected form, but nothing is said about safe_int or its behavior. Baseline 3 given partial schema coverage and the marginal added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Get an Instagram profile by numeric user id.' It also names the sibling it is not (get_v2_user_by_username) so the agent can distinguish the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'Use it when you already have the id from another tool; use get_v2_user_by_username when you only have a handle.' Both the when and the alternative are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_by_usernameA
Read-only

Get an Instagram profile by username (without @). Use it when you have a handle; use get_v2_user_by_id when you already know the numeric user id (faster), and get_gql_user_about for the "About this account" panel. Returns the user object; pass its pk as the user id to the other user tools. Live request to Instagram, one billed request per call. (GET /v2/user/by/username)

ParametersJSON Schema
NameRequiredDescriptionDefault
safe_intNoConvert all big integers to strings
usernameYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the safety profile (readOnly, non-destructive, openWorld), and the description adds behavior that annotations cannot convey: it is a live request to Instagram, costs one billed request per call, and returns a user object whose pk feeds downstream tools. Cost and live-request semantics are exactly the kind of context annotations miss.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, front-loaded with the tool's purpose, then routing alternatives, then return/behavior notes, then the endpoint. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param read tool with no output schema, the description covers purpose, input format, alternatives, return object, chaining, cost, and endpoint. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: username has no schema description but is explained in the description ('without @'), while safe_int is undocumented in both the description and a thin schema entry. The 'without @' clarification compensates for the required param's otherwise bare name, so this sits above the 3 baseline despite the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get an Instagram profile by username) and explicitly distinguishes itself from get_v2_user_by_id and get_gql_user_about. The '(without @)' clarifies the input format place. An agent can route between username-based, id-based, and about-panel tools without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('when you have a handle'), names two alternatives with their selection conditions ('when you already know the numeric user id (faster)', 'for the About this account panel'), and adds a downstream chaining hint ('pass its pk as the user id to the other user tools'). This is close to ideal routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_clipsA
Read-only

List an Instagram user's reels (short videos), one page per call. Use it for reels only; use get_gql_user_medias for all posts. Pass user_id; for the next page pass next_page_id from the previous response as page_id. Live request to Instagram, billed per call. (GET /v2/user/clips)

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNoUse value of field `next_page_id` from response for getting next page
user_idNoId of user account
safe_intNoConvert all big integers to strings

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and open-world safety. The description adds genuinely useful context beyond them: it is a live request to Instagram, it is billed per call, it returns one page at a time, and the underlying endpoint. These are traits the schema and annotations cannot convey. Missing only rate-limit or quota detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the scope constraint and routing rule, then the pagination mechanics, then the deployment and billing facts. Every sentence earns its place with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so the description must carry the return shape. It does: one page per call plus the next_page_id handoff. Combined with annotations and a fully covered schema, an agent has everything needed to call and chain this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented. The description reinforces the pagination handoff (page_id from next_page_id) and names user_id, but adds no syntax or format detail the schema lacks. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List an Instagram user's reels') and explicitly distinguishes the tool from its closest sibling by naming `get_gql_user_medias` and contrasting scope ('reels only' vs 'all posts'). An agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative and the condition that selects it ('Use it for reels only; use get_gql_user_medias for all posts'). Also supplies a concrete conditional flow for pagination: pass next_page_id as page_id on the following call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_highlightsA
Read-only

List an Instagram user's story highlights (saved story collections) by user id, one page per call. Use get_v2_highlight_by_id to open one highlight and get_v2_user_highlights_by_username when you only have a handle. For the next page pass next_page_id from the previous response as page_id (amount is ignored). Live request to Instagram, billed as 2 requests per call. (GET /v2/user/highlights)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoSkip account privacy check
amountNoDeprecated and ignored. Use page_id / next_page_id to paginate.
page_idNoUse value of field `next_page_id` from response for getting next page
user_idYes
safe_intNoConvert all big integers to strings

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds useful context beyond that: it is a live request to Instagram, billed as 2 requests per call, and pagination works one page per call with `amount` ignored.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then efficiently covers alternatives, pagination, billing, and the endpoint. Every sentence earns its place with no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated list endpoint with no output schema, the description provides enough context: what is returned at a high level, how to paginate, when to use sibling tools, and the live-request billing model. Annotations cover the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the schema already documents most parameters. The description reinforces the `user_id` and `page_id`/`next_page_id` flow, but it does not add meaning beyond the schema for parameters like `force` or `safe_int`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list an Instagram user's story highlights by user id. It distinguishes this tool from siblings by naming `get_v2_highlight_by_id` for opening a single highlight and `get_v2_user_highlights_by_username` for handle-only lookups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names alternatives and the conditions that select them: use `get_v2_highlight_by_id` to open one highlight and `get_v2_user_highlights_by_username` when you only have a handle. It also gives pagination instructions for continuing to the next page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_highlights_by_usernameA
Read-only

List an Instagram user's story highlights by username, one page per call. Use it only when you have a handle and not the user id: it is slower than get_v2_user_highlights and billed as 3 requests per call instead of 2. For the next page pass next_page_id from the previous response as page_id. Live request to Instagram. (GET /v2/user/highlights/by/username)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoSkip account privacy check
amountNoDeprecated and ignored. Use page_id / next_page_id to paginate.
page_idNoUse value of field `next_page_id` from response for getting next page
safe_intNoConvert all big integers to strings
usernameYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, openWorld, non-destructive), and the description adds genuinely new operational context: it is a live Instagram request, it is slower than the id-based sibling, and it is billed at 3 requests per call instead of 2. Cost and latency disclosure is exactly the kind of behavior annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with what the tool does, then the selection rule, then the pagination mechanism. No filler; every clause carries either routing or invocation information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description supplies the return-value dependency needed to paginate (the next_page_id field). Combined with the cost/latency note and the routing rule, an agent has everything required to call it correctly and decide when not to.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so most parameters are documented in the schema, but the description adds the cross-parameter workflow the schema cannot: passing next_page_id from the previous response as page_id. It does not explain force, safe_int, or the deprecated amount, leaving those to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List an Instagram user's story highlights by username') plus the pagination scope ('one page per call'). It explicitly differentiates itself from the sibling get_v2_user_highlights, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use rule ('only when you have a handle and not the user id') and names the preferred alternative for the id case. It also states how to paginate via next_page_id, covering the follow-up invocation path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_storiesA
Read-only

Get an Instagram user's active stories by user id. Use it when you have the id; use get_v2_user_stories_by_username when you only have a handle and get_v2_user_highlights for saved highlight collections. force=true skips the account privacy check. Live request to Instagram, billed as 2 requests per call. (GET /v2/user/stories)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoSkip account privacy check
user_idYes
safe_intNoConvert all big integers to strings

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely non-structured context: force=true skips the account privacy check, this is a live request to Instagram, and it is billed as 2 requests per call. It doesn't describe pagination or rate-limit ceilings, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight paragraph, front-loaded with the core purpose, then routing, then cost/privacy caveats, then the endpoint. Every clause carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries return-value burden, which it only partially addresses (it says 'active stories' but not the shape of the response). It does cover the billing, privacy override, and transport caveats an agent needs before calling a metered live endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, so the schema documents force and safe_int, and the description's force explanation largely restates the schema's 'Skip account privacy check' with added behavioral framing. safe_int and user_id receive no description-level treatment, so this is adequate but not compensating for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get an Instagram user's active stories by user id') and immediately distinguishes itself from the two nearest siblings by naming the id-vs-handle-vs-highlights split. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing guidance: use this when you have the id, use get_v2_user_stories_by_username when you only have a handle, use get_v2_user_highlights for saved highlights. Conditions for each alternative are stated, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_stories_by_usernameA
Read-only

Get an Instagram user's active stories by username. Use it only when you have a handle and not the user id: it is slower than get_v2_user_stories and billed as 3 requests per call instead of 2. Live request to Instagram. (GET /v2/user/stories/by/username)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoSkip account privacy check
safe_intNoConvert all big integers to strings
usernameYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond them: it is a live Instagram request, slower than the id-based variant, and billed at 3 requests per call vs 2. It does not describe the story payload shape, but that is a minor gap for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences plus an endpoint annotation. The core purpose and the differentiating usage caveat are front-loaded, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-output-schema tool, the description covers purpose, selection criteria, cost, and liveness, which is most of what an agent needs. Return-format detail is absent but not essential given it is a plain read endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% - force and safe_int carry their own descriptions, and username is self-evident. The description adds no parameter-level meaning (e.g. what force skips, or how safe_int affects output), so it does not exceed the schema's own documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) plus resource (an Instagram user's active stories) and the scoping key (by username). It explicitly distinguishes itself from the sibling get_v2_user_stories, so an agent can separate the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('only when you have a handle and not the user id') and names the alternative (get_v2_user_stories) along with the trade-off (slower, higher billing). The routing decision is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_suggested_profilesA
Read-only

Get the accounts Instagram suggests as related to a given user. Use it to find similar accounts; use get_v2_fbsearch_accounts to search accounts by keyword instead. Pass user_id; expand_suggestion=true returns more detail per account. Live request to Instagram, billed per call. (GET /v2/user/suggested/profiles)

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes
safe_intNoConvert all big integers to strings
expand_suggestionNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful non-annotation context: it is a live Instagram request billed per call. It doesn't describe result shape or pagination, but the cost disclosure is real added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the alternative, then parameters, then cost. Dense but every sentence carries information; the parenthetical endpoint restates the name somewhat redundantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 still covers purpose, alternative, key parameter behavior, and billing. It is sufficient to invoke correctly; only the `safe_int` parameter and return shape are left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only `safe_int` is documented in the schema). The description compensates for `expand_suggestion` by explaining that true returns more detail per account, and mentions passing `user_id`, but `safe_int` remains unexplained in both places. Partial compensation warrants a mid score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get the accounts Instagram suggests as related to a given user.' It also names the sibling `get_v2_fbsearch_accounts` and the condition that distinguishes them, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it 'to find similar accounts' and directs keyword search to `get_v2_fbsearch_accounts` instead. Both the when and the when-not are stated with the alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_v2_user_tag_mediasA
Read-only

List posts in which an Instagram user is tagged, one page per call. Use it to see who features an account; use get_gql_user_medias for the user's own posts. Pass user_id; for the next page pass next_page_id from the previous response as page_id. Live request to Instagram, billed per call. (GET /v2/user/tag/medias)

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNoUse value of field `next_page_id` from response for getting next page
user_idNoId of user account
safe_intNoConvert all big integers to strings

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so safety is covered. The description adds material context beyond them: it is a 'Live request to Instagram, billed per call' — a cost/latency signal the annotations do not carry — plus one-page-per-call pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose, sibling routing, pagination mechanics, all front-loaded with zero waste. The endpoint path in parentheses is the only arguably redundant element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only paginated list tool with no output schema, the description covers what an agent needs: what it returns, how to page, and the billing implication. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page_id, user_id, and safe_int are already documented in the schema. The description restates the page_id/next_page_id chaining rule, which reinforces but does not add meaning beyond the schema's own description. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List posts in which an Instagram user is tagged') and immediately differentiates from the sibling get_gql_user_medias ('the user's own posts'). An agent can distinguish tagged-media from own-media without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative and the condition that selects it ('use it to see who features an account; use get_gql_user_medias for the user's own posts'). Also gives pagination usage guidance, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 85 tool updatesv1.1.1
    • Removedget_a2_user
    • Addedget_g2_location_by_id
    • Removedget_gql_media_likers
    • Removedget_gql_topsearch
    • Removedget_gql_user_clips
    • Removedget_gql_user_followers_chunk
    • Removedget_gql_user_following_chunk
    • Removedget_gql_user_web_profile_info
    • Removedget_v1_fbsearch_topsearch
    • Removedget_v1_fbsearch_topsearch_hashtags
    • Removedget_v1_hashtag_medias_top_chunk
    • Removedget_v1_hashtag_medias_top_recent_chunk
    • Removedget_v1_location_by_id
    • Removedget_v1_location_guides
    • Removedget_v1_location_medias_recent
    • Removedget_v1_location_medias_top
    • Removedget_v1_media_by_code
    • Removedget_v1_media_by_id
    • Removedget_v1_media_by_url
    • Removedget_v1_media_code_from_pk
    • Removedget_v1_media_comments_chunk
    • Removedget_v1_media_insight
    • Removedget_v1_media_likers
    • Removedget_v1_media_oembed
    • Removedget_v1_media_pk_from_code
    • Removedget_v1_media_pk_from_url
    • Removedget_v1_media_user
    • Removedget_v1_search_users
    • Removedget_v1_share_by_code
    • Removedget_v1_share_reel_by_url
    • Removedget_v1_story_by_id
    • Removedget_v1_story_by_url
    • Removedget_v1_story_download
    • Removedget_v1_story_download_by_story_url
    • Removedget_v1_story_download_by_url
    • Removedget_v1_user_about
    • Removedget_v1_user_by_id
    • Removedget_v1_user_by_url
    • Removedget_v1_user_by_username
    • Removedget_v1_user_clips_chunk
    • Removedget_v1_user_followers_chunk
    • Removedget_v1_user_following_chunk
    • Removedget_v1_user_highlights
    • Removedget_v1_user_highlights_by_username
    • Removedget_v1_user_medias_chunk
    • Removedget_v1_user_medias_pinned
    • Removedget_v1_user_stories
    • Removedget_v1_user_stories_by_username
    • Removedget_v1_user_tag_medias_chunk
    • Changedget_v2_fbsearch_accounts1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_fbsearch_places
    • Changedget_v2_fbsearch_reels1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_fbsearch_topsearch1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_hashtag_by_name
    • Changedget_v2_hashtag_medias_recent1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_hashtag_medias_top1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_highlight_by_id1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_media_comment_offensive
    • Changedget_v2_media_comments1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_media_comments_replies1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_media_info_by_code1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_media_info_by_id1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_media_info_by_url1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_media_likers1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_media_template
    • Removedget_v2_search_hashtags
    • Removedget_v2_search_music
    • Changedget_v2_story_by_id1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_story_by_url1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_track_by_canonical_id
    • Changedget_v2_track_by_id1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_track_stream_by_id
    • Changedget_v2_user_by_id1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_user_by_username1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_user_explore_businesses_by_id
    • Removedget_v2_user_followers
    • Removedget_v2_user_following
    • Changedget_v2_user_highlights4 fields changed
      • addedInput schema / properties / amount / deprecated
        Added value: +true
      • addedInput schema / properties / amount / description
        Added value: +"Deprecated and ignored. Use page_id / next_page_id to paginate."
      • addedInput schema / properties / page_id
        Added value: +{
        +  "default": "",
        +  "description": "Use value of field `next_page_id` from response for getting next page",
        +  "title": "Page Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_user_highlights_by_username4 fields changed
      • addedInput schema / properties / amount / deprecated
        Added value: +true
      • addedInput schema / properties / amount / description
        Added value: +"Deprecated and ignored. Use page_id / next_page_id to paginate."
      • addedInput schema / properties / page_id
        Added value: +{
        +  "default": "",
        +  "description": "Use value of field `next_page_id` from response for getting next page",
        +  "title": "Page Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_user_suggested_profiles1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Changedget_v2_user_tag_medias1 field changed
      • addedInput schema / properties / safe_int
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Convert all big integers to strings",
        +  "title": "Safe Int"
        +}
    • Removedget_v2_userstream_by_id
    • Removedget_v2_userstream_by_username
    • Removedget_v3_fbsearch_accounts
    • Removedget_v3_fbsearch_places
  2. 106 tool updatesv1.0.2
    • First observedget_a2_user
    • First observedget_g2_user_followers
    • First observedget_g2_user_following
    • First observedget_gql_comment_likers_chunk
    • First observedget_gql_media_likers
    • First observedget_gql_media_usertags
    • First observedget_gql_topsearch
    • First observedget_gql_user_about
    • First observedget_gql_user_clips
    • First observedget_gql_user_followers_chunk
    • First observedget_gql_user_following_chunk
    • First observedget_gql_user_medias
    • First observedget_gql_user_reposts
    • First observedget_gql_user_web_profile_info
    • First observedget_v1_fbsearch_places
    • First observedget_v1_fbsearch_topsearch
    • First observedget_v1_fbsearch_topsearch_hashtags
    • First observedget_v1_hashtag_by_name
    • First observedget_v1_hashtag_medias_clips_chunk
    • First observedget_v1_hashtag_medias_top_chunk
    • First observedget_v1_hashtag_medias_top_recent_chunk
    • First observedget_v1_highlight_by_url
    • First observedget_v1_location_by_id
    • First observedget_v1_location_guides
    • First observedget_v1_location_medias_recent
    • First observedget_v1_location_medias_recent_chunk
    • First observedget_v1_location_medias_top
    • First observedget_v1_location_medias_top_chunk
    • First observedget_v1_location_search
    • First observedget_v1_media_by_code
    • First observedget_v1_media_by_id
    • First observedget_v1_media_by_url
    • First observedget_v1_media_code_from_pk
    • First observedget_v1_media_comments_chunk
    • First observedget_v1_media_insight
    • First observedget_v1_media_likers
    • First observedget_v1_media_oembed
    • First observedget_v1_media_pk_from_code
    • First observedget_v1_media_pk_from_url
    • First observedget_v1_media_user
    • First observedget_v1_search_hashtags
    • First observedget_v1_search_music
    • First observedget_v1_search_users
    • First observedget_v1_share_by_code
    • First observedget_v1_share_by_url
    • First observedget_v1_share_reel_by_url
    • First observedget_v1_story_by_id
    • First observedget_v1_story_by_url
    • First observedget_v1_story_download
    • First observedget_v1_story_download_by_story_url
    • First observedget_v1_story_download_by_url
    • First observedget_v1_user_about
    • First observedget_v1_user_by_id
    • First observedget_v1_user_by_url
    • First observedget_v1_user_by_username
    • First observedget_v1_user_clips_chunk
    • First observedget_v1_user_followers_chunk
    • First observedget_v1_user_following_chunk
    • First observedget_v1_user_highlights
    • First observedget_v1_user_highlights_by_username
    • First observedget_v1_user_medias_chunk
    • First observedget_v1_user_medias_pinned
    • First observedget_v1_user_search_followers
    • First observedget_v1_user_search_following
    • First observedget_v1_user_stories
    • First observedget_v1_user_stories_by_username
    • First observedget_v1_user_tag_medias_chunk
    • First observedget_v2_fbsearch_accounts
    • First observedget_v2_fbsearch_places
    • First observedget_v2_fbsearch_reels
    • First observedget_v2_fbsearch_topsearch
    • First observedget_v2_hashtag_by_name
    • First observedget_v2_hashtag_medias_recent
    • First observedget_v2_hashtag_medias_top
    • First observedget_v2_highlight_by_id
    • First observedget_v2_media_comment_offensive
    • First observedget_v2_media_comments
    • First observedget_v2_media_comments_replies
    • First observedget_v2_media_info_by_code
    • First observedget_v2_media_info_by_id
    • First observedget_v2_media_info_by_url
    • First observedget_v2_media_likers
    • First observedget_v2_media_template
    • First observedget_v2_search_hashtags
    • First observedget_v2_search_music
    • First observedget_v2_story_by_id
    • First observedget_v2_story_by_url
    • First observedget_v2_track_by_canonical_id
    • First observedget_v2_track_by_id
    • First observedget_v2_track_stream_by_id
    • First observedget_v2_user_by_id
    • First observedget_v2_user_by_username
    • First observedget_v2_user_clips
    • First observedget_v2_user_explore_businesses_by_id
    • First observedget_v2_user_followers
    • First observedget_v2_user_following
    • First observedget_v2_user_highlights
    • First observedget_v2_user_highlights_by_username
    • First observedget_v2_user_stories
    • First observedget_v2_user_stories_by_username
    • First observedget_v2_user_suggested_profiles
    • First observedget_v2_user_tag_medias
    • First observedget_v2_userstream_by_id
    • First observedget_v2_userstream_by_username
    • First observedget_v3_fbsearch_accounts
    • First observedget_v3_fbsearch_places

TDQS

A4.1/5.0

Scored across 44 tools

Disambiguation4/5

The tools cover many distinct Instagram resources and actions, and descriptions explicitly cross-reference alternatives such as by id vs username vs URL vs shortcode, or top vs recent vs clips. While no two tools are truly interchangeable, the sheer number of near-variants increases cognitive load and misselection risk.

Naming Consistency4/5

All tools use a get_ + lowercase snake_case convention, making the pattern predictable. Minor inconsistency comes from mixed API-version prefixes (v1, v2, gql, g2) and compound tokens like fbsearch, usertags, and clips_chunk, but the naming remains readable and largely consistent.

Tool Count2/5

44 tools far exceeds the typical 3-15 range and includes many access-method variants that could be consolidated into fewer flexible tools. While each maps to a real endpoint, the set is heavy and likely to overwhelm tool selection.

Completeness4/5

The surface covers users, media, comments, likes, stories, highlights, search, hashtags, locations, music, followers/following, suggestions, and account provenance, giving broad read-only Instagram coverage. Gaps exist for less common data such as live videos, saved media, or media by music track, but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for LamaTok TikTok data API — auto-generates 20+ tools from the live OpenAPI spec (users, videos, hashtags, music, comments). Local stdio via npx -y lamatok-mcp, requires only LAMATOK_KEY.
    23
    17 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for DataLikers — 51 tools for Instagram & TikTok data: Instagram user search by demographics (gender/age/race/country/city), profiles, engagement, posts, comments, hashtags, locations, stories, business accounts; TikTok users, videos, comments, hashtags, playlists. Local stdio via npx -y datalikers-mcp, requires only DATALIKERS_API_KEY.
    13 npm
    9
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    16 Instagram creator tools as an MCP server — Reels/Story/carousel downloaders, engagement audit, hashtag search, Reels hook generator, best-time-to-post and content calendar. Wraps instapdown.com public API — no auth required.
    16
    46 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A production-ready Remote MCP Server that gives Claude direct, tool-based access to your Instagram Business account through the Meta Graph API — profile data, posts, comments, publishing, insights, analytics, hashtags, messaging, and real-time webhooks.
    6 npm
    MIT