MCP Server for WebExtrator Web Render & Extract via AceDataCloud API
Server has 5 tools with complete input schemas and descriptions. Tool naming follows verb_noun convention (webextrator_extract, webextrator_render, webextrator_get_task). Descriptions are detailed (150-250 chars) and explain WHEN to use each tool. However, output schemas are not documented, responses are returned as JSON strings without formal schema declarations. Error handling returns JSON with error/message fields but lacks recovery guidance. Parameters are well-typed with enums for constrained inputs (expected_type, wait_until, block_resources). Missing: tool annotations (readOnlyHint), per-tool output schema documentation, and actionable error messages that guide LLM recovery.
Extract structured content from a web page using the WebExtrator API. Navigates to the specified URL, renders the page, and extracts structured data such as product details, article content, or general page information. Use this when: - You need to extract structured data from a web page - You want product details, article content, or general page data - You need LLM-enhanced semantic normalization of extracted content Returns: By default, the extracted structured content inline. With async=true, a JSON envelope with a `task_id` — poll `webextrator_get_task` until it reports `finished_at`, then read the extracted content from its `response`.
Retrieve the result of a single previously created extract or render task. Use this when: - You submitted an extract or render request and got back a task_id - You want to poll for the result of a specific task by its ID Returns: JSON response containing the task status and result data.
Retrieve the results of multiple previously created extract or render tasks. Use this when: - You submitted multiple async requests and want to check their results together - You want to paginate through a list of tasks Returns: JSON response containing the list of task statuses and result data.
Get a comprehensive guide for using the WebExtrator tools. Provides detailed information on how to use the WebExtrator tools effectively, including parameters, examples, and best practices for web extraction and rendering. Returns: Complete usage guide for WebExtrator tools.
Output schemas not documented. Tools return JSON strings without formal schema declarations. LLMs cannot infer response structure for downstream planning.
Error messages lack recovery guidance. Errors return {error, message} but do not suggest next steps (e.g., 'Try webextrator_get_task() to poll for results').
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declared. LLMs cannot determine which tools are safe to retry or have side effects.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Render a web page and return the fully rendered HTML. Uses a headless browser to navigate to the specified URL, waits for JavaScript to execute, and returns the final rendered HTML source. Use this when: - You need the fully rendered HTML of a JavaScript-heavy page - You want to inspect the DOM after dynamic content has loaded - You need to capture single-page application (SPA) content Returns: By default, the rendered HTML content inline. With async=true, a JSON envelope with a `task_id` — poll `webextrator_get_task` until it reports `finished_at`, then read the rendered HTML from its `response`.
Async polling pattern not self-documenting. webextrator_extract and webextrator_render return task_id on async=true, but the response structure is not formally defined. LLMs must infer the envelope format.
Parameter 'async_' uses validation_alias='async' to work around Python keyword. This is correct but not documented in the description, risking LLM confusion about the actual parameter name.