Skip to main content
Glama
apify

actors-mcp-server

Official
by apify

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

  1. Open the MCP configurator, pick your client, and choose the tools you want.

  2. Copy the generated configuration, deeplink, or command into your client.

  3. 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.

Client setup at mcp.apify.com: tabs for Claude, Claude Code, Claude Desktop, Codex, Cursor, ChatGPT, and more, with the Claude Code install command

claude mcp add apify "https://mcp.apify.com" -t http

Claude 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.

  1. Open ChatGPT Plugins, select +, then Add custom MCP server.

  2. Name it Apify, enter https://mcp.apify.com as the server URL, and choose OAuth authentication.

  3. Review the risk warning, select I understand and want to continue, then Create as a plugin.

  4. Sign in with Apify, review the tools, and install the plugin. No API token is needed.

  5. 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 cursor

The 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 (https://mcp.apify.com)

Local (npx @apify/actors-mcp-server)

Transport

Streamable HTTP

stdio

Authentication

OAuth or Bearer token

APIFY_TOKEN environment variable or Apify CLI login

Output schemas inferred for Actor results

Yes

No

Tool selection

tools URL parameter

--tools flag or TOOLS environment variable

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:

  1. search-actors finds candidate Actors in Apify Store for the task.

  2. fetch-actor-details returns the Actor's input schema, README, and pricing, plus its output schema on request.

  3. call-actor starts 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.

  4. get-dataset-items reads the results from the run's dataset, with limit and offset for 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, or get-actor-run is 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, or local-agent-mode. Select it explicitly with tools=report-problem or tools=dev to serve it to any client; telemetry still has to be on.

Tool name

Category

Description

Enabled by default

search-actors

actors

Search for Actors in Apify Store.

โœ…

fetch-actor-details

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.

โœ…

call-actor

actors

Run an Actor and return its run status and storage IDs. Use fetch-actor-details first to get the input schema.

โœ…

fetch-actor-mcp-tool-list

actors

List the tools of an Actor that runs an MCP server, with their schemas, annotations, and metadata.

โœ…

call-actor-mcp-tool

actors

Call one tool on an Actor's MCP server and return its result.

โœ…

get-actor-run

runs

Get details about an Actor run.

โšก

get-dataset-items

storage

Read items from a dataset, with filtering and pagination.

โšก

get-key-value-store-record

storage

Get the value stored under a key in a key-value store.

โšก

abort-actor-run

runs

Abort a running Actor run, optionally gracefully.

โšก

search-apify-docs

docs

Search the Apify and Crawlee documentation for relevant pages.

โœ…

fetch-apify-docs

docs

Fetch the full content of a documentation page by its URL.

โœ…

apify--rag-web-browser

Actor (see Choose which tools load)

Search the web and return the content of the top results.

โœ…

apify--web-fetch

Actor (see Choose which tools load)

Fetch a URL and return its content as Markdown, text, HTML, or other formats.

โœ…

report-problem

dev

Report a problem with an Apify tool or Actor to the Apify team.

โœ…ยน

get-actor-list

none (select by name: tools=get-actor-list)

List the Actors you own and those shared with you, including private ones.

send-server-actor-request

none (select by name: tools=send-server-actor-request)

Send one HTTP request to a Server Actor's API, as documented by its API schema, and return the response.

delete-actor

none (select by name: tools=delete-actor)

Delete an Actor from your account permanently. Public Actors must be unpublished first.

get-actor-run-list

runs

List Actor runs, filtered by Actor and status.

get-actor-run-log

runs

Read the log of an Actor run.

get-dataset

storage

Get metadata about a dataset.

get-dataset-schema

storage

Generate a JSON schema from dataset items.

get-dataset-list

storage

List the datasets in your account.

get-key-value-store

storage

Get metadata about a key-value store.

get-key-value-store-keys

storage

List the keys in a key-value store.

get-key-value-store-list

storage

List the key-value stores in your account.

create-actor-task

tasks

Create a saved Actor task (a named, reusable Actor configuration).

get-actor-task

tasks

Get a saved Actor task, its publication state, and its public display configuration.

update-actor-task

tasks

Update a task's input, run options, or public display configuration.

publish-actor-task

tasks

Publish a task on its public landing page.

unpublish-actor-task

tasks

Unpublish a task from its public landing page.

create-schedule

schedules

Create a schedule that runs Actors or tasks on a cron expression.

get-schedule

schedules

Get a schedule, its cron expression, state, and the actions it runs.

update-schedule

schedules

Update a schedule's cron expression, time zone, enabled state, or actions.

delete-schedule

schedules

Delete a schedule.

build-actor

builds

Build an Actor version and wait a bounded time for the build to finish.

get-actor-build

builds

Get the status of an Actor build.

get-actor-build-list

builds

List the account's builds, or one Actor's, in every status, newest first.

get-actor-build-log

builds

Read the log of an Actor build.

get-actor-version

versions

Get an Actor version's file listing with hashes, plus the content of the files you ask for.

create-actor

versions

Create a private Actor in your account from files, optionally starting a build.

update-actor-version

versions

Write, edit, or delete files of an Actor version in one all-or-nothing write.

create-actor-version

versions

Add a version to an Actor, from files or as a copy of another version, optionally starting a build.

delete-actor-version

versions

Delete an Actor version. Its builds and their tags stay.

apify-api-search

api

Search the Apify API reference by keywords. Returns each operation's method, path, and docs page.

apify-api-details

api

Get the parameters and request body schema of the Apify API operations on a path.

apify-api-read

api

Send a GET request to an Apify API path, like apify api in the Apify CLI. It refuses GETs to the synchronous run endpoints, which start a paid run.

apify-api-write

api

Send a POST, PUT, PATCH, or DELETE request with a JSON body to any Apify API path, like apify api in the Apify CLI.

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-fetch

Local server:

npx @apify/actors-mcp-server --tools actors,docs,apify/web-search,apify/web-fetch

To 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-scraper

Pin your tools in production. The default tool set can change between versions. Set tools explicitly if you need a stable interface.

  • The actors URL parameter and --actors flag still work. They're merged into tools, so ?actors=apify/web-fetch equals ?tools=apify/web-fetch.

  • enableAddingActors, enable-adding-actors, and enableActorAutoLoading were removed and are ignored. Dynamic Actor calls come from call-actor, which the default actors category includes.

  • The selectors add-actor, experimental, and preview are retired and load nothing. Use call-actor or the actors category.

  • get-actor-log was renamed to get-actor-run-log, and the source category to versions. The old names load nothing.

  • call-actor no longer calls tools on MCP server Actors: the actorName:toolName form is rejected. Use call-actor-mcp-tool with actor, tool, and arguments. A selection that names call-actor alone needs call-actor-mcp-tool added.

  • fetch-actor-details no longer lists an MCP server Actor's tools, and output.mcpTools is ignored. Use fetch-actor-mcp-tool-list, which returns the definitions in structuredContent.tools. A selection that names fetch-actor-details alone needs fetch-actor-mcp-tool-list added.

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

auto (default)

Widget tools added when the client supports MCP Apps

true, on, or apps

Widget tools always added

false, off, or default

No widget tools

Hosted server:

https://mcp.apify.com?tools=actors,docs&ui=true

Local 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."

Tweet Scraper V2

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."

Web Search, Web Fetch

Search results (SERP)

"Get the top 20 Google results for 'best CRM for startups' in the US and show who ranks where."

Google Search Results Scraper

Lead generation

"Find dentists in Austin, Texas on Google Maps with their phone numbers, websites, and ratings."

Google Maps Scraper

LinkedIn profiles

"Get the current job title, company, and work history for these 20 LinkedIn profiles."

LinkedIn Profile Scraper

LinkedIn company posts

"Get the 30 latest posts from Apify's LinkedIn company page with their reaction counts."

LinkedIn Company Posts Scraper

Review analysis

"Pull the latest 100 Google Maps reviews for this hotel and group the complaints by theme."

Google Maps Reviews Scraper

Social media monitoring

"Get the 50 latest posts from @nasa on Instagram with likes and comments."

Instagram Scraper

Trend research

"Find the most viewed TikTok videos for #skincare this week."

TikTok Scraper

E-commerce

"List the 10 best-rated wireless earbuds on Amazon with prices and review counts."

Amazon Product Scraper

Knowledge base and RAG

"Crawl docs.example.com and turn every page into Markdown I can load into my vector database."

Website Content Crawler

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-details shows 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) or maxItems (pay-per-result Actors) in the callOptions of call-actor. timeout and memory limit the run's duration and memory, not its price.

  • The hosted server accepts up to 20 requests per second per account.

  • search-actors returns 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-actor returns 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, and apify-api-details. Select only those, for example https://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=false
npx @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_TOKEN is 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-actor fails 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 REQUIRED prefix in their descriptions for frameworks that ignore the JSON Schema required list.

  • 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 server

The 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

Available Tools

12 tools
abort-actor-runAbort Actor runA
DestructiveIdempotent
Inspect

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

NameRequiredDescriptionDefault
runIdYesThe ID of the Actor run to abort.
gracefullyNoIf true, the Actor run will abort gracefully with a 30-second timeout.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ActorA
Destructive
Inspect

Call any Actor from the Apify Store.

WORKFLOW:

  1. Use fetch-actor-details to get the Actor's input schema

  2. 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:

  1. Dedicated Actor tools: These are pre-configured tools, offering a simpler and more direct experience.

  2. 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. Use waitSecs: 0 to start and return immediately for long-running actors.

EXAMPLES:

  • user_input: Get instagram posts using apify/instagram-scraper

NameRequiredDescriptionDefault
actorYesThe Actor to call: its ID, or its name in the "username/name" form (e.g., "apify/rag-web-browser").
inputYesThe input JSON to pass to the Actor. Required.
waitSecsNoSeconds to wait for completion (0โ€“45, default 30). Returns with current run status if not terminal within waitSecs.
callOptionsNoOptional run config: memory (MB), timeout (s), build, maxItems (pay-per-result cap), maxTotalChargeUsd (pay-per-event cap).

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 toolA
Destructive
Inspect

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

NameRequiredDescriptionDefault
toolYesThe name of the tool on the Actor's MCP server.
actorYesThe MCP server Actor: its ID, or its name in the "username/name" form.
argumentsNoThe tool's arguments, matching its input schema. Omit for a tool that takes none.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

No output schema exists, and the description 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 detailsA
Read-onlyIdempotent
Inspect

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?

NameRequiredDescriptionDefault
actorYesActor ID or full name in the format "username/name", e.g., "apify/rag-web-browser".
outputNoSpecify which information to include in the response to save tokens.

Output Schema

NameRequiredDescription
readmeNoActor README summary when available, otherwise the full README documentation.
actorInfoNo
inputSchemaNoActor input schema.
outputSchemaNoOutput schema inferred from successful runs.
serverInterfaceNoThe 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

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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?

NameRequiredDescriptionDefault
actorYesThe MCP server Actor: its ID, or its name in the "username/name" form.

Output Schema

NameRequiredDescription
toolsYesThe tools on the Actor's MCP server, with their schemas, annotations and metadata.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb and resource ('List an 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.

Usage Guidelines5/5

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 docsA
Read-onlyIdempotent
Inspect

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:

NameRequiredDescriptionDefault
urlYesURL of the Apify documentation page to fetch. This should be the full URL, including the protocol (e.g., https://docs.apify.com/).

Output Schema

NameRequiredDescription
urlYesThe documentation URL that was fetched
contentYesThe full markdown content of the documentation page

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 runA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
runIdYesThe ID of the Actor run.
waitSecsNoMaximum 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

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 itemsA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
descNoIf true, results are returned in reverse order (newest to oldest).
omitNoComma-separated list of fields to exclude from results.
cleanNoIf true, returns only non-empty items and skips hidden fields (starting with #). Shortcut for skipHidden=true and skipEmpty=true.
limitNoMaximum number of items to return. Default is 20.
fieldsNoComma-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.
offsetNoNumber of items to skip at the start. Default is 0.
flattenNoComma-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.
datasetIdYesDataset ID, name (resolved against your own datasets), or full name as username~name.

Output Schema

NameRequiredDescription
itemsYesDataset items
limitYesLimit used for pagination
offsetYesOffset used for pagination
summaryYesSummary of the result
nextStepYesOne follow-up action with tool name
datasetIdYesDataset ID
itemCountYesNumber of items returned
totalItemCountYesTotal items in dataset
apifyConsoleUrlNoPersonalized Apify Console link to the dataset; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb and resource ('Get 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.

Usage Guidelines4/5

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 recordA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
recordKeyYesKey of the record to retrieve.
keyValueStoreIdYesKey-value store ID, name (resolved against your own key-value stores), or full name as username~name.

Output Schema

NameRequiredDescription
keyYesRecord key
valueYesThe stored value (JSON, text, or binary)
summaryYesSummary of the result
contentTypeNoMIME type of the stored value
keyValueStoreIdYesKey-value store ID

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb and resource ('Get the 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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
actorIdNoOptional. The Actor this problem is about, e.g. apify/rag-web-browser.
messageYesWhat happened: the problem you hit. Required. Keep it to a few sentences (max 2000 characters).
actorRunIdNoOptional. The Actor run this problem is about.
relatedToolsNoOptional. Names of the MCP tools involved in this problem (up to 20).

Output Schema

NameRequiredDescription
reportedYesAlways true; the problem report was submitted

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ActorsA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
limitNoThe maximum number of Actors to return (max = 10, default = 5).
offsetNoThe number of elements to skip from the start (default = 0). Has no effect when keywords are set: every offset returns the first results.
useCaseNoOptional. 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.
keywordsNoSpace-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

NameRequiredDescription
countYesNumber of Actors returned
queryYesThe search query used
actorsYesList of Actor cards matching the search query
userTierNoThe user's plan tier used to resolve the per-Actor pricing shown in the results
instructionsNoAdditional instructions for the LLM to follow when processing the search results.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

States a specific verb and resource: search 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.

Usage Guidelines5/5

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 docsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum 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.
queryYesAlgolia 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".
offsetNoOffset 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.
docSourceNoDocumentation source to search. Defaults to "apify". โ€ข "apify" - Apify โ€ข "crawlee-js" - Crawlee (JavaScript) โ€ข "crawlee-py" - Crawlee (Python)apify

Output Schema

NameRequiredDescription
resultsYes
instructionsNoAdditional instructions for the LLM to follow when processing the search results.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 3 tool updatesv0.20.0
    • Changedfetch-actor-details2 fields changed
      • changedInput schema / properties / output / properties / serverInterface / description
        Previous 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."
      • changedOutput schema / properties / serverInterface / description
        Previous 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."
    • Changedget-dataset-items1 field changed
      • changedInput schema / properties / datasetId / description
        Previous value: -"Dataset ID or username~dataset-name."New value: +"Dataset ID, name (resolved against your own datasets), or full name as username~name."
    • Changedget-key-value-store-record1 field changed
      • changedInput schema / properties / keyValueStoreId / description
        Previous 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."
  2. 5 tool updatesv0.19.5
    • Changedcall-actor1 field changed
      • changedInput schema / properties / actor / description
        Previous 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\")."
    • Addedcall-actor-mcp-tool
    • Changedfetch-actor-details5 fields changed
      • removedInput schema / properties / output / properties / mcpTools
        Removed value: -{
        -  "description": "List available tools (only for MCP server Actors).",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / output / properties / serverInterface
        Added 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."
        +}
      • removedOutput schema / properties / actorInfo / properties / stats / properties / bookmarks
        Removed value: -{
        -  "description": "Number of bookmarks",
        -  "type": "number"
        -}
      • removedOutput schema / properties / mcpTools
        Removed value: -{
        -  "description": "Markdown listing of MCP tools exposed by the Actor (only present when `output.mcpTools` is requested).",
        -  "type": "string"
        -}
      • addedOutput schema / properties / serverInterface
        Added 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"
        +}
    • Addedfetch-actor-mcp-tool-list
    • Changedsearch-actors3 fields changed
      • changedInput schema / properties / offset / description
        Previous 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."
      • addedInput schema / properties / useCase
        Added 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"
        +}
      • removedOutput schema / properties / actors / items / properties / stats / properties / bookmarks
        Removed value: -{
        -  "description": "Number of bookmarks",
        -  "type": "number"
        -}
  3. 4 tool updatesv0.18.3
    • Changedcall-actor2 fields changed
      • changedInput schema / properties / callOptions / properties / memory / description
        Previous 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."
      • changedInput schema / properties / input / additionalProperties
        Previous value: -{}New value: +true
    • Changedfetch-actor-details1 field changed
      • addedOutput schema / properties / actorInfo / properties / inputFields / properties / properties / additionalProperties / properties / type / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
    • Changedget-key-value-store-record1 field changed
      • addedOutput schema / properties / value / anyOf
        Added value: +[
        +  {
        +    "type": "object"
        +  },
        +  {
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedsearch-actors1 field changed
      • addedOutput schema / properties / actors / items / properties / inputFields / properties / properties / additionalProperties / properties / type / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
  4. 3 tool updatesv0.18.2
    • Changedabort-actor-run1 field changed
      • addedOutput schema / properties / tip
        Added 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"
        +}
    • Changedcall-actor2 fields changed
      • changedInput schema / properties / actor / description
        Previous 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\")."
      • addedOutput schema / properties / tip
        Added 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"
        +}
    • Changedget-actor-run1 field changed
      • addedOutput schema / properties / tip
        Added 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"
        +}
  5. 1 tool updatev0.17.1
    • Changedcall-actor1 field changed
      • changedInput schema / properties / actor / description
        Previous 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\")."
  6. 3 tool updatesv0.15.3
    • Changedabort-actor-run2 fields changed
      • addedOutput schema / properties / storages / properties / datasets / required
        Added value: +[
        +  "default"
        +]
      • addedOutput schema / properties / storages / properties / keyValueStores / required
        Added value: +[
        +  "default"
        +]
    • Changedcall-actor2 fields changed
      • addedOutput schema / properties / storages / properties / datasets / required
        Added value: +[
        +  "default"
        +]
      • addedOutput schema / properties / storages / properties / keyValueStores / required
        Added value: +[
        +  "default"
        +]
    • Changedget-actor-run2 fields changed
      • addedOutput schema / properties / storages / properties / datasets / required
        Added value: +[
        +  "default"
        +]
      • addedOutput schema / properties / storages / properties / keyValueStores / required
        Added value: +[
        +  "default"
        +]
  7. 3 tool updatesv0.14.2
    • Changedfetch-actor-details1 field changed
      • removedOutput schema / properties / actorInfo / properties / stats / properties / successRate
        Removed value: -{
        -  "description": "Success rate percentage",
        -  "type": "number"
        -}
    • Changedreport-problem1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "reported": {
        +      "description": "Always true; the problem report was submitted",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "reported"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch-actors1 field changed
      • removedOutput schema / properties / actors / items / properties / stats / properties / successRate
        Removed value: -{
        -  "description": "Success rate percentage",
        -  "type": "number"
        -}
  8. 5 tool updatesv0.14.0
    • Addedabort-actor-run
    • Addedget-actor-run
    • Addedreport-problem
    • Addedsearch-actors
    • Addedsearch-apify-docs
  9. 7 tool updatesv0.13.0
    • Removedabort-actor-run
    • Removedget-actor-run
    • Changedget-dataset-items1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of items to return. Defaults to 20."New value: +"Maximum number of items to return. Default is 20."
    • Changedget-key-value-store-record1 field changed
      • changedInput schema / properties / keyValueStoreId / description
        Previous value: -"Key-value store ID or username~store-name"New value: +"Key-value store ID or username~store-name."
    • Removedreport-problem
    • Removedsearch-actors
    • Removedsearch-apify-docs
  10. 1 tool updatev0.11.6
    • Addedreport-problem
  11. 2 tool updatesv0.11.5
    • Changedfetch-actor-details2 fields changed
      • addedOutput schema / properties / actorInfo / properties / pictureUrl
        Added value: +{
        +  "description": "Actor picture URL",
        +  "type": "string"
        +}
      • changedOutput schema / properties / actorInfo / properties / pricing / required
        Previous value: -[
        -  "model",
        -  "userTier"
        -]New value: +[
        +  "model"
        +]
    • Changedsearch-actors3 fields changed
      • addedOutput schema / properties / actors / items / properties / pictureUrl
        Added value: +{
        +  "description": "Actor picture URL",
        +  "type": "string"
        +}
      • changedOutput schema / properties / actors / items / properties / pricing / required
        Previous value: -[
        -  "model",
        -  "userTier"
        -]New value: +[
        +  "model"
        +]
      • addedOutput schema / properties / userTier
        Added 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

A4.2/5.0

Scored across 12 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects 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 npm
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Exposes 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
  • A
    license
    A
    quality
    A
    maintenance
    35 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.
    40
    MIT