{"name":"io.github.getanyapi-com/anyapi","slug":"getanyapi-com-anyapi","title":"AnyAPI","description":"Hundreds of scraping & data APIs through one key. USD pay-per-request, normalized schemas, failover.","url":"https://mcp.market/server/getanyapi-com-anyapi","rating":null,"grade":"A","score":90,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":34,"stars":1,"forks":0,"downloads_week":47,"last_push_at":"2026-09-06T02:11:30.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":7,"ok":7,"last_checked_at":"2026-09-21T04:01:00.894Z","last_ok_at":"2026-09-21T04:01:00.894Z","latency_ms":422},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/getanyapi-com/mcp","website":"https://getanyapi.com","version":"0.1.5","remotes":[{"type":"streamable-http","url":"https://api.getanyapi.com/mcp","headers":[{"description":"AnyAPI API key as a Bearer token (format: Bearer aa_live_...). Mint one at https://getanyapi.com/dashboard/keys. Needed to run an API; connecting, listing the tools, and the catalog tools (list_apis, search_apis, get_api, quote_api) all work without it.","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"anyapi-mcp","version":"0.1.5","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"AnyAPI API key (format: aa_live_...). Mint one at https://getanyapi.com/dashboard/keys. Needed to run an API; connecting, listing the tools, and the catalog tools (list_apis, search_apis, get_api, quote_api) all work without it.","isSecret":true,"name":"ANYAPI_API_KEY"}]},{"registryType":"oci","identifier":"ghcr.io/getanyapi-com/mcp:0.1.5","runtimeHint":"docker","transport":{"type":"stdio"},"environmentVariables":[{"description":"AnyAPI API key (format: aa_live_...). Mint one at https://getanyapi.com/dashboard/keys. Needed to run an API; connecting, listing the tools, and the catalog tools (list_apis, search_apis, get_api, quote_api) all work without it.","isSecret":true,"name":"ANYAPI_API_KEY"}]}],"tools":[{"name":"get_api","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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.\"","type":"string"},"sku_id":{"description":"the API SKU slug to describe","type":"string"}},"required":["sku_id","context"]}},{"name":"get_balance","description":"Get the remaining wallet balance (in USD) for the AnyAPI key supplied as a Bearer token. Requires a valid AnyAPI key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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.\"","type":"string"}},"required":["context"]}},{"name":"get_request","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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.\"","type":"string"},"request_id":{"description":"durable request identifier returned by run_api","type":"string"}},"required":["request_id","context"]}},{"name":"list_apis","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"description":"optional category slug to filter by","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.\"","type":"string"}},"required":["context"]}},{"name":"quote_api","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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.\"","type":"string"},"input":{"additionalProperties":true,"description":"the exact input payload you plan to pass to run_api; the quote resolves pricing the same way the run will","type":"object"},"sku_id":{"description":"the API SKU slug to price","type":"string"}},"required":["sku_id","input","context"]}},{"name":"read_result","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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","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.\"","type":"string"},"fields":{"description":"optional: keep only these keys on each result item (dotted paths like 'author.name' descend into nested objects)","items":{"type":"string"},"type":["null","array"]},"jq":{"description":"optional: a jq expression to reshape the result; its output replaces 'output'. Example: '.data | {title, description, md: .markdown[:3500]}'. Sandboxed 250ms/2MB budget","type":"string"},"max_items":{"description":"optional: cap the number of result items returned; a _truncated note reports how many were withheld","type":["null","integer"]},"result_id":{"description":"the resultId returned by a prior run_api call (cached ~15 min)","type":"string"},"summary":{"description":"optional: return only a structural outline (top-level keys, item counts, per-field byte sizes) instead of the full data","type":"boolean"}},"required":["result_id","context"]}},{"name":"report_bug","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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","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.\"","type":"string"},"details":{"description":"optional: what you expected, what you got, and anything you already tried","type":"string"},"request_id":{"description":"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","type":"string"},"sku":{"description":"optional: the sku_id this is about, e.g. 'instagram.reels_search'","type":"string"},"summary":{"description":"one line saying what went wrong or what you want to tell us","type":"string"}},"required":["summary","context"]}},{"name":"run_api","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 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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","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.\"","type":"string"},"fields":{"description":"optional: keep only these keys on each result item (dotted paths like 'author.name' descend into nested objects). Shrinks the response without changing cost","items":{"type":"string"},"type":["null","array"]},"input":{"additionalProperties":true,"description":"normalized input payload matching the API input schema","type":"object"},"jq":{"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"},"max_items":{"description":"optional: cap the number of result items returned; a _truncated note reports how many were withheld. Does not change cost","type":["null","integer"]},"sku_id":{"description":"the API SKU slug to execute","type":"string"},"summary":{"description":"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","type":"boolean"}},"required":["sku_id","input","context"]}},{"name":"search_apis","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"category":{"description":"optional category slug to narrow the search","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.\"","type":"string"},"limit":{"description":"optional cap on matches returned (default 25, maximum 50)","type":["null","integer"]},"platform":{"description":"optional API slug prefix to narrow the search","type":"string"},"query":{"description":"free-text search over API name, slug, and description; optional when category or platform is given","type":"string"}},"required":["context"]}},{"name":"send_feedback","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","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","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.\"","type":"string"},"details":{"description":"optional: what you expected, what you got, and anything you already tried","type":"string"},"request_id":{"description":"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","type":"string"},"sku":{"description":"optional: the sku_id this is about, e.g. 'instagram.reels_search'","type":"string"},"summary":{"description":"one line saying what went wrong or what you want to tell us","type":"string"}},"required":["summary","context"]}}],"scan":{"score":90,"grade":"A","scanned_at":"2026-09-20T11:36:32.977Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T11:36:32.918Z","components":{"code":{"score":25,"max":25,"notes":["6 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 560ms"]},"poisoning":{"score":15,"max":15,"notes":["10 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 14 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"probes":[{"url":"https://api.getanyapi.com/mcp","reachable":true,"authRequired":false,"latencyMs":560,"serverInfo":{"name":"anyapi","version":"v0.1.0"}}],"packages":[{"registryType":"npm","identifier":"anyapi-mcp","version":"0.1.5","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-09-06T01:17:52.349Z","repositoryUrl":"git+https://github.com/getanyapi-com/mcp.git","weeklyDownloads":47}],"repo":{"found":true,"owner":"getanyapi-com","repo":"mcp","archived":false,"pushedAt":"2026-09-06T02:11:30Z","stars":1,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/292946935?v=4","ownerCreatedAt":"2026-06-12T00:40:38Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/292946935?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":47,"license":"Apache-2.0","lastPushAt":"2026-09-06T02:11:30.000Z","score":34}}}},"grade_history":[],"reviews":[]}