How to integrate Apify MCP with Claude Code

Trusted by
AWS
Glean
Zoom
Airtable

30 min · no commitment · see it on your stack

Apify logo
Claude Code logo
divider

Introduction

Manage your Apify directly from Claude Code with zero worries about OAuth hassles, API-breaking issues, or reliability and security concerns.

You can do this in two different ways:

  1. Via Composio Connect - Direct and easiest approach
  2. Via Composio SDK - Programmatic approach with more control

Also integrate Apify with

Why use Composio?

  • Only one MCP URL to connect multiple apps with Claude Code with zero auth hassles.
  • Programmatic tool calling allows LLMs to write its code in a remote workbench to handle complex tool chaining. Reduces to-and-fro with LLMs for frequent tool calling.
  • Handling Large tool responses out of LLM context to minimize context rot.
  • Dynamic just-in-time access to 20,000 tools across 1000+ other Apps for cross-app workflows. It loads the tools you need, so LLMs aren't overwhelmed by tools you don't need.

Connecting Apify to Claude Code using Composio

1. Add the Composio MCP to Claude

Terminal

2. Start Claude Code

bash
claude

3. Open your MCP list

bash
/mcp

4. Select Composio and click on Authenticate

Select Composio and click Authenticate

5. This will redirect you to the Composio OAuth page. Complete the flow by authorizing Composio and you're all set.

Composio OAuth authorization page
Composio authorization complete
Ask Claude to connect to your account and authenticate via the link

Supported Tools & Triggers

Tools
Build ActorTool to build an Actor with specified configuration.
Abort Actor BuildTool to abort an Actor build that is starting or running.
Delete Actor BuildTool to delete an Actor build permanently.
Get Actor BuildTool to get detailed information about a specific Actor build.
Get Actor Build LogTool to retrieve the log file for a specific Actor build.
Get user builds listTool to get a paginated list of all builds for a user.
Abort Actor RunTool to abort a running or starting Actor run.
Delete Actor RunTool to delete a finished Actor run.
Get Actor RunTool to get details about a specific Actor run.
Update Actor Run Status MessageTool to update the status message of an Actor run.
Delete Actor TaskTool to delete an Actor task permanently.
Get Actor TaskTool to get complete details about an Actor task.
Update Actor TaskTool to update Actor task settings using JSON payload.
Get last actor task runTool to get the most recent run of a specific Actor task.
Run Task Sync (GET)Tool to run a specific task synchronously and return its output.
Run Task Sync & Get Dataset ItemsTool to run an actor task synchronously and retrieve its dataset items.
Run Task Sync with Input Override & Get Dataset ItemsTool to run an actor task synchronously with input overrides and retrieve its dataset items.
Run Task Sync (POST)Tool to run an Actor task synchronously with input override and return its output.
Update ActorTool to update Actor settings using JSON payload.
Get last actor runTool to get the most recent run of a specific Actor.
Run Actor Sync without Input (GET)Tool to run a specific Actor synchronously without input and return its output.
Run Actor Sync & Get Dataset ItemsTool to run Actor synchronously and get dataset items.
Get list of ActorsTool to get the list of all Actors that the user created or used.
Delete Actor VersionTool to delete a specific version of an Actor's source code.
Delete Actor Version Environment VariableTool to delete an environment variable from a specific Actor version.
Get Actor Version Environment VariableTool to get environment variable details for a specific Actor version.
Update Actor Version Environment VariableTool to update environment variable for a specific Actor version using JSON payload.
Get list of Actor version environment variablesTool to get the list of environment variables for a specific Actor version.
Create Actor Version Environment VariableTool to create an environment variable for a specific Actor version.
Get Actor versionTool to get details about a specific version of an Actor.
Update Actor VersionTool to update an Actor version's configuration and source code.
Get list of Actor versionsTool to get the list of versions of a specific Actor.
Create Actor VersionTool to create a new version of an Actor.
Get list of Actor webhooksTool to get a list of webhooks for a specific Actor.
Create ActorTool to create a new Actor with specified configuration.
Create DatasetTool to create a new dataset.
Create Actor TaskTool to create a new Actor task with specified settings.
Create Task WebhookTool to create a webhook for an Actor task.
Delete DatasetTool to delete a dataset permanently.
Get DatasetTool to retrieve dataset metadata by dataset ID.
Update DatasetTool to update a dataset's name via JSON payload.
Get list of datasetsTool to get list of datasets for a user.
Get Dataset StatisticsTool to get dataset field statistics by dataset ID.
Delete ActorTool to delete an Actor permanently.
Delete WebhookTool to delete a webhook by its ID.
Get Actor DetailsTool to get details of a specific Actor.
Get Actor Last Run Dataset ItemsTool to get dataset items from the last run of an Actor.
Get all webhooksTool to get a list of all webhooks created by the user.
Get dataset itemsTool to retrieve items from a dataset.
Get Default BuildTool to get the default build for an Actor.
Get Key-Value RecordTool to retrieve a record from a key-value store.
Get list of buildsTool to get a list of builds for a specific Actor.
Get list of runsTool to get a list of runs for a specific Actor.
Get list of task runsTool to get a list of runs for a specific Actor task.
Get list of tasksTool to fetch a paginated list of tasks belonging to the authenticated user.
Get list of task webhooksTool to get a list of webhooks for a specific Actor task.
Get logTool to retrieve logs for a specific Actor run or build.
Get OpenAPI DefinitionTool to get the OpenAPI definition for a specific Actor build.
Get Run Dataset ItemsTool to get dataset items from a specific Actor run.
Get Task InputTool to retrieve the input configuration of a specific task.
Get Task Last Run Dataset ItemsTool to get dataset items from the last run of an Actor task.
Delete Key-Value StoreTool to delete a key-value store permanently.
Get Key-Value StoreTool to retrieve key-value store metadata by store ID.
Get Key-Value Store KeysTool to retrieve a list of keys from a key-value store.
Delete Key-Value Store RecordTool to delete a record from a key-value store.
Check Key-Value Store Record ExistsTool to check if a record exists in a key-value store.
Get list of key-value storesTool to get the list of key-value stores owned by the user.
Create Key-Value StoreTool to create a new key-value store or retrieve an existing one by name.
List User Actor RunsTool to get a paginated list of all Actor runs for the authenticated user.
Delete Request QueueTool to delete a request queue permanently.
Get Request QueueTool to retrieve request queue metadata by queue ID.
Get Request Queue HeadTool to retrieve first requests from the queue for inspection.
Get Head and Lock Queue RequestsTool to get and lock head requests from the queue.
Update Request QueueTool to update request queue name using JSON payload.
Delete Request from QueueTool to delete a specific request from a request queue.
Get Request from QueueTool to retrieve a specific request from a request queue by its ID.
Delete Request LockTool to delete a request lock from a request queue.
Prolong Request LockTool to prolong request lock in a request queue.
Update Request in QueueTool to update a request in a request queue.
Batch Delete Requests from QueueTool to batch-delete up to 25 requests from a queue.
Batch Add Requests to QueueTool to batch-add up to 25 requests to a request queue.
List Request Queue RequestsTool to list requests in a request queue with pagination support.
Add Request to QueueTool to add a request to the queue.
Unlock Queue RequestsTool to unlock requests in a request queue that are currently locked by the client.
Get list of request queuesTool to get list of request queues for a user.
Create Request QueueTool to create a new request queue or retrieve an existing one by name.
Run Actor AsynchronouslyTool to run a specific Actor asynchronously.
Run Actor SyncTool to run a specific Actor synchronously with input and return its output record.
Run Actor Sync & Get Dataset ItemsTool to run an Actor synchronously and retrieve its dataset items.
Run Task AsynchronouslyTool to run a specific Actor task asynchronously.
Delete ScheduleTool to delete a schedule by its ID.
Get ScheduleTool to get schedule details by ID.
Get Schedule LogTool to get schedule log by ID.
Update ScheduleTool to update an existing schedule with new settings.
Get list of schedulesTool to get list of schedules created by the user.
Create ScheduleTool to create a new schedule with specified settings.
Store Data in DatasetTool to store data items in a dataset.
Store Data in Key-Value StoreTool to create or update a record in a key-value store.
Get list of Actors in StoreTool to get list of public Actors from Apify Store.
Update Key-Value StoreTool to update a key-value store's properties.
Update Task InputTool to update the input configuration of a specific Actor task.
Get Public User DataTool to get public user data.
Get Current User Account DataTool to get private user account information.
Get Account LimitsTool to get a complete summary of account limits and usage.
Update Account LimitsTool to update account limits manageable on the Limits page.
Get Monthly UsageTool to get monthly usage summary with daily breakdown.
Get list of webhook dispatchesTool to get list of webhook dispatches for the user.
Get Webhook DispatchTool to get webhook dispatch object with all details.
Get webhookTool to get webhook object with all details.
Update WebhookTool to update webhook using JSON payload.
Test WebhookTool to test a webhook by creating a test dispatch with a dummy payload.
Get webhook dispatchesTool to get list of webhook dispatches for a specific webhook.

What is the Apify MCP server, and what's possible with it?

The Apify MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Apify account. It provides structured and secure access to your web scraping and automation workflows, so your agent can create actors, manage datasets, fetch scraped data, schedule tasks, and maintain webhooks on your behalf.

  • Automated Actor Creation and Management: Easily instruct your agent to programmatically create, configure, or delete Apify actors for custom web automation or scraping jobs.
  • Dataset Handling and Data Retrieval: Let your agent spin up new datasets, organize scraped results, and pull items from datasets for downstream analysis or reporting.
  • Task Scheduling and Automation: Have your agent create and manage recurring actor tasks, making it simple to automate data extraction or browser automation at set intervals.
  • Webhook Integration and Event Handling: Direct your agent to set up or remove webhooks for actor tasks, enabling real-time notifications or downstream integrations when a task completes or fails.
  • Actor and Build Metadata Access: Empower your agent to fetch detailed metadata about actors, including build information and configuration details, for monitoring or troubleshooting purposes.

Connecting Apify via Composio SDK

Composio SDK is the underlying tech that powers Rube. It's a universal gateway that does everything Rube does but with much more programmatic control. You can programmatically generate an MCP URL with the app you need (here Apify) for even more tool search precision. It's secure and reliable.

How the Composio SDK works

The Composio SDK follows a three-phase workflow:

  1. Discovery: Searches for tools matching your task and returns relevant toolkits with their details.
  2. Authentication: Checks for active connections. If missing, creates an auth config and returns a connection URL via Auth Link.
  3. Execution: Executes the action using the authenticated connection.

Step-by-step Guide

Prerequisites

Before starting, make sure you have:
  • Claude Pro, Max, or API billing enabled Anthropic account
  • Composio API Key
  • A Apify account
  • Basic knowledge of Python or TypeScript

Install Claude Code

bash
# macOS, Linux, WSL
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

# Windows CMD
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

To install Claude Code, use one of the following methods based on your operating system:

Set up Claude Code

bash
cd your-project-folder
claude

Open a terminal, go to your project folder, and start Claude Code:

  • Claude Code will open in your terminal
  • Follow the prompts to sign in with your Anthropic account
  • Complete the authentication flow
  • Once authenticated, you can start using Claude Code
Claude Code initial setup showing sign-in prompt
Claude Code terminal after successful login

Set up environment variables

bash
COMPOSIO_API_KEY=your_composio_api_key_here
USER_ID=your_user_id_here

Create a .env file in your project root with the following variables:

  • COMPOSIO_API_KEY authenticates with Composio (get it from Composio dashboard)
  • USER_ID identifies the user for session management (use any unique identifier)

Install Composio library

pip install composio-core python-dotenv

Install the Composio Python library to create MCP sessions.

  • composio-core provides the core Composio functionality
  • python-dotenv loads environment variables from your .env file

Generate Composio MCP URL

import os
from composio import Composio
from dotenv import load_dotenv

load_dotenv()

COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
USER_ID = os.getenv("USER_ID")

composio_client = Composio(api_key=COMPOSIO_API_KEY)

composio_session = composio_client.create(
    user_id=USER_ID,
    toolkits=["apify"],
)

COMPOSIO_MCP_URL = composio_session.mcp.url

print(f"MCP URL: {COMPOSIO_MCP_URL}")
print(f"\nUse this command to add to Claude Code:")
print(f'claude mcp add --transport http apify-composio "{COMPOSIO_MCP_URL}" --headers "X-API-Key:{COMPOSIO_API_KEY}"')

Create a script to generate a Composio MCP URL for Apify. This URL will be used to connect Claude Code to Apify.

What's happening:

  • We import the Composio client and load environment variables
  • Create a Composio instance with your API key
  • Call create() to create a Tool Router session for Apify
  • The returned mcp.url is the MCP server URL that Claude Code will use
  • The script prints this URL so you can copy it

Run the script and copy the MCP URL

python generate_mcp_url.py

Run your Python script to generate the MCP URL.

  • The script connects to Composio and creates a Tool Router session
  • It prints the MCP URL and the exact command you need to run
  • Copy the entire claude mcp add command from the output

Add Apify MCP to Claude Code

bash
claude mcp add --transport http apify-composio "YOUR_MCP_URL_HERE" --headers "X-API-Key:YOUR_COMPOSIO_API_KEY"

# Then restart Claude Code
exit
claude

In your terminal, add the MCP server using the command from the previous step. The command format is:

  • claude mcp add registers a new MCP server with Claude Code
  • --transport http specifies that this is an HTTP-based MCP server
  • The server name (apify-composio) is how you'll reference it
  • The URL points to your Composio Tool Router session
  • --headers includes your Composio API key for authentication

After running the command, close the current Claude Code session and start a new one for the changes to take effect.

Verify the installation

bash
claude mcp list

Check that your Apify MCP server is properly configured.

  • This command lists all MCP servers registered with Claude Code
  • You should see your apify-composio entry in the list
  • This confirms that Claude Code can now access Apify tools

If everything is wired up, you should see your apify-composio entry listed:

Claude Code MCP list showing the toolkit MCP server

Authenticate Apify

The first time you try to use Apify tools, you'll be prompted to authenticate.

  • Claude Code will detect that you need to authenticate with Apify
  • It will show you an authentication link
  • Open the link in your browser (or copy/paste it)
  • Complete the Apify authorization flow
  • Return to the terminal and start using Apify through Claude Code

Once authenticated, you can ask Claude Code to perform Apify operations in natural language. For example:

  • "Create a new dataset for scraped results"
  • "Fetch items from a specific Apify dataset"
  • "Get details of my latest Apify actor"

Complete Code

Here's the complete code to get you started with Apify and Claude Code:

import os
from composio import Composio
from dotenv import load_dotenv

load_dotenv()

COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
USER_ID = os.getenv("USER_ID")

composio_client = Composio(api_key=COMPOSIO_API_KEY)

composio_session = composio_client.create(
    user_id=USER_ID,
    toolkits=["apify"],
)

COMPOSIO_MCP_URL = composio_session.mcp.url

print(f"MCP URL: {COMPOSIO_MCP_URL}")
print(f"\nUse this command to add to Claude Code:")
print(f'claude mcp add --transport http apify-composio "{COMPOSIO_MCP_URL}" --headers "X-API-Key:{COMPOSIO_API_KEY}"')

Conclusion

You've successfully integrated Apify with Claude Code using Composio's MCP server. Now you can interact with Apify directly from your terminal using natural language commands.

Key features of this setup:

  • Terminal-native experience without switching contexts
  • Natural language commands for Apify operations
  • Secure authentication through Composio's managed MCP
  • Tool Router for dynamic tool discovery and execution

Next steps:

  • Try asking Claude Code to perform various Apify operations
  • Add more toolkits to your Tool Router session for multi-app workflows
  • Integrate this setup into your development workflow for increased productivity

You can extend this by adding more toolkits, implementing custom workflows, or building automation scripts that leverage Claude Code's capabilities.

How to build Apify MCP Agent with another framework

FAQ

What are the differences in Tool Router MCP and Apify MCP?

With a standalone Apify MCP server, the agents and LLMs can only access a fixed set of Apify tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Apify and many other apps based on the task at hand, all through a single MCP endpoint.

Can I use Tool Router MCP with Claude Code?

Yes, you can. Claude Code fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Apify tools.

Can I manage the permissions and scopes for Apify while using Tool Router?

Yes, absolutely. You can configure which Apify scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Apify data and credentials are handled as safely as possible.

Used by agents from

Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai
Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai
Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai

Never worry about agent reliability

We handle tool reliability, observability, and security so you never have to second-guess an agent action.