actors-mcp-server
OfficialApify 모델 컨텍스트 프로토콜(MCP) 서버
모든 Apify Actor 에 대한 MCP 서버 구현. 이 서버를 통해 MCP 서버 구성에서 정의할 수 있는 하나 이상의 Apify Actor와 상호 작용할 수 있습니다.
서버는 두 가지 방법으로 사용할 수 있습니다.
🇦 MCP 서버 액터 – SSE(Server-Sent Events)를 통해 접근 가능한 HTTP 서버, 가이드 참조
⾕ MCP 서버 Stdio – 표준 입력/출력(stdio)을 통해 사용 가능한 로컬 서버, 가이드 참조
💬 테스터 MCP 클라이언트를 사용하여 채팅과 같은 UI를 사용하여 MCP 서버와 상호 작용할 수도 있습니다.
🎯 Apify MCP 서버는 무슨 역할을 하나요?
MCP 서버 액터를 사용하면 AI 어시스턴트가 모든 Apify 액터를 특정 작업을 수행하는 도구로 사용할 수 있습니다. 예를 들어 다음과 같은 작업이 가능합니다.
Facebook 게시물 스크래퍼를 사용하여 여러 페이지/프로필의 Facebook 게시물에서 데이터를 추출합니다.
Google Maps 이메일 추출기를 사용하여 Google Maps 연락처 세부 정보 추출
Google 검색 결과 스크래퍼를 사용하여 Google 검색 엔진 결과 페이지(SERP)를 스크래핑합니다.
Instagram Scraper를 사용하여 Instagram 게시물, 프로필, 장소, 사진 및 댓글을 스크래핑하세요.
RAG 웹 브라우저를 사용하여 웹을 검색하고 상위 N개 URL을 스크래핑하여 해당 콘텐츠를 반환합니다.
MCP 클라이언트
Apify MCP 서버와 상호 작용하려면 다음과 같은 MCP 클라이언트를 사용할 수 있습니다.
Claude Desktop (Stdio만 지원)
Visual Studio Code (Stdio 및 SSE 지원)
LibreChat (Stdio 및 SSE 지원, 그러나 Authorization 헤더 없음)
Apify Tester MCP 클라이언트 (Authorization 헤더를 통한 SSE 지원)
https://modelcontextprotocol.io/clients 의 다른 클라이언트
https://glama.ai/mcp/clients 에서 더 많은 고객을 만나보세요
Actors를 MCP 서버와 통합한 경우 다음 질문을 할 수 있습니다.
"웹에서 검색하여 AI 에이전트에 대한 최근 동향을 요약하세요"
"샌프란시스코 최고의 이탈리아 레스토랑 10곳을 찾아보세요"
"더 록의 인스타그램 프로필을 찾아 분석하세요"
"소스 URL을 사용하여 모델 컨텍스트 프로토콜을 사용하는 방법에 대한 단계별 가이드 제공"
"어떤 Apify Actor를 사용할 수 있나요?"
다음 이미지는 Apify MCP 서버가 Apify 플랫폼 및 AI 클라이언트와 상호 작용하는 방식을 보여줍니다.

MCP 테스터 클라이언트를 사용하면 액터를 동적으로 로드할 수 있지만, 다른 MCP 클라이언트에서는 아직 지원되지 않습니다. 또한 더 많은 기능을 추가할 계획입니다. 자세한 내용은 로드맵을 참조하세요.
🔄 모델 컨텍스트 프로토콜이란 무엇인가요?
모델 컨텍스트 프로토콜(MCP)은 Claude Desktop과 같은 AI 애플리케이션(및 AI 에이전트)이 외부 도구 및 데이터 소스에 연결할 수 있도록 합니다. MCP는 AI 애플리케이션, AI 에이전트, 로컬 또는 원격 리소스 간의 안전하고 제어된 상호작용을 가능하게 하는 개방형 프로토콜입니다.
자세한 내용은 Model Context Protocol 웹사이트나 블로그 게시물 MCP란 무엇이고 왜 중요한가요?를 참조하세요.
🤖 MCP 서버는 AI 에이전트와 어떤 관련이 있나요?
Apify MCP 서버는 MCP 프로토콜을 통해 Apify의 Actor를 노출하여 MCP 프로토콜을 구현하는 AI 에이전트나 프레임워크가 모든 Apify Actor에 액세스하여 데이터 추출, 웹 검색 및 기타 작업을 위한 도구로 사용할 수 있도록 합니다.
AI 에이전트에 대해 자세히 알아보려면 블로그 게시물 " AI 에이전트란 무엇인가?"를 참조하시고 Apify에서 엄선한 AI 에이전트 컬렉션을 살펴보세요. Apify에서 나만의 AI 에이전트를 구축하고 수익을 창출하고 싶으신가요? Apify 플랫폼에서 AI 에이전트를 생성, 게시 및 수익화하는 단계별 가이드를 확인해 보세요.
🧱 구성 요소
도구
배우들
모든 Apify Actor를 도구로 사용할 수 있습니다. 기본적으로 서버는 아래 지정된 Actor로 미리 구성되어 있지만, Actor 입력을 제공하여 이를 재정의할 수 있습니다.
지엑스피1
MCP 서버는 Actor 입력 스키마를 로드하고 Actor에 해당하는 MCP 도구를 생성합니다. RAG 웹 브라우저 의 입력 스키마 예시를 참조하세요.
도구 이름은 항상 apify/rag-web-browser 와 같이 전체 Actor 이름이어야 합니다. MCP 도구의 인수는 Actor의 입력 매개변수를 나타냅니다. 예를 들어 apify/rag-web-browser Actor의 경우 인수는 다음과 같습니다.
{
"query": "restaurants in San Francisco",
"maxResults": 3
}입력 매개변수나 호출할 Actor를 지정할 필요가 없습니다. 모든 것은 LLM에서 관리합니다. 도구가 호출되면 LLM이 자동으로 Actor에 인수를 전달합니다. 사용 가능한 인수 목록은 해당 Actor의 설명서를 참조하세요.
도우미 도구
서버는 사용 가능한 액터를 발견하고 해당 세부 정보를 검색하기 위한 일련의 도우미 도구를 제공합니다.
get-actor-details: 특정 Actor에 대한 설명서, 입력 스키마 및 세부 정보를 검색합니다.discover-actors: 키워드를 사용하여 관련 Actor를 검색하고 해당 세부 정보를 반환합니다.
사용 가능한 도구 목록을 관리하는 도구도 있습니다. 하지만 도구를 동적으로 추가하고 제거하려면 MCP 클라이언트가 도구 목록을 업데이트할 수 있는 기능( ToolListChangedNotificationSchema 핸들)이 필요하지만, 이는 일반적으로 지원되지 않습니다.
Apify Tester MCP Client Actor를 사용하여 이 기능을 사용해 볼 수 있습니다. 활성화하려면 enableAddingActors 매개변수를 설정하세요.
add-actor-as-tool: 실행하지 않고 사용 가능한 도구 목록에 Actor를 이름으로 추가합니다. 나중에 실행하려면 사용자 동의가 필요합니다.remove-actor-from-tool: 더 이상 필요하지 않은 Actor를 사용 가능한 도구 목록에서 제거합니다.
Related MCP server: AXE Fleet MCP Server
프롬프트 및 리소스
서버는 리소스와 프롬프트를 제공하지 않습니다. 향후 Apify의 데이터셋 과 키-값 저장소를 리소스로 추가할 계획입니다.
⚙️ 사용법
Apify MCP 서버는 두 가지 방법으로 사용할 수 있습니다. Apify 플랫폼에서 실행되는 Apify Actor로 사용하거나 , 사용자의 컴퓨터에서 실행되는 로컬 서버 로 사용할 수 있습니다.
🇦 MCP 서버 액터
대기 웹 서버
Actor는 요청을 수신하고 처리하는 HTTP 웹 서버와 함께 대기 모드 에서 실행됩니다.
기본 Actors로 서버를 시작하려면 다음 URL로 Apify API 토큰 과 함께 HTTP GET 요청을 보내세요.
https://actors-mcp-server.apify.actor?token=<APIFY_TOKEN>다른 액터 세트로 MCP 서버를 시작할 수도 있습니다. 이렇게 하려면 작업을 생성하고 사용할 액터 목록을 지정하세요.
그런 다음, 선택한 액터로 대기 모드에서 작업을 실행합니다.
https://USERNAME--actors-mcp-server-task.apify.actor?token=<APIFY_TOKEN>사용 가능한 모든 Actor 목록은 Apify Store 에서 확인할 수 있습니다.
💬 SSE를 통해 MCP 서버와 상호 작용
서버가 실행되면 SSE(Server-Sent Events)를 통해 서버로 메시지를 보내고 응답을 받을 수 있습니다. 가장 쉬운 방법은 Apify에서 Tester MCP Client를 사용하는 것입니다.
Claude Desktop은 현재 SSE를 지원하지 않지만, Stdio 전송과 함께 사용할 수 있습니다. 자세한 내용은 로컬 호스트의 MCP 서버를 참조하세요. 참고: Claude Desktop 무료 버전은 서버와의 간헐적인 연결 문제가 발생할 수 있습니다.
클라이언트 설정에서 서버 구성을 제공해야 합니다.
{
"mcpServers": {
"apify": {
"type": "sse",
"url": "https://actors-mcp-server.apify.actor/sse",
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}또는 clientSse.ts 스크립트를 사용하거나 curl </> 명령을 사용하여 서버를 테스트할 수 있습니다.
다음 URL로 GET 요청을 보내 SSE(Server-Sent-Events)를 시작합니다.
curl https://actors-mcp-server.apify.actor/sse?token=<APIFY_TOKEN>서버는
sessionId로 응답하는데, 이를 사용하여 서버로 메시지를 보낼 수 있습니다.event: endpoint data: /message?sessionId=a1bsessionId사용하여 POST 요청을 만들어 서버에 메시지를 보냅니다.curl -X POST "https://actors-mcp-server.apify.actor/message?token=<APIFY_TOKEN>&session_id=a1b" -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "arguments": { "searchStringsArray": ["restaurants in San Francisco"], "maxCrawledPlacesPerSearch": 3 }, "name": "lukaskrivka/google-maps-with-contact-details" } }'MCP 서버는 제공된 인수를 입력 매개변수로 사용하여 Actor
lukaskrivka/google-maps-with-contact-details시작합니다. 이 POST 요청에 대해 서버는 다음과 같이 응답합니다.Accepted응답을 수신합니다. 서버는 제공된 쿼리 매개변수를 사용하여 지정된 Actor를 도구로 호출하고 SSE를 통해 클라이언트로 응답을 스트리밍합니다. 응답은 JSON 텍스트로 반환됩니다.
event: message data: {"result":{"content":[{"type":"text","text":"{\"searchString\":\"restaurants in San Francisco\",\"rank\":1,\"title\":\"Gary Danko\",\"description\":\"Renowned chef Gary Danko's fixed-price menus of American cuisine ... \",\"price\":\"$100+\"...}}]}}
⾕ 로컬 호스트의 MCP 서버
Claude Desktop이나 다른 MCP 클라이언트를 사용하여 로컬 컴퓨터에서 Apify MCP 서버를 실행할 수 있습니다. Smithery를 사용하여 서버를 자동으로 설치할 수도 있습니다.
필수 조건
MacOS 또는 Windows
Claude Desktop의 최신 버전을 설치해야 합니다(또는 다른 MCP 클라이언트)
Node.js (v18 이상)
Apify API 토큰 (
APIFY_TOKEN)
node 와 npx 제대로 설치되었는지 확인하세요.
node -v
npx -v그렇지 않은 경우, Node.js를 설치하려면 이 가이드를 따르세요: Node.js와 npm 다운로드 및 설치 .
클로드 데스크탑
MCP 서버와 함께 작동하도록 Claude Desktop을 구성하려면 다음 단계를 따르세요. 자세한 내용은 Claude Desktop 사용자 가이드를 참조하거나 비디오 자습서를 시청하세요.
데스크톱용 Claude 다운로드
Windows 및 macOS에서 사용 가능합니다.
Linux 사용자의 경우 이 비공식 빌드 스크립트를 사용하여 Debian 패키지를 빌드할 수 있습니다.
Claude Desktop 앱을 열고 왼쪽 상단 메뉴 표시줄에서 개발자 모드를 활성화하세요.
이 기능을 활성화한 후 설정을 열고(왼쪽 상단 메뉴 표시줄에서도 가능) 개발자 옵션 으로 이동하면 구성 편집 버튼을 찾을 수 있습니다.
구성 파일을 열고 다음 파일을 편집하세요.
macOS의 경우:
~/Library/Application\ Support/Claude/claude_desktop_config.jsonWindows의 경우:
%APPDATA%/Claude/claude_desktop_config.jsonLinux의 경우:
~/.config/Claude/claude_desktop_config.json
{ "mcpServers": { "actors-mcp-server": { "command": "npx", "args": ["-y", "@apify/actors-mcp-server"], "env": { "APIFY_TOKEN": "your-apify-token" } } } }또는
actors인수를 사용하여 하나 이상의 Apify Actor를 선택할 수 있습니다.{ "mcpServers": { "actors-mcp-server": { "command": "npx", "args": [ "-y", "@apify/actors-mcp-server", "--actors", "lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper" ], "env": { "APIFY_TOKEN": "your-apify-token" } } } }Claude Desktop을 다시 시작하세요
Claude Desktop을 완전히 종료합니다(최소화되거나 닫힌 상태가 아닌지 확인하세요).
Claude Desktop을 다시 시작합니다.
Actors MCP 서버가 연결되었는지 확인하려면 🔌 아이콘을 찾으세요.
Claude Desktop 채팅을 열고 "어떤 Apify Actor를 사용할 수 있나요?"라고 물어보세요.

예시
Claude에게 다음과 같은 작업을 수행하도록 요청할 수 있습니다.
Find and analyze recent research papers about LLMs. Find the top 10 best Italian restaurants in San Francisco. Find and analyze the Instagram profile of The Rock.
VS 코드
한 번의 클릭으로 설치하려면 아래 설치 버튼 중 하나를 클릭하세요.
수동 설치
VS Code에서 Apify MCP 서버를 수동으로 설치할 수 있습니다. 먼저, 이 섹션 상단의 설치 버튼 중 하나를 클릭하여 원클릭으로 설치하세요.
또는 VS Code의 사용자 설정(JSON) 파일에 다음 JSON 블록을 추가합니다. Ctrl + Shift + P 를 누르고 Preferences: Open User Settings (JSON) 입력하면 됩니다.
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "apify_token",
"description": "Apify API Token",
"password": true
}
],
"servers": {
"actors-mcp-server": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server"],
"env": {
"APIFY_TOKEN": "${input:apify_token}"
}
}
}
}
}선택적으로, 작업 공간의 .vscode/mcp.json 파일에 추가할 수 있습니다. 최상위 키인 mcp {} 만 생략하면 됩니다. 이렇게 하면 다른 사용자와 구성을 공유할 수 있습니다.
로드할 Actor를 지정하려면 --actors 인수를 추가할 수 있습니다.
{
"servers": {
"actors-mcp-server": {
"command": "npx",
"args": [
"-y", "@apify/actors-mcp-server",
"--actors", "lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper"
],
"env": {
"APIFY_TOKEN": "${input:apify_token}"
}
}
}
}VS 코드
한 번의 클릭으로 설치하려면 아래 설치 버튼 중 하나를 클릭하세요.
수동 설치
VS Code에서 Apify MCP 서버를 수동으로 설치할 수 있습니다. 먼저, 이 섹션 상단의 설치 버튼 중 하나를 클릭하여 원클릭으로 설치하세요.
또는 VS Code의 사용자 설정(JSON) 파일에 다음 JSON 블록을 추가합니다. Ctrl + Shift + P 를 누르고 Preferences: Open User Settings (JSON) 입력하면 됩니다.
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "apify_token",
"description": "Apify API Token",
"password": true
}
],
"servers": {
"actors-mcp-server": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server"],
"env": {
"APIFY_TOKEN": "${input:apify_token}"
}
}
}
}
}선택적으로, 작업 공간의 .vscode/mcp.json 파일에 추가할 수 있습니다. 최상위 키인 mcp {} 만 생략하면 됩니다. 이렇게 하면 다른 사용자와 구성을 공유할 수 있습니다.
로드할 Actor를 지정하려면 --actors 인수를 추가할 수 있습니다.
{
"servers": {
"actors-mcp-server": {
"command": "npx",
"args": [
"-y", "@apify/actors-mcp-server",
"--actors", "lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper"
],
"env": {
"APIFY_TOKEN": "${input:apify_token}"
}
}
}
}@modelcontextprotocol/inspector를 사용하여 NPM 패키지 @apify/actors-mcp-server 디버깅
서버를 디버깅하려면 MCP Inspector 도구를 사용하세요.
export APIFY_TOKEN=your-apify-token
npx @modelcontextprotocol/inspector npx -y @apify/actors-mcp-serverSmithery를 통해 설치
Smithery를 통해 Claude Desktop에 Apify Actors MCP 서버를 자동으로 설치하려면:
npx -y @smithery/cli install @apify/actors-mcp-server --client claudeStdio 클라이언트
다음 내용으로 환경 파일 .env 를 만듭니다.
APIFY_TOKEN=your-apify-tokenexamples 디렉토리에서 표준 입출력(stdio)을 통해 서버와 상호 작용하는 예제 클라이언트를 찾을 수 있습니다.
clientStdio.ts이 클라이언트 스크립트는 지정된 두 액터로 MCP 서버를 시작합니다. 그런 다음 쿼리를 사용하여apify/rag-web-browser도구를 호출하고 결과를 출력합니다. MCP 서버에 연결하고, 사용 가능한 도구를 나열하고, stdio 전송을 사용하여 특정 도구를 호출하는 방법을 보여줍니다.node dist/examples/clientStdio.js
👷🏼 개발
필수 조건
Node.js (v18 이상)
파이썬 3.9 이상
다음 내용으로 환경 파일 .env 를 만듭니다.
APIFY_TOKEN=your-apify-tokenactor-mcp-server 패키지를 빌드합니다.
npm run build로컬 클라이언트(SSE)
SSE 전송을 사용하여 서버를 테스트하려면 스크립트 examples/clientSse.ts 사용할 수 있습니다. 현재 Node.js 클라이언트는 사용자 지정 헤더를 사용하여 원격 서버에 연결하는 기능을 지원하지 않습니다. 스크립트에서 URL을 로컬 서버 URL로 변경해야 합니다.
node dist/examples/clientSse.js디버깅
MCP 서버는 표준 입출력(stdio)을 통해 작동하므로 디버깅이 어려울 수 있습니다. 최상의 디버깅 환경을 위해서는 MCP Inspector를 사용하세요.
다음 명령을 사용하여 npm 통해 MCP Inspector를 시작할 수 있습니다.
export APIFY_TOKEN=your-apify-token
npx @modelcontextprotocol/inspector node ./dist/stdio.jsInspector를 실행하면 브라우저에서 접근하여 디버깅을 시작할 수 있는 URL이 표시됩니다.
ⓘ 제한 사항 및 피드백
Actor 입력 스키마는 JSON 스키마 표준을 준수하는 동시에 대부분의 MCP 클라이언트와 호환되도록 처리됩니다. 처리 과정은 다음과 같습니다.
설명은 500자(
MAX_DESCRIPTION_LENGTH에 정의된 대로)로 잘립니다.열거형 필드는 모든 요소에 대해 최대 200자의 결합 길이로 잘립니다(
ACTOR_ENUM_MAX_LENGTH에 정의된 대로).필수 필드는 JSON 스키마를 제대로 처리하지 못할 수 있는 프레임워크와의 호환성을 위해 설명에 "필수" 접두사로 명시적으로 표시됩니다.
중첩된 속성은 프록시 구성 및 요청 목록 소스와 같은 특수한 경우에 맞게 작성되어 올바른 입력 구조를 보장합니다.
스키마에 명시적으로 정의되지 않은 경우 배열 항목 유형은 다음 우선순위에 따라 추론됩니다. 항목의 명시적 유형 > 사전 채우기 유형 > 기본값 유형 > 편집기 유형.
클라이언트가 JSON 스키마를 완벽하게 지원하지 않더라도 가시성을 보장하기 위해 속성 설명에 열거형 값과 예제가 추가되었습니다.
각 Actor의 메모리는 4GB로 제한됩니다. 무료 사용자는 8GB로 제한되며, Actors-MCP-Server 실행에는 128MB가 할당되어야 합니다.
다른 기능이 필요하거나 피드백이 있으시면 Apify 콘솔에서 문제를 제출하여 알려주세요.
🚀 로드맵 (2025년 3월)
Apify의 데이터 세트와 키-값 저장소를 리소스로 추가합니다.
디버깅을 위해 Actor 로그 및 Actor 실행과 같은 도구를 추가합니다.
🐛 문제 해결
node -v실행하여node설치되었는지 확인하세요.APIFY_TOKEN환경 변수가 설정되어 있는지 확인하세요.@apify/actors-mcp-server@latest설정하여 항상 최신 버전의 MCP 서버를 사용하세요.
📚 자세히 알아보기
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.15.3- Changed
abort-actor-run2 fields changed- added
Output schema / properties / storages / properties / datasets / requiredAdded value: +[ + "default" +] - added
Output schema / properties / storages / properties / keyValueStores / requiredAdded value: +[ + "default" +]
- Changed
call-actor2 fields changed- added
Output schema / properties / storages / properties / datasets / requiredAdded value: +[ + "default" +] - added
Output schema / properties / storages / properties / keyValueStores / requiredAdded value: +[ + "default" +]
- Changed
get-actor-run2 fields changed- added
Output schema / properties / storages / properties / datasets / requiredAdded value: +[ + "default" +] - added
Output schema / properties / storages / properties / keyValueStores / requiredAdded value: +[ + "default" +]
3 tool updates
v0.14.2- Changed
fetch-actor-details1 field changed- removed
Output schema / properties / actorInfo / properties / stats / properties / successRateRemoved value: -{ - "description": "Success rate percentage", - "type": "number" -}
- Changed
report-problem1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "reported": { + "description": "Always true; the problem report was submitted", + "type": "boolean" + } + }, + "required": [ + "reported" + ], + "type": "object" +}
- Changed
search-actors1 field changed- removed
Output schema / properties / actors / items / properties / stats / properties / successRateRemoved value: -{ - "description": "Success rate percentage", - "type": "number" -}
5 tool updates
v0.14.0- Added
abort-actor-run - Added
get-actor-run - Added
report-problem - Added
search-actors - Added
search-apify-docs
7 tool updates
v0.13.0- Removed
abort-actor-run - Removed
get-actor-run - Changed
get-dataset-items1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of items to return. Defaults to 20."New value: +"Maximum number of items to return. Default is 20."
- Changed
get-key-value-store-record1 field changed- changed
Input schema / properties / keyValueStoreId / descriptionPrevious value: -"Key-value store ID or username~store-name"New value: +"Key-value store ID or username~store-name."
- Removed
report-problem - Removed
search-actors - Removed
search-apify-docs
1 tool update
v0.11.6- Added
report-problem
2 tool updates
v0.11.5- Changed
fetch-actor-details2 fields changed- added
Output schema / properties / actorInfo / properties / pictureUrlAdded value: +{ + "description": "Actor picture URL", + "type": "string" +} - changed
Output schema / properties / actorInfo / properties / pricing / requiredPrevious value: -[ - "model", - "userTier" -]New value: +[ + "model" +]
- Changed
search-actors3 fields changed- added
Output schema / properties / actors / items / properties / pictureUrlAdded value: +{ + "description": "Actor picture URL", + "type": "string" +} - changed
Output schema / properties / actors / items / properties / pricing / requiredPrevious value: -[ - "model", - "userTier" -]New value: +[ + "model" +] - added
Output schema / properties / userTierAdded value: +{ + "description": "The user's plan tier used to resolve the per-Actor pricing shown in the results", + "enum": [ + "FREE", + "BRONZE", + "SILVER", + "GOLD", + "PLATINUM", + "DIAMOND" + ], + "type": "string" +}
3 tool updates
v0.11.4- Changed
abort-actor-run14 fields changed- added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the dataset; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / fieldsAdded value: +{ + "description": "Dataset field paths in dot notation (e.g. [\"metadata.url\"])", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / id / descriptionAdded value: +"Dataset ID" - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / inflatedBytesAdded value: +{ + "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.", + "type": "number" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / itemCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / titleAdded value: +{ + "type": "string" +} - removed
Output schema / properties / storages / properties / datasets / properties / default / properties / cleanItemCountRemoved value: -{ - "type": "number" -} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the store; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / id / descriptionAdded value: +"Key-value store ID" - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keyCountAdded value: +{ + "description": "Total number of keys (omitted when truncated)", + "type": "number" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keysAdded value: +{ + "description": "Up to 50 key names", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / titleAdded value: +{ + "type": "string" +}
- Changed
call-actor14 fields changed- added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the dataset; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / fieldsAdded value: +{ + "description": "Dataset field paths in dot notation (e.g. [\"metadata.url\"])", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / id / descriptionAdded value: +"Dataset ID" - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / inflatedBytesAdded value: +{ + "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.", + "type": "number" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / itemCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / titleAdded value: +{ + "type": "string" +} - removed
Output schema / properties / storages / properties / datasets / properties / default / properties / cleanItemCountRemoved value: -{ - "type": "number" -} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the store; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / id / descriptionAdded value: +"Key-value store ID" - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keyCountAdded value: +{ + "description": "Total number of keys (omitted when truncated)", + "type": "number" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keysAdded value: +{ + "description": "Up to 50 key names", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / titleAdded value: +{ + "type": "string" +}
- Changed
get-actor-run14 fields changed- added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the dataset; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / fieldsAdded value: +{ + "description": "Dataset field paths in dot notation (e.g. [\"metadata.url\"])", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / id / descriptionAdded value: +"Dataset ID" - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / inflatedBytesAdded value: +{ + "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.", + "type": "number" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / itemCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / additionalProperties / properties / titleAdded value: +{ + "type": "string" +} - removed
Output schema / properties / storages / properties / datasets / properties / default / properties / cleanItemCountRemoved value: -{ - "type": "number" -} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the store; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / id / descriptionAdded value: +"Key-value store ID" - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keyCountAdded value: +{ + "description": "Total number of keys (omitted when truncated)", + "type": "number" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keysAdded value: +{ + "description": "Up to 50 key names", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / storages / properties / keyValueStores / additionalProperties / properties / titleAdded value: +{ + "type": "string" +}
1 tool update
v0.11.3- Changed
abort-actor-run1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "actorId": { + "description": "Stable Apify Actor ID from the run record", + "type": "string" + }, + "actorName": { + "description": "\"username/actor-name\"", + "type": "string" + }, + "apifyConsoleUrl": { + "description": "Personalized Apify Console link to the run; present only for Console sessions", + "type": "string" + }, + "exitCode": { + "description": "Actor process exit code; populated for terminal states (especially FAILED)", + "type": "number" + }, + "finishedAt": { + "description": "ISO timestamp when the run finished (terminal states only)", + "type": "string" + }, + "nextStep": { + "description": "One primary follow-up action with identifiers interpolated", + "type": "string" + }, + "runId": { + "description": "Actor run ID", + "type": "string" + }, + "startedAt": { + "description": "ISO timestamp when the run started", + "type": "string" + }, + "stats": { + "description": "Run statistics", + "properties": { + "computeUnits": { + "type": "number" + }, + "memMaxBytes": { + "type": "number" + }, + "runTimeSecs": { + "type": "number" + } + }, + "type": "object" + }, + "status": { + "description": "Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED", + "type": "string" + }, + "statusMessage": { + "description": "Pass-through from Apify run.statusMessage", + "type": "string" + }, + "storages": { + "description": "Dataset and key-value store metadata, keyed by alias. \"default\" is always the primary entry.", + "properties": { + "datasets": { + "additionalProperties": { + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "description": "Map of dataset alias → metadata. Key \"default\" is always the run's primary dataset.", + "properties": { + "default": { + "properties": { + "apifyConsoleUrl": { + "description": "Personalized Apify Console link to the dataset; present only for Console sessions", + "type": "string" + }, + "cleanItemCount": { + "type": "number" + }, + "fields": { + "description": "Dataset field paths in dot notation (e.g. [\"metadata.url\"])", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Dataset ID", + "type": "string" + }, + "inflatedBytes": { + "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.", + "type": "number" + }, + "itemCount": { + "type": "number" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + }, + "type": "object" + }, + "keyValueStores": { + "additionalProperties": { + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "description": "Map of key-value store alias → metadata. Key \"default\" is always the run's primary store.", + "properties": { + "default": { + "properties": { + "apifyConsoleUrl": { + "description": "Personalized Apify Console link to the store; present only for Console sessions", + "type": "string" + }, + "id": { + "description": "Key-value store ID", + "type": "string" + }, + "keyCount": { + "description": "Total number of keys (omitted when truncated)", + "type": "number" + }, + "keys": { + "description": "Up to 50 key names", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "summary": { + "description": "Past-tense summary of the run state", + "type": "string" + } + }, + "required": [ + "runId", + "actorId", + "status", + "storages", + "summary", + "nextStep" + ], + "type": "object" +}
4 tool updates
v0.11.2- Changed
call-actor4 fields changed- added
Output schema / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the run; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / properties / default / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the dataset; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / properties / default / properties / inflatedBytesAdded value: +{ + "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.", + "type": "number" +} - added
Output schema / properties / storages / properties / keyValueStores / properties / default / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the store; present only for Console sessions", + "type": "string" +}
- Changed
get-actor-run4 fields changed- added
Output schema / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the run; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / properties / default / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the dataset; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / storages / properties / datasets / properties / default / properties / inflatedBytesAdded value: +{ + "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.", + "type": "number" +} - added
Output schema / properties / storages / properties / keyValueStores / properties / default / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the store; present only for Console sessions", + "type": "string" +}
- Changed
get-dataset-items4 fields changed- added
Output schema / properties / apifyConsoleUrlAdded value: +{ + "description": "Personalized Apify Console link to the dataset; present only for Console sessions", + "type": "string" +} - added
Output schema / properties / nextStepAdded value: +{ + "description": "One follow-up action with tool name", + "type": "string" +} - added
Output schema / properties / summaryAdded value: +{ + "description": "Summary of the result", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "datasetId", - "items", - "itemCount" -]New value: +[ + "datasetId", + "items", + "itemCount", + "totalItemCount", + "offset", + "limit", + "summary", + "nextStep" +]
- Changed
get-key-value-store-record1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "contentType": { + "description": "MIME type of the stored value", + "type": "string" + }, + "key": { + "description": "Record key", + "type": "string" + }, + "keyValueStoreId": { + "description": "Key-value store ID", + "type": "string" + }, + "summary": { + "description": "Summary of the result", + "type": "string" + }, + "value": { + "description": "The stored value (JSON, text, or binary)" + } + }, + "required": [ + "keyValueStoreId", + "key", + "value", + "summary" + ], + "type": "object" +}
9 tool updates
v0.10.13- First observed
abort-actor-run - First observed
call-actor - First observed
fetch-actor-details - First observed
fetch-apify-docs - First observed
get-actor-run - First observed
get-dataset-items - First observed
get-key-value-store-record - First observed
search-actors - First observed
search-apify-docs
TDQS
Scored across 10 tools
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
Related MCP Connectors
Search, extract, crawl, map, research, scrape 16 platforms, browser automation, proxy — one API key.
Apify MCP pinned to 30 Steadyfetch actors: ad, video and audio transcripts, trends, jobs, Amazon
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.
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.24,222 npmMIT
- AlicenseNot gradedqualityNot gradedmaintenanceExposes over 19,000 Apify Actors as MCP tools for web scraping, data extraction, and OSINT automation. It enables AI agents to dynamically discover and execute scrapers to collect structured data and crawl web content.MIT
- AlicenseAqualityDmaintenanceReal-time Korean web data for AI assistants — Naver Place reviews, Melon charts, Daangn/Bunjang marketplace, Naver News, Musinsa fashion rankings. 7 tools powered by Apify actors.71MIT
- AlicenseNot gradedqualityDmaintenanceEnables web scraping, browser automation, and dataset management through Apify's actor platform.MIT