MCP server exposing AgentOps tools for autonomous web monitoring, form filling, and condition checking with browser automation and scheduling capabilities
AgentOps MCP has 6 tools with complete input schemas and descriptions, but quality is uneven. Tool names follow verb_noun convention (check_url_condition, get_check_history, create_scheduled_check, trigger_form_fill, create_check_from_description). Descriptions are present and detailed (100-300 chars), exceeding the 10-1024 char baseline. However, parameter descriptions lack specificity: 'interval' has no min/max bounds stated in description (only in docstring); 'form_data' is a JSON string requiring manual parsing rather than structured input; 'selector' lacks guidance on CSS selector syntax. Output schemas are not documented, tools return JSON but field structure is not specified. Error handling is minimal: no recovery guidance, no error categorization, no actionable error messages visible in code. Security concern: form_data parameter accepts arbitrary JSON strings, risking injection if not validated. No tool annotations (readOnlyHint/destructiveHint) despite clear read/write distinction (check_url_condition is READ_ONLY; create_scheduled_check and trigger_form_fill are WRITE). Composition is reasonable, tools are single-purpose and chainable (check_url_condition → get_check_history). Overall: solid naming and descriptions, but missing parameter constraints, output schemas, error guidance, and tool annotations.
Navigate to a URL, extract data, and evaluate a condition. Args: url: The full URL to check (e.g. "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html") condition: The condition to evaluate. Supported types: - "price_below:50" — true if any price on the page is below 50 - "price_above:20" — true if any price is above 20 - "text_contains:In Stock" — true if page contains this text - "text_absent:Out of Stock" — true if page does NOT contain this text - "stock_available" — true if stock signals found (In Stock, Add to Cart, etc.) - "stock_unavailable" — true if out-of-stock signals found - Any free-form condition (uses Groq LLM if GROQ_API_KEY is set) selector: Optional CSS selector to target specific elements (e.g. ".price_color"). If empty, extracts the full page body text. Returns JSON with condition_result ("met"/"not_met"/"error"), extracted data preview, and screenshot path.
Create a check from a natural language description using AI. Parses your plain-English description into a structured check (URL, CSS selector, condition) using Groq LLM, then creates and optionally runs it immediately. Args: description: What to monitor in plain English. Examples: - "Monitor the price at https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html and alert if it drops below 30" - "Check if https://books.toscrape.com shows In Stock text" - "Alert me when the product at https://example.com/item goes out of stock" auto_run: If true (default), runs the check immediately after creation. Set to false to only create without running. Returns JSON with the parsed fields (url, name, selector, condition) and the check creation result.
Create a check that runs periodically at a set interval. Args: url: The URL to check. condition: The condition to evaluate (same format as check_url_condition). interval: Check interval in seconds (minimum 300 = 5 minutes). Default 1800 (30 min). selector: Optional CSS selector for data extraction. Returns JSON with check_id, schedule_id, and first-run result. The check is also run once immediately upon creation.
Output schemas not documented. Tools return JSON but field structure, types, and required fields are not specified. LLMs cannot plan downstream calls or extract data reliably.
Parameter constraints missing from descriptions. 'interval' has no min/max stated in description (only in docstring); 'selector' lacks CSS selector syntax guidance; 'form_data' requires manual JSON parsing instead of structured input.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Tools have clear read/write semantics but do not declare them via MCP annotations, limiting agent planning and safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Get the full activity log showing every agent action. Returns JSON array of recent agent actions including page visits, data extractions, condition evaluations, notifications sent, form fills, and any errors. Each entry has a timestamp, action type, URL, extracted data, and screenshot path.
Get the history of all past checks for a given URL. Args: url: The URL to look up history for. Returns JSON array of past check results with timestamps, extracted data, and condition outcomes.
Autonomously fill and submit a web form. Args: url: The URL of the page containing the form. form_data: JSON string mapping CSS selectors to values. Example: '{"input[name=\"email\"]": "[email protected]", "textarea": "Hello world"}' Returns JSON with success status, fields that were filled, whether the form was submitted, and screenshot path.
Error handling lacks recovery guidance. No visible error categorization (retryable vs user-fixable vs fatal) or actionable error messages. Agents cannot self-correct on failure.
form_data parameter accepts arbitrary JSON strings. No input validation visible; injection risk if selectors or values are not sanitized before DOM manipulation.