rossai-apify-mcp
rossai-apify-mcp
MCP server for the public Apify actors published by appreciative_duct. Each tool starts an Actor run with the Apify API and returns the dataset items.
The server reads APIFY_TOKEN from the environment. That token has to be yours. Nothing in this package embeds one.
Tools
Tool | Actor |
| Sitemap URL Extractor |
| SEO Audit & AI Search Readiness |
| Google Trends Scraper (Batch, Reliable) |
| Website Screenshot Batch |
| App Reviews for iOS and Android |
| URL and PDF to Markdown |
A tool waits up to waitSeconds (default 180, maximum 300) and returns at most 100 dataset items. The response includes the run id and the Console URL when there is more to open.
Related MCP server: web-data-mcp
stdio
npm install
npm run build
APIFY_TOKEN=your_token node dist/index.jsClaude Desktop and other stdio clients can use:
{
"mcpServers": {
"rossai-apify": {
"command": "node",
"args": ["/absolute/path/to/rossai-apify-mcp/dist/index.js"],
"env": { "APIFY_TOKEN": "your_token" }
}
}
}Streamable HTTP
npm run build
APIFY_TOKEN=your_token node dist/index.js --httpThe server listens on http://127.0.0.1:8787/mcp. Set PORT to change it. GET /health returns { "ok": true }.
Zero-install Apify MCP
Apify hosts an MCP endpoint that can call these actors without this package. Your Apify token is still required by that host:
Registry files
server.json names the server io.github.rossbuilds/rossai-apify-mcp in the official MCP registry and points at the .mcpb bundle attached to the GitHub release v1.0.0. glama.json lists the maintainer. mcpb/manifest.json is the bundle manifest. The bundle asks for your token at install time. youtube-transcript-batch is not a tool here because that actor stayed private.
Source
https://github.com/rossbuilds/rossai-apify-mcp
Docker
docker build -t rossai-apify-mcp .
docker run -i --rm -e APIFY_TOKEN rossai-apify-mcpThe image runs the stdio server as the non-root node user. No token is baked in; pass APIFY_TOKEN at runtime.
Available Tools
6 toolsapp-reviews-ios-androidApp Reviews for iOS and AndroidC
Collect recent public App Store and Play reviews. Reviewer names and avatars are not returned.
| Name | Required | Description | Default |
|---|---|---|---|
| apps | Yes | App Store ids, Play package names, or store URLs. | |
| country | No | ||
| language | No | ||
| waitSeconds | No | Seconds to wait for the Apify run. Default 180. | |
| maxReviewsPerApp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden. It does add one genuinely useful disclosure — that reviewer names and avatars are stripped from results — but it omits whether this is a read-only scrape, whether it costs money or consumes Apify credits, how it handles failures or empty results, and what fields are actually returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource, with zero filler. It is efficient, though its brevity edges toward under-specification for a five-parameter scraping tool rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, no annotations, no output schema, and 40% schema coverage, the description is too thin. An agent still lacks platform-specific input formats, async/wait semantics, result shape, and the meaning of half the parameters — information the structured fields do not supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%: 'country', 'language', and 'maxReviewsPerApp' have no documented meaning anywhere, and 'country'/'language' format expectations (ISO codes? names?) are ambiguous. The description compensates for none of this, adding no parameter context beyond what little the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Collect recent public App Store and Play reviews', which names both platforms covered. It does not explicitly contrast with the sibling tools, but those are obviously different domains (sitemaps, SEO audits, screenshots, PDFs), so disambiguation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives, no prerequisite information, and no mention that the 'waitSeconds' parameter and 'Apify run' wording imply a paid external actor invocation. The word 'recent' is left undefined, so an agent cannot tell what time window or volume to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google-trends-batch-scraperGoogle Trends ScraperC
Fetch interest over time, regions, and related queries for a list of keywords.
| Name | Required | Description | Default |
|---|---|---|---|
| geo | No | Country or region code, such as US. Empty is worldwide. | |
| gprop | No | ||
| category | No | ||
| keywords | Yes | ||
| timeframe | No | For example today 12-m, now 7-d, or 2024-01-01 2024-12-31. | |
| waitSeconds | No | Seconds to wait for the Apify run. Default 180. | |
| anchorKeyword | No | ||
| comparisonMode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it discloses nothing about execution: it doesn't mention that this triggers an external scraping run (hinted only by the waitSeconds parameter text mentioning an Apify run), how long runs take, what happens on partial failures, or rate limiting. An agent cannot predict cost or latency from this sentence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with zero filler and the core capability front-loaded. It is appropriately sized for what it says, though the extreme brevity is achieved by omitting information rather than by efficient structuring.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter batch scraping tool with no annotations and no output schema, this description is far too thin: it doesn't clarify the shape of the three result types it promises, nor the meaning of the comparison modes that govern how multiple keywords are handled. An agent would need to inspect the schema and guess at runtime behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, leaving gprop, category, keywords, anchorKeyword, and comparisonMode undocumented, and the description compensates for none of them. Notably, anchorKeyword and comparisonMode (chunk vs anchor) are non-obvious controls that materially change results, and the description never explains them or the 100-keyword batch cap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb ('Fetch') and names the specific data it returns (interest over time, regions, related queries) scoped to 'a list of keywords', which is clearly distinct from all five siblings (sitemap, SEO audit, screenshot, app reviews, PDF conversion). It stops short of a 5 because it doesn't reference the batch/Apify-run nature implied by the name and waitSeconds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, no prerequisites, and no mention of the batch size limits or runtime behavior that would tell an agent whether this is appropriate for a given request. The description reads as a capability statement only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo-audit-ai-search-readinessSEO Audit and AI Search ReadinessB
Score pages, or a site sampled from its sitemap, for on-page SEO and AI-search readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| maxPages | No | Pages to audit. Default 25 on the actor. | |
| startUrls | Yes | Page URLs, a homepage, or a sitemap URL. | |
| waitSeconds | No | Seconds to wait for the Apify run. Default 180. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and mostly drops it. It does not state that the tool reads pages non-destructively, that it runs a remote job the caller blocks on (the waitSeconds parameter hints at this but the description never explains it), that there is a page-count cap, or what the returned scores look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler and no redundancy. It is tight, though arguably under-specified rather than optimally concise for a tool with three parameters and no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no annotations and no output schema, the definition is minimally viable: an agent knows what is scored but not the shape of the result, whether the run is slow or blocking, or how sampling interacts with maxPages. The schema absorbs most of the parameter burden, which keeps this at an adequate rather than failing level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented and the baseline is 3. The description adds only a mild gloss by implying that a sitemap input leads to sampling a site rather than auditing every URL, but it adds no format or default details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ("Score") plus the resource ("pages, or a site sampled from its sitemap") and names the two scoring dimensions ("on-page SEO and AI-search readiness"). That is enough for an agent to know exactly what the tool produces, though it never names a sibling or explicitly distinguishes itself from the sitemap-extraction tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer it should call this when it wants SEO/AI-readiness scoring. There is no explicit when-to-use, no prerequisites, and no guidance on choosing between passing explicit page URLs versus a homepage versus a sitemap URL, which is the main decision this tool forces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemap-url-extractorSitemap URL ExtractorB
Find sitemap URLs for one or more websites and return one row per page URL.
| Name | Required | Description | Default |
|---|---|---|---|
| maxUrls | No | Stop after this many URLs. Default on the actor is high; pass a small number for a sample. | |
| startUrls | Yes | Website or sitemap URLs. | |
| waitSeconds | No | Seconds to wait for the Apify run. Default 180. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does add one useful behavioral fact — the result is one row per page URL — but says nothing about async/actor execution, what happens when a site has no sitemap, whether sitemap discovery goes through robots.txt, or truncation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the action and the return granularity are both stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter tool with full schema coverage and no output schema, the description covers purpose and return granularity. It is still thin on operational behavior — sitemap discovery method, empty-result handling, and the fact that maxUrls defaults high — which an agent would want before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself explains maxUrls (sampling cap), startUrls (website or sitemap URLs), and waitSeconds (Apify run wait). The description adds no parameter meaning beyond that, which is the expected baseline when the schema is fully documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Find sitemap URLs') and states the output shape ('one row per page URL'), which distinguishes it from all siblings in the SEO/scraping family. Minor ambiguity: it says it finds sitemap URLs but returns page URLs, so the agent must infer that pages are extracted from discovered sitemaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of alternatives such as the sibling seo-audit-ai-search-readiness tool, and no stated prerequisites (e.g., whether the site must have a sitemap or robots.txt). Usage is only implied by the verb 'Find sitemap URLs'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url-pdf-to-markdownURL and PDF to MarkdownC
Convert public web pages and PDF links into Markdown for LLM or RAG ingestion.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | ||
| waitSeconds | No | Seconds to wait for the Apify run. Default 180. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and does almost none of it. It never explains what happens on failed fetches, whether JavaScript-rendered pages are supported, how batch URLs are processed, whether output is one document or many, or how long a run may take. Only the adjective 'public' gestures at a real limitation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding or filler. It is efficient, though its brevity borders on under-specification given the tool's batching behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented required parameter, the definition leaves too much for the agent to infer. It does not say what the Markdown response looks like for multiple URLs, how partial failures are reported, or what the waitSeconds timeout means in practice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: waitSeconds is documented in the schema, but the required urls array has no description at all. The description implies URLs to HTML pages or PDFs but never mentions the 30-item cap, whether mixing PDFs and web pages in one call is allowed, or what waitSeconds trades off.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (convert) plus the resource (public web pages and PDF links) and the output format (Markdown), which is precise enough to distinguish it from screenshot or sitemap siblings. It stops short of explicitly naming a sibling or the boundary between them, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for LLM or RAG ingestion' implies the intended use case, but there is no explicit when-to-use or when-not-to-use guidance. The word 'public' hints at an exclusion (no authenticated or paywalled content) without stating it as a constraint, and no alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
website-screenshot-batchWebsite Screenshot BatchC
Capture public URLs as PNG, JPEG, or PDF. Files are linked from the dataset, not inlined.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | ||
| device | No | ||
| format | No | ||
| fullPage | No | ||
| waitSeconds | No | Seconds to wait for the Apify run. Default 180. | |
| waitForSelector | No | ||
| hideCookieBanners | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers one genuinely useful fact: results are file links from the dataset rather than inlined data, which shapes how the agent must handle output. It omits other behavioral traits an agent needs, such as the batch cap (50 URLs), the asynchronous run/wait model implied by waitSeconds defaulting to 180, and any failure behavior for unreachable URLs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the capability and followed by the key output caveat. Nothing is wasted, though the extreme terseness reflects under-specification rather than disciplined brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 7-parameter batch tool with no annotations and no output schema needs more: batch limits, the run-and-wait model, device/viewport meaning, and what happens with unreachable URLs are all unaddressed. The description covers only the surface capability and one output note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14% (only waitSeconds is documented), so the description must compensate and largely does not. It confirms the format choices but says nothing about device, fullPage, waitForSelector, or hideCookieBanners, leaving most parameters semantically bare beyond their names and enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Capture') and resource ('public URLs') plus the output formats PNG/JPEG/PDF, which lets an agent tell it apart from url-pdf-to-markdown and sitemap-url-extractor. It does not explicitly say it processes multiple URLs at once despite the 'batch' name/title, but the core action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no named alternative among the siblings. The only implicit constraint is 'public URLs', which hints that authenticated or private pages are out of scope, but the agent must infer that.
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.
6 tool updates
v1.0.0- First observed
app-reviews-ios-android - First observed
google-trends-batch-scraper - First observed
seo-audit-ai-search-readiness - First observed
sitemap-url-extractor - First observed
url-pdf-to-markdown - First observed
website-screenshot-batch
TDQS
Scored across 6 tools
Each tool targets a distinct artifact: sitemap URLs, SEO scores, trends data, screenshots, app reviews, and Markdown conversion. The only mild overlap is between sitemap-url-extractor and seo-audit-ai-search-readiness, since the audit samples from a sitemap, but the outputs are clearly different.
All names use kebab-case noun phrases, so they're readable and stylistically uniform at a high level. However, internal structure varies widely—some embed platform qualifiers (ios-android), some embed 'batch' inconsistently, and others are verb-less compound nouns—making the pattern only loosely predictable.
Six tools is a well-scoped surface for a curated web-data/SEO scraping bundle. Each tool maps to a distinct Apify-style capability with no filler entries.
The set covers site discovery, SEO auditing, trends, screenshots, reviews, and content conversion—but as a general web-data toolkit it lacks a generic page/HTML scraper, keyword or backlink research beyond Trends, and any batch-job status handling. Agents can meet common needs but will hit dead ends for broader scraping workflows.
Maintenance
Related MCP Connectors
Unified 15-tool SEO, SERP, clean Markdown & GEO (LLM citation Share-of-Voice) MCP server.
17 data tools in one MCP server, run on Apify: Google Shopping, Flights, Hotels, News, Images, Videos, Ads Transparency, Jobs and Trends; YouTube transcripts; AI visibility checks; Google Maps leads; App Store and Google Play reviews. Pay per result. Sign in with Apify (OAuth) or an API token.
Apify actor via Apify's MCP server (Apify token needed): ChatGPT search brand visibility tracker.
Apify MCP — run web-scraping Actors and fetch their dataset results.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP (Model Context Protocol) server that gives AI agents live, structured ad intelligence across Facebook, Google, and Instagram — data that no base model can produce from training alone. Powered by Apify actors. Works with any MCP-compatible client: Cursor, Claude, etc.11-
- AlicenseAqualityDmaintenanceAn MCP server that runs Apify scraping actors with quality-gated validation, scoring, and retries, returning embedding-ready chunks for AI agents.71MIT
- AlicenseAqualityAmaintenanceMCP server that wraps the Apify Workplace Program Detector actor, taking a company domain and returning the employee programs it publishes, such as ERGs, DEI, wellbeing, parental leave, and volunteering.180 npmMIT
- AlicenseAqualityAmaintenanceMCP server for the Mamba Labs GitHub Organization Signal Scanner actor on Apify. Resolve a company domain to its GitHub organization with repo, language and activity signals.186 npmMIT