anyapi-mcp
Local stdio MCP server for AnyAPI - hundreds of scraping and data APIs behind one key, priced per request in USD. Proxies to the hosted AnyAPI MCP server.
npm · fingerprint 82b2e5a3582aa60b9f498e22 · repository · RSS
10tools
4recorded versions
24dtracked
last checked 10 Oct
What changed
Changed 2026-10-09 13:27 UTC
9 descriptions rewritten, 1 schema or annotation change with the description left byte-identical.
--- pinned/get_api +++ observed/get_api { "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Get the full definition of one API by API slug, including its normalized input/output JSON schemas, per-request and per-1,000-request USD pricing on every source, and nullable trailing-30-day latency p50/p95/p99 with the successful sample count. Latency percentiles describe observed successful requests; p99 is an observation, not a maximum or a client timeout guarantee. Entries with heavy:true produce large API responses.", "inputSchema": { "properties": { "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "sku_id": {
--- pinned/get_balance +++ observed/get_balance { "annotations": { "destructiveHint": false, - "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" } },
--- pinned/get_request +++ observed/get_request { "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Inspect or resume a durable AnyAPI request by request_id. This reads AnyAPI's stored state and never repeats the paid provider dispatch. While status is queued or running, retryAfterSeconds gives the minimum interval between status checks.", "inputSchema": { "properties": { "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "request_id": { - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time. 'date_adjusted:' means a date you sent was outside the range the platform accepts, so the run used the nearest accepted date the hint names", + "description": "optional result caveat. 'large_result:' identifies a large response; fields/max_items/summary reduce response size without changing cost. 'paging_unavailable:' means the source cannot return a nextCursor, so the result may be incomplete and cannot be paged further; requireFields [\"nextCursor\"] restricts execution to sources that support pagination and may cost more per request. 'malformed_query:' means X interpreted adjacent bare words as ANDed and OR as having higher precedence, so a multi-word alternative is not a phrase; the result reflects that interpretation, and the hint includes a corrected query. 'date_adjusted:' means an input date was outside the platform's accepted range, so execution used the nearest accepted date named in the hint", "type": "string" }, "items": { - "description": "machine-actionable resume instruction present while durable work is pending", + "description": "stored-request retrieval coordinates and polling interval present while durable work is pending", "properties": { "requestId": { - "description": "request_id argument for the next tool call", + "description": "durable request identifier for stored-request retrieval", "type": "string" }, "retryAfterSeconds": { - "description": "MCP tool to call next", + "description": "MCP tool name for stored-request retrieval", "type": "string" } }, - "description": "durable request identifier; pass it to get_request to resume without repeating the paid POST", + "description": "durable request identifier for stored status and result retrieval without repeating the paid provider dispatch", "type": "string" }, "resultId": { - "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", + "description": "opaque handle to the full result, cached ~15 min; identifies the paid result available for free reshaping without another execution or charge. Absent when the result was too large to cache", "type": "string" }, "serviceOutcome": { - "description": "the source that served this run: pass its id back in 'source' to prefer it again, or in 'ignoreSources' to avoid it. Absent when no source identity applies", + "description": "the source that served this request; its id is accepted by 'source' for preference or 'ignoreSources' for exclusion. Absent when no source identity applies", "properties": { "artworkKey": { "type": "string"
--- pinned/list_apis +++ observed/list_apis { "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Browse available AnyAPI APIs as lightweight summaries (id, name, category, USD pricing), optionally filtered by category. Descriptions and schemas are omitted to keep catalog responses small. Each pricing offer carries both `maxUsd` (billed per request) and `maxPer1kUsd` (the same price per 1,000 requests).", "inputSchema": { "properties": { "category": { - "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" } },
--- pinned/quote_api +++ observed/quote_api { "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Get the exact input-aware execution price for an API, free and without a key. Nothing is charged or executed. `sku_id` and `input` identify the proposed execution; pricing resolves exactly as it does for execution, and input validation can return invalid_input without a charge. Returns maxCostUsd (the ceiling reserved), minCostUsd (the likely charge), and the base/per-item breakdown explaining why they differ. These are USD amounts for this one call, not per-1,000-request catalog comparison rates.", "inputSchema": { "properties": { "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "input": { - "description": "the exact input payload you plan to pass to run_api; the quote resolves pricing the same way the run will", + "description": "the exact normalized input payload being priced; the quote resolves pricing the same way execution does", "type": "object" }, "sku_id": {
--- pinned/read_result +++ observed/read_result { "annotations": { "destructiveHint": false, - "description": "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).", + "description": "Read or reshape a previously paid API result without executing or paying again. `result_id` identifies the full cached result; fields/max_items/summary/jq control its presentation, including row selection and slicing large fields. Results are cached ~15 min and are private to the authenticated account; an expired id returns result_expired.", "inputSchema": { "properties": { "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "fields": { - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time. 'date_adjusted:' means a date you sent was outside the range the platform accepts, so the run used the nearest accepted date the hint names", + "description": "optional result caveat. 'large_result:' identifies a large response; fields/max_items/summary reduce response size without changing cost. 'paging_unavailable:' means the source cannot return a nextCursor, so the result may be incomplete and cannot be paged further; requireFields [\"nextCursor\"] restricts execution to sources that support pagination and may cost more per request. 'malformed_query:' means X interpreted adjacent bare words as ANDed and OR as having higher precedence, so a multi-word alternative is not a phrase; the result reflects that interpretation, and the hint includes a corrected query. 'date_adjusted:' means an input date was outside the platform's accepted range, so execution used the nearest accepted date named in the hint", "type": "string" }, "items": { - "description": "machine-actionable resume instruction present while durable work is pending", + "description": "stored-request retrieval coordinates and polling interval present while durable work is pending", "properties": { "requestId": { - "description": "request_id argument for the next tool call", + "description": "durable request identifier for stored-request retrieval", "type": "string" }, "retryAfterSeconds": { - "description": "MCP tool to call next", + "description": "MCP tool name for stored-request retrieval", "type": "string" } }, - "description": "durable request identifier; pass it to get_request to resume without repeating the paid POST", + "description": "durable request identifier for stored status and result retrieval without repeating the paid provider dispatch", "type": "string" }, "resultId": { - "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", + "description": "opaque handle to the full result, cached ~15 min; identifies the paid result available for free reshaping without another execution or charge. Absent when the result was too large to cache", "type": "string" }, "serviceOutcome": { - "description": "the source that served this run: pass its id back in 'source' to prefer it again, or in 'ignoreSources' to avoid it. Absent when no source identity applies", + "description": "the source that served this request; its id is accepted by 'source' for preference or 'ignoreSources' for exclusion. Absent when no source identity applies", "properties": { "artworkKey": { "type": "string"
--- pinned/report_bug +++ observed/report_bug { "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Submit a defect report to AnyAPI about wrong, empty, or malformed API data for valid input, misleading or unactionable errors, incorrect prices or schemas, or retries that failed unexpectedly. Free, never charged. `summary` is required and contains one line; optional `request_id` identifies the stored request and its upstream error body without requiring the payload in the report.", "inputSchema": { "properties": { "contact": { - "description": "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", + "description": "optional: an email address for a reply; trial keys have no reachable account contact", "type": "string" }, "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "details": { - "description": "the stored report id; quote it if you contact support about this", + "description": "the stored report id for support correspondence", "type": "string" }, "received": {
--- pinned/run_api +++ observed/run_api { "annotations": { "destructiveHint": true, - "description": "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. Some failed wallet-funded requests incur processing charges that we pass through at cost, with no markup; the error message shows the amount charged. 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.", + "description": "Execute an API by API slug with a normalized input payload. Every input schema is strict: unknown fields are rejected, not ignored, and field names can differ between related APIs. Inputs must conform to the endpoint's schema, not its description. Published latency p50/p95/p99 and sample counts describe observed successful requests; p99 is an observation, not a maximum or a client timeout guarantee. Requires a valid AnyAPI key as a Bearer token. Charges the USD wallet. Some failed wallet-funded requests incur processing charges passed through at cost, with no markup; the error message shows the amount charged. Results can be large. `fields` keeps selected keys, `max_items` caps returned rows, and `summary` returns an outline; these controls reduce response size without changing the charge.", "inputSchema": { "properties": { "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "fields": { - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time. 'date_adjusted:' means a date you sent was outside the range the platform accepts, so the run used the nearest accepted date the hint names", + "description": "optional result caveat. 'large_result:' identifies a large response; fields/max_items/summary reduce response size without changing cost. 'paging_unavailable:' means the source cannot return a nextCursor, so the result may be incomplete and cannot be paged further; requireFields [\"nextCursor\"] restricts execution to sources that support pagination and may cost more per request. 'malformed_query:' means X interpreted adjacent bare words as ANDed and OR as having higher precedence, so a multi-word alternative is not a phrase; the result reflects that interpretation, and the hint includes a corrected query. 'date_adjusted:' means an input date was outside the platform's accepted range, so execution used the nearest accepted date named in the hint", "type": "string" }, "items": { - "description": "machine-actionable resume instruction present while durable work is pending", + "description": "stored-request retrieval coordinates and polling interval present while durable work is pending", "properties": { "requestId": { - "description": "request_id argument for the next tool call", + "description": "durable request identifier for stored-request retrieval", "type": "string" }, "retryAfterSeconds": { - "description": "MCP tool to call next", + "description": "MCP tool name for stored-request retrieval", "type": "string" } }, - "description": "durable request identifier; pass it to get_request to resume without repeating the paid POST", + "description": "durable request identifier for stored status and result retrieval without repeating the paid provider dispatch", "type": "string" }, "resultId": { - "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", + "description": "opaque handle to the full result, cached ~15 min; identifies the paid result available for free reshaping without another execution or charge. Absent when the result was too large to cache", "type": "string" }, "serviceOutcome": { - "description": "the source that served this run: pass its id back in 'source' to prefer it again, or in 'ignoreSources' to avoid it. Absent when no source identity applies", + "description": "the source that served this request; its id is accepted by 'source' for preference or 'ignoreSources' for exclusion. Absent when no source identity applies", "properties": { "artworkKey": { "type": "string"
--- pinned/search_apis +++ observed/search_apis { "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Search APIs by meaning and keyword across name, slug, and description, returning matches with their descriptions but without schemas, ranked most relevant first. At least one of `query`, `category`, or `platform` is required, in any combination; `category` or `platform` without `query` enumerates that scope. `limit` caps matches (default 25, maximum 50). Each result carries a `relevance` score in (0,1] relative to the top match; a relevance floor drops weak matches, so `total` counts relevant matches before the limit. `ranking` identifies meaning-based ('semantic') or substring ('keyword') matching. Entries with heavy:true produce large API responses. Search results omit input schemas; API inputs require the endpoint's strict schema, whose field names can differ between related APIs.", "inputSchema": { "properties": { "category": { - "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "limit": {
--- pinned/send_feedback +++ observed/send_feedback { "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Submit non-defect feedback to AnyAPI about an API you could not find in the catalog, a missing result field, confusing documentation or tool descriptions, or an improvement that would make a task easier. Free, never charged. `summary` is required and contains one line; optional `details` describes the task or suggestion.", "inputSchema": { "properties": { "contact": { - "description": "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", + "description": "optional: an email address for a reply; trial keys have no reachable account contact", "type": "string" }, "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.\"", + "description": "Brief purpose of this tool call within the requested task, used for analytics and user-intent tracking.", "type": "string" }, "details": { - "description": "the stored report id; quote it if you contact support about this", + "description": "the stored report id for support correspondence", "type": "string" }, "received": {
Changed 2026-10-08 13:41 UTC
3 schema or annotation changes with the description left byte-identical.
--- pinned/get_request +++ observed/get_request { "annotations": { "destructiveHint": false, - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time", + "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time. 'date_adjusted:' means a date you sent was outside the range the platform accepts, so the run used the nearest accepted date the hint names", "type": "string" }, "items": {
--- pinned/read_result +++ observed/read_result { "annotations": { "destructiveHint": false, - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time", + "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time. 'date_adjusted:' means a date you sent was outside the range the platform accepts, so the run used the nearest accepted date the hint names", "type": "string" }, "items": {
--- pinned/run_api +++ observed/run_api { "annotations": { "destructiveHint": true, - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time", + "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time. 'date_adjusted:' means a date you sent was outside the range the platform accepts, so the run used the nearest accepted date the hint names", "type": "string" }, "items": {
Changed 2026-10-06 13:34 UTC
3 schema or annotation changes with the description left byte-identical.
--- pinned/get_request +++ observed/get_request { "annotations": { "destructiveHint": false, - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list", + "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time", "type": "string" }, "items": {
--- pinned/read_result +++ observed/read_result { "annotations": { "destructiveHint": false, - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list", + "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time", "type": "string" }, "items": {
--- pinned/run_api +++ observed/run_api { "annotations": { "destructiveHint": true, - "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list", + "description": "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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list. 'malformed_query:' means X read your search query differently than it looks (adjacent bare words are ANDed and OR binds tighter, so a multi-word alternative is not a phrase); this result is what X returned for it, and the hint carries the corrected query to send next time", "type": "string" }, "items": {
Current tools
Show all 10 tool fingerprints
get_api
get_balance
get_request
list_apis
quote_api
read_result
report_bug
run_api
search_apis
send_feedback
Watch this server yourself
If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.
npx -y mcp-pin@0.2.3 -- <your anyapi-mcp command>
Or subscribe to this page's RSS feed to be told when it changes.
Badge
The badge states one fact about time and nothing else. It never claims a server is safe.
[](https://mcp-pin.gautamkhosla.com/servers/92bca97162d54c0e.html)