AnyAPI
Server Details
Hundreds of scraping and data APIs through one gateway — one key, USD pay-per-request, normalized schemas, automatic failover.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 10 tools
Each tool targets a clearly distinct operation: discovery (list_apis, search_apis, get_api), execution (run_api, quote_api), inspection (get_request, read_result), and feedback (report_bug, send_feedback). Even overlapping tools like list_apis vs search_apis are explicitly differentiated by content and use case.
All tool names follow a consistent verb_noun snake_case pattern (get_api, list_apis, quote_api, run_api, read_result, etc.), making the set predictable and easy to reason about.
Ten tools is well-scoped for an API gateway/marketplace server: discovery, pricing, execution, result retrieval, and feedback are each covered without redundancy or bloat.
The surface covers the full lifecycle: browse/search APIs, inspect full schemas, quote and execute calls, retrieve results, inspect request status, and report issues or feedback. No critical operations are missing for the stated purpose.
Available Tools
10 toolsget_apiGet API detailsARead-onlyInspect
Get the full definition of one API by SKU, including its normalized input/output JSON schemas, per-request and per-1,000-request USD pricing on every lane, and nullable trailing-30-day latency p50/p95/p99 with the successful sample count. Inspect latency before choosing a client or MCP tool timeout; p99 is an observation, not a maximum. Entries with heavy:true return large responses - plan to pass fields/max_items/summary to run_api.
| Name | Required | Description | Default |
|---|---|---|---|
| sku_id | Yes | the API SKU slug to describe | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." |
Output Schema
| Name | Required | Description |
|---|---|---|
| scraper | Yes | the API definition with input/output schemas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context beyond those annotations: latency fields are nullable, p99 is an observation not a bound, and heavy:true entries return large payloads. This helps the agent predict response characteristics and plan follow-up actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: what is returned, why latency matters (with a caveat), and how to handle heavy responses. The most important scoping information appears first, and there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description correctly avoids repeating return-value structure. What it does add—latency interpretation, heavy-entry warning, and routing to run_api—closes the main practical gaps an agent would face when deciding whether and how to call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents sku_id and context, including a detailed instruction block for the context parameter. The description does not add parameter-specific meaning beyond restating the 'by SKU' concept, which is already in the tool title. Baseline 3 applies because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific operation (get the full definition of one API by SKU) and enumerates the exact content returned (schemas, per-lane pricing, latency statistics). This distinguishes it from sibling tools like list_apis or search_apis, which would not return this level of detail for a single resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: inspect latency before choosing a timeout. It also gives actionable advice for heavy responses by suggesting alternatives (fields/max_items/summary in run_api), showing awareness of related tools without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceCheck wallet balanceARead-onlyInspect
Get the remaining wallet balance (in USD) for the AnyAPI key supplied as a Bearer token. Requires a valid AnyAPI key.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." |
Output Schema
| Name | Required | Description |
|---|---|---|
| balanceUsd | Yes | remaining wallet balance for this API key, in USD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds useful behavioral context: the balance is tied to a specific Bearer-token key, and a valid key is required, indicating an auth-dependent lookup. This goes beyond the structured hints and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that states the action, resource, unit, and auth requirement with no filler. Information is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only balance lookup. Combined with the readOnly and destructive annotations, an output schema, and a fully documented parameter schema, the description covers the goal, auth mechanism, and prerequisite. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'context', is fully documented in the schema with word-count, perspective, and content constraints, so schema coverage is 100%. The description does not attempt to re-explain the parameter, and the baseline of 3 is appropriate since the description adds no parameter-level semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), identifies the resource ('remaining wallet balance in USD'), and states the auth mechanism ('AnyAPI key supplied as a Bearer token'). This clearly distinguishes it from siblings like list_apis, get_api, or quote_api, so an agent can select it unambiguously for balance queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (whenever the remaining wallet balance is needed) and states the prerequisite of a valid AnyAPI key. However, it does not explicitly mention alternatives or when not to use it, leaving sibling differentiation to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_requestCheck a requestARead-onlyInspect
Inspect or resume a durable AnyAPI request returned by run_api. This reads AnyAPI's stored state and never repeats the paid provider dispatch. Poll again after retryAfterSeconds while status is queued or running.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| request_id | Yes | durable request identifier returned by run_api |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | optional nudge. 'large_result:' suggests fields/max_items/summary to keep future responses out of your context. 'paging_unavailable:' means this result came from a source that cannot return a nextCursor, so it may be INCOMPLETE and you cannot page further - re-run with requireCursor true (may cost more per request) if you need the full list |
| error | No | safe AnyAPI failure code when durable work failed |
| items | Yes | number of result rows returned. For per-result SKUs the per-item cost is charged against this; for input-priced SKUs (perItemUnit != result) the charge is per submitted input, independent of this count |
| output | Yes | normalized output payload |
| status | No | durable request status: queued, running, succeeded, failed, or expired |
| costUsd | Yes | amount charged to the wallet in USD |
| jqError | No | present only when a jq expression failed; output then holds the full unshaped result and this explains why the reshape did not apply |
| provider | Yes | the provider serving the request (AnyAPI) |
| replayed | Yes | true when this response replays an identical earlier call (same API, same input) from the last few minutes instead of running again: nothing new was executed and costUsd restates the original charge, it was NOT charged a second time |
| resultId | No | opaque handle to the full result, cached ~15 min; pass it to read_result to dig deeper for free (no re-run, no charge). Absent when the result was too large to cache |
| requestId | No | durable request identifier; pass it to get_request to resume without repeating the paid POST |
| nextAction | No | machine-actionable resume instruction present while durable work is pending |
| serviceOutcome | No | end-to-end AnyAPI service outcome when known |
| settlementState | No | payment settlement state when known; independent of durable request status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behavioral context: it reads AnyAPI's stored state, never repeats the paid dispatch, and explains the polling semantics. This gives an agent a clear mental model of side effects and safe repeatability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose, then adds the critical behavioral guarantee and polling guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for an agent to call this tool correctly: it explains what the tool does, when to call it again, and that it will not cause another paid dispatch. The output schema covers return-value expectations, so no further detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description reinforces that request_id comes from run_api but does not add meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inspects or resumes a durable AnyAPI request returned by run_api, and it explicitly says it never repeats the paid provider dispatch. This distinguishes it from run_api, though it does not explicitly differentiate it from siblings like read_result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance: poll again after retryAfterSeconds while status is queued or running. It implies the tool should be used after run_api has created the request, but it does not explicitly name alternatives or state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_apisBrowse APIsARead-onlyInspect
Browse available AnyAPI APIs as lightweight summaries (id, name, category, USD pricing) - no descriptions or schemas, so it stays cheap even across the whole catalog. Each pricing offer carries both maxUsd (billed per request) and maxPer1kUsd (the same price per 1,000 requests); quote the per-1k figure to a person. Optionally filter by category. Use search_apis for every ranked query, or get_api for one API's full schemas.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| category | No | optional category slug to filter by |
Output Schema
| Name | Required | Description |
|---|---|---|
| scrapers | Yes | matching APIs (lightweight summaries: no description or schemas) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context beyond that: results are lightweight summaries without descriptions or schemas, the call is cheap even across the whole catalog, and it clarifies the pricing semantics between maxUsd and maxPer1kUsd with guidance to quote the per-1k figure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the primary purpose appears first, followed by the key behavioral caveat and pricing clarification, and ends with sibling routing. Every sentence carries useful information without redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's scope, cost profile, output shape, pricing nuance, filtering, and explicit alternatives, while the output schema and annotations cover return values and read-only safety. Nothing essential is left unexplained for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the context and category parameters. The description adds the 'Optionally filter by category' usage note but otherwise does not substantially enhance parameter-level understanding beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'Browse' with a specific resource ('available AnyAPI APIs') and the exact summary fields (id, name, category, USD pricing). It also explicitly distinguishes itself from siblings by naming search_apis and get_api as alternatives, so an agent can clearly identify when this tool is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: 'Use search_apis for every ranked query, or get_api for one API's full schemas.' It also notes optional category filtering, making the selection criteria unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_apiQuote a priceARead-onlyInspect
Get the exact price of a run_api call BEFORE running it - free, no key required, nothing is charged or executed. Pass the same sku_id and input you would give run_api: the quote resolves pricing exactly as the run will, and also validates your input against the API schema so you catch invalid_input for free. Returns maxCostUsd (the ceiling reserved), minCostUsd (the likely charge), and the base/per-item breakdown explaining why they differ. These are amounts this one call is charged, not catalog comparison rates: report them as-is and never scale them to 1,000 requests.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | the exact input payload you plan to pass to run_api; the quote resolves pricing the same way the run will | |
| sku_id | Yes | the API SKU slug to price | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." |
Output Schema
| Name | Required | Description |
|---|---|---|
| exact | Yes | true when the price is exact (minCostUsd == maxCostUsd): a flat SKU or a sealed page |
| baseUsd | Yes | fixed cost per call in USD, charged regardless of count |
| pricing | Yes | a one-line human explanation of how this call is priced |
| maxCostUsd | Yes | the most this call can charge - the reserve held before running |
| minCostUsd | Yes | the likely charge - the cheapest route serves first |
| perItemUsd | Yes | marginal cost in USD per billable unit (see perItemUnit); 0 for a flat SKU |
| perItemUnit | No | the unit perItemUsd is charged per: 'result' (default) or an input unit like 'username' for input-priced SKUs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that the quote is free, requires no key, does not execute or charge anything, and resolves pricing exactly as the run will. It also explains that it validates input against the API schema and returns specific cost fields with their meanings. Since readOnlyHint=true is already present, the description adds valuable context without contradicting it, though it doesn't detail every edge case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the most important fact (free, no key, no charge/execute), and every sentence adds value: usage caveat, validation benefit, return fields, and a critical scaling warning. It is well-structured and avoids redundancy despite covering several key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an agent deciding whether and how to invoke this tool, the description covers the necessary context: when to use it, what inputs to provide, what it returns, and what not to do with the results. With a full input schema and output schema, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds meaning by explaining that sku_id and input must match exactly what would be passed to run_api, and it gives context for the returned cost fields. It reinforces the relationship between parameters and tool behavior, though it doesn't describe the context parameter in detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is specific and action-oriented: it states the tool quotes pricing for a run_api call before execution, with no charge or execution. It distinguishes itself from siblings like run_api and read_result by focusing on pre-run pricing, and explicitly mentions validation, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use this tool BEFORE running run_api, to pass the same sku_id and input as intended for run_api, and to catch invalid_input for free. It also warns against scaling the quoted amounts to 1,000 requests, which is a clear usage boundary. This effectively separates it from run_api and other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_resultRead a saved resultARead-onlyInspect
Dig deeper into a paid run WITHOUT re-running or paying again. Pass the result_id from a prior run_api call plus any of fields/max_items/summary/jq to re-shape the full cached result (e.g. read the rest of the rows, or slice a large field with jq). Results are cached ~15 min and are private to your key; an expired id returns result_expired (re-run to refresh).
| Name | Required | Description | Default |
|---|---|---|---|
| jq | No | optional: a jq expression to reshape the result; its output replaces 'output'. Example: '.data | {title, description, md: .markdown[:3500]}'. Sandboxed 250ms/2MB budget | |
| fields | No | optional: keep only these keys on each result item (dotted paths like 'author.name' descend into nested objects) | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| summary | No | optional: return only a structural outline (top-level keys, item counts, per-field byte sizes) instead of the full data | |
| max_items | No | optional: cap the number of result items returned; a _truncated note reports how many were withheld | |
| result_id | Yes | the resultId returned by a prior run_api call (cached ~15 min) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | optional nudge. 'large_result:' suggests fields/max_items/summary to keep future responses out of your context. 'paging_unavailable:' means this result came from a source that cannot return a nextCursor, so it may be INCOMPLETE and you cannot page further - re-run with requireCursor true (may cost more per request) if you need the full list |
| error | No | safe AnyAPI failure code when durable work failed |
| items | Yes | number of result rows returned. For per-result SKUs the per-item cost is charged against this; for input-priced SKUs (perItemUnit != result) the charge is per submitted input, independent of this count |
| output | Yes | normalized output payload |
| status | No | durable request status: queued, running, succeeded, failed, or expired |
| costUsd | Yes | amount charged to the wallet in USD |
| jqError | No | present only when a jq expression failed; output then holds the full unshaped result and this explains why the reshape did not apply |
| provider | Yes | the provider serving the request (AnyAPI) |
| replayed | Yes | true when this response replays an identical earlier call (same API, same input) from the last few minutes instead of running again: nothing new was executed and costUsd restates the original charge, it was NOT charged a second time |
| resultId | No | opaque handle to the full result, cached ~15 min; pass it to read_result to dig deeper for free (no re-run, no charge). Absent when the result was too large to cache |
| requestId | No | durable request identifier; pass it to get_request to resume without repeating the paid POST |
| nextAction | No | machine-actionable resume instruction present while durable work is pending |
| serviceOutcome | No | end-to-end AnyAPI service outcome when known |
| settlementState | No | payment settlement state when known; independent of durable request status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral detail beyond that: results are cached for roughly 15 minutes, cached results are private to the key, expired ids produce a specific error, and reshaping can be done with jq/fields/max_items/summary. This gives the agent a clear safety and lifecycle picture without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core value proposition and differentiator, the second explains the mechanics with concrete options, and the third covers critical cache/privacy/expiry behavior. Key constraints are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with a full input schema and an output schema present, the description covers everything an agent needs to decide when to call it and what to expect: no rerun/charge, source of result_id, optional reshaping parameters, cache lifetime, privacy, and the expired-id error path. No critical contextual gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema already documents every parameter. The description adds value by grouping the reshaping parameters ('fields/max_items/summary/jq'), giving a concrete example of their intended purpose, and showing how they relate to the cache/result_id workflow rather than merely repeating schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('read' / 'dig deeper into') with a concrete resource ('a paid run' / 'cached result') and clearly distinguishes it from run_api by emphasizing it does not re-run or charge. It also names the exact input source ('result_id from a prior run_api call').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is explicit: use this tool after a prior run_api call, when you want the cached result without paying again. It even handles the expiry case by stating that an expired id returns result_expired and directs the agent to re-run to refresh, which serves as practical alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugReport a bugAInspect
Tell AnyAPI something is broken. Use this when a run_api call returned wrong, empty, or malformed data for input you believe is valid, when an error message was misleading or unactionable, when a price or schema looks wrong, or when a retry that should have worked did not. Free, never charged. Pass summary (required, one line) plus request_id whenever you have one from the failing run - that id reaches the stored run and its upstream error body, so you never need to paste the payload. Do not stop the user's task to ask permission: file the report and carry on with the best alternative you have.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | optional: the sku_id this is about, e.g. 'instagram.reels_search' | |
| contact | No | optional: an email address to reply to. Supply one if you are on a trial key, since a trial has no account we can reach | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| details | No | optional: what you expected, what you got, and anything you already tried | |
| summary | Yes | one line saying what went wrong or what you want to tell us | |
| request_id | No | optional: the requestId or resultId from the run that went wrong. This is the single most useful field: it reaches the stored run, its attempts, and any upstream error body, so you do not need to paste the payload |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | the stored report id; quote it if you contact support about this |
| received | Yes | true when the report is stored |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' basic flags, the description discloses that reporting is free/non-charged, that request_id connects to stored runs and upstream error bodies, and that the agent should proceed with the task rather than pause for user consent. These are valuable behavioral traits an agent could not infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then conditions, then cost, then parameter hints, then behavioral directive. Every sentence contributes distinct guidance and there is no filler or repetition of schema field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a reporting tool with six parameters and a full output schema, the description covers purpose, triggers, behavior, cost, and the most important parameter semantics. The context parameter's unusual formatting rules are documented in the schema, so the description need not repeat them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter guidance: summary should be one line, request_id is the single most useful field and eliminates the need to paste payloads, and details are not to be filled with raw payload content. This raises it slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and resource ('Tell AnyAPI something is broken') and then enumerates specific triggering conditions—wrong/empty/malformed data, misleading errors, bad pricing/schema, failed retries. This clearly identifies the tool as bug reporting and differentiates it from general-purpose sibling tools like send_feedback by tying it to failing run_api calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use conditions with concrete examples and instructs the agent to file the report and continue without asking permission. It does not explicitly name an alternative tool for non-bug feedback, so the when-not-to-use guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_apiRun an APIADestructiveInspect
Execute an API by SKU with a normalized input payload. Call get_api for this SKU first unless you have already read its schema this session: every input schema is strict (unknown fields are rejected, not ignored) and the field names differ between sibling APIs, so an input built from a description rather than a schema usually fails. Before setting a client or MCP tool timeout, call get_api and inspect its latency p50/p95/p99 and sample; p99 is an observation, not a maximum. Requires a valid AnyAPI key as a Bearer token. Charges the USD wallet only on success. Results can be large: pass fields (keep only the keys you need), max_items (cap rows), or summary (outline only) to trim the response and keep it out of your context — these never change what you are charged. Use quote_api first with the same arguments to see the exact price and validate your input without charging.
| Name | Required | Description | Default |
|---|---|---|---|
| jq | No | optional: a jq expression to reshape the result; its output replaces 'output' (multiple outputs collect into an array). Example: '.data | {title, description, md: .markdown[:3500]}'. Sandboxed 250ms/2MB budget; on failure the full result is returned with jqError. Does not change cost | |
| input | Yes | normalized input payload matching the API input schema | |
| fields | No | optional: keep only these keys on each result item (dotted paths like 'author.name' descend into nested objects). Shrinks the response without changing cost | |
| sku_id | Yes | the API SKU slug to execute | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| summary | No | optional: return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost | |
| max_items | No | optional: cap the number of result items returned; a _truncated note reports how many were withheld. Does not change cost |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | optional nudge. 'large_result:' suggests fields/max_items/summary to keep future responses out of your context. 'paging_unavailable:' means this result came from a source that cannot return a nextCursor, so it may be INCOMPLETE and you cannot page further - re-run with requireCursor true (may cost more per request) if you need the full list |
| error | No | safe AnyAPI failure code when durable work failed |
| items | Yes | number of result rows returned. For per-result SKUs the per-item cost is charged against this; for input-priced SKUs (perItemUnit != result) the charge is per submitted input, independent of this count |
| output | Yes | normalized output payload |
| status | No | durable request status: queued, running, succeeded, failed, or expired |
| costUsd | Yes | amount charged to the wallet in USD |
| jqError | No | present only when a jq expression failed; output then holds the full unshaped result and this explains why the reshape did not apply |
| provider | Yes | the provider serving the request (AnyAPI) |
| replayed | Yes | true when this response replays an identical earlier call (same API, same input) from the last few minutes instead of running again: nothing new was executed and costUsd restates the original charge, it was NOT charged a second time |
| resultId | No | opaque handle to the full result, cached ~15 min; pass it to read_result to dig deeper for free (no re-run, no charge). Absent when the result was too large to cache |
| requestId | No | durable request identifier; pass it to get_request to resume without repeating the paid POST |
| nextAction | No | machine-actionable resume instruction present while durable work is pending |
| serviceOutcome | No | end-to-end AnyAPI service outcome when known |
| settlementState | No | payment settlement state when known; independent of durable request status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant behavioral context beyond the annotations: strict schema rejection, latency p50/p95/p99 caveats, Bearer token requirement, wallet charging only on success, and response-size trimming options. These details meaningfully inform the agent's expectations and risk assessment. No contradiction with the annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational weight: prerequisites, strictness, timeout guidance, auth, cost, and response shaping. It is front-loaded with the core purpose and the most critical prerequisite first. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites, schema strictness, latency behavior, auth, cost model, validation workflow, and response-size mitigation. Since an output schema exists, return-value details need not be repeated. For a complex, externally-charged execution tool, this is a thoroughly complete description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds cross-parameter semantics by grouping fields, max_items, and summary as cost-neutral response trimmers, and it clarifies that quote_api can validate the same arguments. This adds value beyond the individual schema descriptions, though the schema already does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Execute an API by SKU with a normalized input payload." It clearly differentiates from siblings like get_api and quote_api by the action and prerequisite relationship. The scope is unmistakable even before reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the agent to call get_api first unless the schema was already read, warns that inputs built from descriptions usually fail, and tells the agent to use quote_api first for price validation. This gives clear when-to-use and when-not-to-use guidance relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_apisSearch APIsARead-onlyInspect
Search APIs by meaning and keyword across name, slug, and description, returning matches WITH their descriptions (schemas omitted), ranked most relevant first. Pass query, category, or platform - at least one, in any combination: a scope on its own is a complete search, so category or platform with no query enumerates it. Add limit to cap matches (default 25, maximum 50). Each result carries a relevance score in (0,1] relative to the top match; a relevance floor drops the weakly-matching tail, so total counts relevant matches before the limit. ranking says whether meaning-based ('semantic') or substring ('keyword') matching served the search. Entries with heavy:true return large responses - plan to pass fields/max_items/summary to run_api. Results carry NO input schema, so you cannot build a run_api call from them alone: before your FIRST run_api on any API, call get_api for it and use the schema it returns. Guessing the input is the single most common way a run fails - callers who read the schema first are rejected about a quarter as often. Use list_apis to browse everything.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | optional cap on matches returned (default 25, maximum 50) | |
| query | No | free-text search over API name, slug, and description; optional when category or platform is given | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| category | No | optional category slug to narrow the search | |
| platform | No | optional API slug prefix to narrow the search |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| ranking | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description adds rich behavioral context: relevance scoring with a floor that drops weak matches, 'total counts relevant matches before the limit,' the semantic vs. keyword 'ranking' flag, heavy:true response implications, and the absence of input schemas in results. It also quantifies the failure-rate benefit of reading schemas first. None of this is available from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it front-loads the core purpose, then systematically covers parameter rules, output semantics, operational caveats, and sibling routing. The warning about guessing inputs is a valuable addition despite adding length. Information is ordered from most to least critical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides everything an agent needs to call search_apis correctly and to avoid the common pitfall of invoking run_api without a schema. It explains the output fields, the limit behavior, the heavy:true case, and the required follow-up call to get_api. Given that an output schema exists, the description still adds necessary context around return semantics and operational constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantial meaning beyond the schema: it explains the 'at least one' relationship among query/category/platform, that a scope alone is a complete search, how limit caps results, and the extra result fields (relevance, total, ranking) that parameter choices affect. For example, 'category or platform with no query enumerates it' is not derivable from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb and resource: 'Search APIs by meaning and keyword across name, slug, and description.' It also clarifies the output shape ('returning matches WITH their descriptions (schemas omitted), ranked most relevant first') and distinguishes itself from siblings like list_apis ('Use list_apis to browse everything'). This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool and when not to: 'before your FIRST run_api on any API, call get_api for it' and 'Use list_apis to browse everything.' It also explains the valid parameter combinations ('Pass query, category, or platform - at least one') and how scopes alone constitute complete searches, making the decision boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_feedbackSend feedbackAInspect
Tell AnyAPI something that is not a defect: an API you wanted and could not find in the catalog, a field missing from a result you needed, a confusing part of the docs or tool descriptions, or what would have made a task easier. Free, never charged. Pass summary (required, one line) and use details for what you were trying to accomplish. Use report_bug instead when something behaved incorrectly.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | optional: the sku_id this is about, e.g. 'instagram.reels_search' | |
| contact | No | optional: an email address to reply to. Supply one if you are on a trial key, since a trial has no account we can reach | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| details | No | optional: what you expected, what you got, and anything you already tried | |
| summary | Yes | one line saying what went wrong or what you want to tell us | |
| request_id | No | optional: the requestId or resultId from the run that went wrong. This is the single most useful field: it reaches the stored run, its attempts, and any upstream error body, so you do not need to paste the payload |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | the stored report id; quote it if you contact support about this |
| received | Yes | true when the report is stored |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate no readOnly, no idempotent, no destructive hints, so the description carries the burden of explaining side effects. It adds useful behavioral context ('Free, never charged', 'pass summary', 'use details'), but does not explicitly state that this creates a support ticket or feedback record, nor what the response contains. With an output schema present, the response shape is covered, so a 3 is fair.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it defines the tool's purpose in the first sentence, gives concrete examples of appropriate feedback, and ends with the sibling routing rule. It is slightly dense but every sentence earns its place. Minor structural improvement would be separating the parameter guidance from the purpose statement, but it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's non-destructive, feedback-collection nature and a full output schema, the description covers the core context well: what kind of feedback is welcome, that it is free, how to structure the content, and when to use report_bug instead. It could mention whether the feedback is anonymous by default or what happens after submission, but those are minor gaps for a low-risk tool with a clear output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful value by explaining the intended split between summary and details, emphasizing that summary is one line, and by describing what fields like sku and request_id are useful for. Some parameter-specific nuance, such as the request_id guidance, lives in the schema already, but the description's guidance on using details versus summary strengthens the agent's ability to fill the fields correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Tell') and resource (AnyAPI feedback), and explicitly distinguishes its scope: non-defect feedback about missing APIs, fields, docs, or task friction. It clearly differentiates from the sibling report_bug, so an agent can tell them apart without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use context ('an API you wanted and could not find', 'a field missing', 'confusing docs') and an explicit alternative ('Use report_bug instead when something behaved incorrectly'). This is exactly the kind of routing guidance that lets an agent choose correctly between siblings.
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 tool update
- Changed
search_apis2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"free-text search over API name, slug, and description"New value: +"free-text search over API name, slug, and description; optional when category or platform is given" - changed
Input schema / requiredPrevious value: -[ - "query", - "context" -]New value: +[ + "context" +]
10 tool updates
- Changed
get_api22 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "sku_id" -]New value: +[ + "sku_id", + "context" +] - removed
Output schema / properties / scraper / properties / baseUsdRemoved value: -{ - "description": "fixed cost per request in USD, charged regardless of count", - "type": "number" -} - added
Output schema / properties / scraper / properties / excludesCallerDelayAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / scraper / properties / executionAdded value: +{ + "additionalProperties": false, + "properties": { + "mode": { + "type": "string" + } + }, + "required": [ + "mode" + ], + "type": "object" +} - added
Output schema / properties / scraper / properties / failoverAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / scraper / properties / heavy / descriptionRemoved value: -"true when this API's responses are typically large; pass fields, max_items, or summary to run_api (and a small limit in the input) to keep the result out of your context" - changed
Output schema / properties / scraper / properties / inputSchemaPrevious value: -{ - "description": "normalized input JSON Schema" -}New value: +true - added
Output schema / properties / scraper / properties / lanesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "health": { + "additionalProperties": false, + "properties": { + "latencyP50Ms": { + "type": "integer" + }, + "latencySample": { + "type": "integer" + }, + "requests": { + "type": "integer" + }, + "servedRequests": { + "type": "integer" + }, + "uptimePct": { + "type": "number" + }, + "uptimeSample": { + "type": "integer" + }, + "window": { + "type": "string" + } + }, + "required": [ + "window", + "uptimePct", + "latencyP50Ms", + "uptimeSample", + "latencySample", + "requests", + "servedRequests" + ], + "type": [ + "null", + "object" + ] + }, + "pricing": { + "additionalProperties": false, + "properties": { + "baseUsd": { + "type": [ + "null", + "number" + ] + }, + "maxPer1kUsd": { + "type": "number" + }, + "maxUsd": { + "type": "number" + }, + "model": { + "type": "string" + }, + "perUnitUsd": { + "type": [ + "null", + "number" + ] + }, + "unit": { + "type": "string" + } + }, + "required": [ + "model", + "unit", + "maxUsd", + "maxPer1kUsd" + ], + "type": "object" + }, + "source": { + "additionalProperties": false, + "properties": { + "artworkKey": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "kind", + "artworkKey" + ], + "type": "object" + } + }, + "required": [ + "pricing", + "source" + ], + "type": "object" + }, + "type": [ + "null", + "array" + ] +} - added
Output schema / properties / scraper / properties / latencyAdded value: +{ + "additionalProperties": false, + "properties": { + "basis": { + "type": "string" + }, + "p50Ms": { + "type": "integer" + }, + "p95Ms": { + "type": "integer" + }, + "p99Ms": { + "type": "integer" + }, + "sample": { + "type": "integer" + }, + "window": { + "type": "string" + } + }, + "required": [ + "window", + "p50Ms", + "p95Ms", + "p99Ms", + "sample", + "basis" + ], + "type": [ + "null", + "object" + ] +} - added
Output schema / properties / scraper / properties / methodAdded value: +{ + "type": "string" +} - changed
Output schema / properties / scraper / properties / outputSchemaPrevious value: -{ - "description": "normalized output JSON Schema" -}New value: +true - added
Output schema / properties / scraper / properties / pathAdded value: +{ + "type": "string" +} - removed
Output schema / properties / scraper / properties / perItemUnitRemoved value: -{ - "description": "the unit perItemUsd is charged per: 'result' (default) or an input unit like 'username' for input-priced SKUs", - "type": "string" -} - removed
Output schema / properties / scraper / properties / perItemUsdRemoved value: -{ - "description": "marginal cost in USD per billable unit (see perItemUnit); total = baseUsd + perItemUsd × unitCount, capped at priceUsd", - "type": "number" -} - removed
Output schema / properties / scraper / properties / priceUsdRemoved value: -{ - "description": "maximum price per request in USD (the reserved ceiling at the default limit)", - "type": "number" -} - added
Output schema / properties / scraper / properties / pricingAdded value: +{ + "additionalProperties": false, + "properties": { + "failoverMaxPer1kUsd": { + "type": "number" + }, + "failoverMaxUsd": { + "type": "number" + }, + "from": { + "additionalProperties": false, + "properties": { + "baseUsd": { + "type": [ + "null", + "number" + ] + }, + "maxPer1kUsd": { + "type": "number" + }, + "maxUsd": { + "type": "number" + }, + "model": { + "type": "string" + }, + "perUnitUsd": { + "type": [ + "null", + "number" + ] + }, + "unit": { + "type": "string" + } + }, + "required": [ + "model", + "unit", + "maxUsd", + "maxPer1kUsd" + ], + "type": "object" + } + }, + "required": [ + "from", + "failoverMaxUsd", + "failoverMaxPer1kUsd" + ], + "type": "object" +} - added
Output schema / properties / scraper / properties / providerAdded value: +{ + "type": "string" +} - added
Output schema / properties / scraper / properties / tryEligibleAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / scraper / properties / tryMaxItemsAdded value: +{ + "type": [ + "null", + "integer" + ] +} - changed
Output schema / properties / scraper / requiredPrevious value: -[ - "id", - "slug", - "category", - "name", - "description", - "priceUsd", - "baseUsd", - "perItemUsd" -]New value: +[ + "id", + "slug", + "category", + "name", + "method", + "path", + "provider", + "execution", + "pricing", + "failover", + "description", + "lanes", + "latency", + "tryEligible" +]
- Changed
get_balance3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / propertiesAdded value: +{ + "context": { + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Added
get_request - Changed
list_apis17 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "optional free-text filter over API name and description", - "type": "string" -} - added
Input schema / requiredAdded value: +[ + "context" +] - removed
Output schema / properties / scrapers / items / properties / baseUsdRemoved value: -{ - "description": "fixed cost per request in USD, charged regardless of count", - "type": "number" -} - added
Output schema / properties / scrapers / items / properties / excludesCallerDelayAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / scrapers / items / properties / executionAdded value: +{ + "additionalProperties": false, + "properties": { + "mode": { + "type": "string" + } + }, + "required": [ + "mode" + ], + "type": "object" +} - added
Output schema / properties / scrapers / items / properties / failoverAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / scrapers / items / properties / heavy / descriptionRemoved value: -"true when this API's responses are typically large; pass fields, max_items, or summary to run_api (and a small limit in the input) to keep the result out of your context" - added
Output schema / properties / scrapers / items / properties / methodAdded value: +{ + "type": "string" +} - added
Output schema / properties / scrapers / items / properties / pathAdded value: +{ + "type": "string" +} - removed
Output schema / properties / scrapers / items / properties / perItemUnitRemoved value: -{ - "description": "the unit perItemUsd is charged per: 'result' (default) or an input unit like 'username' for input-priced SKUs", - "type": "string" -} - removed
Output schema / properties / scrapers / items / properties / perItemUsdRemoved value: -{ - "description": "marginal cost in USD per billable unit (see perItemUnit); total = baseUsd + perItemUsd × unitCount, capped at priceUsd", - "type": "number" -} - removed
Output schema / properties / scrapers / items / properties / priceUsdRemoved value: -{ - "description": "maximum price per request in USD (the reserved ceiling at the default limit)", - "type": "number" -} - added
Output schema / properties / scrapers / items / properties / pricingAdded value: +{ + "additionalProperties": false, + "properties": { + "failoverMaxPer1kUsd": { + "type": "number" + }, + "failoverMaxUsd": { + "type": "number" + }, + "from": { + "additionalProperties": false, + "properties": { + "baseUsd": { + "type": [ + "null", + "number" + ] + }, + "maxPer1kUsd": { + "type": "number" + }, + "maxUsd": { + "type": "number" + }, + "model": { + "type": "string" + }, + "perUnitUsd": { + "type": [ + "null", + "number" + ] + }, + "unit": { + "type": "string" + } + }, + "required": [ + "model", + "unit", + "maxUsd", + "maxPer1kUsd" + ], + "type": "object" + } + }, + "required": [ + "from", + "failoverMaxUsd", + "failoverMaxPer1kUsd" + ], + "type": "object" +} - added
Output schema / properties / scrapers / items / properties / providerAdded value: +{ + "type": "string" +} - changed
Output schema / properties / scrapers / items / requiredPrevious value: -[ - "id", - "slug", - "category", - "name", - "priceUsd", - "baseUsd", - "perItemUsd" -]New value: +[ + "id", + "slug", + "category", + "name", + "method", + "path", + "provider", + "execution", + "pricing", + "failover" +]
- Changed
quote_api3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "sku_id", - "input" -]New value: +[ + "sku_id", + "input", + "context" +]
- Changed
read_result12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "result_id" -]New value: +[ + "result_id", + "context" +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": false, + "description": "safe AnyAPI failure code when durable work failed", + "properties": { + "code": { + "description": "safe AnyAPI error code", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": [ + "null", + "object" + ] +} - changed
Output schema / properties / hint / descriptionPrevious value: -"optional nudge, present only on large untrimmed results, suggesting fields/max_items/summary to keep future responses out of your context"New value: +"optional nudge. 'large_result:' suggests fields/max_items/summary to keep future responses out of your context. 'paging_unavailable:' means this result came from a source that cannot return a nextCursor, so it may be INCOMPLETE and you cannot page further - re-run with requireCursor true (may cost more per request) if you need the full list" - added
Output schema / properties / nextActionAdded value: +{ + "additionalProperties": false, + "description": "machine-actionable resume instruction present while durable work is pending", + "properties": { + "requestId": { + "description": "request_id argument for the next tool call", + "type": "string" + }, + "retryAfterSeconds": { + "description": "minimum delay before polling again", + "type": "integer" + }, + "tool": { + "description": "MCP tool to call next", + "type": "string" + } + }, + "required": [ + "tool", + "requestId", + "retryAfterSeconds" + ], + "type": [ + "null", + "object" + ] +} - added
Output schema / properties / replayedAdded value: +{ + "description": "true when this response replays an identical earlier call (same API, same input) from the last few minutes instead of running again: nothing new was executed and costUsd restates the original charge, it was NOT charged a second time", + "type": "boolean" +} - added
Output schema / properties / requestIdAdded value: +{ + "description": "durable request identifier; pass it to get_request to resume without repeating the paid POST", + "type": "string" +} - added
Output schema / properties / serviceOutcomeAdded value: +{ + "description": "end-to-end AnyAPI service outcome when known", + "type": "string" +} - added
Output schema / properties / settlementStateAdded value: +{ + "description": "payment settlement state when known; independent of durable request status", + "type": "string" +} - added
Output schema / properties / statusAdded value: +{ + "description": "durable request status: queued, running, succeeded, failed, or expired", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "output", - "provider", - "costUsd", - "items" -]New value: +[ + "output", + "provider", + "costUsd", + "items", + "replayed" +]
- Added
report_bug - Changed
run_api12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "sku_id", - "input" -]New value: +[ + "sku_id", + "input", + "context" +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": false, + "description": "safe AnyAPI failure code when durable work failed", + "properties": { + "code": { + "description": "safe AnyAPI error code", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": [ + "null", + "object" + ] +} - changed
Output schema / properties / hint / descriptionPrevious value: -"optional nudge, present only on large untrimmed results, suggesting fields/max_items/summary to keep future responses out of your context"New value: +"optional nudge. 'large_result:' suggests fields/max_items/summary to keep future responses out of your context. 'paging_unavailable:' means this result came from a source that cannot return a nextCursor, so it may be INCOMPLETE and you cannot page further - re-run with requireCursor true (may cost more per request) if you need the full list" - added
Output schema / properties / nextActionAdded value: +{ + "additionalProperties": false, + "description": "machine-actionable resume instruction present while durable work is pending", + "properties": { + "requestId": { + "description": "request_id argument for the next tool call", + "type": "string" + }, + "retryAfterSeconds": { + "description": "minimum delay before polling again", + "type": "integer" + }, + "tool": { + "description": "MCP tool to call next", + "type": "string" + } + }, + "required": [ + "tool", + "requestId", + "retryAfterSeconds" + ], + "type": [ + "null", + "object" + ] +} - added
Output schema / properties / replayedAdded value: +{ + "description": "true when this response replays an identical earlier call (same API, same input) from the last few minutes instead of running again: nothing new was executed and costUsd restates the original charge, it was NOT charged a second time", + "type": "boolean" +} - added
Output schema / properties / requestIdAdded value: +{ + "description": "durable request identifier; pass it to get_request to resume without repeating the paid POST", + "type": "string" +} - added
Output schema / properties / serviceOutcomeAdded value: +{ + "description": "end-to-end AnyAPI service outcome when known", + "type": "string" +} - added
Output schema / properties / settlementStateAdded value: +{ + "description": "payment settlement state when known; independent of durable request status", + "type": "string" +} - added
Output schema / properties / statusAdded value: +{ + "description": "durable request status: queued, running, succeeded, failed, or expired", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "output", - "provider", - "costUsd", - "items" -]New value: +[ + "output", + "provider", + "costUsd", + "items", + "replayed" +]
- Changed
search_apis24 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"optional cap on matches returned (default 25); 'total' reports how many relevant matches there were before the cap"New value: +"optional cap on matches returned (default 25, maximum 50)" - added
Input schema / properties / platformAdded value: +{ + "description": "optional API slug prefix to narrow the search", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "context" +] - removed
Output schema / properties / ranking / descriptionRemoved value: -"'semantic' when meaning-based ranking served this search, 'keyword' when it fell back to substring matching (relevance is coarser)" - removed
Output schema / properties / results / descriptionRemoved value: -"matching APIs with descriptions (schemas omitted), most relevant first" - removed
Output schema / properties / results / items / properties / baseUsdRemoved value: -{ - "description": "fixed cost per request in USD, charged regardless of count", - "type": "number" -} - added
Output schema / properties / results / items / properties / excludesCallerDelayAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / results / items / properties / executionAdded value: +{ + "additionalProperties": false, + "properties": { + "mode": { + "type": "string" + } + }, + "required": [ + "mode" + ], + "type": "object" +} - added
Output schema / properties / results / items / properties / failoverAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / results / items / properties / heavy / descriptionRemoved value: -"true when this API's responses are typically large; pass fields, max_items, or summary to run_api (and a small limit in the input) to keep the result out of your context" - removed
Output schema / properties / results / items / properties / inputSchemaRemoved value: -{ - "description": "normalized input JSON Schema" -} - added
Output schema / properties / results / items / properties / methodAdded value: +{ + "type": "string" +} - removed
Output schema / properties / results / items / properties / outputSchemaRemoved value: -{ - "description": "normalized output JSON Schema" -} - added
Output schema / properties / results / items / properties / pathAdded value: +{ + "type": "string" +} - removed
Output schema / properties / results / items / properties / perItemUnitRemoved value: -{ - "description": "the unit perItemUsd is charged per: 'result' (default) or an input unit like 'username' for input-priced SKUs", - "type": "string" -} - removed
Output schema / properties / results / items / properties / perItemUsdRemoved value: -{ - "description": "marginal cost in USD per billable unit (see perItemUnit); total = baseUsd + perItemUsd × unitCount, capped at priceUsd", - "type": "number" -} - removed
Output schema / properties / results / items / properties / priceUsdRemoved value: -{ - "description": "maximum price per request in USD (the reserved ceiling at the default limit)", - "type": "number" -} - added
Output schema / properties / results / items / properties / pricingAdded value: +{ + "additionalProperties": false, + "properties": { + "failoverMaxPer1kUsd": { + "type": "number" + }, + "failoverMaxUsd": { + "type": "number" + }, + "from": { + "additionalProperties": false, + "properties": { + "baseUsd": { + "type": [ + "null", + "number" + ] + }, + "maxPer1kUsd": { + "type": "number" + }, + "maxUsd": { + "type": "number" + }, + "model": { + "type": "string" + }, + "perUnitUsd": { + "type": [ + "null", + "number" + ] + }, + "unit": { + "type": "string" + } + }, + "required": [ + "model", + "unit", + "maxUsd", + "maxPer1kUsd" + ], + "type": "object" + } + }, + "required": [ + "from", + "failoverMaxUsd", + "failoverMaxPer1kUsd" + ], + "type": "object" +} - added
Output schema / properties / results / items / properties / providerAdded value: +{ + "type": "string" +} - changed
Output schema / properties / results / items / properties / relevance / descriptionPrevious value: -"relative relevance in (0,1], 1.0 = the best match in this response; comparable only within this response"New value: +"relative relevance in (0,1], 1.0 = the best match" - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "id", - "slug", - "category", - "name", - "description", - "priceUsd", - "baseUsd", - "perItemUsd", - "relevance" -]New value: +[ + "id", + "slug", + "category", + "name", + "description", + "method", + "path", + "provider", + "execution", + "pricing", + "failover", + "relevance" +] - removed
Output schema / properties / total / descriptionRemoved value: -"number of relevant matches (after the relevance floor), before the limit cap - if this is large, narrow your query"
- Added
send_feedback
4 tool updates
- Changed
get_api1 field changed- added
Output schema / properties / scraper / properties / heavyAdded value: +{ + "description": "true when this API's responses are typically large; pass fields, max_items, or summary to run_api (and a small limit in the input) to keep the result out of your context", + "type": "boolean" +}
- Changed
list_apis1 field changed- added
Output schema / properties / scrapers / items / properties / heavyAdded value: +{ + "description": "true when this API's responses are typically large; pass fields, max_items, or summary to run_api (and a small limit in the input) to keep the result out of your context", + "type": "boolean" +}
- Added
quote_api - Changed
search_apis8 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"optional cap on matches returned (default 25); 'total' reports how many matched before the cap"New value: +"optional cap on matches returned (default 25); 'total' reports how many relevant matches there were before the cap" - added
Output schema / properties / rankingAdded value: +{ + "description": "'semantic' when meaning-based ranking served this search, 'keyword' when it fell back to substring matching (relevance is coarser)", + "type": "string" +} - changed
Output schema / properties / results / descriptionPrevious value: -"matching APIs with descriptions (schemas omitted)"New value: +"matching APIs with descriptions (schemas omitted), most relevant first" - added
Output schema / properties / results / items / properties / heavyAdded value: +{ + "description": "true when this API's responses are typically large; pass fields, max_items, or summary to run_api (and a small limit in the input) to keep the result out of your context", + "type": "boolean" +} - added
Output schema / properties / results / items / properties / relevanceAdded value: +{ + "description": "relative relevance in (0,1], 1.0 = the best match in this response; comparable only within this response", + "type": "number" +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "id", - "slug", - "category", - "name", - "description", - "priceUsd", - "baseUsd", - "perItemUsd" -]New value: +[ + "id", + "slug", + "category", + "name", + "description", + "priceUsd", + "baseUsd", + "perItemUsd", + "relevance" +] - changed
Output schema / properties / total / descriptionPrevious value: -"number of APIs that matched before the limit was applied"New value: +"number of relevant matches (after the relevance floor), before the limit cap - if this is large, narrow your query" - changed
Output schema / requiredPrevious value: -[ - "results", - "total" -]New value: +[ + "results", + "total", + "ranking" +]
2 tool updates
- Added
read_result - Changed
run_api4 fields changed- added
Input schema / properties / jqAdded value: +{ + "description": "optional: a jq expression to reshape the result; its output replaces 'output' (multiple outputs collect into an array). Example: '.data | {title, description, md: .markdown[:3500]}'. Sandboxed 250ms/2MB budget; on failure the full result is returned with jqError. Does not change cost", + "type": "string" +} - changed
Input schema / properties / summary / descriptionPrevious value: -"optional: return only a structural outline (top-level keys and item counts) instead of the full data. Does not change cost"New value: +"optional: return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost" - added
Output schema / properties / jqErrorAdded value: +{ + "description": "present only when a jq expression failed; output then holds the full unshaped result and this explains why the reshape did not apply", + "type": "string" +} - added
Output schema / properties / resultIdAdded value: +{ + "description": "opaque handle to the full result, cached ~15 min; pass it to read_result to dig deeper for free (no re-run, no charge). Absent when the result was too large to cache", + "type": "string" +}
2 tool updates
- Changed
list_apis5 fields changed- changed
Output schema / properties / scrapers / descriptionPrevious value: -"matching APIs"New value: +"matching APIs (lightweight summaries: no description or schemas)" - removed
Output schema / properties / scrapers / items / properties / descriptionRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / scrapers / items / properties / inputSchemaRemoved value: -{ - "description": "normalized input JSON Schema" -} - removed
Output schema / properties / scrapers / items / properties / outputSchemaRemoved value: -{ - "description": "normalized output JSON Schema" -} - changed
Output schema / properties / scrapers / items / requiredPrevious value: -[ - "id", - "slug", - "category", - "name", - "description", - "priceUsd", - "baseUsd", - "perItemUsd" -]New value: +[ + "id", + "slug", + "category", + "name", + "priceUsd", + "baseUsd", + "perItemUsd" +]
- Added
search_apis
4 tool updates
- First observed
get_api - First observed
get_balance - First observed
list_apis - First observed
run_api
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables detection and analysis of pre-public product launches through web search, content extraction, AI-powered scoring, and automated alerting. Provides comprehensive tools for surfacing stealth startup signals before they trend publicly.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT- AlicenseNot gradedqualityBmaintenanceAnalyze LinkedIn & email outreach campaigns, track pipeline performance, and review lead conversations for RevOps, Sales Managers, and SDR teams.Apache 2.0
- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.11961MIT