actors-mcp-server
OfficialThe Apify MCP Server connects AI agents to thousands of pre-built web scrapers and automation tools (Actors) from the Apify Store, enabling data extraction, automation, and more across virtually any website or platform.
Discover & Configure Actors
search-actors: Find scrapers by keyword (e.g., "Instagram", "Amazon", "Google Maps")fetch-actor-details: Get full specs including input schema, README, pricing, and output schemaadd-actor: Dynamically add new Actors as tools
Execute Actors
call-actor: Run any Actor with custom input and retrieve results; dedicated tools likeapify/rag-web-browserare also available
Manage Runs
get-actor-run: Check run status and storage metadataabort-actor-run: Stop a running Actor, optionally with graceful shutdownget-actor-log: Retrieve run logs
Access Storage
get-dataset-items: Fetch scraped data with pagination, field selection, and sortingget-key-value-store-record: Retrieve JSON, text, or binary records
Documentation
search-apify-docs/fetch-apify-docs: Search and read Apify and Crawlee documentation
Additional Features
Agentic payments via x402 (USDC) or Skyfire (PAY tokens) â no API token required
OAuth support for platforms like Claude.ai and VS Code
Compatible with Claude Desktop, ChatGPT, Cursor, and other MCP clients
Deployable as an HTTPS endpoint (
mcp.apify.com) or locally via stdio
Example use cases: scraping social media, e-commerce products, Google Maps listings, search engine results, news articles, job postings, and real estate data.
Integrates with Facebook through the Facebook Posts Scraper Actor to extract data from Facebook posts from multiple pages/profiles.
Integrates with Google Search through the Google Search Results Scraper to scrape Google Search Engine Results Pages (SERPs).
Integrates with Google Maps through the Google Maps Email Extractor Actor to extract contact details from Google Maps listings.
Integrates with Instagram through the Instagram Scraper Actor to scrape Instagram posts, profiles, places, photos, and comments.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@actors-mcp-serverscrape recent posts from Elon Musk's Twitter profile"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
The Apify Model Context Protocol (MCP) server at mcp.apify.com enables your AI agents to extract data from social media, search engines, maps, e-commerce sites, and any other website using thousands of ready-made scrapers, crawlers, and automation tools from Apify Store. It supports OAuth, allowing you to connect from clients like Claude.ai or Visual Studio Code using just the URL.
đ Use the hosted Apify MCP Server!
For the best experience, connect your AI assistant to our hosted server at
https://mcp.apify.com. The hosted server supports the latest features - including output schema inference for structured Actor results - that are not available when running locally via stdio.
â ī¸ Legacy SSE transport removed. The
https://mcp.apify.com/sseendpoint has been removed in favor of Streamable HTTP. Migrate your client tohttps://mcp.apify.comâ drop the/ssesuffix from your configuration.
đ° The server also supports agentic payments: buy a token from AGI to run any Actor, or pay per-request via direct x402 (Pay Per Event Actors only) or Skyfire.
Apify MCP Server is compatible with Claude Code, Claude.ai, Cursor, VS Code and any client that adheres to the Model Context Protocol.
Check out the MCP clients section for more details or visit the MCP configuration page.

Table of Contents
đ Introducing Apify MCP Server
The Apify MCP Server allows an AI assistant to use any Apify Actor as a tool to perform a specific task. For example, it can:
Use Facebook Posts Scraper to extract data from Facebook posts from multiple pages/profiles.
Use Google Maps Email Extractor to extract contact details from Google Maps.
Use Google Search Results Scraper to scrape Google Search Engine Results Pages (SERPs).
Use Instagram Scraper to scrape Instagram posts, profiles, places, photos, and comments.
Use RAG Web Browser to search the web, scrape the top N URLs, and return their content.
Use Web Fetch to fetch any URL and return its content as Markdown, plain text, HTML, or links â with JavaScript rendering and anti-bot protection.
Video tutorial: Integrate 8,000+ Apify Actors and Agents with Claude

đ Quickstart
You can use the Apify MCP Server in two ways:
HTTPS Endpoint (mcp.apify.com): Connect from your MCP client via OAuth or by including the Authorization: Bearer <APIFY_TOKEN> header in your requests. This is the recommended method for most use cases. Because it supports OAuth, you can connect from clients like Claude.ai or Visual Studio Code using just the URL: https://mcp.apify.com.
https://mcp.apify.comstreamable transport
Standard Input/Output (stdio): Ideal for local integrations and command-line tools like the Claude for Desktop client.
Set the MCP client server command to
npx @apify/actors-mcp-serverand theAPIFY_TOKENenvironment variable to your Apify API token.See
npx @apify/actors-mcp-server --helpfor more options.
You can find detailed instructions for setting up the MCP server in the Apify documentation.
đ¤ MCP clients
Apify MCP Server is compatible with any MCP client that adheres to the Model Context Protocol, but the level of support for dynamic tool discovery and other features may vary between clients.
To interact with the Apify MCP Server, you can use clients such as Claude Desktop, Visual Studio Code, or Apify Tester MCP Client.
Visit mcp.apify.com to configure the server for your preferred client.

Tested clients
Claude.ai (web)
VS Code (Genie)
Cursor
OpenCode
Apify Tester MCP Client â designed for testing Apify MCP servers
đĒ Try Apify MCP instantly
Want to try Apify MCP without any setup?
Check out Apify Tester MCP Client
This interactive, chat-like interface provides an easy way to explore the capabilities of Apify MCP without any local setup. Sign in with your Apify account and start experimenting with web scraping, data extraction, and automation tools!
Or use the MCP bundle file (formerly known as Anthropic Desktop extension file, or DXT) for one-click installation: Apify MCP Server MCPB file
đ° Agentic payments
You can pay for Actor runs without an Apify API token using AGI, direct x402, or Skyfire.
AGI (agi.apify.com) mints a prepaid Apify API token in exchange for an x402 or MPP payment. Use the token like a normal API token against
mcp.apify.comandapi.apify.comâ works for any Actor, not just Pay Per Event ones. Recommended for new integrations; see AGI (recommended) below.Direct x402 pays with USDC on Base per request and does not require a separate platform account. It is fully supported by
mcpc(brew install apify/tap/mcpcornpm install -g @apify/mcpc). We usemcpcbecause it is one of the few MCP clients that supports the latest features and the x402 protocol natively.Skyfire pays with PAY tokens and requires a Skyfire account with a funded wallet. It does not require a special MCP client; the entire payment flow is handled directly through the MCP tool call parameters.
âšī¸ Scope: Both direct x402 and Skyfire are limited to Pay Per Event Actors, don't support Standby Actors, and settle per run instead of minting a token.
Related MCP server: MCP Apify
How agentic payments work
Actor run costs vary, so both payment methods use a prepaid balance model. The payment flow happens in four steps:
Discovery: The agent discovers Actors with
search-actorsorfetch-actor-details. Those calls are free.Prepayment: Before running a paid Actor tool, the agent funds a prepaid balance.
Direct x402:
mcpcautomatically signs a $1.00 USDC transaction.Skyfire: The agent creates a PAY token (minimum $5.00) using Skyfire's
create-pay-tokentool.
Execution: The agent calls the Actor tool.
Direct x402: Handled automatically by
mcpcusing the prepaid balance.Skyfire: The agent explicitly passes the PAY token in the
skyfire-pay-idinput property.
Resolution: The tool returns the Actor results. Unused funds stay available for later runs.
Direct x402: After 60 minutes of inactivity, the server refunds any unused balance to the wallet on Base.
Skyfire: Skyfire returns unused funds when the token expires.
đĒ AGI (recommended)
AGI (Apify Agent General Interface) is the recommended way for autonomous agents to pay for Apify usage without an account. Pay once via x402 or MPP, receive a prepaid, spend-capped Apify API token, and use it directly against mcp.apify.com and api.apify.com (Authorization: Bearer <token>) â for any Actor.
Full protocol, supported payment methods, and current terms (minimum amount, token lifetime, refund policy) are documented at agi.apify.com/AGENTS.md â treat it as the single source of truth.
đ¸ Direct x402
The x402 protocol enables direct, machine-to-machine payments. Your MCP client can use it to pay for Actor runs with USDC on the Base blockchain, completely bypassing the need for an Apify API token.
Prerequisites
A wallet with USDC on Base mainnet.
Setup
Create or import a wallet:
# Create a new wallet
mcpc x402 init
# Import an existing wallet
mcpc x402 import <private-key>
# Show the wallet address and a funding QR code, so you can fund it with USDC on Base (https://base.org)
mcpc x402Connect to the server with x402 enabled:
mcpc connect "mcp.apify.com?payment=x402" @apify --x402You can now call a paid tool:
mcpc @apify tools-call call-actor actor:="apify/rag-web-browser" input:='{"query": "latest AI news"}'đĨ Skyfire
Skyfire provides managed payment infrastructure for AI agents. Instead of authenticating with an Apify API token, your agent passes a Skyfire payment token to cover the cost of each tool call using PAY tokens.
Prerequisites
A Skyfire account with a funded wallet.
An MCP client that supports multiple servers, such as Claude Desktop, OpenCode, or VS Code.
Setup
Configure the Skyfire MCP server and the Apify MCP Server in your client. Add payment=skyfire to the Apify server URL:
{
"mcpServers": {
"skyfire": {
"url": "https://api.skyfire.xyz/mcp/sse",
"headers": {
"skyfire-api-key": "<YOUR_SKYFIRE_API_KEY>"
}
},
"apify": {
"url": "https://mcp.apify.com?payment=skyfire"
}
}
}See the Skyfire integration documentation for setup details. The Agentic Payments with Skyfire post provides additional background.
đ ī¸ Tools, resources, and prompts
The MCP server provides a set of tools for interacting with Apify Actors. Since Apify Store is large and growing rapidly, the MCP server provides a way to dynamically discover and use new Actors.
Actors
Any Apify Actor can be used as a tool.
By default, the server is pre-configured with two Actors, apify/rag-web-browser and apify/web-fetch, and several helper tools.
The MCP server loads an Actor's input schema and creates a corresponding MCP tool.
This allows the AI agent to know exactly what arguments to pass to the Actor and what to expect in return.
For example, for the apify/rag-web-browser Actor, the input parameters are:
{
"query": "restaurants in San Francisco",
"maxResults": 3
}You don't need to manually specify which Actor to call or its input parameters; the LLM handles this automatically. When a tool is called, the arguments are automatically passed to the Actor by the LLM. You can refer to the specific Actor's documentation for a list of available arguments.
Helper tools
One of the most powerful features of using MCP with Apify is dynamic tool discovery. It allows an AI agent to find new tools (Actors) as needed and incorporate them. Here are some special MCP operations and how the Apify MCP Server supports them:
Apify Actors: Search for Actors, view their details, and use them as tools for the AI.
Apify documentation: Search the Apify documentation and fetch specific documents to provide context to the AI.
Actor runs: Get lists of your Actor runs, inspect their details, and retrieve logs.
Apify storage: Access data from your datasets and key-value stores.
Actor tasks: Create, inspect, and update your saved Actor tasks, and publish or unpublish their public landing pages.
Overview of available tools
Here is an overview list of all the tools provided by the Apify MCP Server.
Legend for the Enabled by default column:
â â in the default tool set.
⥠â auto-injected when
call-actor, an Actor tool, orget-actor-runis present (which is true in the default configuration).â š â served by default, but only when telemetry is enabled and the client is not withheld: Anthropic surfaces (Claude.ai / Claude Desktop / Claude Code) or
local-agent-mode-apify. To disable, pass an explicittools=list that omits it.
Tool name | Category | Description | Enabled by default |
| actors | Search for Actors in Apify Store. | â |
| actors | Retrieve detailed information about a specific Actor, including its input schema, README (summary when available, full otherwise), pricing, and Actor output schema. | â |
| actors | Call an Actor and get its run results. Use fetch-actor-details first to get the Actor's input schema. | â |
| runs | Get detailed information about a specific Actor run. | ⥠|
| storage | Retrieve items from a dataset with support for filtering and pagination. | ⥠|
| storage | Get the value associated with a specific key in a key-value store. | ⥠|
| runs | Abort a running Actor run, optionally gracefully. | ⥠|
| docs | Search the Apify documentation for relevant pages. | â |
| docs | Fetch the full content of an Apify documentation page by its URL. | â |
Actor (see tool configuration) | An Actor tool to browse the web. | â | |
Actor (see tool configuration) | An Actor tool to fetch a URL and return its content. | â | |
| dev | Report a problem with an Apify tool or Actor to the Apify team. | â š |
| runs | Get a list of an Actor's runs, filterable by status. | |
| runs | Retrieve the logs for a specific Actor run. | |
| storage | Get metadata about a specific dataset. | |
| storage | Generate a JSON schema from dataset items. | |
| storage | Get metadata about a specific key-value store. | |
| storage | List the keys within a specific key-value store. | |
| storage | List all available datasets for the user. | |
| storage | List all available key-value stores for the user. | |
| tasks | Create a saved Actor task (a named, reusable Actor configuration). | |
| tasks | Get a saved Actor task, its publication state and public display configuration. | |
| tasks | Update a task's input, run options, or public display configuration. | |
| tasks | Publish a task on its public landing page. | |
| tasks | Unpublish a task from its public landing page. |
Note:
When
call-actor, an Actor tool, orget-actor-runis present, the server auto-injectsget-actor-run,get-dataset-items,get-key-value-store-record, andabort-actor-run.When you call an Actor â through
call-actoror directly via an Actor tool (e.g.,apify--rag-web-browser) â the response contains run metadata, storage IDs, and asummary+nextStep, but no dataset items. To fetch items, follownextStepand callget-dataset-items(auto-injected), passing thedatasetIdreturned from the call.
Tool annotations
All tools include metadata annotations to help MCP clients and LLMs understand tool behavior:
title: Short display name for the tool (e.g., "Search Actors", "Call Actor", "apify/rag-web-browser")readOnlyHint:truefor tools that only read data without modifying state (e.g.,get-dataset,fetch-actor-details)openWorldHint:truefor tools that access external resources outside the Apify platform (e.g.,call-actorexecutes external Actors). Tools that interact only with the Apify platform (likesearch-actorsorfetch-apify-docs) do not have this hint.
Tools configuration
The tools configuration parameter is used to specify loaded tools â either categories or specific tools directly, and Apify Actors. For example, tools=storage,runs loads two categories; tools=call-actor loads just one tool.
When no query parameters are provided, the MCP server loads the following tools by default:
actorsdocsapify/rag-web-browserapify/web-fetch
If the tools parameter is specified, only the listed tools or categories will be enabled â no default tools will be included.
report-problem is served by default (subject to the gating in the footnote above) but lives in the dev category, so an explicit tools=dev selects it too. To disable it, pass an explicit tools= list that omits it (e.g. tools=actors,docs).
Easy configuration:
Use the UI configurator to configure your server, then copy the configuration to your client.
Configuring the hosted server:
The hosted server can be configured using query parameters in the URL. For example, to load the default tools, use:
https://mcp.apify.com?tools=actors,docs,apify/rag-web-browser,apify/web-fetchFor minimal configuration, if you want to use only a single Actor tool - without any discovery or generic calling tools, the server can be configured as follows:
https://mcp.apify.com?tools=apify/my-actorThis setup exposes only the specified Actor (apify/my-actor) as a tool. No other tools will be available.
Configuring the CLI:
The CLI can be configured using command-line flags. For example, to load the same tools as in the hosted server configuration, use:
npx @apify/actors-mcp-server --tools actors,docs,apify/rag-web-browser,apify/web-fetchThe minimal configuration is similar to the hosted server configuration:
npx @apify/actors-mcp-server --tools apify/my-actorAs above, this exposes only the specified Actor (apify/my-actor) as a tool. No other tools will be available.
â ī¸ Important recommendation
The default tools configuration may change in future versions. When no
toolsparameter is specified, the server currently loads default tools, but this behavior is subject to change.For production use and stable interfaces, always explicitly specify the
toolsparameter to ensure your configuration remains consistent across updates.
UI mode configuration
The ui parameter enables MCP Apps widget rendering in tool responses. When enabled, tools like search-actors return interactive MCP App responses.
Configuring the hosted server:
Enable UI mode using the ui query parameter:
https://mcp.apify.com?ui=trueYou can combine it with other parameters:
https://mcp.apify.com?tools=actors,docs&ui=trueConfiguring the CLI:
The CLI can be configured using command-line flags. For example, to enable UI mode:
npx @apify/actors-mcp-server --ui trueYou can also set it via the UI_MODE environment variable:
export UI_MODE=true
npx @apify/actors-mcp-serverBackward compatibility
The v2 configuration preserves backward compatibility with v1 usage. Notes:
actorsparam (URL) and--actorsflag (CLI) are still supported.Internally they are merged into
toolsselectors.Examples:
?actors=apify/rag-web-browserâĄ?tools=apify/rag-web-browser;--actors apify/rag-web-browserâĄ--tools apify/rag-web-browser.
enableAddingActors(URL),enable-adding-actors(CLI), and the legacyenableActorAutoLoadingalias have been removed. To call Actors dynamically, usetools=call-actor(included by default via theactorscategory). Any lingering raw value is ignored.Defaults remain compatible: when no
toolsare specified, the server loadsactors,docs,apify/rag-web-browser, andapify/web-fetch.If any
toolsare specified, the defaults are not added (same as v1 intent for explicit selection).
call-actoris now included by default via theactorscategory (additive change). To exclude it, specify an explicittoolslist withoutactors.tools=add-actor,tools=experimental, andtools=previeware retired: they are ignored and load no tools. Usetools=call-actor(or the defaultactorscategory) instead.
Existing URLs and commands using ?actors=... or --actors continue to work unchanged.
Prompts
The server advertises the prompts capability, but no prompts are currently registered â prompts/list returns an empty list.
Resources
Your Apify data is not enumerated in resources/list â reads are on demand: pass any Apify API GET URL (https://api.apify.com/v2/...) to resources/read and the server injects the session's Apify token and returns the response body. resources/templates/list enumerates the common shapes â dataset items, key-value store records and keys, run metadata, run log â with their paging parameters. Responses inline up to 256 KB; anything larger returns a short notice with a download URL instead of the body. API reads require an Apify token, so a payment-only session (x402 or Skyfire) gets a JSON-RPC error for them.
đŦ Usage examples
Below are realistic examples showing how an AI assistant uses the Apify MCP Server tools.
Example 1: Search the web using RAG Web Browser
User prompt:
Find the latest news about autonomous AI agents and summarize the key developments.
The AI assistant calls the pre-configured apify--rag-web-browser Actor tool to search the web and return content from top results.
The tool returns markdown content from the top 3 search results, which the AI assistant then summarizes for the user.
Example 2: Discover and run an Actor from Apify Store
User prompt:
Scrape the top 10 restaurants in Prague from Google Maps with their contact details.
The AI assistant first searches for a suitable Actor, inspects its input schema, and then executes it. The tool returns a preview of the scraped data including restaurant names, addresses, ratings, phone numbers, and websites.
Example 3: Retrieve and paginate through Actor run results
User prompt:
Show me the next 10 results from that scraping run.
The AI assistant uses the dataset ID from the previous Actor run to fetch additional items. Expected output: The tool returns the next page of structured data items from the Actor's output dataset.
đĄ Telemetry
The Apify MCP Server collects telemetry data about tool calls to help Apify understand usage patterns and improve the service. By default, telemetry is enabled for all tool calls.
The stdio transport also uses Sentry for error tracking, which helps us identify and fix issues faster. Sentry is automatically disabled when telemetry is opted out.
Opting out of telemetry
You can opt out of telemetry (including Sentry error tracking) by setting the --telemetry-enabled CLI flag to false or the TELEMETRY_ENABLED environment variable to false.
CLI flags take precedence over environment variables.
Examples
For the remote server (mcp.apify.com):
# Disable via URL parameter
https://mcp.apify.com?telemetry-enabled=falseFor the local stdio server:
# Disable via CLI flag
npx @apify/actors-mcp-server --telemetry-enabled=false
# Or set environment variable
export TELEMETRY_ENABLED=false
npx @apify/actors-mcp-serverâī¸ Development
Please see the CONTRIBUTING.md guide for contribution guidelines and commit message conventions.
For detailed development setup, project structure, and local testing instructions, see the DEVELOPMENT.md guide.
Prerequisites
Node.js (v22 or higher)
Create an environment file, .env, with the following content:
APIFY_TOKEN="your-apify-token"Build the actors-mcp-server package:
pnpm run buildStart HTTP streamable MCP server
Run using Apify CLI:
export APIFY_TOKEN="your-apify-token"
export APIFY_META_ORIGIN=STANDBY
apify run -pOnce the server is running, you can use the MCP Inspector to debug the server exposed at http://localhost:3001.
Start standard input/output (stdio) MCP server
You can launch the MCP Inspector with this command:
export APIFY_TOKEN="your-apify-token"
npx @modelcontextprotocol/inspector node ./dist/stdio.jsUpon launching, the Inspector will display a URL that you can open in your browser to begin debugging.
Unauthenticated access
When the tools query parameter includes only tools explicitly enabled for unauthenticated use, the hosted server allows access without an API token.
Currently allowed tools: search-actors, fetch-actor-details, search-apify-docs, fetch-apify-docs.
Example: https://mcp.apify.com?tools=search-actors.
đĻ Canary PR releases
Apify MCP is split across two repositories: this repository for core MCP logic and the private apify-mcp-server-internal for the hosted server.
Changes must be synchronized between both.
To create a canary release, add the beta label to your pull request.
This publishes the package to pkg.pr.new for staging and testing before merging.
See the workflow file for details.
đ Docker Hub integration
The Apify MCP Server is also available on Docker Hub, registered via the mcp-registry repository. The entry in servers/apify-mcp-server/server.yaml should be deployed automatically by the Docker Hub MCP registry (deployment frequency is unknown). Before making major changes to the stdio server version, test it locally to ensure the Docker build passes. To test, change the source.branch to your PR branch and run task build -- apify-mcp-server. For more details, see CONTRIBUTING.md.
đ Troubleshooting
For step-by-step troubleshooting, see the Claude Desktop integration guide in the Apify documentation.
đĄ Limitations
The Actor input schema is processed to be compatible with most MCP clients while adhering to JSON Schema standards. The processing includes:
Descriptions are truncated to 500 characters (as defined in
MAX_DESCRIPTION_LENGTH).Enum fields are truncated to a maximum combined length of 2000 characters for all elements (as defined in
ACTOR_ENUM_MAX_LENGTH).Required fields are explicitly marked with a
REQUIREDprefix in their descriptions for compatibility with frameworks that may not handle the JSON schema properly.Nested properties are built for special cases like proxy configuration and request list sources to ensure the correct input structure.
Array item types are inferred when not explicitly defined in the schema, using a priority order: explicit type in items > prefill type > default value type > editor type.
Enum values and examples are added to property descriptions to ensure visibility, even if the client doesn't fully support the JSON schema.
Rental Actors are only available for use with the hosted MCP server at https://mcp.apify.com. When running the server locally via stdio, you can only access Actors that are already added to your local toolset. To dynamically search for and use any Actor from Apify Storeâincluding rental Actorsâconnect to the hosted endpoint.
đ Privacy policy
When you use this server, your requests and Actor inputs are sent to the Apify API for execution. Data is not shared with third parties beyond what is necessary to run the requested Actors. For full details on data collection, usage, sharing, and retention, see Apify Legal.
đ¤ Contributing
We welcome bug reports, feature requests, and documentation fixes. Send us the problem, not the patch â a precise issue with a reproduction is more useful than a pull request.
đ Report a bug: Open an issue with a reproduction. The most useful thing you can send us.
đĄ Propose a feature: Open an issue â the problem and who hits it, not the implementation.
đ§ Code: Work only on a maintainer-invited issue. An open issue is not an invitation to pick it up; unsolicited pull requests are closed.
đ Documentation: Typos, broken links, and wrong commands go straight to a PR.
Full rules, including AI-assisted contributions: CONTRIBUTING.md.
đ Learn more
Available Tools
10 toolsabort-actor-runAbort Actor runADestructiveIdempotentInspect
Abort an Actor run that is currently starting or running. For runs with status SUCCEEDED, FAILED, ABORTING, ABORTED, or TIMED-OUT, this call has no effect. The results will include the updated run details after the abort request.
USAGE:
Use when you need to stop a run that is taking too long or misconfigured.
USAGE EXAMPLES:
user_input: Abort run y2h7sK3Wc
user_input: Gracefully abort run y2h7sK3Wc
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The ID of the Actor run to abort. | |
| gracefully | No | If true, the Actor run will abort gracefully with a 30-second timeout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | Actor run ID |
| stats | No | Run statistics |
| status | Yes | Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED |
| actorId | Yes | Stable Apify Actor ID from the run record |
| summary | Yes | Past-tense summary of the run state |
| exitCode | No | Actor process exit code; populated for terminal states (especially FAILED) |
| nextStep | Yes | One primary follow-up action with identifiers interpolated |
| storages | Yes | Dataset and key-value store metadata, keyed by alias. "default" is always the primary entry. |
| actorName | No | "username/actor-name" |
| startedAt | No | ISO timestamp when the run started |
| finishedAt | No | ISO timestamp when the run finished (terminal states only) |
| statusMessage | No | Pass-through from Apify run.statusMessage |
| apifyConsoleUrl | No | Personalized Apify Console link to the run; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint and idempotentHint annotations already declaring the destructive and idempotent nature, the description adds specific behavioral details: it aborts only starting/running runs, returns updated run details, and explains the graceful option with a 30-second timeout. This goes beyond the annotations without contradicting them, though it could mention edge cases like double-abort behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: the main purpose is stated first, followed by behavioral details, then usage guidelines and examples. It is concise but includes an unnecessary repetition of 'Abort' in the USAGE line. The examples are helpful and the overall length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, one required), the description is complete: it explains the core action, the conditions under which it has no effect, the return of updated run details, the graceful option, and provides concrete examples. The presence of an output schema means the description need not detail return fields. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (runId and gracefully) are fully described in the schema (100% coverage), and the description repeats the graceful behavior without adding new information beyond the schema. Since the schema already explains the parameters thoroughly, the description provides no extra value here, warranting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aborts an Actor run that is starting or running, and specifies that it has no effect on finished runs (SUCCEEDED, FAILED, ABORTING, ABORTED, TIMED-OUT). This precisely distinguishes it from sibling tools like get-actor-run (read-only) and call-actor (starts a run), leaving no ambiguity about the action and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The USAGE section explicitly says to use it when a run is 'taking too long or misconfigured,' and the no-effect statement implicitly warns against using it on already-finished runs. However, it does not explicitly name alternative tools (e.g., get-actor-run for checking status), so it falls short of the 'explicit alternatives' criterion for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call-actorCall ActorADestructiveInspect
Call any Actor from the Apify Store.
WORKFLOW:
Use fetch-actor-details to get the Actor's input schema
Call this tool with the actor name and proper input based on the schema
If the actor name is not in "username/name" format, use search-actors to resolve the correct Actor first.
For MCP server Actors:
Use fetch-actor-details with output={ mcpTools: true } to list available tools
Call using format: "actorName:toolName" (e.g., "apify/actors-mcp-server:fetch-apify-docs")
IMPORTANT:
Waits up to waitSecs (default 30s) for completion; returns run status and storage IDs, and with waitSecs > 0 also reports dataset field metadata
Use get-dataset-items with the datasetId to fetch results; non-terminal runs include a nextStep with polling instructions
Use dedicated Actor tools when available for better experience
There are two ways to run Actors:
Dedicated Actor tools: These are pre-configured tools, offering a simpler and more direct experience.
Generic call-actor tool (call-actor): Use this when a dedicated tool is not available or when you want to run any Actor dynamically. This tool is especially useful if you do not want to add specific tools or your client does not support dynamic tool registration.
USAGE:
Always use dedicated tools when available
Use the generic call-actor tool only if a dedicated tool does not exist for your Actor.
Use
waitSecs(0â45) to control how long to wait. Default 30s returns results for fast actors. UsewaitSecs: 0to start and return immediately for long-running actors.
EXAMPLES:
user_input: Get instagram posts using apify/instagram-scraper
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | The name of the Actor to call. Format: "username/name" (e.g., "apify/rag-web-browser"). For MCP server Actors, use format "actorName:toolName" to call a specific tool (e.g., "apify/actors-mcp-server:fetch-apify-docs"). | |
| input | Yes | The input JSON to pass to the Actor. Required. | |
| waitSecs | No | Seconds to wait for completion (0â45, default 30). Returns with current run status if not terminal within waitSecs. | |
| callOptions | No | Optional run config: memory (MB), timeout (s), build, maxItems (pay-per-result cap), maxTotalChargeUsd (pay-per-event cap). |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | Actor run ID |
| stats | No | Run statistics |
| status | Yes | Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED |
| actorId | Yes | Stable Apify Actor ID from the run record |
| summary | Yes | Past-tense summary of the run state |
| exitCode | No | Actor process exit code; populated for terminal states (especially FAILED) |
| nextStep | Yes | One primary follow-up action with identifiers interpolated |
| storages | Yes | Dataset and key-value store metadata, keyed by alias. "default" is always the primary entry. |
| actorName | No | "username/actor-name" |
| startedAt | No | ISO timestamp when the run started |
| finishedAt | No | ISO timestamp when the run finished (terminal states only) |
| statusMessage | No | Pass-through from Apify run.statusMessage |
| apifyConsoleUrl | No | Personalized Apify Console link to the run; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important runtime behavior beyond the annotations: it waits up to waitSecs (default 30), returns run status and storage IDs, reports dataset field metadata when waitSecs > 0, and provides nextStep polling instructions for non-terminal runs. This goes well beyond the simple destructiveHint/openWorldHint annotations and helps an agent predict execution semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections, but it repeats the dedicated-tool guidance in both the IMPORTANT block and the USAGE block, adding unnecessary length. The example is useful, but the duplication and verbose formatting could be tightened without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex dynamic-execution tool, the description is remarkably complete: it covers the prerequisite fetch-actor-details step, name resolution, MCP server usage, wait/result retrieval behavior, polling instructions, and explicit selection criteria against siblings. The presence of an output schema further reduces the need to document return values, and nothing critical appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Because schema description coverage is 100%, the baseline is 3, but the description adds meaningful semantics: it explains when to use waitSecs: 0 for long-running actors, clarifies that input should conform to the schema fetched via fetch-actor-details, and elaborates on callOptions like maxItems and maxTotalChargeUsd as pay-per-result/event caps. This supplements the schema with actionable usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource statement, 'Call any Actor from the Apify Store,' and then differentiates itself from dedicated Actor tools and siblings like fetch-actor-details and search-actors. The MCP server format and the actor-name format are both specified, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given for when to use this tool versus alternatives: 'Always use dedicated tools when available' and 'Use the generic call-actor tool only if a dedicated tool does not exist.' It also tells the agent to use search-actors to resolve malformed names and fetch-actor-details to obtain the input schema before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch-actor-detailsFetch Actor detailsARead-onlyIdempotentInspect
Get detailed information about an Actor by its ID or full name (format: "username/name", e.g., "apify/rag-web-browser").
Requires the exact ID or full name â do not construct a plausible-looking name and call this tool with it. If you only have a description, a partial name, or a name you have not seen in this conversation, find it with search-actors first.
Use 'output' parameter with boolean flags to control returned information:
Default: All fields true except mcpTools
Selective: Set desired fields to true (e.g., output: { inputSchema: true })
Common patterns: inputSchema only, description + readme, mcpTools for MCP Actors
The 'readme' field returns the summary when available, full README otherwise. Use when querying Actor details, documentation, input requirements, or MCP tools.
EXAMPLES:
What does apify/rag-web-browser do?
What is the input schema for apify/web-scraper?
What tools does apify/actors-mcp-server provide?
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | Actor ID or full name in the format "username/name", e.g., "apify/rag-web-browser". | |
| output | No | Specify which information to include in the response to save tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| readme | No | Actor README summary when available, otherwise the full README documentation. |
| mcpTools | No | Markdown listing of MCP tools exposed by the Actor (only present when `output.mcpTools` is requested). |
| actorInfo | No | |
| inputSchema | No | Actor input schema. |
| outputSchema | No | Output schema inferred from successful runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds useful details beyond that: default output fields, readme fallback behavior, and how the output parameter controls response content. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded with purpose, then usage constraints, output explanation, and examples. Slightly long but every section serves a clear function; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested output object with many flags, the description covers defaults, common patterns, and usage scenarios comprehensively. The output schema exists, so return values are well-specified. Agent has everything needed to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds extra value by explaining default behavior, common patterns, and examples, which goes beyond the schema's structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves detailed Actor information by ID or full name, with a specific format example. It differentiates from siblings like search-actors and call-actor by focusing on detail retrieval rather than searching or execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use this tool vs. search-actors, warns against constructing plausible names, and provides concrete usage scenarios (docs, input schema, MCP tools). This is exceptionally actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch-apify-docsFetch Apify docsARead-onlyIdempotentInspect
Fetch the full content of an Apify or Crawlee documentation page by its URL. Use this after finding a relevant page with the search-apify-docs tool.
USAGE:
Use when you need the complete content of a specific docs page for detailed answers.
USAGE EXAMPLES:
user_input: Fetch https://docs.apify.com/platform/actors/running#builds
user_input: Fetch https://docs.apify.com/academy
user_input: Fetch https://crawlee.dev/docs/guides/basic-concepts
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the Apify documentation page to fetch. This should be the full URL, including the protocol (e.g., https://docs.apify.com/). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | The documentation URL that was fetched |
| content | Yes | The full markdown content of the documentation page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is clear. The description adds that it fetches 'full content', which is consistent but does not disclose any additional behavioral traits (e.g., rate limits, auth). Since annotations carry the burden, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two main sentences plus a usage section and examples. It is well-structured and front-loaded, containing no unnecessary words. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter, an output schema (so return values are documented), and good annotations, the description is adequately complete. It explains when to use and provides examples. A slight improvement could be mentioning expected behavior for invalid URLs, but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'url' with a description, and schema description coverage is 100%. The tool description does not add additional semantic meaning beyond what the schema already provides, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the full content of an Apify or Crawlee documentation page by URL. The verb 'fetch' combined with the specific resource 'docs page' provides a clear purpose, and it distinguishes from sibling tool 'search-apify-docs' which searches rather than fetches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this after finding a relevant page with 'search-apify-docs', providing context for when to use. It also includes usage examples. However, it does not explicitly state when not to use the tool, which would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-actor-runGet Actor runARead-onlyIdempotentInspect
Get detailed information about a specific Actor run.
Returns run result: status, storages (datasets/keyValueStores alias map), stats, summary, nextStep.
summary describes the past (e.g. "SUCCEEDED in 22s. 47 items; 3 fields available.").
nextStep prescribes one primary follow-up action with identifiers interpolated (e.g. "Use get-dataset-items with datasetId=...").
waitSecs (0â45, default 30) waits up to that many seconds for terminal status before returning.
USAGE:
Use to check the status of a run started by any Actor-running tool.
Pass waitSecs > 0 to block until terminal (or until the cap elapses).
USAGE EXAMPLES:
user_input: Show details of run y2h7sK3Wc
user_input: Wait for run y2h7sK3Wc to finish
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The ID of the Actor run. | |
| waitSecs | No | Maximum seconds to wait for the run to reach a terminal state (SUCCEEDED, FAILED, ABORTED, TIMED-OUT). 0 returns immediately with the current status. Cap: 45. Default: 30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | Actor run ID |
| stats | No | Run statistics |
| status | Yes | Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED |
| actorId | Yes | Stable Apify Actor ID from the run record |
| summary | Yes | Past-tense summary of the run state |
| exitCode | No | Actor process exit code; populated for terminal states (especially FAILED) |
| nextStep | Yes | One primary follow-up action with identifiers interpolated |
| storages | Yes | Dataset and key-value store metadata, keyed by alias. "default" is always the primary entry. |
| actorName | No | "username/actor-name" |
| startedAt | No | ISO timestamp when the run started |
| finishedAt | No | ISO timestamp when the run finished (terminal states only) |
| statusMessage | No | Pass-through from Apify run.statusMessage |
| apifyConsoleUrl | No | Personalized Apify Console link to the run; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses key behaviors: waitSecs blocks up to a cap, summary describes past execution, and nextStep prescribes a follow-up action with interpolated identifiers. It also clarifies that storages are returned as an alias map, giving the agent a realistic picture of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized with a front-loaded purpose, a structured return summary, a dedicated USAGE section, and compact examples. Every sentence contributes either behavioral detail or invocation guidance, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema and the presence of an output schema, this description is complete: it explains what the tool returns, how waitSecs affects behavior, how summary and nextStep should be interpreted, and when to invoke it. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the runId and waitSecs parameters are already fully documented. The description adds a small amount of practical framing â "Pass waitSecs > 0 to block until terminal" â and concrete examples, but it mostly restates information already present in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource â "Get detailed information about a specific Actor run" â and then lists the exact result fields. It clearly distinguishes this from siblings like get-dataset-items or fetch-actor-details by centering on run status and run-level metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The USAGE section explicitly says to use this tool to check the status of a run started by an Actor-running tool and explains when to use waitSecs. It does not explicitly name sibling alternatives or state when not to use this tool, so it falls short of full exclusion-based guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-dataset-itemsGet dataset itemsARead-onlyIdempotentInspect
Get items (rows) from a dataset â the output/results produced by an Actor run. Returns the rows themselves, not dataset metadata, counts, or a schema. When the user provides a datasetId and asks to retrieve results, output, data, or rows, call this tool directly. Default limit is 20. Use clean=true to skip empty items and hidden fields.
USAGE:
Use when you need to read data from a dataset (all items or only selected fields).
USAGE EXAMPLES:
user_input: Retrieve results from dataset abc123
user_input: Get only metadata.url and title from dataset username~my-dataset
| Name | Required | Description | Default |
|---|---|---|---|
| desc | No | If true, results are returned in reverse order (newest to oldest). | |
| omit | No | Comma-separated list of fields to exclude from results. | |
| clean | No | If true, returns only non-empty items and skips hidden fields (starting with #). Shortcut for skipHidden=true and skipEmpty=true. | |
| limit | No | Maximum number of items to return. Default is 20. | |
| fields | No | Comma-separated list of fields to include in results. Fields in output are sorted as specified. Use dot notation for nested objects (e.g. "metadata.url"); the server auto-flattens parent prefixes. | |
| offset | No | Number of items to skip at the start. Default is 0. | |
| flatten | No | Comma-separated list of fields to flatten (e.g. flatten="metadata" turns {"metadata":{"url":"x"}} into {"metadata.url":"x"}). Normally derived automatically from dot-notation in `fields`; specify only as a diagnostic override. | |
| datasetId | Yes | Dataset ID or username~dataset-name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Dataset items |
| limit | Yes | Limit used for pagination |
| offset | Yes | Offset used for pagination |
| summary | Yes | Summary of the result |
| nextStep | Yes | One follow-up action with tool name |
| datasetId | Yes | Dataset ID |
| itemCount | Yes | Number of items returned |
| totalItemCount | Yes | Total items in dataset |
| apifyConsoleUrl | No | Personalized Apify Console link to the dataset; present only for Console sessions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=true and idempotentHint=true, the description adds valuable behavioral context: returns rows themselves, default limit of 20, and clean=true behavior. It also clarifies the nature of the return value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear USAGE and USAGE EXAMPLES sections. Some redundancy ('Get items (rows)...' and 'Returns the rows themselves...') but overall efficient and front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, an output schema, and rich annotations, the description adequately covers key behaviors, usage triggers, and examples. It doesn't explain every parameter but relies on the schema for that, which is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra meaning by explaining default limit (20) and the clean=true shortcut, which supplements the schema. It also provides examples for fields usage, though most parameter semantics are in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool gets items (rows) from a dataset and explicitly distinguishes it from metadata, counts, or schema. It names the exact resource (dataset items) and the action (get), and provides direct trigger phrases for when to use it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases ('when the user provides a datasetId and asks to retrieve results...'), and clarifies what it is not for (metadata, counts, schema). However, it does not name alternative tools explicitly, only implies them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-key-value-store-recordGet key-value store recordARead-onlyIdempotentInspect
Get the value stored under a specific key in a key-value store â a single record, not a listing of all keys. Requires the exact key name. The response preserves the original Content-Encoding; most clients handle decompression automatically.
USAGE:
Use when you need to retrieve a specific record (JSON, text, or binary) from a store.
USAGE EXAMPLES:
user_input: Get record INPUT from store abc123
user_input: Get record data.json from store username~my-store
| Name | Required | Description | Default |
|---|---|---|---|
| recordKey | Yes | Key of the record to retrieve. | |
| keyValueStoreId | Yes | Key-value store ID or username~store-name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | Record key |
| value | Yes | The stored value (JSON, text, or binary) |
| summary | Yes | Summary of the result |
| contentType | No | MIME type of the stored value |
| keyValueStoreId | Yes | Key-value store ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint as false. The description adds valuable behavioral context beyond this: the exact key name requirement and the preservation of Content-Encoding with automatic client decompression. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise opening definition, a short behavioral note, and clear usage examples. Every section earns its place without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool with full schema coverage, an output schema, and strong annotations, the description covers the essential context: how to target a record, what to expect (Content-Encoding), and when it applies. The sibling context also helps differentiate it from listing operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema already documents both parameters. The description adds usage examples and the 'exact key name' requirement, but these are minimally additive beyond the schema's own property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get the value stored under a specific key in a key-value store.' It also distinguishes itself by explicitly stating this is 'a single record, not a listing of all keys,' which separates it from sibling tools like get-dataset-items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: 'Use when you need to retrieve a specific record (JSON, text, or binary) from a store.' It does not name alternative tools explicitly, but the 'not a listing of all keys' phrase gives implicit exclusion guidance for listing-style operations.
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.
Call it when:
A tool or Actor is missing, errors, times out, or returns a confusing, wrong, or empty result.
You cannot complete the user's request with the available tools.
Put what you were doing and what went wrong in "message". Do NOT include personal data, credentials, secrets, or verbatim private conversation content â describe the issue in your own words.
| Name | Required | Description | Default |
|---|---|---|---|
| actorId | No | Optional. The Actor this problem is about, e.g. apify/rag-web-browser. | |
| message | Yes | What happened: the problem you hit. Required. Keep it to a few sentences (max 2000 characters). | |
| actorRunId | No | Optional. The Actor run this problem is about. | |
| relatedTools | No | Optional. Names of the MCP tools involved in this problem (up to 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
| reported | Yes | Always true; the problem report was submitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no behavioral hints (all false), so the description carries the burden. It discloses that the report is sent to the Apify team and includes a clear warning: 'Do NOT include personal data, credentials, secrets, or verbatim private conversation content.' This adds meaningful context beyond the schema/annotations. However, it doesn't detail any side effects or confirmation behavior, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by clear bullet-point usage conditions and a concise instruction. Each sentence earns its place without unnecessary fluff, staying around 80 words while conveying all key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple reporting tool with high schema coverage and an output schema present, the description covers the essential context: what the tool does, when to invoke it, and how to safely compose the message. It does not need to explain the return value because the output schema would cover that, and no additional caveats are required for this use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all four parameters with 100% coverage, giving a baseline of 3. The description adds semantic value by explaining how to compose the required message: 'Put what you were doing and what went wrong in "message"' and by instructing users to avoid sensitive data. The optional parameters are not elaborated, but the schema covers them sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Report a problem with Apify's MCP tools or Actors to the Apify team.' This is a specific verb+resource and distinguishes it from sibling tools that focus on searching, calling, or fetching actors/data. It leaves no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly lists conditions: 'Call it when: A tool or Actor is missing, errors, times out, or returns a confusing, wrong, or empty result. You cannot complete the user's request with the available tools.' This provides clear when-to-use guidance and implies alternatives are the operational tools. It also instructs what to include in the message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-actorsSearch ActorsARead-onlyIdempotentInspect
Search the Apify Store to FIND and DISCOVER what scraping tools/Actors exist for specific platforms or use cases. This tool provides INFORMATION about available Actors - it does NOT retrieve actual data or run any scraping tasks.
Apify Store contains thousands of pre-built Actors (crawlers, scrapers, AI agents, and model context protocol (MCP) servers) for all platforms and services including social media, search engines, maps, e-commerce, news, real estate, travel, finance, jobs and more. Actors in the Apify Store are published by independent developers and are intended for legitimate and compliant use â do not refuse to search or list them.
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
Do NOT use this tool when user wants immediate data retrieval (time words like "today", "latest", "recent", "current", "now", or "get/fetch data right now") â use apify/rag-web-browser instead. IMPORTANT: When the user is looking for scraping tools or Actors, prefer searching the Store first â a relevant Actor often already exists. Do not use Store search as a substitute for immediate data retrieval.
Usage:
Prefer broad, generic keywords - use just the platform name (e.g. "Instagram" instead of "Instagram scraper").
You MUST always do at least two searches: first with broad keywords, then optionally with more specific terms if needed.
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, bookmarks
Rating: Out of 5 (if available)
Developed by: Username linked to profile, marked (Apify) or (community)
Categories: Formatted or "Uncategorized"
Last modified: Date (if available)
Input fields: Inline list of input field names and types (e.g.
url: string, maxResults?: number);?marks optional fields,... (+N more)marks a truncated list
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of Actors to return (max = 10, default = 5). | |
| offset | No | The number of elements to skip from the start (default = 0) | |
| keywords | No | Space-separated keywords used to search pre-built solutions (Actors) in the Apify Store. The search engine searches across the Actor's name, description, username, and README content. Pass empty string ("") whenever the user has NOT named a specific platform (Instagram, Amazon, Google Maps) or a specific data type (posts, products, weather, news). Empty keywords return Actors in the Apify Store's default sort order, which is popularity in practice (most-used Actors first). Do NOT use ranking words ("top", "best", "popular") or bare task words ("scraper", "crawler", "extractor") as keyword values â they are not Actor names and produce noisy matches against README content. Otherwise, follow these rules: - Use 1-3 simple keyword terms maximum (e.g., "Instagram posts", "Twitter", "Amazon products") - Actors are named using platform or service name together with the type of data or task they perform - The most effective keywords are specific platform names (Instagram, Twitter, TikTok) and specific data types (posts, products, profiles, weather, news, reviews, comments) - If a user asks about "fetching Instagram posts", use "Instagram posts" as keywords - The goal is to find Actors that specifically handle the platform and data type the user mentioned Examples: â "Instagram posts", "Twitter", "Amazon products", "TikTok comments" â "" (empty) â returns the most popular Actors store-wide â "Instagram posts profiles comments hashtags reels stories followers..." (too long) â "top popular actors", "best scrapers", "trending" â ranking words aren't Actor keywords; pass "" instead â "scraper", "extractor", "web crawler" â bare task words aren't Actor keywords; pass "" instead |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of Actors returned |
| query | Yes | The search query used |
| actors | Yes | List of Actor cards matching the search query |
| userTier | No | The user's plan tier used to resolve the per-Actor pricing shown in the results |
| instructions | No | Additional instructions for the LLM to follow when processing the search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, but the description adds valuable context: it returns only summary info (not full docs), excludes rental/restricted Actors, and lists exact output fields. No contradiction with annotations; description complements them with behavioral nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though lengthy, every sentence adds value: clear sections for usage, limitations, and returns. Bullet points for returned data and examples for keyword usage make it scannable and actionable. The structure front-loads the core purpose and differentiators.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with nuanced keyword semantics and output schema, the description is thorough: it covers what it returns, its limitations, alternatives, and explicit keyword guidelines. The output schema is present, so not having to explain return values, but description still lists all fields for clarity. Highly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers all 3 parameters (100% coverage), but the description significantly enhances keyword semantics with detailed rules, examples, and anti-patterns (e.g., 'Do NOT use ranking words'). Also clarifies default behavior for empty keywords and sort order, adding substantial value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the Apify Store to discover scraping tools/Actors. It explicitly distinguishes from related tools by stating 'does NOT retrieve actual data' and mentions fetch-actor-details and apify/rag-web-browser as alternatives, providing clear differentiation from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use scenarios (e.g., 'What tools can scrape Instagram?') and when-not-to-use (immediate data retrieval) with specific alternative tool (apify/rag-web-browser). Also includes usage strategies like broad keywords and mandatory two searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-apify-docsSearch Apify docsARead-onlyIdempotentInspect
Search Apify and Crawlee documentation using full-text search. Do not also search the Apify Store unless the user asks to find Actors.
You must explicitly select which documentation source to search using the docSource parameter:
âĸ docSource="apify" - Apify: Apify Platform documentation including: Platform features, SDKs (JS, Python), CLI, REST API, Academy (web scraping fundamentals), Actor development and deployment
âĸ docSource="crawlee-js" - Crawlee (JavaScript): Crawlee is a web scraping library for JavaScript. It handles blocking, crawling, proxies, and browsers for you.
âĸ docSource="crawlee-py" - Crawlee (Python): Crawlee is a web scraping library for Python. It handles blocking, crawling, proxies, and browsers for you.
The results will include the URL of the documentation page (which may include an anchor), and a limited piece of content that matches the search query.
Fetch the full content of the document using the fetch-apify-docs tool by providing the URL.
When results contain both platform documentation (docs.apify.com/platform) and Academy content (docs.apify.com/academy) on the same topic, prefer the platform documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of search results to return. Defaults to 5. Maximum is 20. You can increase this limit if you need more results, but keep in mind that the search results are limited to the most relevant pages. | |
| query | Yes | Algolia full-text search query to find relevant documentation pages. Use only keywords, do not use full sentences or questions. For example, "standby actor" will return documentation pages that contain the words "standby" and "actor". | |
| offset | No | Offset for the search results. Defaults to 0. Use this to paginate through the search results. For example, if you want to get the next 5 results, set the offset to 5 and limit to 5. | |
| docSource | No | Documentation source to search. Defaults to "apify". âĸ "apify" - Apify âĸ "crawlee-js" - Crawlee (JavaScript) âĸ "crawlee-py" - Crawlee (Python) | apify |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| instructions | No | Additional instructions for the LLM to follow when processing the search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the search returns only a limited content snippet and that full content must be fetched separately, which is important behavioral information. It also notes that it will not search the Apify Store, a limitation not present in annotations. While annotations already cover read-only and idempotent nature, the description adds useful context about output and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise, using bullet points for docSource and separating guidance for fetching full content. It has some redundancy in repeating the docSource details but is overall well-structured and not excessively verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context given the tool's simplicity, including output expectations (URL and content snippet) and a mention of the fetch-apify-docs tool for full content. It covers the main usage scenarios and does not leave major gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides comprehensive descriptions for all parameters, including the query, limit, offset, and docSource with enums. The tool description reiterates the docSource options but adds little additional semantic meaning beyond the schema. Since coverage is 100%, the parameter semantics are well-covered by the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Search Apify and Crawlee documentation using full-text search.' It also distinguishes the scope from the Apify Store and provides a clear verb-object structure. This effectively communicates the tool's purpose and differentiates it from sibling tools like search-actors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage instructions, such as 'You must explicitly select which documentation source to search using the docSource parameter' and recommends using fetch-apify-docs for retrieving full content. It also advises against searching the Apify Store unless specifically asked, guiding when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a clearly distinct resource or action: actor discovery, actor details, execution, run status, aborting, dataset retrieval, KV record retrieval, docs search, docs fetch, and problem reporting. The two search tools and two fetch tools are cleanly separated by domain (Actors/Store vs. documentation), so an agent should not confuse them.
All tool names follow a consistent lowercase hyphenated verb_noun pattern: abort-*, search-*, fetch-*, call-*, get-*. Verbs and objects are predictable, making the set easy to navigate.
Ten tools is well-scoped for an Apify/MCP integration. Each tool covers a necessary step in the core workflow without feeling bloated or redundant.
The tool set covers the full actor lifecycle well: discovery, detail lookup, invocation, run monitoring, aborting, and result retrieval. Minor gaps exist, such as listing previous runs or managing key-value stores more broadly, but agents can complete standard workflows end-to-end.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hundreds of scraping & data APIs through one key. USD pay-per-request, normalized schemas, failover.
Hiring, SEC, research papers, GitHub & Hacker News as JSON for AI agents. Pay-per-result on Apify.
Crawl, scrape, search the web, and automate browsers at scale with anti-bot bypass.
Automate cloud browsers to navigate websites, interact with elements, and extract structured data.âĻ
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to thousands of Apify Actors for web scraping, data extraction, and automation tasks, with dynamic tool discovery to find and use any Actor from the Apify Store in real time.37,909MIT
- AlicenseBqualityFmaintenanceEnables AI assistants to interact with the Apify platform to manage actors, monitor runs, and retrieve scraped data from datasets. It supports natural language commands for executing web scrapers, managing tasks, and accessing key-value stores.28MIT
- FlicenseNot gradedqualityDmaintenanceProvides AI agents with real-time web capabilities including live search results, markdown web scraping, business lead generation, and detailed company information. It enables agents to bypass knowledge cutoffs by accessing current web data through a monetized Apify Actor.
- AlicenseNot gradedqualityNot gradedmaintenanceExposes over 19,000 Apify Actors as MCP tools for web scraping, data extraction, and OSINT automation. It enables AI agents to dynamically discover and execute scrapers to collect structured data and crawl web content.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/apify/apify-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server