actors-mcp-server
OfficialThis server lets you discover, inspect, run, and monitor Apify Actors, read their results, search Apify/Crawlee docs, interact with Actor-hosted MCP tools, and report problems.
Search Apify Store for Actors by keywords, pagination, and use case.
Fetch Actor details such as input/output schemas, README, pricing, stats, metadata, and server interface.
Run any Apify Actor with custom input and run options, waiting up to 45 seconds or returning immediately.
Check Actor run status, details, storage IDs, stats, and abort running runs.
Read dataset items with pagination, filtering, field selection, and flattening.
Read specific records from key-value stores.
List and call tools exposed by Actors that run their own MCP servers.
Search and fetch Apify and Crawlee documentation pages.
Report problems with Apify MCP tools or Actors to the Apify team.
Integrates with Facebook through the Facebook Posts Scraper Actor to extract data from Facebook posts from multiple pages/profiles.
Integrates with Google Search through the Google Search Results Scraper to scrape Google Search Engine Results Pages (SERPs).
Integrates with Google Maps through the Google Maps Email Extractor Actor to extract contact details from Google Maps listings.
Integrates with Instagram through the Instagram Scraper Actor to scrape Instagram posts, profiles, places, photos, and comments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@actors-mcp-serverscrape recent posts from Elon Musk's Twitter profile"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apify MCP server
Connect your agent to the largest marketplace of tools for AI.
The official Apify Model Context Protocol (MCP) server gives AI agents web scraping, data extraction, and browser automation through thousands of ready-made Actors from Apify Store, at https://mcp.apify.com.
Apify is the marketplace of ready-to-run tools for AI agents. One connection to the Apify MCP server gives your agent thousands of tools to choose from, for jobs like web fetch, SERP monitoring, lead generation and enrichment, and pulling data from e-commerce sites and social media. The server loads only what each task needs.
Your agent searches Apify Store, checks an Actor's input and pricing, runs it, and reads the structured results, so you don't install a separate MCP server for every site. Connect to the hosted server with OAuth, or run it locally over stdio with the @apify/actors-mcp-server npm package.
Contents
Related MCP server: AXE Fleet MCP Server
๐ Quickstart
Open the MCP configurator, pick your client, and choose the tools you want.
Copy the generated configuration, deeplink, or command into your client.
Sign in to Apify in the browser window that opens. If you don't have an account, you can create a free one there.
The hosted endpoint is https://mcp.apify.com. If your client can't use OAuth, send your Apify API token in an Authorization: Bearer <APIFY_TOKEN> header instead. Treat the token like a password and keep it out of repositories.
Using a coding agent such as Claude Code, Codex, Cursor, or GitHub Copilot? An official Apify plugin installs this MCP server together with Apify agent skills in one step.
๐ค Set up your client
The configurator generates the exact setup for each supported client, including Claude Code, ChatGPT, Cursor, VS Code, GitHub Copilot CLI, Claude, Claude Desktop, Codex, OpenCode, Kiro, and more. The snippets below cover the most common cases.

claude mcp add apify "https://mcp.apify.com" -t httpClaude Code opens the Apify sign-in page the first time it uses the server. To install the Apify plugin with Apify agent skills instead, run /plugin marketplace add apify/apify-claude-code-plugin, then /plugin install apify@apify and /reload-plugins.
Open ChatGPT Plugins, select +, then Add custom MCP server.
Name it
Apify, enterhttps://mcp.apify.comas the server URL, and choose OAuth authentication.Review the risk warning, select I understand and want to continue, then Create as a plugin.
Sign in with Apify, review the tools, and install the plugin. No API token is needed.
Start a new conversation, type
@, and select Apify.
In Business, Enterprise, and Edu workspaces, an admin or owner may need to create or publish the plugin. If the option is missing, ask your workspace admin. When the server's tools change, open the plugin and select Refresh.
The ChatGPT desktop app uses local MCP configuration shared with Codex instead: go to Settings > MCP servers > Add server, choose Streamable HTTP, and enter https://mcp.apify.com. See OpenAI's custom MCP server guide.
Use the one-click install link from the configurator, or let the Apify CLI write the configuration, including your API token:
apify mcp install cursorThe same command works for claude-code, vscode, codex, kiro, and antigravity.
Use the one-click install link from the configurator, run apify mcp install vscode, or add https://mcp.apify.com as an HTTP server in your MCP configuration:
{
"servers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com"
}
}
}Apify is available as a Claude connector. Open Settings > Connectors, find Apify in the connector directory, and connect it. You can also select Add custom connector, name it Apify, and enter https://mcp.apify.com as the remote MCP server URL. Sign in with Apify when prompted. The same connector works on Claude.ai and in Claude Desktop. See the Claude guide.
Most clients that support remote servers and OAuth accept a configuration like this:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com"
}
}
}Requires Node.js 22 or later.
{
"mcpServers": {
"actors-mcp-server": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server"],
"env": {
"APIFY_TOKEN": "YOUR_APIFY_TOKEN"
}
}
}
}If you've run apify login, the server can also read the token saved by the Apify CLI. Run npx @apify/actors-mcp-server --help for all options.
The server is also listed in the Docker MCP catalog, and each release ships an MCP bundle file (apify-mcp-server.mcpb) for one-click installation in clients that support it.
Remote (hosted) or local MCP server
The hosted remote MCP server with OAuth is the recommended option. Use the local server when you want to run the MCP process on your own machine; Actors still run and store their results on the Apify platform in both modes. If your client supports only stdio, you can also bridge it to the hosted server with mcp-remote: npx mcp-remote https://mcp.apify.com.
Hosted ( | Local ( | |
Transport | Streamable HTTP | stdio |
Authentication | OAuth or Bearer token |
|
Output schemas inferred for Actor results | Yes | No |
Tool selection |
|
|
Updates | Always the latest server | The npm version you install |
How an agent uses Apify Actors
Actors are serverless programs on the Apify platform. Each one does a specific job, like scraping Google Maps, crawling a website for RAG, or collecting social media posts. The MCP server turns Actors into tools an agent can find and call without you configuring each one in advance.
A typical task follows four steps:
search-actorsfinds candidate Actors in Apify Store for the task.fetch-actor-detailsreturns the Actor's input schema, README, and pricing, plus its output schema on request.call-actorstarts the run and waits for it to finish, 30 seconds by default and up to 45. It returns the run status and storage IDs; the scraped items stay in the run's dataset.get-dataset-itemsreads the results from the run's dataset, withlimitandoffsetfor pagination.
The server adds get-dataset-items, get-key-value-store-record, get-actor-run, and abort-actor-run whenever call-actor or an Actor tool is loaded, so the agent can always read results and check on long runs that outlast the wait.
You can also expose a specific Actor as its own tool, for example apify/web-search or apify/instagram-scraper. The server builds the tool's parameters from the Actor's input schema, so the agent knows exactly what to pass.
Actors that run their own MCP server. Some Actors are MCP servers themselves. fetch-actor-mcp-tool-list lists their tools, and call-actor-mcp-tool calls one. When such an Actor is loaded as a tool source, its tools are exposed under names in the form username--actor-name--tool-name. Apify Store also lists MCP-related Actors from independent creators; those are separate products with their own READMEs and pricing.
๐ ๏ธ Tools, resources, and prompts
Any Actor can be a tool, and agents discover new ones as they work. By default, the server loads the actors and docs categories, two Actor tools (RAG Web Browser and Web Fetch), and report-problem. Everything else is opt-in by category or by tool name.
Helper tools
Besides Actor tools, the server provides helper tools for the Apify platform:
Actors: search Apify Store, list the Actors in your account, view their details, call tools on Actors that run MCP servers, send requests to Server Actors, and delete your own Actors.
Documentation: search the Apify and Crawlee docs and fetch pages as context.
Runs and storage: list runs, inspect them, read their logs, and read datasets and key-value stores.
Tasks and schedules: manage saved Actor tasks and their public landing pages, and schedules that run Actors and tasks automatically.
Builds and versions: build Actors, read build logs, and create, read, change, copy, and delete versions from files.
Apify API: search the API reference, inspect an operation, and send requests to read or change data.
Available tools
Legend for the Enabled by default column:
โ In the default tool set.
โก Added automatically when
call-actor, an Actor tool, orget-actor-runis loaded, which is true in the default configuration.โ ยน Served by default only when telemetry is on and the client name doesn't contain
claude,anthropic, orlocal-agent-mode. Select it explicitly withtools=report-problemortools=devto serve it to any client; telemetry still has to be on.
Tool name | Category | Description | Enabled by default |
| actors | Search for Actors in Apify Store. | โ |
| actors | Get an Actor's input schema, README (summary when available, full otherwise), pricing, and a Server Actor's HTTP operations. The output schema is opt-in. | โ |
| actors | Run an Actor and return its run status and storage IDs. Use | โ |
| actors | List the tools of an Actor that runs an MCP server, with their schemas, annotations, and metadata. | โ |
| actors | Call one tool on an Actor's MCP server and return its result. | โ |
| runs | Get details about an Actor run. | โก |
| storage | Read items from a dataset, with filtering and pagination. | โก |
| storage | Get the value stored under a key in a key-value store. | โก |
| runs | Abort a running Actor run, optionally gracefully. | โก |
| docs | Search the Apify and Crawlee documentation for relevant pages. | โ |
| docs | Fetch the full content of a documentation page by its URL. | โ |
Actor (see Choose which tools load) | Search the web and return the content of the top results. | โ | |
Actor (see Choose which tools load) | Fetch a URL and return its content as Markdown, text, HTML, or other formats. | โ | |
| dev | Report a problem with an Apify tool or Actor to the Apify team. | โ ยน |
| none (select by name: | List the Actors you own and those shared with you, including private ones. | |
| none (select by name: | Send one HTTP request to a Server Actor's API, as documented by its API schema, and return the response. | |
| none (select by name: | Delete an Actor from your account permanently. Public Actors must be unpublished first. | |
| runs | List Actor runs, filtered by Actor and status. | |
| runs | Read the log of an Actor run. | |
| storage | Get metadata about a dataset. | |
| storage | Generate a JSON schema from dataset items. | |
| storage | List the datasets in your account. | |
| storage | Get metadata about a key-value store. | |
| storage | List the keys in a key-value store. | |
| storage | List the key-value stores in your account. | |
| tasks | Create a saved Actor task (a named, reusable Actor configuration). | |
| tasks | Get a saved Actor task, its publication state, and its public display configuration. | |
| tasks | Update a task's input, run options, or public display configuration. | |
| tasks | Publish a task on its public landing page. | |
| tasks | Unpublish a task from its public landing page. | |
| schedules | Create a schedule that runs Actors or tasks on a cron expression. | |
| schedules | Get a schedule, its cron expression, state, and the actions it runs. | |
| schedules | Update a schedule's cron expression, time zone, enabled state, or actions. | |
| schedules | Delete a schedule. | |
| builds | Build an Actor version and wait a bounded time for the build to finish. | |
| builds | Get the status of an Actor build. | |
| builds | List the account's builds, or one Actor's, in every status, newest first. | |
| builds | Read the log of an Actor build. | |
| versions | Get an Actor version's file listing with hashes, plus the content of the files you ask for. | |
| versions | Create a private Actor in your account from files, optionally starting a build. | |
| versions | Write, edit, or delete files of an Actor version in one all-or-nothing write. | |
| versions | Add a version to an Actor, from files or as a copy of another version, optionally starting a build. | |
| versions | Delete an Actor version. Its builds and their tags stay. | |
| api | Search the Apify API reference by keywords. Returns each operation's method, path, and docs page. | |
| api | Get the parameters and request body schema of the Apify API operations on a path. | |
| api | Send a GET request to an Apify API path, like | |
| api | Send a POST, PUT, PATCH, or DELETE request with a JSON body to any Apify API path, like |
The tasks category manages saved Actor tasks. It is unrelated to the MCP Tasks protocol. The tool reference has full descriptions of each tool.
Tool annotations
Every tool carries a title, a readOnlyHint, and an openWorldHint. readOnlyHint is true for tools that only read data. Actor tools get it only for Apify-maintained Actors with limited permissions and no inputs that accept secrets, writable storage, an MCP connector, or code; other Actor tools are marked destructive. openWorldHint is true for tools that reach outside the Apify platform, such as call-actor, and false for platform-only tools.
Prompts and resources
No prompts are registered yet, so prompts/list returns an empty list. resources/read accepts any Apify API GET URL (https://api.apify.com/v2/...) and returns the response body using the session's Apify token, inlined up to 256 KB. Your data isn't enumerated in resources/list; resources/templates/list lists the common shapes with their paging parameters.
Choose which tools load
The tools parameter takes categories, tool names, and Actor names, separated by commas. When you set it, the defaults are dropped and only what you list is loaded, plus the โก run and storage tools whenever the list includes call-actor or an Actor. The easiest way to build a selection is the configurator.
Hosted server:
https://mcp.apify.com?tools=actors,docs,apify/web-search,apify/web-fetchLocal server:
npx @apify/actors-mcp-server --tools actors,docs,apify/web-search,apify/web-fetchTo give an agent a single Actor, list only that Actor. The agent gets its tool plus the four โก tools it needs to read the results:
https://mcp.apify.com?tools=apify/instagram-scraperPin your tools in production. The default tool set can change between versions. Set
toolsexplicitly if you need a stable interface.
The
actorsURL parameter and--actorsflag still work. They're merged intotools, so?actors=apify/web-fetchequals?tools=apify/web-fetch.enableAddingActors,enable-adding-actors, andenableActorAutoLoadingwere removed and are ignored. Dynamic Actor calls come fromcall-actor, which the defaultactorscategory includes.The selectors
add-actor,experimental, andprevieware retired and load nothing. Usecall-actoror theactorscategory.get-actor-logwas renamed toget-actor-run-log, and thesourcecategory toversions. The old names load nothing.call-actorno longer calls tools on MCP server Actors: theactorName:toolNameform is rejected. Usecall-actor-mcp-toolwithactor,tool, andarguments. A selection that namescall-actoralone needscall-actor-mcp-tooladded.fetch-actor-detailsno longer lists an MCP server Actor's tools, andoutput.mcpToolsis ignored. Usefetch-actor-mcp-tool-list, which returns the definitions instructuredContent.tools. A selection that namesfetch-actor-detailsalone needsfetch-actor-mcp-tool-listadded.
UI mode configuration
The ui parameter controls MCP Apps widget tools. With UI mode on, the server adds search-actors-widget and fetch-actor-details-widget next to their base tools, which keep returning standard responses. By default (auto), UI mode turns on when the client supports MCP Apps.
Value | Behavior |
| Widget tools added when the client supports MCP Apps |
| Widget tools always added |
| No widget tools |
Hosted server:
https://mcp.apify.com?tools=actors,docs&ui=trueLocal server, with a CLI flag or the UI_MODE environment variable:
npx @apify/actors-mcp-server --ui true
UI_MODE=true npx @apify/actors-mcp-server๐ฌ Example prompts
Ask in plain language. The agent finds a suitable Actor, checks its input and pricing, runs it, and reads the results. These prompts cover the most common jobs:
Use case | Example prompt | Example Actor |
Web research | "Find what people on X said about autonomous AI agents this week and summarize the key developments." | |
Search and read the web | "Compare the current pricing plans of Notion, Coda, and Airtable and tell me which is cheapest for a 10-person team." | |
Search results (SERP) | "Get the top 20 Google results for 'best CRM for startups' in the US and show who ranks where." | |
Lead generation | "Find dentists in Austin, Texas on Google Maps with their phone numbers, websites, and ratings." | |
LinkedIn profiles | "Get the current job title, company, and work history for these 20 LinkedIn profiles." | |
LinkedIn company posts | "Get the 30 latest posts from Apify's LinkedIn company page with their reaction counts." | |
Review analysis | "Pull the latest 100 Google Maps reviews for this hotel and group the complaints by theme." | |
Social media monitoring | "Get the 50 latest posts from @nasa on Instagram with likes and comments." | |
Trend research | "Find the most viewed TikTok videos for #skincare this week." | |
E-commerce | "List the 10 best-rated wireless earbuds on Amazon with prices and review counts." | |
Knowledge base and RAG | "Crawl docs.example.com and turn every page into Markdown I can load into my vector database." |
Follow-ups work too. "Show me the next 10 results from that run" makes the agent call get-dataset-items again with a higher offset. With the schedules category loaded, "Run that Google Maps search every Monday at 9 am" creates a schedule.
๐ฐ Pricing and limits
Connecting to the MCP server is free. Actor runs bill to your Apify account according to each Actor's pricing, which
fetch-actor-detailsshows before a run. The Apify free plan includes $5 of monthly platform usage.To cap what a run can cost, pass
maxTotalChargeUsd(pay-per-event Actors) ormaxItems(pay-per-result Actors) in thecallOptionsofcall-actor.timeoutandmemorylimit the run's duration and memory, not its price.The hosted server accepts up to 20 requests per second per account.
search-actorsreturns only free and pay-per-event Actors that pass the platform's agent-safety filters, so rental and pay-per-result Actors don't appear in search. Full-permission Actors need your one-time approval; until then,call-actorreturns an error with an approval link.Some tools work without an Apify account:
search-actors,fetch-actor-details,search-apify-docs,fetch-apify-docs,apify-api-search, andapify-api-details. Select only those, for examplehttps://mcp.apify.com?tools=search-actors, and the hosted server accepts the connection without a token.
๐ช Agentic payments (experimental). Agents can pay for Actor runs without an Apify account. AGI sells a prepaid, spend-capped Apify API token for an x402, MPP, or Skyfire payment. The agent then uses it as a normal Bearer token against
mcp.apify.com, with any Actor. See the agentic payments documentation for supported methods and limits, and agi.apify.com/AGENTS.md for protocol details.
๐ก Telemetry
The Apify MCP server collects telemetry about tool calls to help Apify understand usage patterns and improve the service. Telemetry is on by default. With telemetry on, Actor searches in Apify Store send the MCP session ID as _traceId, and tool-call events carry it as trace_id. search-actors also sends _useCase, a one-sentence reason for the search written by the model, which Apify uses to improve Store search results. The stdio transport also uses Sentry for error tracking, which helps the Apify team find and fix issues faster.
To opt out, including Sentry, set the telemetry-enabled URL parameter or the --telemetry-enabled CLI flag to false, or set TELEMETRY_ENABLED=false. CLI flags take precedence over environment variables.
https://mcp.apify.com?telemetry-enabled=falsenpx @apify/actors-mcp-server --telemetry-enabled=false
TELEMETRY_ENABLED=false npx @apify/actors-mcp-server๐ Troubleshooting and limitations
The local server won't start. Check your Node.js version: the package requires Node.js 22 or later.
Authentication fails. Reconnect so the client repeats the OAuth flow, or switch to a Bearer token. For the local server, check that
APIFY_TOKENis set in the client's server configuration, not only in your shell.Client features vary. Any MCP client can connect, but support for dynamic tool lists, OAuth, and MCP Apps differs between clients.
Invalid Actor input. When
call-actorfails because of invalid input, the error includes the Actor's input schema so the agent can correct the input and retry.
The server adapts Actor input schemas so that more clients and models can use them:
Descriptions longer than 500 characters are cut at the last complete sentence and marked
[Description truncated].Enums are kept in full up to 2,000 combined characters. Larger enums are replaced by a short note with example values.
Required fields get a
REQUIREDprefix in their descriptions for frameworks that ignore the JSON Schemarequiredlist.Nested properties are built for special inputs such as proxy configuration and request lists.
Missing array item types are inferred from the item type, the prefill, the default value, or the editor type, in that order.
Prefill and default values are copied into descriptions as examples, for clients that ignore JSON Schema
examples.
For more help, see the MCP documentation or open an issue.
โ FAQ
What is an MCP server? An MCP server exposes tools and data to AI agents through the Model Context Protocol, an open standard supported by clients such as Claude, ChatGPT, and Cursor. The agent connects once and calls the server's tools when a task needs them. The Apify MCP server's tools are the Actors in Apify Store.
What is the Apify MCP server? It's the official Model Context Protocol server for Apify. It lets AI agents search Apify Store, run Actors for web scraping, data extraction, and browser automation, and read the structured results.
When is it a good MCP server for web scraping? When an agent needs data from many different sites. A typical case is Google Maps one day, Instagram or an online store the next. The agent picks a ready-made Actor for each site from Apify Store instead of you writing and maintaining a scraper. Each Actor works like a web scraping API for its site, and the Apify platform handles scaling, proxies, and storage of the results.
How does it compare to Playwright MCP? Playwright MCP drives a browser on your machine step by step, through clicks and page snapshots. The Apify MCP server runs Actors in the Apify cloud. Each Actor handles JavaScript rendering, proxies, and blocking for its site and returns structured results, so the agent asks for the data instead of operating a browser. Many agents use both.
Can ChatGPT or Claude scrape websites with it?
Yes. Connect ChatGPT, Claude, or Claude Code to https://mcp.apify.com, then ask in plain language. The model searches for a suitable Actor, runs it, and reads the results.
Is it free? Connecting is free, and some discovery tools work without an account. Actor runs bill to your Apify account at each Actor's price, and the free plan includes $5 of monthly platform usage.
Do I need an API token?
Not with the hosted server, because OAuth signs you in through the browser. The local server needs APIFY_TOKEN or an Apify CLI login.
Can I limit what the agent can do or spend?
Yes. Select tools with the tools parameter or expose a single Actor. To cap a run's cost, pass maxTotalChargeUsd for pay-per-event Actors or maxItems for pay-per-result Actors in call-actor options.
๐ง Development
This repository contains the open-source server package published to npm as @apify/actors-mcp-server. The hosted service at mcp.apify.com runs on this core logic from a separate private repository.
You need Node.js 22 or later and pnpm.
pnpm install
pnpm run build
pnpm run dev # Streamable HTTP server on http://localhost:3001, hot reload for widgets
pnpm run inspector:stdio # MCP Inspector against the stdio serverThe development HTTP server doesn't read APIFY_TOKEN from the environment. Pass your token in an Authorization: Bearer header or a ?token= query parameter, for example from the MCP Inspector.
To publish a canary build of a pull request to pkg.pr.new, add the beta label to it.
DEVELOPMENT.md covers the project structure, tool loading phases, the Node.js version policy, and testing.
๐ค Contributing
Bug reports, feature requests, and documentation fixes are welcome. Open an issue with steps to reproduce a bug, or describe the problem a feature would solve and who runs into it. Send typos, broken links, and wrong commands straight to a pull request. For code, work only on an issue a maintainer has invited you to pick up; unsolicited pull requests are closed.
Read CONTRIBUTING.md before you start, including the rules for AI-assisted contributions.
๐ Privacy and license
Requests and Actor inputs go to the Apify API to run the Actors you call. Apify doesn't share them with third parties beyond what running those Actors requires. See Apify legal documents for details on data collection and retention.
The project is licensed under the MIT license.
๐ Learn more
MCP documentation: authentication, tool reference, and advanced configuration
Apify for AI agents: choosing between MCP, plugins, agent skills, the CLI, and machine-readable docs
Apify agent skills: guided multi-step workflows, installed with
npx skills add apify/agent-skillsApify CLI: running and building Actors from a terminal
Available Tools
12 toolsabort-actor-runAbort Actor runADestructiveIdempotentInspect
Abort an Actor run that is currently starting or running. For runs with status SUCCEEDED, FAILED, ABORTING, ABORTED, or TIMED-OUT, this call has no effect. The results will include the updated run details after the abort request.
USAGE:
Use when you need to stop a run that is taking too long or misconfigured.
USAGE EXAMPLES:
user_input: Abort run y2h7sK3Wc
user_input: Gracefully abort run y2h7sK3Wc
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The ID of the Actor run to abort. | |
| gracefully | No | If true, the Actor run will abort gracefully with a 30-second timeout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tip | No | Advisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key |
| runId | Yes | Actor run ID |
| stats | No | Run statistics |
| status | Yes | Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED |
| actorId | Yes | Stable Apify Actor ID from the run record |
| summary | Yes | Past-tense summary of the run state |
| exitCode | No | Actor process exit code; populated for terminal states (especially FAILED) |
| nextStep | Yes | One primary follow-up action with identifiers interpolated |
| storages | Yes | Dataset and key-value store metadata, keyed by alias. "default" is always the primary entry. |
| actorName | No | "username/actor-name" |
| startedAt | No | ISO timestamp when the run started |
| finishedAt | No | ISO timestamp when the run finished (terminal states only) |
| statusMessage | No | Pass-through from Apify run.statusMessage |
| apifyConsoleUrl | No | Personalized Apify Console link to the run; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the no-effect-on-terminal-states rule, which is exactly what makes the idempotent hint meaningful, plus the fact that updated run details come back. It omits auth/permission requirements and any rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the state constraint, and every prose sentence earns its place. The 'USAGE EXAMPLES' block of raw user_input lines is mostly decorative and pads the definition slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be spelled out, and the description still notes that updated run details are returned. For a two-parameter mutation with full annotation coverage, only auth requirements are unaddressed, which is a minor gap.
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 both parameters and the 30-second graceful-abort timeout are already documented in the schema. The description only gestures at 'gracefully' via an example, adding no syntax or semantic meaning beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Abort) plus resource (Actor run) and a state qualifier ('currently starting or running'), which immediately distinguishes it from siblings like call-actor and get-actor-run. An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('stop a run that is taking too long or misconfigured') and an explicit no-op condition (terminal statuses such as SUCCEEDED, FAILED, ABORTED, TIMED-OUT). It does not name an alternative tool or describe prerequisites, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call-actorCall ActorADestructiveInspect
Call any Actor from the Apify Store.
WORKFLOW:
Use fetch-actor-details to get the Actor's input schema
Call this tool with the actor name and proper input based on the schema
If the actor name is not in "username/name" format, use search-actors to resolve the correct Actor first.
MCP server Actors are not run here; call-actor-mcp-tool calls their MCP tools.
IMPORTANT:
Waits up to waitSecs (default 30s) for completion; returns run status and storage IDs, and with waitSecs > 0 also reports dataset field metadata
Use get-dataset-items with the datasetId to fetch results; non-terminal runs include a nextStep with polling instructions
Use dedicated Actor tools when available for better experience
There are two ways to run Actors:
Dedicated Actor tools: These are pre-configured tools, offering a simpler and more direct experience.
Generic call-actor tool (call-actor): Use this when a dedicated tool is not available or when you want to run any Actor dynamically. This tool is especially useful if you do not want to add specific tools or your client does not support dynamic tool registration.
USAGE:
Always use dedicated tools when available
Use the generic call-actor tool only if a dedicated tool does not exist for your Actor.
Use
waitSecs(0โ45) to control how long to wait. Default 30s returns results for fast actors. UsewaitSecs: 0to start and return immediately for long-running actors.
EXAMPLES:
user_input: Get instagram posts using apify/instagram-scraper
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | The Actor to call: its ID, or its name in the "username/name" form (e.g., "apify/rag-web-browser"). | |
| input | Yes | The input JSON to pass to the Actor. Required. | |
| waitSecs | No | Seconds to wait for completion (0โ45, default 30). Returns with current run status if not terminal within waitSecs. | |
| callOptions | No | Optional run config: memory (MB), timeout (s), build, maxItems (pay-per-result cap), maxTotalChargeUsd (pay-per-event cap). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tip | No | Advisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key |
| runId | Yes | Actor run ID |
| stats | No | Run statistics |
| status | Yes | Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED |
| actorId | Yes | Stable Apify Actor ID from the run record |
| summary | Yes | Past-tense summary of the run state |
| exitCode | No | Actor process exit code; populated for terminal states (especially FAILED) |
| nextStep | Yes | One primary follow-up action with identifiers interpolated |
| storages | Yes | Dataset and key-value store metadata, keyed by alias. "default" is always the primary entry. |
| actorName | No | "username/actor-name" |
| startedAt | No | ISO timestamp when the run started |
| finishedAt | No | ISO timestamp when the run finished (terminal states only) |
| statusMessage | No | Pass-through from Apify run.statusMessage |
| apifyConsoleUrl | No | Personalized Apify Console link to the run; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true, openWorldHint=true): it discloses the wait/poll model, that non-terminal runs return a nextStep with polling instructions, that dataset field metadata is returned when waitSecs > 0, and that results are fetched via get-dataset-items with the returned datasetId. It also clarifies an important boundary โ MCP server Actors are not executed here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with workflow and constraints, which is good, but it is noticeably redundant: the 'dedicated tools first' rule appears in the two-ways section, again under USAGE, and again in IMPORTANT. Trimming one of those passes would keep the same information at roughly half the length.
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 generic, open-world dispatcher with a nested input object and an output schema, everything an agent needs is present: prerequisites, the wait/poll contract, where results land, and when to prefer a dedicated tool. Nothing material is left to inference.
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 real nuance by explaining what waitSecs buys you at each end of its range and by pointing at the actor name format and the need to derive 'input' from the Actor's own schema. It does not add meaning for callOptions beyond what the schema already says.
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 ('Call any Actor from the Apify Store') and immediately scopes it against the alternatives: dedicated Actor tools and call-actor-mcp-tool for MCP server Actors. An agent can distinguish this from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use dedicated tools when available, use this generic tool otherwise, run fetch-actor-details first to get the input schema, and use search-actors if the name is not in 'username/name' form. It also gives selection guidance for waitSecs (0 for long-running, default for fast actors).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call-actor-mcp-toolCall Actor MCP toolADestructiveInspect
Call one tool on an Actor's MCP server and return its result. fetch-actor-mcp-tool-list lists the Actor's MCP tools and their input schemas. It connects with your Apify API token. Connecting can start a Server Actor run in your account, kept until its idle timeout; a multi-tenant Server Actor charges per event. What the tool itself does depends on the Actor.
Example call: {"actor": "username/name", "tool": "search", "arguments": {"query": "apify"}}
USAGE:
Use when the user asks to call a tool on an Actor's MCP server.
USAGE EXAMPLES:
user_input: Use the search tool of username/name to look up apify
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | The name of the tool on the Actor's MCP server. | |
| actor | Yes | The MCP server Actor: its ID, or its name in the "username/name" form. | |
| arguments | No | The tool's arguments, matching its input schema. Omit for a tool that takes none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive/openWorld/non-idempotent annotations, the description discloses non-obvious side effects: connecting requires an Apify API token, can start a Server Actor run that persists until idle timeout, and a multi-tenant Server Actor charges per event. Failure behavior (nonexistent actor or tool) is not covered, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in sentence one, with cost/persistence caveats in the middle and a compact example at the end. No sentence is pure filler, though the example JSON partially restates the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description only says it returns the target tool's result while noting that behavior "depends on the Actor" โ acceptable given the result shape is inherently delegated. The important hidden costs and resource-lifecycle facts are present.
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 defines actor, tool, and arguments. The description's example call reinforces the "username/name" form and the {tool, arguments} pairing, but adds no semantics the schema lacks about the free-form arguments object.
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?
First sentence states a specific verb and resource (call one tool on an Actor's MCP server, return its result) and points at fetch-actor-mcp-tool-list as the discovery counterpart. It does not address the adjacent sibling call-actor, so an agent can't fully disambiguate between the two from the description alone.
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?
"Use when the user asks to call a tool on an Actor's MCP server" plus a worked user_input example gives implied context, but there is no when-not guidance and no explicit comparison to call-actor, which is the most plausible alternative for the same intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch-actor-detailsFetch Actor detailsARead-onlyIdempotentInspect
Get detailed information about an Actor by its ID or full name (format: "username/name", e.g., "apify/rag-web-browser").
Requires the exact ID or full name โ do not construct a plausible-looking name and call this tool with it. If you only have a description, a partial name, or a name you have not seen in this conversation, find it with search-actors first.
Use 'output' to control returned information:
Default: all fields except outputSchema and serverInterface.
Selective: set only the fields you need to true, e.g. output: { inputSchema: true }
Common patterns: inputSchema only, description + readme, serverInterface: true (every operation in full when they fit, one line per operation otherwise) or "GET /search" (one operation in full) for Server Actors
The 'readme' field returns the summary when available, full README otherwise. Use when querying Actor details, documentation, or input requirements. It does not connect to an MCP server Actor; fetch-actor-mcp-tool-list lists its MCP tools.
EXAMPLES:
What does apify/web-fetch do?
What is the input schema for apify/web-scraper?
What HTTP operations does this Server Actor expose?
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | Actor ID or full name in the format "username/name", e.g., "apify/rag-web-browser". | |
| output | No | Specify which information to include in the response to save tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| readme | No | Actor README summary when available, otherwise the full README documentation. |
| actorInfo | No | |
| inputSchema | No | Actor input schema. |
| outputSchema | No | Output schema inferred from successful runs. |
| serverInterface | No | The Actor's server interface. `output.serverInterface: true` returns every operation with its parameters and request body schema when they fit, or one line per operation otherwise. A "METHOD /path" string returns that one operation in full. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, so the description correctly spends its budget elsewhere: it discloses the default field set ("all fields except outputSchema and serverInterface"), the summary-vs-full README behavior, and that it does not connect to an MCP Server Actor. It does not mention auth requirements or any size/rate caveats beyond the per-field byte limit already in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the identifier requirement and the anti-hallucination warning before the optional output tuning. Bulleted output modes and example questions are scannable, and no sentence is 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?
For a 2-parameter read tool with full schema coverage, annotations, and an output schema, the description covers everything an agent needs: identifier format, the failure mode to avoid, fallback sibling, and how to control response size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3; the description earns above that by documenting the default output composition and giving concrete selective patterns (inputSchema only, description + readme, serverInterface true vs. "GET /search"). The readme summary/full nuance is restated from the schema but the default and usage patterns are genuinely new information.
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?
Specific verb + resource ("Get detailed information about an Actor by its ID or full name") with the accepted identifier format spelled out. It also differentiates itself from siblings by noting it does not connect to an MCP Server Actor and that fetch-actor-mcp-tool-list handles MCP tool listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the precondition ("Requires the exact ID or full name โ do not construct a plausible-looking name") and routes the agent to search-actors when it has only a description or partial name. Example queries at the end map user intents to this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch-actor-mcp-tool-listFetch Actor MCP tool listAInspect
List an Actor's MCP tools with each tool's name, description, input schema, annotations, and metadata, as the server reports them. call-actor-mcp-tool calls one of them by name. Each call asks the server again; nothing is cached. It connects with your Apify API token. Connecting can start a Server Actor run in your account, kept until its idle timeout; a multi-tenant Server Actor charges per event.
USAGE:
Use when the user asks which MCP tools an Actor provides, or before calling one of them.
USAGE EXAMPLES:
user_input: What tools does username/name provide?
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | The MCP server Actor: its ID, or its name in the "username/name" form. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tools | Yes | The tools on the Actor's MCP server, with their schemas, annotations and metadata. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses traits the annotations cannot express: no caching, re-querying the server each call, API-token connection, potential start of a Server Actor run held until idle timeout, and per-event billing for multi-tenant servers. This usefully explains why readOnlyHint is false for a 'list' operation. The main omission is that the returned list's shape or failure modes (e.g. what happens when the Actor exposes no MCP server) aren't hinted at beyond the field list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then a distinct USAGE block and an example. Every sentence carries information โ the caching, token, run-lifecycle, and billing notes all matter for correct invocation, and nothing is repeated.
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?
Output schema exists so return values need no explanation, and the description still summarizes the returned fields. Cost/lifecycle side effects and the sibling relationship are covered. Minor gap: no guidance on prerequisite connectivity or error cases, though this is largely implied by the token/run notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'actor' parameter is fully documented in the schema, so the description adds only the implicit framing that the parameter identifies an MCP server Actor. With the schema doing the heavy lifting, baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List an Actor's MCP tools') and enumerates exactly what is returned (name, description, input schema, annotations, metadata). It also explicitly contrasts with the sibling call-actor-mcp-tool, which calls one of them by name, so an agent can pick between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger ('when the user asks which MCP tools an Actor provides') plus the preparatory case ('before calling one of them'), and includes a usage example. Alternatives are addressed by naming call-actor-mcp-tool as the follow-up action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch-apify-docsFetch Apify docsARead-onlyIdempotentInspect
Fetch the full content of an Apify or Crawlee documentation page by its URL. Use this after finding a relevant page with the search-apify-docs tool.
USAGE:
Use when you need the complete content of a specific docs page for detailed answers.
USAGE EXAMPLES:
user_input: Fetch https://docs.apify.com/platform/actors/running#builds
user_input: Fetch https://docs.apify.com/academy
user_input: Fetch https://crawlee.dev/docs/guides/basic-concepts
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the Apify documentation page to fetch. This should be the full URL, including the protocol (e.g., https://docs.apify.com/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | The documentation URL that was fetched |
| content | Yes | The full markdown content of the documentation page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is clear. The description adds that it fetches 'full content', which is consistent but does not disclose any additional behavioral traits (e.g., rate limits, auth). Since annotations carry the burden, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two main sentences plus a usage section and examples. It is well-structured and front-loaded, containing no unnecessary words. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter, an output schema (so return values are documented), and good annotations, the description is adequately complete. It explains when to use and provides examples. A slight improvement could be mentioning expected behavior for invalid URLs, but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'url' with a description, and schema description coverage is 100%. The tool description does not add additional semantic meaning beyond what the schema already provides, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the full content of an Apify or Crawlee documentation page by URL. The verb 'fetch' combined with the specific resource 'docs page' provides a clear purpose, and it distinguishes from sibling tool 'search-apify-docs' which searches rather than fetches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this after finding a relevant page with 'search-apify-docs', providing context for when to use. It also includes usage examples. However, it does not explicitly state when not to use the tool, which would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-actor-runGet Actor runARead-onlyIdempotentInspect
Get detailed information about a specific Actor run.
Returns run result: status, storages (datasets/keyValueStores alias map), stats, summary, nextStep.
summary describes the past (e.g. "SUCCEEDED in 22s. 47 items; 3 fields available.").
nextStep prescribes one primary follow-up action with identifiers interpolated (e.g. "Use get-dataset-items with datasetId=...").
waitSecs (0โ45, default 30) waits up to that many seconds for terminal status before returning.
USAGE:
Use to check the status of a run started by any Actor-running tool.
Pass waitSecs > 0 to block until terminal (or until the cap elapses).
USAGE EXAMPLES:
user_input: Show details of run y2h7sK3Wc
user_input: Wait for run y2h7sK3Wc to finish
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The ID of the Actor run. | |
| waitSecs | No | Maximum seconds to wait for the run to reach a terminal state (SUCCEEDED, FAILED, ABORTED, TIMED-OUT). 0 returns immediately with the current status. Cap: 45. Default: 30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tip | No | Advisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key |
| runId | Yes | Actor run ID |
| stats | No | Run statistics |
| status | Yes | Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED |
| actorId | Yes | Stable Apify Actor ID from the run record |
| summary | Yes | Past-tense summary of the run state |
| exitCode | No | Actor process exit code; populated for terminal states (especially FAILED) |
| nextStep | Yes | One primary follow-up action with identifiers interpolated |
| storages | Yes | Dataset and key-value store metadata, keyed by alias. "default" is always the primary entry. |
| actorName | No | "username/actor-name" |
| startedAt | No | ISO timestamp when the run started |
| finishedAt | No | ISO timestamp when the run finished (terminal states only) |
| statusMessage | No | Pass-through from Apify run.statusMessage |
| apifyConsoleUrl | No | Personalized Apify Console link to the run; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, but the description adds real behavioral context beyond them: the summary vs. nextStep semantics, and that waitSecs blocks for up to 45s (default 30) before returning the current state. This is substantive added value, though it doesn't cover error/failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then segmented into Returns/USAGE/EXAMPLES blocks. Every line carries information, though the two usage examples are somewhat redundant with the USAGE prose, adding minor length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% parameter coverage, the description need only orient the agent, which it does fully: purpose, when to use, wait semantics, and concrete invocation examples. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by framing waitSecs as a blocking/wait mechanism with its cap and default, and by describing what runId's run produces. Slight above-baseline value over the 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?
States a specific verb and resource ('Get detailed information about a specific Actor run') and enumerates the returned result fields (status, storages, stats, summary, nextStep). It does not explicitly distinguish itself from siblings like call-actor or abort-actor-run, so it falls just short of the 5 benchmark.
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 block names the condition ('check the status of a run started by any Actor-running tool') and explains when to pass waitSecs > 0 to block until terminal. It gives clear context but stops short of explicit exclusions or naming the sibling to use for other run operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-dataset-itemsGet dataset itemsARead-onlyIdempotentInspect
Get items (rows) from a dataset โ the output/results produced by an Actor run. Returns the rows themselves, not dataset metadata, counts, or a schema. When the user provides a datasetId and asks to retrieve results, output, data, or rows, call this tool directly. Default limit is 20. Use clean=true to skip empty items and hidden fields.
USAGE:
Use when you need to read data from a dataset (all items or only selected fields).
USAGE EXAMPLES:
user_input: Retrieve results from dataset abc123
user_input: Get only metadata.url and title from dataset username~my-dataset
| Name | Required | Description | Default |
|---|---|---|---|
| desc | No | If true, results are returned in reverse order (newest to oldest). | |
| omit | No | Comma-separated list of fields to exclude from results. | |
| clean | No | If true, returns only non-empty items and skips hidden fields (starting with #). Shortcut for skipHidden=true and skipEmpty=true. | |
| limit | No | Maximum number of items to return. Default is 20. | |
| fields | No | Comma-separated list of fields to include in results. Fields in output are sorted as specified. Use dot notation for nested objects (e.g. "metadata.url"); the server auto-flattens parent prefixes. | |
| offset | No | Number of items to skip at the start. Default is 0. | |
| flatten | No | Comma-separated list of fields to flatten (e.g. flatten="metadata" turns {"metadata":{"url":"x"}} into {"metadata.url":"x"}). Normally derived automatically from dot-notation in `fields`; specify only as a diagnostic override. | |
| datasetId | Yes | Dataset ID, name (resolved against your own datasets), or full name as username~name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Dataset items |
| limit | Yes | Limit used for pagination |
| offset | Yes | Offset used for pagination |
| summary | Yes | Summary of the result |
| nextStep | Yes | One follow-up action with tool name |
| datasetId | Yes | Dataset ID |
| itemCount | Yes | Number of items returned |
| totalItemCount | Yes | Total items in dataset |
| apifyConsoleUrl | No | Personalized Apify Console link to the dataset; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the description adds value by disclosing the default limit of 20, what clean=true does, and that results are the raw rows. Return-shape details are largely deferred to the existing output schema, which is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the anti-scope sentence, followed by short usage notes and examples. Slightly redundant in repeating the limit default and the clean flag across sections, but nothing wasteful enough to hurt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with full schema coverage and an output schema, the description supplies the purpose, trigger, and key defaults an agent needs. Pagination interaction (offset/limit) and flatten behavior are left to the schema, which is reasonable given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters in depth. The description only restates the default limit and clean=true semantics, adding little beyond the structured fields; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get items (rows) from a dataset') and immediately delimits scope by saying it returns rows themselves, not metadata, counts, or schema. An agent can distinguish the intent without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger ('When the user provides a datasetId and asks to retrieve results, output, data, or rows, call this tool directly') plus a usage section and two concrete examples. It lacks explicit when-not guidance relative to any alternative, but the sibling list contains no competing dataset-read tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-key-value-store-recordGet key-value store recordARead-onlyIdempotentInspect
Get the value stored under a specific key in a key-value store โ a single record, not a listing of all keys. Requires the exact key name. The response preserves the original Content-Encoding; most clients handle decompression automatically.
USAGE:
Use when you need to retrieve a specific record (JSON, text, or binary) from a store.
USAGE EXAMPLES:
user_input: Get record INPUT from store abc123
user_input: Get record data.json from store username~my-store
| Name | Required | Description | Default |
|---|---|---|---|
| recordKey | Yes | Key of the record to retrieve. | |
| keyValueStoreId | Yes | Key-value store ID, name (resolved against your own key-value stores), or full name as username~name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | Record key |
| value | Yes | The stored value (JSON, text, or binary) |
| summary | Yes | Summary of the result |
| contentType | No | MIME type of the stored value |
| keyValueStoreId | Yes | Key-value store ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered elsewhere. The description earns credit for adding behavioral context beyond that: the 'requires the exact key name' precondition and the note that the response preserves the original Content-Encoding, which most clients decompress automatically โ a real return-value trait callers would otherwise trip over.
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 key facts โ scope, exact-key requirement, encoding caveat โ are front-loaded in three tight sentences. The subsequent USAGE and USAGE EXAMPLES blocks are somewhat redundant with the first paragraph, costing a little efficiency.
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?
A two-parameter read tool whose annotations, 100% schema coverage, and output schema already cover safety, inputs, and return shape. The description closes the remaining gap with the Content-Encoding behavior, which is exactly the non-obvious detail an agent needs.
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%, including the keyValueStoreId resolution rules (name vs. username~name) and minLength constraints in the schema itself. The description only reinforces that the key must be exact, adding little semantics beyond what the schema already documents, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the value stored under a specific key in a key-value store') and preemptively scopes it against a listing tool: 'a single record, not a listing of all keys.' An agent can immediately tell this is a point lookup, not an enumeration.
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 says when to use it ('when you need to retrieve a specific record (JSON, text, or binary)') and includes two concrete usage examples showing the store identifier formats. However, it never states when NOT to use it or names an alternative/sibling for enumeration, so the guidance is implied rather than comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report-problemReport a problemAInspect
Report a problem with Apify's MCP tools or Actors to the Apify team.
Reports can describe missing tools or Actors, errors, timeouts, confusing results, steps that took several attempts, or tasks that the available tools could not complete. Reports help fix the problem for other users.
Put what you were doing and what went wrong in "message". Do NOT include personal data, credentials, secrets, or verbatim private conversation content โ describe the issue in your own words.
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | No | Optional. The Actor this problem is about, e.g. apify/rag-web-browser. | |
| message | Yes | What happened: the problem you hit. Required. Keep it to a few sentences (max 2000 characters). | |
| actorRunId | No | Optional. The Actor run this problem is about. | |
| relatedTools | No | Optional. Names of the MCP tools involved in this problem (up to 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
| reported | Yes | Always true; the problem report was submitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false). The description adds genuinely new behavioral context: a privacy constraint forbidding personal data, credentials, secrets, and verbatim private conversation content, plus the downstream effect that reports help other users. It does not describe what happens after submission or any acknowledgment, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, each earning its place: purpose first, then the trigger examples, then the data-handling instruction. No filler, and the most important constraint (privacy) is stated last but explicitly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the annotations already carry the safety profile. The description covers purpose, trigger conditions, and the privacy caveat, leaving no material gap for an agent 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 coverage is 100%, so the baseline is 3, and the description adds actionable framing beyond it: it directs the agent to put the context ('what you were doing') and the failure in the 'message' field. It says nothing extra about actorId, actorRunId, or relatedTools, so a 4 rather than 5.
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+resource (report a problem with Apify's MCP tools or Actors) and names the recipient (the Apify team). This is unmistakably distinct from every sibling tool, which are operational (search-actors, call-actor, get-actor-run, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It enumerates concrete trigger conditions โ missing tools or Actors, errors, timeouts, confusing results, multi-attempt steps, and tasks the available tools could not complete โ which is strong when-to-use guidance. It does not state when NOT to report or name any alternative action, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-actorsSearch ActorsARead-onlyIdempotentInspect
Search the Apify Store to FIND and DISCOVER what scraping tools/Actors exist for specific platforms or use cases. This tool provides INFORMATION about available Actors - it does NOT retrieve actual data or run any scraping tasks.
Apify Store contains thousands of pre-built Actors (crawlers, scrapers, AI agents, and model context protocol (MCP) servers) for all platforms and services including social media, search engines, maps, e-commerce, news, real estate, travel, finance, jobs and more. Apify Store lists Actors published by Apify and by independent developers.
Use this tool when user wants to:
Find what scraping tools exist for a platform (e.g., "What tools can scrape Instagram?")
Discover available Actors for a use case (e.g., "Find an Actor for Amazon products")
Browse existing solutions (e.g., "Show me scrapers for news sites")
Learn about MCP servers or AI agents available in the Store
This tool discovers Actors; it does not retrieve their output. IMPORTANT: When the user wants detailed data from a specific platform or is looking for scraping tools, prefer searching the Store first โ a relevant Actor often already exists. When the user names a specific Actor, look up that Actor directly instead of searching.
Usage:
Use 1-3 simple terms from the platform and/or data type the user named (e.g. "Instagram posts", "Twitter", "Amazon products"). With neither named, empty keywords return the Store's default ordering. A platform-only query is an option if more specific results do not fit.
Important limitations: This tool does not return full Actor documentation or detailed usage instructions - only summary information.
Each result lists the Actor's input fields with their types (e.g. url: string, maxResults?: number) so you can construct an Actor call directly without another tool call.
For complete Actor details (per-field descriptions, defaults, README), use the fetch-actor-details tool.
The search is limited to publicly available Actors and excludes rental and restricted Actors.
Returns list of Actor cards with the following info:
Title: Markdown header linked to the Store page, followed by the full Actor name in code format
URL: Direct Store link
Description: Actor description or fallback
Pricing: Details with pricing link
Stats: Total and monthly users
Rating: Out of 5 (if available)
Developed by: Username linked to profile, marked (Apify) or (community)
Categories: Formatted or "Uncategorized"
Last modified: Date (if available)
Input fields: Inline list of input field names and types (e.g.
url: string, maxResults?: number);?marks optional fields,... (+N more)marks a truncated list
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of Actors to return (max = 10, default = 5). | |
| offset | No | The number of elements to skip from the start (default = 0). Has no effect when keywords are set: every offset returns the first results. | |
| useCase | No | Optional. One plain sentence on what the user wants to achieve with the Actor, for example "compare competitor prices" (max 1024 characters). Never include personal information (names, emails, phone numbers, addresses, account details), URLs, secrets, API tokens or credentials. Respect the user's privacy: when unsure, leave it out. | |
| keywords | No | Space-separated keywords used to search pre-built solutions (Actors) in the Apify Store. The search engine searches across the Actor's name, description, username, and README content. Pass empty string ("") whenever the user has NOT named a specific platform (Instagram, Amazon, Google Maps) or a specific data type (posts, products, weather, news). Empty keywords return Actors in the Apify Store's default sort order, which is popularity in practice (most-used Actors first). Do NOT use ranking words ("top", "best", "popular") or bare task words ("scraper", "crawler", "extractor") as keyword values โ they are not Actor names and produce noisy matches against README content. Otherwise, follow these rules: - Use 1-3 simple keyword terms maximum (e.g., "Instagram posts", "Twitter", "Amazon products") - Actors are named using platform or service name together with the type of data or task they perform - The most effective keywords are specific platform names (Instagram, Twitter, TikTok) and specific data types (posts, products, profiles, weather, news, reviews, comments) - If a user asks about "fetching Instagram posts", use "Instagram posts" as keywords - The goal is to find Actors that specifically handle the platform and data type the user mentioned Examples: โ "Instagram posts", "Twitter", "Amazon products", "TikTok comments" โ "" (empty) โ returns the most popular Actors store-wide โ "Instagram posts profiles comments hashtags reels stories followers..." (too long) โ "top popular actors", "best scrapers", "trending" โ ranking words aren't Actor keywords; pass "" instead โ "scraper", "extractor", "web crawler" โ bare task words aren't Actor keywords; pass "" instead |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of Actors returned |
| query | Yes | The search query used |
| actors | Yes | List of Actor cards matching the search query |
| userTier | No | The user's plan tier used to resolve the per-Actor pricing shown in the results |
| instructions | No | Additional instructions for the LLM to follow when processing the search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds meaningful context: it does not run tasks or retrieve output, searches only public Actors, excludes rental/restricted Actors, and returns summary cards with inline input fields.
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 and clearly sectioned, with usage, limitations, and return information separated. It is somewhat long and repeats the non-retrieval point more than once, but the structure keeps it usable.
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?
Complete for a search tool with annotations and an output schema: it explains purpose, alternatives, search scope, limitations, and how to use the keywords parameter. An agent has enough information to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented. The description reinforces keyword strategy, empty-keyword default ordering, and platform-only queries, but it largely repeats the schema and does not add much about limit or offset.
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: search the Apify Store to find/discover scraping Actors. It explicitly distinguishes itself from data retrieval, scraping execution, and actor detail lookup, which cleanly separates it from siblings like call-actor and fetch-actor-details.
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?
Gives explicit when-to-use scenarios such as finding tools for a platform or use case, and explicitly says to prefer Store search first when a relevant Actor may already exist. It also names the alternative for a specific Actor name: look it up directly rather than searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-apify-docsSearch Apify docsARead-onlyIdempotentInspect
Search Apify and Crawlee documentation using full-text search. Do not also search the Apify Store unless the user asks to find Actors.
You must explicitly select which documentation source to search using the docSource parameter:
โข docSource="apify" - Apify: Apify Platform documentation including: Platform features, SDKs (JS, Python), CLI, REST API, Academy (web scraping fundamentals), Actor development and deployment
โข docSource="crawlee-js" - Crawlee (JavaScript): Crawlee is a web scraping library for JavaScript. It handles blocking, crawling, proxies, and browsers for you.
โข docSource="crawlee-py" - Crawlee (Python): Crawlee is a web scraping library for Python. It handles blocking, crawling, proxies, and browsers for you.
The results will include the URL of the documentation page (which may include an anchor), and a limited piece of content that matches the search query.
Fetch the full content of the document using the fetch-apify-docs tool by providing the URL.
When results contain both platform documentation (docs.apify.com/platform) and Academy content (docs.apify.com/academy) on the same topic, prefer the platform documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of search results to return. Defaults to 5. Maximum is 20. You can increase this limit if you need more results, but keep in mind that the search results are limited to the most relevant pages. | |
| query | Yes | Algolia full-text search query to find relevant documentation pages. Use only keywords, do not use full sentences or questions. For example, "standby actor" will return documentation pages that contain the words "standby" and "actor". | |
| offset | No | Offset for the search results. Defaults to 0. Use this to paginate through the search results. For example, if you want to get the next 5 results, set the offset to 5 and limit to 5. | |
| docSource | No | Documentation source to search. Defaults to "apify". โข "apify" - Apify โข "crawlee-js" - Crawlee (JavaScript) โข "crawlee-py" - Crawlee (Python) | apify |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| instructions | No | Additional instructions for the LLM to follow when processing the search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the search returns only a limited content snippet and that full content must be fetched separately, which is important behavioral information. It also notes that it will not search the Apify Store, a limitation not present in annotations. While annotations already cover read-only and idempotent nature, the description adds useful context about output and limitations.
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 moderately concise, using bullet points for docSource and separating guidance for fetching full content. It has some redundancy in repeating the docSource details but is overall well-structured and not excessively verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context given the tool's simplicity, including output expectations (URL and content snippet) and a mention of the fetch-apify-docs tool for full content. It covers the main usage scenarios and does not leave major gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides comprehensive descriptions for all parameters, including the query, limit, offset, and docSource with enums. The tool description reiterates the docSource options but adds little additional semantic meaning beyond the schema. Since coverage is 100%, the parameter semantics are well-covered by the schema alone.
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's function: 'Search Apify and Crawlee documentation using full-text search.' It also distinguishes the scope from the Apify Store and provides a clear verb-object structure. This effectively communicates the tool's purpose and differentiates it from sibling tools like search-actors.
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 usage instructions, such as 'You must explicitly select which documentation source to search using the docSource parameter' and recommends using fetch-apify-docs for retrieving full content. It also advises against searching the Apify Store unless specifically asked, guiding when to use this tool versus alternatives.
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.
3 tool updates
v0.20.0- Changed
fetch-actor-details2 fields changed- changed
Input schema / properties / output / properties / serverInterface / descriptionPrevious value: -"Server Actor HTTP API. true: full schema with guidance when it fits; otherwise operation navigation.\n\"METHOD /path\" (e.g. \"GET /search\"): operation excerpt. \"#/...\": raw node at a local JSON pointer.\nEach section is limited to 262144 UTF-8 bytes including guidance. References are not expanded or fetched."New value: +"Server Actor HTTP API. true: every operation with its parameters and request body schema when they fit; otherwise one line per operation.\n\"METHOD /path\" (e.g. \"GET /search\"): that one operation in full.\nEach is limited to 262144 UTF-8 bytes." - changed
Output schema / properties / serverInterface / descriptionPrevious value: -"The Actor's server interface. `output.serverInterface: true` returns the full API schema with guidance when it fits, or operation navigation otherwise. A \"METHOD /path\" string returns an operation excerpt; \"#/...\" returns a raw local schema node."New value: +"The Actor's server interface. `output.serverInterface: true` returns every operation with its parameters and request body schema when they fit, or one line per operation otherwise. A \"METHOD /path\" string returns that one operation in full."
- Changed
get-dataset-items1 field changed- changed
Input schema / properties / datasetId / descriptionPrevious value: -"Dataset ID or username~dataset-name."New value: +"Dataset ID, name (resolved against your own datasets), or full name as username~name."
- Changed
get-key-value-store-record1 field changed- changed
Input schema / properties / keyValueStoreId / descriptionPrevious value: -"Key-value store ID or username~store-name."New value: +"Key-value store ID, name (resolved against your own key-value stores), or full name as username~name."
5 tool updates
v0.19.5- Changed
call-actor1 field changed- changed
Input schema / properties / actor / descriptionPrevious value: -"The Actor to call: its ID, or its name in the \"username/name\" form (e.g., \"apify/rag-web-browser\").\n\nFor MCP server Actors, use format \"actorName:toolName\" to call a specific tool (e.g., \"username/name:tool-name\")."New value: +"The Actor to call: its ID, or its name in the \"username/name\" form (e.g., \"apify/rag-web-browser\")."
- Added
call-actor-mcp-tool - Changed
fetch-actor-details5 fields changed- removed
Input schema / properties / output / properties / mcpToolsRemoved value: -{ - "description": "List available tools (only for MCP server Actors).", - "type": "boolean" -} - added
Input schema / properties / output / properties / serverInterfaceAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "description": "Server Actor HTTP API. true: full schema with guidance when it fits; otherwise operation navigation.\n\"METHOD /path\" (e.g. \"GET /search\"): operation excerpt. \"#/...\": raw node at a local JSON pointer.\nEach section is limited to 262144 UTF-8 bytes including guidance. References are not expanded or fetched." +} - removed
Output schema / properties / actorInfo / properties / stats / properties / bookmarksRemoved value: -{ - "description": "Number of bookmarks", - "type": "number" -} - removed
Output schema / properties / mcpToolsRemoved value: -{ - "description": "Markdown listing of MCP tools exposed by the Actor (only present when `output.mcpTools` is requested).", - "type": "string" -} - added
Output schema / properties / serverInterfaceAdded value: +{ + "description": "The Actor's server interface. `output.serverInterface: true` returns the full API schema with guidance when it fits, or operation navigation otherwise. A \"METHOD /path\" string returns an operation excerpt; \"#/...\" returns a raw local schema node.", + "type": "string" +}
- Added
fetch-actor-mcp-tool-list - Changed
search-actors3 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"The number of elements to skip from the start (default = 0)"New value: +"The number of elements to skip from the start (default = 0). Has no effect when keywords are set: every offset returns the first results." - added
Input schema / properties / useCaseAdded value: +{ + "description": "Optional. One plain sentence on what the user wants to achieve with the Actor, for example \"compare competitor prices\" (max 1024 characters).\nNever include personal information (names, emails, phone numbers, addresses, account details), URLs, secrets, API tokens or credentials.\nRespect the user's privacy: when unsure, leave it out.", + "type": "string" +} - removed
Output schema / properties / actors / items / properties / stats / properties / bookmarksRemoved value: -{ - "description": "Number of bookmarks", - "type": "number" -}
4 tool updates
v0.18.3- Changed
call-actor2 fields changed- changed
Input schema / properties / callOptions / properties / memory / descriptionPrevious value: -"Memory per run in MB. Power of 2 from 128 to 32768.\nApify also caps total memory across all your concurrent runs (account plan limit); if a run is rejected because that quota would be exceeded, retry with a smaller value."New value: +"Memory per run in MB. Power of 2 from 128 to 32768.\nApify also caps total memory across all your concurrent runs (account plan limit); a run that would exceed that quota is rejected." - changed
Input schema / properties / input / additionalPropertiesPrevious value: -{}New value: +true
- Changed
fetch-actor-details1 field changed- added
Output schema / properties / actorInfo / properties / inputFields / properties / properties / additionalProperties / properties / type / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +]
- Changed
get-key-value-store-record1 field changed- added
Output schema / properties / value / anyOfAdded value: +[ + { + "type": "object" + }, + { + "type": "array" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + } +]
- Changed
search-actors1 field changed- added
Output schema / properties / actors / items / properties / inputFields / properties / properties / additionalProperties / properties / type / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +]
3 tool updates
v0.18.2- Changed
abort-actor-run1 field changed- added
Output schema / properties / tipAdded value: +{ + "description": "Advisory guidance RAG Web Browser wrote to its key-value store under the reserved \"TIP\" key", + "properties": { + "caveat": { + "description": "Present when this session cannot run the Actor the tip recommends", + "type": "string" + }, + "level": { + "description": "Omitted when the Actor wrote an unrecognized level", + "enum": [ + "info", + "warning" + ], + "type": "string" + }, + "message": { + "description": "Truncated to 300 characters, with a trailing ellipsis if the Actor's message was longer", + "type": "string" + }, + "recommendedActorId": { + "description": "Apify Actor ID the tip recommends, when it names one", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" +}
- Changed
call-actor2 fields changed- changed
Input schema / properties / actor / descriptionPrevious value: -"The Actor to call: its ID, or its name in the \"username/name\" form (e.g., \"apify/rag-web-browser\").\n\nFor MCP server Actors, use format \"actorName:toolName\" to call a specific tool (e.g., \"apify/actors-mcp-server:fetch-apify-docs\")."New value: +"The Actor to call: its ID, or its name in the \"username/name\" form (e.g., \"apify/rag-web-browser\").\n\nFor MCP server Actors, use format \"actorName:toolName\" to call a specific tool (e.g., \"username/name:tool-name\")." - added
Output schema / properties / tipAdded value: +{ + "description": "Advisory guidance RAG Web Browser wrote to its key-value store under the reserved \"TIP\" key", + "properties": { + "caveat": { + "description": "Present when this session cannot run the Actor the tip recommends", + "type": "string" + }, + "level": { + "description": "Omitted when the Actor wrote an unrecognized level", + "enum": [ + "info", + "warning" + ], + "type": "string" + }, + "message": { + "description": "Truncated to 300 characters, with a trailing ellipsis if the Actor's message was longer", + "type": "string" + }, + "recommendedActorId": { + "description": "Apify Actor ID the tip recommends, when it names one", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" +}
- Changed
get-actor-run1 field changed- added
Output schema / properties / tipAdded value: +{ + "description": "Advisory guidance RAG Web Browser wrote to its key-value store under the reserved \"TIP\" key", + "properties": { + "caveat": { + "description": "Present when this session cannot run the Actor the tip recommends", + "type": "string" + }, + "level": { + "description": "Omitted when the Actor wrote an unrecognized level", + "enum": [ + "info", + "warning" + ], + "type": "string" + }, + "message": { + "description": "Truncated to 300 characters, with a trailing ellipsis if the Actor's message was longer", + "type": "string" + }, + "recommendedActorId": { + "description": "Apify Actor ID the tip recommends, when it names one", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" +}
1 tool update
v0.17.1- Changed
call-actor1 field changed- changed
Input schema / properties / actor / descriptionPrevious value: -"The name of the Actor to call. Format: \"username/name\" (e.g., \"apify/rag-web-browser\").\n\nFor MCP server Actors, use format \"actorName:toolName\" to call a specific tool (e.g., \"apify/actors-mcp-server:fetch-apify-docs\")."New value: +"The Actor to call: its ID, or its name in the \"username/name\" form (e.g., \"apify/rag-web-browser\").\n\nFor MCP server Actors, use format \"actorName:toolName\" to call a specific tool (e.g., \"apify/actors-mcp-server:fetch-apify-docs\")."
3 tool updates
v0.15.3- Changed
abort-actor-run2 fields changed- added
Output schema / properties / storages / properties / datasets / requiredAdded value: +[ + "default" +] - added
Output schema / properties / storages / properties / keyValueStores / requiredAdded value: +[ + "default" +]
- Changed
call-actor2 fields changed- added
Output schema / properties / storages / properties / datasets / requiredAdded value: +[ + "default" +] - added
Output schema / properties / storages / properties / keyValueStores / requiredAdded value: +[ + "default" +]
- Changed
get-actor-run2 fields changed- added
Output schema / properties / storages / properties / datasets / requiredAdded value: +[ + "default" +] - added
Output schema / properties / storages / properties / keyValueStores / requiredAdded value: +[ + "default" +]
3 tool updates
v0.14.2- Changed
fetch-actor-details1 field changed- removed
Output schema / properties / actorInfo / properties / stats / properties / successRateRemoved value: -{ - "description": "Success rate percentage", - "type": "number" -}
- Changed
report-problem1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "reported": { + "description": "Always true; the problem report was submitted", + "type": "boolean" + } + }, + "required": [ + "reported" + ], + "type": "object" +}
- Changed
search-actors1 field changed- removed
Output schema / properties / actors / items / properties / stats / properties / successRateRemoved value: -{ - "description": "Success rate percentage", - "type": "number" -}
5 tool updates
v0.14.0- Added
abort-actor-run - Added
get-actor-run - Added
report-problem - Added
search-actors - Added
search-apify-docs
7 tool updates
v0.13.0- Removed
abort-actor-run - Removed
get-actor-run - Changed
get-dataset-items1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of items to return. Defaults to 20."New value: +"Maximum number of items to return. Default is 20."
- Changed
get-key-value-store-record1 field changed- changed
Input schema / properties / keyValueStoreId / descriptionPrevious value: -"Key-value store ID or username~store-name"New value: +"Key-value store ID or username~store-name."
- Removed
report-problem - Removed
search-actors - Removed
search-apify-docs
1 tool update
v0.11.6- Added
report-problem
2 tool updates
v0.11.5- Changed
fetch-actor-details2 fields changed- added
Output schema / properties / actorInfo / properties / pictureUrlAdded value: +{ + "description": "Actor picture URL", + "type": "string" +} - changed
Output schema / properties / actorInfo / properties / pricing / requiredPrevious value: -[ - "model", - "userTier" -]New value: +[ + "model" +]
- Changed
search-actors3 fields changed- added
Output schema / properties / actors / items / properties / pictureUrlAdded value: +{ + "description": "Actor picture URL", + "type": "string" +} - changed
Output schema / properties / actors / items / properties / pricing / requiredPrevious value: -[ - "model", - "userTier" -]New value: +[ + "model" +] - added
Output schema / properties / userTierAdded value: +{ + "description": "The user's plan tier used to resolve the per-Actor pricing shown in the results", + "enum": [ + "FREE", + "BRONZE", + "SILVER", + "GOLD", + "PLATINUM", + "DIAMOND" + ], + "type": "string" +}
TDQS
Scored across 12 tools
Most tools target clearly distinct resources/actions (search-actors vs fetch-actor-details, get-dataset-items vs get-key-value-store-record, search-apify-docs vs fetch-apify-docs). The main overlap is within the Actor introspection family (fetch-actor-details, fetch-actor-mcp-tool-list, call-actor-mcp-tool) and between search-actors and fetch-actor-details, where search results already include input fields โ but descriptions clarify each purpose.
All names use kebab-case with a verb-first pattern (search-, fetch-, get-, call-, abort-, report-). The convention is fully predicable and readable across all 12 tools.
12 tools is well-scoped for a scraping platform covering discovery, execution, monitoring, storage retrieval, MCP, docs, and feedback. Each tool maps to a distinct capability in the workflow.
The core lifecycle (search โ inspect โ run โ poll/abort โ retrieve dataset/KV output) is fully covered, plus docs and MCP support. Minor gaps exist: no list-actor-runs, list-datasets, or log retrieval, so agents must rely on IDs returned from prior calls rather than enumerating resources.
Maintenance
Related MCP Connectors
No-code web scraping & data-extraction Apify actors: scrape and enrich web data at scale.
No-code web scraping & data-extraction Apify actors: scrape and enrich web data at scale.
Pay-per-use Apify tools for AI classification, SEO audits, leads, transcripts and web data.
64 public Apify Actors for public-record, jobs, lead, SEO and social data, as MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to thousands of Apify Actors for web scraping, data extraction, and automation tasks, with dynamic tool discovery to find and use any Actor from the Apify Store in real time.30,525 npmMIT
- AlicenseNot gradedqualityNot gradedmaintenanceExposes over 19,000 Apify Actors as MCP tools for web scraping, data extraction, and OSINT automation. It enables AI agents to dynamically discover and execute scrapers to collect structured data and crawl web content.MIT
- AlicenseNot gradedqualityDmaintenanceEnables web scraping, browser automation, and dataset management through Apify's actor platform.MIT
- AlicenseAqualityAmaintenance35 public-data MCP tools with optional focused profiles for business leads, market intelligence, government records, and research/health. Includes Maps, jobs, SEC filings, grants, sanctions and more. Runs use your own Apify account and are billed there. Structured results and deterministic errors.40MIT