Skip to main content
Glama
apify

actors-mcp-server

Official
by apify

Apify Model Context Protocol (MCP)-Server

Akteure MCP ServerSchmiedeabzeichen

Implementierung eines MCP-Servers für alle Apify-Akteure . Dieser Server ermöglicht die Interaktion mit einem oder mehreren Apify-Akteuren, die in der MCP-Serverkonfiguration definiert werden können.

Der Server kann auf zwei Arten verwendet werden:

  • 🇦 MCP Server Actor – HTTP-Server, auf den über Server-Sent Events (SSE) zugegriffen werden kann, siehe Anleitung

  • ⾕ MCP Server Stdio – Lokaler Server verfügbar über Standard-Eingabe/Ausgabe (stdio), siehe Anleitung

Sie können auch mit dem MCP-Server über eine chatähnliche Benutzeroberfläche mit 💬 Tester MCP Client interagieren.

🎯 Was macht der Apify MCP-Server?

Der MCP-Server-Akteur ermöglicht es einem KI-Assistenten, jeden Apify-Akteur als Werkzeug zur Ausführung einer bestimmten Aufgabe zu verwenden. Beispielsweise kann er:

MCP-Kunden

Zur Interaktion mit dem Apify MCP-Server können Sie MCP-Clients verwenden wie:

Wenn Sie Akteure in den MCP-Server integriert haben, können Sie Folgendes fragen:

  • „Durchsuchen Sie das Internet und fassen Sie aktuelle Trends zu KI-Agenten zusammen.“

  • „Finden Sie die 10 besten italienischen Restaurants in San Francisco“

  • "Finden und analysieren Sie das Instagram-Profil von The Rock"

  • „Stellen Sie eine Schritt-für-Schritt-Anleitung zur Verwendung des Model Context Protocol mit Quell-URLs bereit.“

  • „Welche Apify-Akteure kann ich verwenden?“

Das folgende Bild zeigt, wie der Apify MCP-Server mit der Apify-Plattform und KI-Clients interagiert:

Akteure-MCP-Server

Mit dem MCP Tester-Client können Sie Akteure dynamisch laden. Dies wird von anderen MCP-Clients jedoch noch nicht unterstützt. Wir planen außerdem, weitere Funktionen hinzuzufügen. Weitere Informationen finden Sie in der Roadmap .

🔄 Was ist das Model Context Protocol?

Das Model Context Protocol (MCP) ermöglicht KI-Anwendungen (und KI-Agenten) wie Claude Desktop die Verbindung mit externen Tools und Datenquellen. MCP ist ein offenes Protokoll, das sichere, kontrollierte Interaktionen zwischen KI-Anwendungen, KI-Agenten und lokalen oder Remote-Ressourcen ermöglicht.

Weitere Informationen finden Sie auf der Website des Model Context Protocol oder im Blogbeitrag „Was ist MCP und warum ist es wichtig?“ .

🤖 In welcher Beziehung steht der MCP-Server zu KI-Agenten?

Der Apify MCP-Server stellt die Akteure von Apify über das MCP-Protokoll bereit und ermöglicht KI-Agenten oder Frameworks, die das MCP-Protokoll implementieren, den Zugriff auf alle Apify-Akteure als Tools für die Datenextraktion, Websuche und andere Aufgaben.

Um mehr über KI-Agenten zu erfahren, lesen Sie unseren Blogbeitrag: Was sind KI-Agenten? und stöbern Sie in der kuratierten KI-Agenten-Sammlung von Apify. Möchten Sie Ihren eigenen KI-Agenten auf Apify erstellen und monetarisieren? Sehen Sie sich unsere Schritt-für-Schritt-Anleitung zum Erstellen, Veröffentlichen und Monetarisieren von KI-Agenten auf der Apify-Plattform an.

🧱 Komponenten

Werkzeuge

Schauspieler

Jeder Apify-Akteur kann als Werkzeug verwendet werden. Standardmäßig ist der Server mit den unten angegebenen Akteuren vorkonfiguriert. Dies kann jedoch durch die Eingabe von Akteuren überschrieben werden.

'apify/instagram-scraper'
'apify/rag-web-browser'
'lukaskrivka/google-maps-with-contact-details'

Der MCP-Server lädt das Actor-Eingabeschema und erstellt die entsprechenden MCP-Tools. Siehe dieses Beispiel eines Eingabeschemas für den RAG-Webbrowser .

Der Toolname muss immer der vollständige Name des Akteurs sein, z. B. apify/rag-web-browser . Die Argumente für ein MCP-Tool stellen die Eingabeparameter des Akteurs dar. Für den Akteur apify/rag-web-browser lauten die Argumente beispielsweise:

{
  "query": "restaurants in San Francisco",
  "maxResults": 3
}

Sie müssen weder die Eingabeparameter noch den aufzurufenden Akteur angeben; alles wird von einem LLM verwaltet. Beim Aufruf eines Tools werden die Argumente automatisch vom LLM an den Akteur übergeben. Eine Liste der verfügbaren Argumente finden Sie in der Dokumentation des jeweiligen Akteurs.

Hilfswerkzeuge

Der Server bietet eine Reihe von Hilfstools zum Auffinden verfügbarer Akteure und zum Abrufen ihrer Details:

  • get-actor-details : Ruft Dokumentation, Eingabeschema und Details zu einem bestimmten Akteur ab.

  • discover-actors : Sucht anhand von Schlüsselwörtern nach relevanten Schauspielern und gibt deren Details zurück.

Es gibt auch Tools zum Verwalten der verfügbaren Toolliste. Das dynamische Hinzufügen und Entfernen von Tools erfordert jedoch, dass der MCP-Client die Toolliste aktualisieren kann (Handle ToolListChangedNotificationSchema ), was normalerweise nicht unterstützt wird.

Sie können diese Funktionalität mit dem Apify Tester MCP Client Actor testen. Um sie zu aktivieren, setzen Sie den Parameter enableAddingActors .

  • add-actor-as-tool : Fügt einen Akteur mit Namen zur Liste der verfügbaren Tools hinzu, ohne ihn auszuführen. Für die spätere Ausführung ist die Zustimmung des Benutzers erforderlich.

  • remove-actor-from-tool : Entfernt einen Akteur anhand seines Namens aus der Liste der verfügbaren Tools, wenn er nicht mehr benötigt wird.

Related MCP server: MCP Apify

Eingabeaufforderung und Ressourcen

Der Server stellt keine Ressourcen und Eingabeaufforderungen bereit. Wir planen, den Datensatz und den Schlüsselwertspeicher von Apify zukünftig als Ressourcen hinzuzufügen.

⚙️ Verwendung

Der Apify MCP-Server kann auf zwei Arten verwendet werden: als Apify-Akteur, der auf der Apify-Plattform ausgeführt wird, oder als lokaler Server, der auf Ihrem Computer ausgeführt wird.

🇦 MCP-Server-Akteur

Standby-Webserver

Der Actor läuft im Standby-Modus mit einem HTTP-Webserver, der Anfragen empfängt und verarbeitet.

Um den Server mit Standardakteuren zu starten, senden Sie eine HTTP-GET-Anfrage mit Ihrem Apify-API-Token an die folgende URL:

https://actors-mcp-server.apify.actor?token=<APIFY_TOKEN>

Es ist auch möglich, den MCP-Server mit einem anderen Satz von Akteuren zu starten. Erstellen Sie dazu eine Aufgabe und geben Sie die Liste der Akteure an, die Sie verwenden möchten.

Führen Sie dann die Aufgabe im Standby-Modus mit den ausgewählten Akteuren aus:

https://USERNAME--actors-mcp-server-task.apify.actor?token=<APIFY_TOKEN>

Eine Liste aller verfügbaren Akteure finden Sie im Apify Store .

💬 Interagieren Sie mit dem MCP-Server über SSE

Sobald der Server läuft, können Sie mit Server-Sent Events (SSE) interagieren, um Nachrichten an den Server zu senden und Antworten zu erhalten. Am einfachsten geht das mit dem Tester MCP Client auf Apify.

Claude Desktop unterstützt derzeit keine SSE-Unterstützung, kann aber mit Stdio-Transport verwendet werden. Weitere Informationen finden Sie unter MCP-Server auf einem lokalen Host . Hinweis: Bei der kostenlosen Version von Claude Desktop kann es zeitweise zu Verbindungsproblemen mit dem Server kommen.

In den Clienteinstellungen müssen Sie die Serverkonfiguration angeben:

{
    "mcpServers": {
        "apify": {
            "type": "sse",
            "url": "https://actors-mcp-server.apify.actor/sse",
            "env": {
                "APIFY_TOKEN": "your-apify-token"
            }
        }
    }
}

Alternativ können Sie das Skript clientSse.ts verwenden oder den Server mit curl </>-Befehlen testen.

  1. Initiieren Sie Server-Sent-Events (SSE), indem Sie eine GET-Anfrage an die folgende URL senden:

    curl https://actors-mcp-server.apify.actor/sse?token=<APIFY_TOKEN>

    Der Server antwortet mit einer sessionId , die Sie zum Senden von Nachrichten an den Server verwenden können:

    event: endpoint
    data: /message?sessionId=a1b
  2. Senden Sie eine Nachricht an den Server, indem Sie eine POST-Anfrage mit der sessionId stellen:

    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"
      }
    }'

    Der MCP-Server startet den Akteur lukaskrivka/google-maps-with-contact-details mit den angegebenen Argumenten als Eingabeparameter. Auf diese POST-Anfrage antwortet der Server mit:

    Accepted
  3. Empfangen Sie die Antwort. Der Server ruft den angegebenen Akteur als Tool mit den angegebenen Abfrageparametern auf und sendet die Antwort über SSE an den Client zurück. Die Antwort wird als JSON-Text zurückgegeben.

    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-Server auf einem lokalen Host

Sie können den Apify MCP-Server auf Ihrem lokalen Rechner ausführen, indem Sie ihn mit Claude Desktop oder einem anderen MCP-Client konfigurieren. Sie können den Server auch mit Smithery automatisch installieren.

Voraussetzungen

  • MacOS oder Windows

  • Die neueste Version von Claude Desktop muss installiert sein (oder ein anderer MCP-Client)

  • Node.js (v18 oder höher)

  • Apify API-Token ( APIFY_TOKEN )

Stellen Sie sicher, dass Sie den node und npx ordnungsgemäß installiert haben:

node -v
npx -v

Wenn nicht, befolgen Sie diese Anleitung zur Installation von Node.js: Herunterladen und Installieren von Node.js und npm .

Claude Desktop

So konfigurieren Sie Claude Desktop für den MCP-Server: Eine ausführliche Anleitung finden Sie im Claude Desktop-Benutzerhandbuch oder im Video-Tutorial .

  1. Claude für Desktop herunterladen

  2. Öffnen Sie die Claude Desktop-App und aktivieren Sie den Entwicklermodus in der Menüleiste oben links.

  3. Öffnen Sie nach der Aktivierung die Einstellungen (ebenfalls über die Menüleiste oben links) und navigieren Sie zu den Entwickleroptionen , wo Sie die Schaltfläche „Konfiguration bearbeiten“ finden.

  4. Öffnen Sie die Konfigurationsdatei und bearbeiten Sie die folgende Datei:

    • Unter macOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json

    • Unter Windows: %APPDATA%/Claude/claude_desktop_config.json

    • Unter Linux: ~/.config/Claude/claude_desktop_config.json

    {
     "mcpServers": {
       "actors-mcp-server": {
         "command": "npx",
         "args": ["-y", "@apify/actors-mcp-server"],
         "env": {
            "APIFY_TOKEN": "your-apify-token"
         }
       }
     }
    }

    Alternativ können Sie das Argument actors verwenden, um einen oder mehrere Apify-Akteure auszuwählen:

    {
    "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"
        }
      }
    }
    }
  5. Starten Sie Claude Desktop neu

    • Beenden Sie Claude Desktop vollständig (stellen Sie sicher, dass es nicht nur minimiert oder geschlossen ist).

    • Starten Sie Claude Desktop neu.

    • Suchen Sie nach dem Symbol 🔌, um zu bestätigen, dass der Actors MCP-Server verbunden ist.

  6. Öffnen Sie den Claude Desktop-Chat und fragen Sie: „Welche Apify-Akteure kann ich verwenden?“

    Claude-Desktop-mit-Actors-MCP-Server

  7. Beispiele

    Sie können Claude bitten, Aufgaben auszuführen, beispielsweise:

    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 Code

Klicken Sie für die Ein-Klick-Installation auf eine der folgenden Installationsschaltflächen:

Mit NPX in VS Code installieren Installation mit NPX in VS Code Insiders

Manuelle Installation

Sie können den Apify MCP-Server manuell in VS Code installieren. Klicken Sie zunächst auf eine der Installationsschaltflächen oben in diesem Abschnitt, um die Installation mit einem Klick durchzuführen.

Alternativ können Sie den folgenden JSON-Block zu Ihrer Benutzereinstellungsdatei (JSON) in VS Code hinzufügen. Drücken Sie dazu Ctrl + Shift + P und geben Sie Preferences: Open User Settings (JSON) ein.

{
  "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}"
        }
      }
    }
  }
}

Optional können Sie es einer Datei namens .vscode/mcp.json in Ihrem Arbeitsbereich hinzufügen – lassen Sie einfach den mcp {} der obersten Ebene weg. Dadurch können Sie die Konfiguration mit anderen teilen.

Wenn Sie angeben möchten, welche Akteure geladen werden sollen, können Sie das Argument --actors hinzufügen:

{
  "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 Code

Klicken Sie für die Ein-Klick-Installation auf eine der folgenden Installationsschaltflächen:

Mit NPX in VS Code installieren Installation mit NPX in VS Code Insiders

Manuelle Installation

Sie können den Apify MCP-Server manuell in VS Code installieren. Klicken Sie zunächst auf eine der Installationsschaltflächen oben in diesem Abschnitt, um die Installation mit einem Klick durchzuführen.

Alternativ können Sie den folgenden JSON-Block zu Ihrer Benutzereinstellungsdatei (JSON) in VS Code hinzufügen. Drücken Sie dazu Ctrl + Shift + P und geben Sie Preferences: Open User Settings (JSON) ein.

{
  "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}"
        }
      }
    }
  }
}

Optional können Sie es einer Datei namens .vscode/mcp.json in Ihrem Arbeitsbereich hinzufügen – lassen Sie einfach den mcp {} der obersten Ebene weg. Dadurch können Sie die Konfiguration mit anderen teilen.

Wenn Sie angeben möchten, welche Akteure geladen werden sollen, können Sie das Argument --actors hinzufügen:

{
  "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}"
      }
    }
  }
}

Debuggen des NPM-Pakets @apify/actors-mcp-server mit @modelcontextprotocol/inspector

Verwenden Sie zum Debuggen des Servers das MCP Inspector- Tool:

export APIFY_TOKEN=your-apify-token
npx @modelcontextprotocol/inspector npx -y @apify/actors-mcp-server

Installation über Smithery

So installieren Sie den Apify Actors MCP Server für Claude Desktop automatisch über Smithery :

npx -y @smithery/cli install @apify/actors-mcp-server --client claude

Stdio-Clients

Erstellen Sie eine Umgebungsdatei .env mit folgendem Inhalt:

APIFY_TOKEN=your-apify-token

Im Verzeichnis examples finden Sie einen Beispielclient zur Interaktion mit dem Server über die Standardeingabe/-ausgabe (stdio):

  • clientStdio.ts Dieses Client-Skript startet den MCP-Server mit zwei angegebenen Akteuren. Anschließend ruft es das Tool apify/rag-web-browser mit einer Abfrage auf und gibt das Ergebnis aus. Es zeigt, wie man sich mit dem MCP-Server verbindet, verfügbare Tools auflistet und ein bestimmtes Tool per stdio-Transport aufruft.

    node dist/examples/clientStdio.js

👷🏼 Entwicklung

Voraussetzungen

  • Node.js (v18 oder höher)

  • Python 3.9 oder höher

Erstellen Sie eine Umgebungsdatei .env mit folgendem Inhalt:

APIFY_TOKEN=your-apify-token

Erstellen Sie das Actor-MCP-Server-Paket:

npm run build

Lokaler Client (SSE)

Um den Server mit dem SSE-Transport zu testen, können Sie das Skript examples/clientSse.ts verwenden: Derzeit unterstützt der Node.js-Client keine Verbindung zu einem Remote-Server mit benutzerdefinierten Headern. Sie müssen die URL im Skript in die URL Ihres lokalen Servers ändern.

node dist/examples/clientSse.js

Debuggen

Da MCP-Server über Standard-Ein-/Ausgabe (stdio) arbeiten, kann das Debuggen eine Herausforderung darstellen. Für optimale Ergebnisse beim Debuggen verwenden Sie den MCP Inspector .

Sie können den MCP Inspector über npm mit diesem Befehl starten:

export APIFY_TOKEN=your-apify-token
npx @modelcontextprotocol/inspector node ./dist/stdio.js

Beim Start zeigt der Inspector eine URL an, auf die Sie in Ihrem Browser zugreifen können, um mit dem Debuggen zu beginnen.

ⓘ Einschränkungen und Feedback

Das Actor-Eingabeschema wird so verarbeitet, dass es mit den meisten MCP-Clients kompatibel ist und gleichzeitig den JSON-Schema- Standards entspricht. Die Verarbeitung umfasst:

  • Beschreibungen werden auf 500 Zeichen gekürzt (wie in MAX_DESCRIPTION_LENGTH definiert).

  • Enumerationsfelder werden für alle Elemente auf eine maximale Gesamtlänge von 200 Zeichen gekürzt (wie in ACTOR_ENUM_MAX_LENGTH definiert).

  • Erforderliche Felder sind in ihren Beschreibungen ausdrücklich mit dem Präfix „ERFORDERLICH“ gekennzeichnet, um die Kompatibilität mit Frameworks sicherzustellen, die das JSON-Schema möglicherweise nicht richtig verarbeiten.

  • Für Sonderfälle wie die Proxy-Konfiguration und Anforderungslistenquellen werden verschachtelte Eigenschaften erstellt, um eine korrekte Eingabestruktur sicherzustellen.

  • Array-Elementtypen werden abgeleitet, wenn sie nicht explizit im Schema definiert sind. Dabei wird eine Prioritätsreihenfolge verwendet: expliziter Typ in Elementen > Vorfülltyp > Standardwerttyp > Editortyp.

  • Den Eigenschaftsbeschreibungen werden Enumerationswerte und Beispiele hinzugefügt, um die Sichtbarkeit sicherzustellen, auch wenn der Client das JSON-Schema nicht vollständig unterstützt.

Der Arbeitsspeicher für jeden Akteur ist auf 4 GB begrenzt. Für kostenlose Benutzer gilt ein Limit von 8 GB. Für die Ausführung Actors-MCP-Server müssen 128 MB zugewiesen werden.

Wenn Sie andere Funktionen benötigen oder Feedback haben, senden Sie ein Problem in der Apify-Konsole, um uns dies mitzuteilen.

🚀 Roadmap (März 2025)

  • Fügen Sie den Datensatz und den Schlüssel-Wert-Speicher von Apify als Ressourcen hinzu.

  • Fügen Sie Tools wie Actor-Protokolle und Actor-Läufe zum Debuggen hinzu.

🐛 Fehlerbehebung

  • Stellen Sie sicher, dass der node installiert ist, indem Sie node -v ausführen.

  • Stellen Sie sicher, dass Sie die Umgebungsvariable APIFY_TOKEN festgelegt haben

  • Verwenden Sie immer die neueste Version des MCP-Servers, indem Sie @apify/actors-mcp-server@latest festlegen

📚 Mehr erfahren

Available Tools

10 tools
abort-actor-runAbort Actor runA
DestructiveIdempotent
Inspect

Abort an Actor run that is currently starting or running. For runs with status SUCCEEDED, FAILED, ABORTING, ABORTED, or TIMED-OUT, this call has no effect. The results will include the updated run details after the abort request.

USAGE:

  • Use when you need to stop a run that is taking too long or misconfigured.

USAGE EXAMPLES:

  • user_input: Abort run y2h7sK3Wc

  • user_input: Gracefully abort run y2h7sK3Wc

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

Output Schema

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

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

Call any Actor from the Apify Store.

WORKFLOW:

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

  2. Call this tool with the actor name and proper input based on the schema

If the actor name is not in "username/name" format, use search-actors to resolve the correct Actor first.

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:

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

  2. Generic call-actor tool (call-actor): Use this when a dedicated tool is not available or when you want to run any Actor dynamically. This tool is especially useful if you do not want to add specific tools or your client does not support dynamic tool registration.

USAGE:

  • Always use dedicated tools when available

  • Use the generic call-actor tool only if a dedicated tool does not exist for your Actor.

  • Use waitSecs (0–45) to control how long to wait. Default 30s returns results for fast actors. Use waitSecs: 0 to start and return immediately for long-running actors.

EXAMPLES:

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

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYesThe 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").
inputYesThe input JSON to pass to the Actor. Required.
waitSecsNoSeconds to wait for completion (0–45, default 30). Returns with current run status if not terminal within waitSecs.
callOptionsNoOptional run config: memory (MB), timeout (s), build, maxItems (pay-per-result cap), maxTotalChargeUsd (pay-per-event cap).

Output Schema

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

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

Get detailed information about an Actor by its ID or full name (format: "username/name", e.g., "apify/rag-web-browser").

Requires the exact ID or full name — do not construct a plausible-looking name and call this tool with it. If you only have a description, a partial name, or a name you have not seen in this conversation, find it with search-actors first.

Use 'output' 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?

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
readmeNoActor README summary when available, otherwise the full README documentation.
mcpToolsNoMarkdown listing of MCP tools exposed by the Actor (only present when `output.mcpTools` is requested).
actorInfoNo
inputSchemaNoActor input schema.
outputSchemaNoOutput schema inferred from successful runs.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

Fetch the full content of an Apify or Crawlee documentation page by its URL. Use this after finding a relevant page with the search-apify-docs tool.

USAGE:

  • Use when you need the complete content of a specific docs page for detailed answers.

USAGE EXAMPLES:

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

Output Schema

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

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is clear. The description adds that it fetches 'full content', which is consistent but does not disclose any additional behavioral traits (e.g., rate limits, auth). Since annotations carry the burden, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two main sentences plus a usage section and examples. It is well-structured and front-loaded, containing no unnecessary words. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

Given the tool has a single parameter, an output schema (so return values are documented), and good annotations, the description is adequately complete. It explains when to use and provides examples. A slight improvement could be mentioning expected behavior for invalid URLs, but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter 'url' with a description, and schema description coverage is 100%. The tool description does not add additional semantic meaning beyond what the schema already provides, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool fetches the full content of an Apify or Crawlee documentation page by URL. The verb 'fetch' combined with the specific resource 'docs page' provides a clear purpose, and it distinguishes from sibling tool 'search-apify-docs' which searches rather than fetches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this after finding a relevant page with 'search-apify-docs', providing context for when to use. It also includes usage examples. However, it does not explicitly state when not to use the tool, which would be helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-actor-runGet Actor runA
Read-onlyIdempotent
Inspect

Get detailed information about a specific Actor run.

Returns run result: status, storages (datasets/keyValueStores alias map), stats, summary, nextStep.

  • summary describes the past (e.g. "SUCCEEDED in 22s. 47 items; 3 fields available.").

  • nextStep prescribes one primary follow-up action with identifiers interpolated (e.g. "Use get-dataset-items with datasetId=...").

  • waitSecs (0–45, default 30) waits up to that many seconds for terminal status before returning.

USAGE:

  • Use to check the status of a run started by any Actor-running tool.

  • Pass waitSecs > 0 to block until terminal (or until the cap elapses).

USAGE EXAMPLES:

  • user_input: Show details of run y2h7sK3Wc

  • user_input: Wait for run y2h7sK3Wc to finish

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesThe ID of the Actor run.
waitSecsNoMaximum seconds to wait for the run to reach a terminal state (SUCCEEDED, FAILED, ABORTED, TIMED-OUT). 0 returns immediately with the current status. Cap: 45. Default: 30.

Output Schema

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

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

Get items (rows) from a dataset — the output/results produced by an Actor run. Returns the rows themselves, not dataset metadata, counts, or a schema. When the user provides a datasetId and asks to retrieve results, output, data, or rows, call this tool directly. Default limit is 20. Use clean=true to skip empty items and hidden fields.

USAGE:

  • Use when you need to read data from a dataset (all items or only selected fields).

USAGE EXAMPLES:

  • user_input: Retrieve results from dataset abc123

  • user_input: Get only metadata.url and title from dataset username~my-dataset

ParametersJSON Schema
NameRequiredDescriptionDefault
descNoIf true, results are returned in reverse order (newest to oldest).
omitNoComma-separated list of fields to exclude from results.
cleanNoIf true, returns only non-empty items and skips hidden fields (starting with #). Shortcut for skipHidden=true and skipEmpty=true.
limitNoMaximum number of items to return. Default is 20.
fieldsNoComma-separated list of fields to include in results. Fields in output are sorted as specified. Use dot notation for nested objects (e.g. "metadata.url"); the server auto-flattens parent prefixes.
offsetNoNumber of items to skip at the start. Default is 0.
flattenNoComma-separated list of fields to flatten (e.g. flatten="metadata" turns {"metadata":{"url":"x"}} into {"metadata.url":"x"}). Normally derived automatically from dot-notation in `fields`; specify only as a diagnostic override.
datasetIdYesDataset ID or username~dataset-name.

Output Schema

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

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

Get the value stored under a specific key in a key-value store — a single record, not a listing of all keys. Requires the exact key name. The response preserves the original Content-Encoding; most clients handle decompression automatically.

USAGE:

  • Use when you need to retrieve a specific record (JSON, text, or binary) from a store.

USAGE EXAMPLES:

  • user_input: Get record INPUT from store abc123

  • user_input: Get record data.json from store username~my-store

ParametersJSON Schema
NameRequiredDescriptionDefault
recordKeyYesKey of the record to retrieve.
keyValueStoreIdYesKey-value store ID or username~store-name.

Output Schema

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

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportedYesAlways true; the problem report was submitted

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

Search the Apify Store to FIND and DISCOVER what scraping tools/Actors exist for specific platforms or use cases. This tool provides INFORMATION about available Actors - it does NOT retrieve actual data or run any scraping tasks.

Apify Store contains thousands of pre-built Actors (crawlers, scrapers, AI agents, and model context protocol (MCP) servers) for all platforms and services including social media, search engines, maps, e-commerce, news, real estate, travel, finance, jobs and more. 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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoThe maximum number of Actors to return (max = 10, default = 5).
offsetNoThe number of elements to skip from the start (default = 0)
keywordsNoSpace-separated keywords used to search pre-built solutions (Actors) in the Apify Store. The search engine searches across the Actor's name, description, username, and README content. Pass empty string ("") whenever the user has NOT named a specific platform (Instagram, Amazon, Google Maps) or a specific data type (posts, products, weather, news). Empty keywords return Actors in the Apify Store's default sort order, which is popularity in practice (most-used Actors first). Do NOT use ranking words ("top", "best", "popular") or bare task words ("scraper", "crawler", "extractor") as keyword values — they are not Actor names and produce noisy matches against README content. Otherwise, follow these rules: - Use 1-3 simple keyword terms maximum (e.g., "Instagram posts", "Twitter", "Amazon products") - Actors are named using platform or service name together with the type of data or task they perform - The most effective keywords are specific platform names (Instagram, Twitter, TikTok) and specific data types (posts, products, profiles, weather, news, reviews, comments) - If a user asks about "fetching Instagram posts", use "Instagram posts" as keywords - The goal is to find Actors that specifically handle the platform and data type the user mentioned Examples: ✅ "Instagram posts", "Twitter", "Amazon products", "TikTok comments" ✅ "" (empty) — returns the most popular Actors store-wide ❌ "Instagram posts profiles comments hashtags reels stories followers..." (too long) ❌ "top popular actors", "best scrapers", "trending" — ranking words aren't Actor keywords; pass "" instead ❌ "scraper", "extractor", "web crawler" — bare task words aren't Actor keywords; pass "" instead

Output Schema

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

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

Search Apify and Crawlee documentation using full-text search. Do not also search the Apify Store unless the user asks to find Actors.

You must explicitly select which documentation source to search using the docSource parameter:

• docSource="apify" - Apify: Apify Platform documentation including: Platform features, SDKs (JS, Python), CLI, REST API, Academy (web scraping fundamentals), Actor development and deployment

• docSource="crawlee-js" - Crawlee (JavaScript): Crawlee is a web scraping library for JavaScript. It handles blocking, crawling, proxies, and browsers for you.

• docSource="crawlee-py" - Crawlee (Python): Crawlee is a web scraping library for Python. It handles blocking, crawling, proxies, and browsers for you.

The results will include the URL of the documentation page (which may include an anchor), and a limited piece of content that matches the search query.

Fetch the full content of the document using the fetch-apify-docs tool by providing the URL.

When results contain both platform documentation (docs.apify.com/platform) and Academy content (docs.apify.com/academy) on the same topic, prefer the platform documentation.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of search results to return. Defaults to 5. Maximum is 20. You can increase this limit if you need more results, but keep in mind that the search results are limited to the most relevant pages.
queryYesAlgolia full-text search query to find relevant documentation pages. Use only keywords, do not use full sentences or questions. For example, "standby actor" will return documentation pages that contain the words "standby" and "actor".
offsetNoOffset for the search results. Defaults to 0. Use this to paginate through the search results. For example, if you want to get the next 5 results, set the offset to 5 and limit to 5.
docSourceNoDocumentation source to search. Defaults to "apify". • "apify" - Apify • "crawlee-js" - Crawlee (JavaScript) • "crawlee-py" - Crawlee (Python)apify

Output Schema

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

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the search returns only a limited content snippet and that full content must be fetched separately, which is important behavioral information. It also notes that it will not search the Apify Store, a limitation not present in annotations. While annotations already cover read-only and idempotent nature, the description adds useful context about output and limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise, using bullet points for docSource and separating guidance for fetching full content. It has some redundancy in repeating the docSource details but is overall well-structured and not excessively verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

The description provides sufficient context given the tool's simplicity, including output expectations (URL and content snippet) and a mention of the fetch-apify-docs tool for full content. It covers the main usage scenarios and does not leave major gaps in understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides comprehensive descriptions for all parameters, including the query, limit, offset, and docSource with enums. The tool description reiterates the docSource options but adds little additional semantic meaning beyond the schema. Since coverage is 100%, the parameter semantics are well-covered by the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's function: 'Search Apify and Crawlee documentation using full-text search.' It also distinguishes the scope from the Apify Store and provides a clear verb-object structure. This effectively communicates the tool's purpose and differentiates it from sibling tools like search-actors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage instructions, such as 'You must explicitly select which documentation source to search using the docSource parameter' and recommends using fetch-apify-docs for retrieving full content. It also advises against searching the Apify Store unless specifically asked, guiding when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv0.15.3
    • Changedabort-actor-run2 fields changed
      • addedOutput schema / properties / storages / properties / datasets / required
        Added value: +[
        +  "default"
        +]
      • addedOutput schema / properties / storages / properties / keyValueStores / required
        Added value: +[
        +  "default"
        +]
    • Changedcall-actor2 fields changed
      • addedOutput schema / properties / storages / properties / datasets / required
        Added value: +[
        +  "default"
        +]
      • addedOutput schema / properties / storages / properties / keyValueStores / required
        Added value: +[
        +  "default"
        +]
    • Changedget-actor-run2 fields changed
      • addedOutput schema / properties / storages / properties / datasets / required
        Added value: +[
        +  "default"
        +]
      • addedOutput schema / properties / storages / properties / keyValueStores / required
        Added value: +[
        +  "default"
        +]
  2. 3 tool updatesv0.14.2
    • Changedfetch-actor-details1 field changed
      • removedOutput schema / properties / actorInfo / properties / stats / properties / successRate
        Removed value: -{
        -  "description": "Success rate percentage",
        -  "type": "number"
        -}
    • Changedreport-problem1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "reported": {
        +      "description": "Always true; the problem report was submitted",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "reported"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch-actors1 field changed
      • removedOutput schema / properties / actors / items / properties / stats / properties / successRate
        Removed value: -{
        -  "description": "Success rate percentage",
        -  "type": "number"
        -}
  3. 5 tool updatesv0.14.0
    • Addedabort-actor-run
    • Addedget-actor-run
    • Addedreport-problem
    • Addedsearch-actors
    • Addedsearch-apify-docs
  4. 7 tool updatesv0.13.0
    • Removedabort-actor-run
    • Removedget-actor-run
    • Changedget-dataset-items1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of items to return. Defaults to 20."New value: +"Maximum number of items to return. Default is 20."
    • Changedget-key-value-store-record1 field changed
      • changedInput schema / properties / keyValueStoreId / description
        Previous value: -"Key-value store ID or username~store-name"New value: +"Key-value store ID or username~store-name."
    • Removedreport-problem
    • Removedsearch-actors
    • Removedsearch-apify-docs
  5. 1 tool updatev0.11.6
    • Addedreport-problem
  6. 2 tool updatesv0.11.5
    • Changedfetch-actor-details2 fields changed
      • addedOutput schema / properties / actorInfo / properties / pictureUrl
        Added value: +{
        +  "description": "Actor picture URL",
        +  "type": "string"
        +}
      • changedOutput schema / properties / actorInfo / properties / pricing / required
        Previous value: -[
        -  "model",
        -  "userTier"
        -]New value: +[
        +  "model"
        +]
    • Changedsearch-actors3 fields changed
      • addedOutput schema / properties / actors / items / properties / pictureUrl
        Added value: +{
        +  "description": "Actor picture URL",
        +  "type": "string"
        +}
      • changedOutput schema / properties / actors / items / properties / pricing / required
        Previous value: -[
        -  "model",
        -  "userTier"
        -]New value: +[
        +  "model"
        +]
      • addedOutput schema / properties / userTier
        Added value: +{
        +  "description": "The user's plan tier used to resolve the per-Actor pricing shown in the results",
        +  "enum": [
        +    "FREE",
        +    "BRONZE",
        +    "SILVER",
        +    "GOLD",
        +    "PLATINUM",
        +    "DIAMOND"
        +  ],
        +  "type": "string"
        +}
  7. 3 tool updatesv0.11.4
    • Changedabort-actor-run14 fields changed
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the dataset; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / fields
        Added value: +{
        +  "description": "Dataset field paths in dot notation (e.g. [\"metadata.url\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / id / description
        Added value: +"Dataset ID"
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / inflatedBytes
        Added value: +{
        +  "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / itemCount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / title
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / cleanItemCount
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the store; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / id / description
        Added value: +"Key-value store ID"
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keyCount
        Added value: +{
        +  "description": "Total number of keys (omitted when truncated)",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keys
        Added value: +{
        +  "description": "Up to 50 key names",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / title
        Added value: +{
        +  "type": "string"
        +}
    • Changedcall-actor14 fields changed
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the dataset; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / fields
        Added value: +{
        +  "description": "Dataset field paths in dot notation (e.g. [\"metadata.url\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / id / description
        Added value: +"Dataset ID"
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / inflatedBytes
        Added value: +{
        +  "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / itemCount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / title
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / cleanItemCount
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the store; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / id / description
        Added value: +"Key-value store ID"
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keyCount
        Added value: +{
        +  "description": "Total number of keys (omitted when truncated)",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keys
        Added value: +{
        +  "description": "Up to 50 key names",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / title
        Added value: +{
        +  "type": "string"
        +}
    • Changedget-actor-run14 fields changed
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the dataset; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / fields
        Added value: +{
        +  "description": "Dataset field paths in dot notation (e.g. [\"metadata.url\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / id / description
        Added value: +"Dataset ID"
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / inflatedBytes
        Added value: +{
        +  "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / itemCount
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / title
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / cleanItemCount
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the store; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / id / description
        Added value: +"Key-value store ID"
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keyCount
        Added value: +{
        +  "description": "Total number of keys (omitted when truncated)",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / keys
        Added value: +{
        +  "description": "Up to 50 key names",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / name
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / title
        Added value: +{
        +  "type": "string"
        +}
  8. 1 tool updatev0.11.3
    • Changedabort-actor-run1 field changed
      • changedOutput 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"
        +}
  9. 4 tool updatesv0.11.2
    • Changedcall-actor4 fields changed
      • addedOutput schema / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the run; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the dataset; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / inflatedBytes
        Added value: +{
        +  "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / properties / default / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the store; present only for Console sessions",
        +  "type": "string"
        +}
    • Changedget-actor-run4 fields changed
      • addedOutput schema / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the run; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the dataset; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / inflatedBytes
        Added value: +{
        +  "description": "Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / storages / properties / keyValueStores / properties / default / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the store; present only for Console sessions",
        +  "type": "string"
        +}
    • Changedget-dataset-items4 fields changed
      • addedOutput schema / properties / apifyConsoleUrl
        Added value: +{
        +  "description": "Personalized Apify Console link to the dataset; present only for Console sessions",
        +  "type": "string"
        +}
      • addedOutput schema / properties / nextStep
        Added value: +{
        +  "description": "One follow-up action with tool name",
        +  "type": "string"
        +}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "description": "Summary of the result",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "datasetId",
        -  "items",
        -  "itemCount"
        -]New value: +[
        +  "datasetId",
        +  "items",
        +  "itemCount",
        +  "totalItemCount",
        +  "offset",
        +  "limit",
        +  "summary",
        +  "nextStep"
        +]
    • Changedget-key-value-store-record1 field changed
      • changedOutput 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"
        +}
  10. 9 tool updatesv0.10.13
    • First observedabort-actor-run
    • First observedcall-actor
    • First observedfetch-actor-details
    • First observedfetch-apify-docs
    • First observedget-actor-run
    • First observedget-dataset-items
    • First observedget-key-value-store-record
    • First observedsearch-actors
    • First observedsearch-apify-docs

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessSlow

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to thousands of Apify Actors for web scraping, data extraction, and automation tasks, with dynamic tool discovery to find and use any Actor from the Apify Store in real time.
    37,909
    MIT
  • A
    license
    B
    quality
    F
    maintenance
    Enables AI assistants to interact with the Apify platform to manage actors, monitor runs, and retrieve scraped data from datasets. It supports natural language commands for executing web scrapers, managing tasks, and accessing key-value stores.
    28
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with real-time web capabilities including live search results, markdown web scraping, business lead generation, and detailed company information. It enables agents to bypass knowledge cutoffs by accessing current web data through a monetized Apify Actor.
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Exposes over 19,000 Apify Actors as MCP tools for web scraping, data extraction, and OSINT automation. It enables AI agents to dynamically discover and execute scrapers to collect structured data and crawl web content.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/apify/apify-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server