Run web scrapers, automate data extraction, and manage Actor pipelines through AI.
A Model Context Protocol (MCP) server that exposes Apify's API for running Actors, managing runs, and retrieving scraped datasets.
The Apify MCP Server provides end-to-end control over Apify's automation platform through AI:
- Discover and run Actors from your Apify account with custom inputs and resource limits
- Monitor run status and retrieve scraped output from datasets
- Browse and manage pre-configured Actor tasks
Perfect for:
- Triggering web scraping pipelines from conversational AI interfaces
- Polling run results and surfacing structured dataset output without leaving the chat
- Managing Actor task libraries and monitoring run history through natural language
apify_health_check — Check server readiness
Returns a status object confirming the server is running and reachable.
Inputs: (none)
Output:
{
"status": "ok",
"server": "CL Apify MCP Server"
}apify_list_actors — List Actors in your account
Returns a paginated list of Actors in your Apify account, including ID, name, and username.
Inputs:
- `my_only` (boolean, optional) — Only return Actors owned by you (default: true)
- `limit` (integer, optional) — Maximum number of Actors to return, 1–1000 (default: 100)
- `offset` (integer, optional) — Number of Actors to skip for pagination (default: 0)
Output:
{
"success": true,
"total": 12,
"count": 12,
"actors": [
{ "id": "abc123", "name": "web-scraper", "username": "myuser" }
]
}apify_run_actor — Run an Actor
Starts an Actor run with the provided input and optional resource constraints. Returns the run ID and default dataset ID for polling results.
Inputs:
- `actor_id` (string, required) — Actor ID to run (e.g. 'username~actor-name' or Actor ID)
- `input_data` (string, optional) — JSON string of input data for the Actor (default: '{}')
- `timeout_secs` (integer, optional) — Run timeout in seconds
- `memory_mbytes` (integer, optional) — Memory limit in MB (min 128)
- `build` (string, optional) — Build tag or number (default: 'latest')
Output:
{
"success": true,
"run_id": "run_XXXXXXXXXX",
"status": "RUNNING",
"started_at": "2024-01-01T00:00:00.000Z",
"default_dataset_id": "dataset_XXXXXXXXXX",
"default_key_value_store_id": "kvs_XXXXXXXXXX"
}apify_get_run — Get Actor run details
Retrieves the status and metadata of a specific Actor run. Optionally waits up to 60 seconds for the run to finish.
Inputs:
- `run_id` (string, required) — Actor run ID
- `wait_for_finish` (integer, optional) — Seconds to wait for run completion, 0–60 (default: 0)
Output:
{
"success": true,
"run_id": "run_XXXXXXXXXX",
"actor_id": "abc123",
"status": "SUCCEEDED",
"started_at": "2024-01-01T00:00:00.000Z",
"finished_at": "2024-01-01T00:01:30.000Z",
"default_dataset_id": "dataset_XXXXXXXXXX",
"usage_total_usd": 0.012
}apify_list_runs — List recent Actor runs
Returns a paginated list of Actor runs from your account, sorted newest first. Optionally filter by run status.
Inputs:
- `status` (string, optional) — Filter by status: 'SUCCEEDED', 'FAILED', 'RUNNING', 'ABORTED', etc.
- `limit` (integer, optional) — Maximum number of runs to return, 1–1000 (default: 100)
- `offset` (integer, optional) — Number of runs to skip for pagination (default: 0)
Output:
{
"success": true,
"total": 42,
"count": 10,
"runs": [
{
"id": "run_XXXXXXXXXX",
"actor_id": "abc123",
"status": "SUCCEEDED",
"started_at": "2024-01-01T00:00:00.000Z",
"finished_at": "2024-01-01T00:01:30.000Z"
}
]
}apify_get_dataset_items — Retrieve dataset output
Fetches scraped items from an Actor run's default dataset. This is the primary way to read Actor output after a run completes.
Inputs:
- `dataset_id` (string, required) — Dataset ID (returned in the Actor run response)
- `limit` (integer, optional) — Maximum number of items to return, 1–10000 (default: 100)
- `offset` (integer, optional) — Number of items to skip for pagination (default: 0)
- `clean` (boolean, optional) — Remove hidden fields starting with '#' (default: true)
Output:
{
"success": true,
"count": 25,
"items": [
{ "url": "https://example.com", "title": "Example Page", "price": 29.99 }
]
}apify_list_tasks — List Actor tasks
Returns a paginated list of Actor tasks in your account. Tasks are pre-configured Actor runs with saved inputs.
Inputs:
- `limit` (integer, optional) — Maximum number of tasks to return, 1–1000 (default: 100)
- `offset` (integer, optional) — Number of tasks to skip for pagination (default: 0)
Output:
{
"success": true,
"total": 5,
"count": 5,
"tasks": [
{
"id": "task_XXXXXXXXXX",
"name": "my-scraper-task",
"actor_id": "abc123",
"username": "myuser",
"created_at": "2024-01-01T00:00:00.000Z"
}
]
}Common Parameters
limit— Maximum number of records to return per request (max varies by endpoint)offset— Number of records to skip; use withlimitfor paginationdesc— Sort order; list endpoints return results newest-first by default
Resource ID Formats
Actors:
{username}~{actor-name} or {actorId}
Example: apify~web-scraper or BwFbCCmwYxNqHr7TB
Runs:
{runId}
Example: HG7ML7M8z78YcAPEB
Datasets:
{datasetId}
Example: rHuMdwm6xCFt6WiEz
Tasks:
{taskId}
Example: KoJgnDhzbtGnuH5md
Run Status Values
READY— Queued and waiting to startRUNNING— Currently executingSUCCEEDED— Completed successfullyFAILED— Terminated with an errorABORTING— Abort in progressABORTED— Stopped by user or timeoutTIMED-OUT— Exceeded the timeout limit
Steps
- Go to the Apify Console
- Click your profile avatar → Settings → Integrations
- Under API tokens, click + Add new token
- Give the token a name and click Create — copy the token value immediately, it is only shown once
Personal API tokens carry the same permissions as your account. For production integrations, create a scoped token with the minimum permissions required.
Missing or Invalid Headers
- Cause: API token not provided in request headers or incorrect format
- Solution:
- Verify
Authorization: Bearer YOUR_API_KEYandX-Mewcp-Credential-Id: CREDENTIAL-IDheaders are present - Check API token is active in your MewCP account
- Verify
Insufficient Credits
- Cause: API calls have exceeded your request limits
- Solution:
- Check credit usage in your Curious Layer dashboard
- Upgrade to a paid plan or add credits for higher limits
- Contact support for credit adjustments
Credential Not Connected
- Cause: No Apify credential linked to your account
- Solution:
- Go to Credentials in your MewCP dashboard
- Add your Apify API token
- Retry the request with the correct
X-Mewcp-Credential-Idheader
Malformed Request Payload
- Cause: JSON payload is invalid or missing required fields
- Solution:
- Validate JSON syntax before sending
- Ensure all required tool parameters are included
- When using
apify_run_actor, passinput_dataas a JSON string, not an object
Server Not Found
- Cause: Incorrect server name in the API endpoint
- Solution:
- Verify endpoint format:
{server-name}/mcp/{tool-name} - Use correct server name from documentation
- Check available servers in your Curious Layer account
- Verify endpoint format:
Apify API Error
- Cause: Upstream Apify API returned an error
- Solution:
- Check Apify service status at Apify Status Page
- Verify your API token has the required permissions for the operation
- Review the error message for specific details (e.g. Actor not found, insufficient compute units)
Resources
- Apify API Documentation — Official API reference
- Apify Console — Manage Actors, runs, and datasets
- FastMCP Docs — FastMCP specification
- FastMCP Credentials — FastMCP Credentials package for credential handling