{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "observability",
    "endpoint": "https://api.teste.no/api/mcp",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/validoria-mcp.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/validoria-mcp.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/validoria-mcp.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 14014,
        "counts": {
          "error": 0,
          "note": 1,
          "warn": 78
        },
        "findings": [
          {
            "rule": "TC11",
            "severity": "warn",
            "tool": "update_notification_rule",
            "message": "7 parameters without a description: channelTypes, enabled, eventTypes, name, quietHoursEnd, quietHoursStart and 1 more",
            "fix": "Describe each one: format, units, an example, and what happens when it's left out."
          },
          {
            "rule": "TC11",
            "severity": "warn",
            "tool": "update_page_fragment",
            "message": "1 parameter without a description: description",
            "fix": "Describe each one: format, units, an example, and what happens when it's left out."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "acknowledge_incident",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "active_runs",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "add_keyword",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "analyze_target",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"analyze\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "cancel_load_test",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_automation_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_journey",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_maintenance_window",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_muting_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_notification_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_page_fragment",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_scheduled_report",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create_target",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "daily_trends",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_automation_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_journey",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_maintenance_window",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_notification_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_page_fragment",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_scheduled_report",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_secret",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete_target",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "disable_all_tests",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "enable_all_tests",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_automation_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_finding",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_incident",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_journey",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_load_test",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_run",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_site_map",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_target",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_target_scores",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get_team_settings",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "guest_get_scan",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "guest_start_scan",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "import_targets",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_automation_rules",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_findings",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_incidents",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_journeys",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_keywords",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_load_tests",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_maintenance_windows",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_notification_channels",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_notification_rules",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_page_fragments",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_runs",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_scheduled_reports",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_secrets",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_targets",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_tests",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "mute_finding",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "recompute_scores",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "record_deployment",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "remove_keyword",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "resolve_incident",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"resolve\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "rotate_secret",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "start_load_test",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "store_secret",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "system_health",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "target_stats",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "team_stats",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "trigger_all_tests",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "trigger_journey",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "trigger_test",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_automation_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_journey",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_notification_rule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_page_fragment",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_scheduled_report",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_target",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_team_settings",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update_test",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC21",
            "severity": "warn",
            "tool": "enable_all_tests",
            "message": "described almost the same as disable_all_tests (85% of the same words)",
            "fix": "Say in each description when to use it instead of the other."
          },
          {
            "rule": "TC23",
            "severity": "warn",
            "message": "74 tools",
            "fix": "Offer a smaller default toolset and let clients opt into the rest."
          },
          {
            "rule": "TC24",
            "severity": "note",
            "message": "74 of 74 tools have no outputSchema",
            "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
          }
        ]
      },
      "checkedAt": "2026-10-04T22:24:15Z",
      "count": 74,
      "schemaTokens": 14014,
      "status": "ok",
      "tools": [
        {
          "name": "guest_start_scan",
          "title": "Guest quick scan (no account)",
          "description": "Run a free 6-test HTTP scan against a public URL without an API key. Rate-limited (5/IP/hour, 3/session/day). Returns scanId — poll with guest_get_scan. For continuous monitoring, sign up free and use create_target. See teste-no://docs/quickstart.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "url": {
                "description": "Public http(s) URL to scan, e.g. https://example.com",
                "format": "uri",
                "type": "string"
              }
            },
            "required": [
              "url"
            ],
            "type": "object"
          }
        },
        {
          "name": "guest_get_scan",
          "title": "Get guest scan results",
          "description": "Poll results for a guest_start_scan. Pass the scanId and guestSessionId from the start response. No API key required.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "guestSessionId": {
                "description": "Guest session id returned by guest_start_scan",
                "minLength": 1,
                "type": "string"
              },
              "scanId": {
                "description": "Scan workflow id from guest_start_scan",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "scanId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_targets",
          "title": "List Targets",
          "description": "List all monitoring targets for your team. Returns name, URL, type, status, and uptime info for each target.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "limit": {
                "default": 50,
                "description": "Max number of targets to return",
                "maximum": 100,
                "minimum": 1,
                "type": "number"
              },
              "status": {
                "description": "Filter by target status",
                "enum": [
                  "HEALTHY",
                  "WARNING",
                  "CRITICAL",
                  "UNKNOWN"
                ],
                "type": "string"
              },
              "type": {
                "description": "Filter by target type",
                "enum": [
                  "WEBSITE",
                  "API",
                  "WEBSHOP"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get_target",
          "title": "Get Target Details",
          "description": "Get detailed information about a specific target including status, uptime, fingerprint, and composite scores.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID to look up",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "get_target_scores",
          "title": "Get Target Composite Scores",
          "description": "Get composite scores (Security, SEO, Performance, Accessibility, AI-search readiness) for a target. Each score is 0-100 with a status rating.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_findings",
          "title": "List Findings",
          "description": "List findings (discovered issues) across your targets. Filter by status, severity, or target. Returns title, severity, status, test name, and AI enrichment if available.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "limit": {
                "default": 50,
                "description": "Max number of findings to return",
                "maximum": 100,
                "minimum": 1,
                "type": "number"
              },
              "severity": {
                "description": "Filter by severity",
                "enum": [
                  "CRITICAL",
                  "WARNING",
                  "INFO"
                ],
                "type": "string"
              },
              "status": {
                "description": "Filter by finding status (default: OPEN)",
                "enum": [
                  "OPEN",
                  "MUTED",
                  "RESOLVED"
                ],
                "type": "string"
              },
              "targetId": {
                "description": "Filter by target ID",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get_finding",
          "title": "Get Finding Details",
          "description": "Get full details of a specific finding, including evidence, AI analysis, and recommended fix.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "findingId": {
                "description": "The finding ID",
                "type": "string"
              }
            },
            "required": [
              "findingId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_incidents",
          "title": "List Incidents",
          "description": "List incidents (grouped operational issues) across your targets. Filter by status. Returns title, severity, status, findings count, and deployment correlation.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "limit": {
                "default": 50,
                "description": "Max number of incidents to return",
                "maximum": 100,
                "minimum": 1,
                "type": "number"
              },
              "status": {
                "description": "Filter by incident status",
                "enum": [
                  "OPEN",
                  "ACKNOWLEDGED",
                  "RESOLVED"
                ],
                "type": "string"
              },
              "targetId": {
                "description": "Filter by target ID",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get_incident",
          "title": "Get Incident Details",
          "description": "Get full details of a specific incident including linked findings, AI analysis, and deployment correlation.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "incidentId": {
                "description": "The incident ID",
                "type": "string"
              }
            },
            "required": [
              "incidentId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_runs",
          "title": "List Runs",
          "description": "List recent test runs. Filter by target, status, or test slug. Returns run status, score, summary, duration, and finding count.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "limit": {
                "default": 25,
                "description": "Max number of runs to return",
                "maximum": 100,
                "minimum": 1,
                "type": "number"
              },
              "status": {
                "description": "Filter by run status",
                "enum": [
                  "QUEUED",
                  "RUNNING",
                  "PASSED",
                  "WARNING",
                  "FAILED",
                  "CANCELED"
                ],
                "type": "string"
              },
              "targetId": {
                "description": "Filter by target ID",
                "type": "string"
              },
              "testSlug": {
                "description": "Filter by test definition slug (e.g. \"security-headers\")",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get_run",
          "title": "Get Run Details",
          "description": "Get full details of a specific test run including metrics, score, summary, errors, and associated findings.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "runId": {
                "description": "The run ID",
                "type": "string"
              }
            },
            "required": [
              "runId"
            ],
            "type": "object"
          }
        },
        {
          "name": "active_runs",
          "title": "Active Runs",
          "description": "Get currently running and queued tests across all targets. Useful for checking what tests are in progress right now.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "Filter by target ID",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "team_stats",
          "title": "Team Statistics",
          "description": "Get team-wide overview statistics: total runs, pass rate, open findings, open incidents, average duration. Supports lifetime, monthly, or weekly periods.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "period": {
                "description": "Period filter: \"lifetime\", \"2026-04\" (monthly), or \"2026-W14\" (weekly). Defaults to lifetime.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "target_stats",
          "title": "Target Statistics",
          "description": "Get statistics for a specific target: runs, pass rate, findings, duration. Supports lifetime, monthly, or weekly periods.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "period": {
                "description": "Period filter: \"lifetime\", \"2026-04\" (monthly), or \"2026-W14\" (weekly). Defaults to lifetime.",
                "type": "string"
              },
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "daily_trends",
          "title": "Daily Trends",
          "description": "Get daily time-series data for runs, findings, and average duration. Useful for identifying trends over time. Returns up to 90 days of data.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "days": {
                "default": 14,
                "description": "Number of days of history to return",
                "maximum": 90,
                "minimum": 1,
                "type": "number"
              },
              "targetId": {
                "description": "Filter by target ID (omit for team-wide)",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get_site_map",
          "title": "Get Site Map",
          "description": "Get the latest crawl snapshot for a target. Returns page inventory stats, SEO issues, broken pages/assets, response times, and a diff against the previous crawl. Optionally include page-level details.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "includePages": {
                "default": false,
                "description": "Include individual page data (can be large). Default: false.",
                "type": "boolean"
              },
              "pageLimit": {
                "default": 50,
                "description": "Max pages to return when includePages is true",
                "maximum": 200,
                "minimum": 1,
                "type": "number"
              },
              "pageStatus": {
                "description": "Filter pages by status",
                "enum": [
                  "HEALTHY",
                  "BROKEN",
                  "REDIRECT",
                  "SLOW"
                ],
                "type": "string"
              },
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_maintenance_windows",
          "title": "List Maintenance Windows",
          "description": "List maintenance windows for a target. Shows scheduled and recurring maintenance periods that suppress alerts.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_tests",
          "title": "List Test Definitions",
          "description": "List all available test definitions (plugins). Shows slug, name, category, runner type, weight class, schedule, and enablement status. Useful for knowing which tests can be triggered.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "category": {
                "description": "Filter by test category",
                "enum": [
                  "SEO",
                  "SECURITY",
                  "PERFORMANCE",
                  "MOBILE",
                  "ACCESSIBILITY",
                  "ECOMMERCE",
                  "API_HEALTH"
                ],
                "type": "string"
              },
              "enabledOnly": {
                "default": true,
                "description": "Only show enabled tests. Default: true.",
                "type": "boolean"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "trigger_test",
          "title": "Trigger Test",
          "description": "Run a specific test against a target. Specify either the test definition ID or slug. The test is queued and executed asynchronously — use get_run to check status.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID to test",
                "type": "string"
              },
              "testId": {
                "description": "Test definition ID (use this or testSlug)",
                "type": "string"
              },
              "testSlug": {
                "description": "Test slug e.g. \"security-headers\" (use this or testId)",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "trigger_all_tests",
          "title": "Trigger All Tests",
          "description": "Run all enabled tests against a target as a scan workflow. All tests in the target's test profile are queued. Returns the workflow ID and list of queued runs.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID to scan",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "acknowledge_incident",
          "title": "Acknowledge Incident",
          "description": "Acknowledge an open incident to signal that someone is looking at it. Changes status from OPEN to ACKNOWLEDGED.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "incidentId": {
                "description": "The incident ID to acknowledge",
                "type": "string"
              }
            },
            "required": [
              "incidentId"
            ],
            "type": "object"
          }
        },
        {
          "name": "resolve_incident",
          "title": "Resolve Incident",
          "description": "Resolve an incident to mark it as handled. Changes status to RESOLVED and sets the closed timestamp.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "incidentId": {
                "description": "The incident ID to resolve",
                "type": "string"
              }
            },
            "required": [
              "incidentId"
            ],
            "type": "object"
          }
        },
        {
          "name": "mute_finding",
          "title": "Mute Finding",
          "description": "Mute an open finding to suppress it from dashboards and alerts. Status changes from OPEN to MUTED.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "findingId": {
                "description": "The finding ID to mute",
                "type": "string"
              }
            },
            "required": [
              "findingId"
            ],
            "type": "object"
          }
        },
        {
          "name": "create_maintenance_window",
          "title": "Create Maintenance Window",
          "description": "Schedule a maintenance window for a target. During maintenance, alerts and notifications are suppressed. Supports one-time, daily, and weekly recurring windows.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "description": {
                "description": "Optional description",
                "type": "string"
              },
              "endsAt": {
                "description": "End time as ISO 8601 string, e.g. \"2026-04-05T04:00:00Z\"",
                "type": "string"
              },
              "isRecurring": {
                "default": false,
                "description": "Whether this window repeats",
                "type": "boolean"
              },
              "name": {
                "description": "Name for the window, e.g. \"Weekly deploy\"",
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              "recurrence": {
                "description": "Recurrence pattern (required if isRecurring is true)",
                "enum": [
                  "DAILY",
                  "WEEKLY"
                ],
                "type": "string"
              },
              "startsAt": {
                "description": "Start time as ISO 8601 string, e.g. \"2026-04-05T02:00:00Z\"",
                "type": "string"
              },
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId",
              "name",
              "startsAt",
              "endsAt"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_maintenance_window",
          "title": "Delete Maintenance Window",
          "description": "Remove a scheduled maintenance window.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID (for access verification)",
                "type": "string"
              },
              "windowId": {
                "description": "The maintenance window ID to delete",
                "type": "string"
              }
            },
            "required": [
              "windowId",
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "record_deployment",
          "title": "Record Deployment",
          "description": "Record a deployment event for a target. Deployments are auto-correlated with incidents created within 20 minutes. Useful for tracking releases and root-cause analysis.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "commitSha": {
                "description": "Git commit SHA",
                "type": "string"
              },
              "deployedBy": {
                "description": "Who deployed (name, email, or system)",
                "type": "string"
              },
              "description": {
                "description": "Deployment description or changelog",
                "type": "string"
              },
              "environment": {
                "description": "Environment, e.g. \"production\", \"staging\"",
                "type": "string"
              },
              "targetId": {
                "description": "The target ID",
                "type": "string"
              },
              "version": {
                "description": "Version string, e.g. \"v2.4.1\"",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "recompute_scores",
          "title": "Recompute Composite Scores",
          "description": "Force recompute all composite scores (Security, SEO, Performance, Accessibility) for a target. Useful after manual changes or when scores seem stale.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID to recompute scores for",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_automation_rules",
          "title": "List Automation Rules",
          "description": "List all automation rules for the team. Rules automatically react to events (test failures, incidents, downtime) with configurable actions (escalate severity, suppress, rerun, webhook, notify).",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "description": "Filter by enabled/disabled status",
                "type": "boolean"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get_automation_rule",
          "title": "Get Automation Rule",
          "description": "Get full details of a specific automation rule.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "ruleId": {
                "description": "The automation rule ID",
                "type": "string"
              }
            },
            "required": [
              "ruleId"
            ],
            "type": "object"
          }
        },
        {
          "name": "create_automation_rule",
          "title": "Create Automation Rule",
          "description": "Create an automation rule that reacts to events. Triggers: TEST_FAILED, TEST_RECOVERED, INCIDENT_CREATED, INCIDENT_RESOLVED, TARGET_DOWN, TARGET_RECOVERED. Actions: escalate (change severity), suppress (mute), rerun (schedule retry), notify, webhook, add_note.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "actions": {
                "description": "Actions to execute when triggered",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "delayMs": {
                      "description": "Delay in ms before executing (for rerun action)",
                      "maximum": 600000,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "note": {
                      "description": "Note text (for add_note action)",
                      "maxLength": 1000,
                      "type": "string"
                    },
                    "severity": {
                      "description": "Target severity (for escalate action)",
                      "enum": [
                        "CRITICAL",
                        "WARNING",
                        "INFO"
                      ],
                      "type": "string"
                    },
                    "type": {
                      "description": "Action type",
                      "enum": [
                        "escalate",
                        "suppress",
                        "rerun",
                        "notify",
                        "webhook",
                        "add_note"
                      ],
                      "type": "string"
                    },
                    "webhookUrl": {
                      "description": "Webhook URL (for webhook action)",
                      "format": "uri",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "type": "object"
                },
                "minItems": 1,
                "type": "array"
              },
              "conditions": {
                "additionalProperties": false,
                "description": "Optional conditions that must be met",
                "properties": {
                  "minRecurrence": {
                    "description": "Minimum finding recurrence count to trigger",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "severities": {
                    "description": "Only trigger for these severity levels",
                    "items": {
                      "enum": [
                        "CRITICAL",
                        "WARNING",
                        "INFO"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "targetIds": {
                    "description": "Only trigger for these target IDs",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "testSlugs": {
                    "description": "Only trigger for these test slugs",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "name": {
                "description": "Rule name",
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              "priorityOrder": {
                "default": 0,
                "description": "Priority order (lower = evaluated first)",
                "type": "integer"
              },
              "targetId": {
                "description": "Optional target ID to scope rule to a specific target",
                "type": "string"
              },
              "trigger": {
                "description": "Event that triggers the rule",
                "enum": [
                  "TEST_FAILED",
                  "TEST_RECOVERED",
                  "INCIDENT_CREATED",
                  "INCIDENT_RESOLVED",
                  "TARGET_DOWN",
                  "TARGET_RECOVERED"
                ],
                "type": "string"
              }
            },
            "required": [
              "name",
              "trigger",
              "actions"
            ],
            "type": "object"
          }
        },
        {
          "name": "update_automation_rule",
          "title": "Update Automation Rule",
          "description": "Update an existing automation rule. Any field not provided will remain unchanged.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "actions": {
                "description": "Updated actions",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "delayMs": {
                      "maximum": 600000,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "note": {
                      "maxLength": 1000,
                      "type": "string"
                    },
                    "severity": {
                      "enum": [
                        "CRITICAL",
                        "WARNING",
                        "INFO"
                      ],
                      "type": "string"
                    },
                    "type": {
                      "enum": [
                        "escalate",
                        "suppress",
                        "rerun",
                        "notify",
                        "webhook",
                        "add_note"
                      ],
                      "type": "string"
                    },
                    "webhookUrl": {
                      "format": "uri",
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "type": "object"
                },
                "minItems": 1,
                "type": "array"
              },
              "conditions": {
                "additionalProperties": false,
                "description": "Updated conditions",
                "properties": {
                  "minRecurrence": {
                    "minimum": 1,
                    "type": "integer"
                  },
                  "severities": {
                    "items": {
                      "enum": [
                        "CRITICAL",
                        "WARNING",
                        "INFO"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "targetIds": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "testSlugs": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "isEnabled": {
                "description": "Enable or disable the rule",
                "type": "boolean"
              },
              "name": {
                "description": "Updated rule name",
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              "priorityOrder": {
                "description": "Updated priority order",
                "type": "integer"
              },
              "ruleId": {
                "description": "The automation rule ID to update",
                "type": "string"
              },
              "targetId": {
                "description": "Updated target scope (null to remove target scoping)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "trigger": {
                "description": "Updated trigger event",
                "enum": [
                  "TEST_FAILED",
                  "TEST_RECOVERED",
                  "INCIDENT_CREATED",
                  "INCIDENT_RESOLVED",
                  "TARGET_DOWN",
                  "TARGET_RECOVERED"
                ],
                "type": "string"
              }
            },
            "required": [
              "ruleId"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_automation_rule",
          "title": "Delete Automation Rule",
          "description": "Permanently delete an automation rule.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "ruleId": {
                "description": "The automation rule ID to delete",
                "type": "string"
              }
            },
            "required": [
              "ruleId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_journeys",
          "title": "List Journeys",
          "description": "List custom browser test flows (journeys) for a target or all team targets. Journeys are multi-step Playwright tests that verify user flows like checkout, login, and search.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "Filter by target ID. If omitted, lists all team journeys.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get_journey",
          "title": "Get Journey",
          "description": "Get full details of a specific journey including all steps.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "journeyId": {
                "description": "The journey ID",
                "type": "string"
              }
            },
            "required": [
              "journeyId"
            ],
            "type": "object"
          }
        },
        {
          "name": "create_journey",
          "title": "Create Journey",
          "description": "Create a custom browser test flow for a target. Steps are executed sequentially in a Playwright browser. Supports actions: navigate, click, type, fill, select, assert, wait, screenshot, scroll, hover, use_fragment. Variables like {{LOGIN_EMAIL}} are resolved from the target secrets vault.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "description": {
                "description": "Journey description",
                "maxLength": 2000,
                "type": "string"
              },
              "name": {
                "description": "Journey name",
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              "platform": {
                "description": "Platform tag (e.g. \"shopify\", \"woocommerce\")",
                "maxLength": 50,
                "type": "string"
              },
              "steps": {
                "description": "Ordered list of browser actions",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "action": {
                      "enum": [
                        "navigate",
                        "click",
                        "type",
                        "fill",
                        "select",
                        "assert",
                        "wait",
                        "screenshot",
                        "scroll",
                        "hover",
                        "use_fragment"
                      ],
                      "type": "string"
                    },
                    "assertionOperator": {
                      "description": "Assertion type (for assert action)",
                      "enum": [
                        "element_visible",
                        "element_hidden",
                        "url_contains",
                        "text_contains",
                        "element_count"
                      ],
                      "type": "string"
                    },
                    "label": {
                      "description": "Human-readable step description",
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "screenshot": {
                      "default": false,
                      "description": "Capture screenshot after this step",
                      "type": "boolean"
                    },
                    "target": {
                      "description": "CSS selector or URL target",
                      "type": "string"
                    },
                    "value": {
                      "description": "Value to type/fill, URL to navigate to, or fragment ID for use_fragment",
                      "type": "string"
                    },
                    "waitMs": {
                      "description": "Wait duration in ms (for wait action)",
                      "maximum": 30000,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "action",
                    "label"
                  ],
                  "type": "object"
                },
                "maxItems": 50,
                "minItems": 1,
                "type": "array"
              },
              "targetId": {
                "description": "Target ID to create the journey for",
                "type": "string"
              },
              "timeoutSeconds": {
                "default": 60,
                "description": "Max execution time in seconds",
                "maximum": 300,
                "minimum": 10,
                "type": "number"
              }
            },
            "required": [
              "targetId",
              "name",
              "steps"
            ],
            "type": "object"
          }
        },
        {
          "name": "update_journey",
          "title": "Update Journey",
          "description": "Update a journey's name, settings, or steps. When steps are provided, all existing steps are replaced.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "description": {
                "anyOf": [
                  {
                    "maxLength": 2000,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Updated description"
              },
              "isEnabled": {
                "description": "Enable or disable the journey",
                "type": "boolean"
              },
              "journeyId": {
                "description": "The journey ID to update",
                "type": "string"
              },
              "name": {
                "description": "Updated name",
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              "steps": {
                "description": "Replacement steps (replaces all existing steps)",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "action": {
                      "enum": [
                        "navigate",
                        "click",
                        "type",
                        "fill",
                        "select",
                        "assert",
                        "wait",
                        "screenshot",
                        "scroll",
                        "hover",
                        "use_fragment"
                      ],
                      "type": "string"
                    },
                    "assertionOperator": {
                      "description": "Assertion type (for assert action)",
                      "enum": [
                        "element_visible",
                        "element_hidden",
                        "url_contains",
                        "text_contains",
                        "element_count"
                      ],
                      "type": "string"
                    },
                    "label": {
                      "description": "Human-readable step description",
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "screenshot": {
                      "default": false,
                      "description": "Capture screenshot after this step",
                      "type": "boolean"
                    },
                    "target": {
                      "description": "CSS selector or URL target",
                      "type": "string"
                    },
                    "value": {
                      "description": "Value to type/fill, URL to navigate to, or fragment ID for use_fragment",
                      "type": "string"
                    },
                    "waitMs": {
                      "description": "Wait duration in ms (for wait action)",
                      "maximum": 30000,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "action",
                    "label"
                  ],
                  "type": "object"
                },
                "maxItems": 50,
                "minItems": 1,
                "type": "array"
              },
              "timeoutSeconds": {
                "description": "Updated timeout",
                "maximum": 300,
                "minimum": 10,
                "type": "number"
              }
            },
            "required": [
              "journeyId"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_journey",
          "title": "Delete Journey",
          "description": "Permanently delete a journey and all its steps.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "journeyId": {
                "description": "The journey ID to delete",
                "type": "string"
              }
            },
            "required": [
              "journeyId"
            ],
            "type": "object"
          }
        },
        {
          "name": "trigger_journey",
          "title": "Trigger Journey",
          "description": "Execute a journey (custom browser test flow) against its target. The journey runs asynchronously — use get_run to check progress.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "journeyId": {
                "description": "The journey ID to trigger",
                "type": "string"
              }
            },
            "required": [
              "journeyId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_scheduled_reports",
          "title": "List Scheduled Reports",
          "description": "List all scheduled reports for the team. Reports are automatically generated and emailed on a daily or weekly basis.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "create_scheduled_report",
          "title": "Create Scheduled Report",
          "description": "Create a new scheduled email report. Reports include run stats, open findings, composite scores, and per-target status.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "dayOfWeek": {
                "default": 1,
                "description": "Day of week for WEEKLY reports (0=Sunday, 1=Monday, ..., 6=Saturday)",
                "maximum": 6,
                "minimum": 0,
                "type": "number"
              },
              "frequency": {
                "default": "WEEKLY",
                "description": "How often to send",
                "enum": [
                  "DAILY",
                  "WEEKLY"
                ],
                "type": "string"
              },
              "hourUtc": {
                "default": 8,
                "description": "Hour in UTC to send the report",
                "maximum": 23,
                "minimum": 0,
                "type": "number"
              },
              "name": {
                "default": "Weekly Summary",
                "description": "Report name",
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              "recipients": {
                "default": "",
                "description": "Comma-separated email addresses. Empty = all team members.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "update_scheduled_report",
          "title": "Update Scheduled Report",
          "description": "Update an existing scheduled report. Any field not provided stays unchanged.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "dayOfWeek": {
                "description": "Updated day of week",
                "maximum": 6,
                "minimum": 0,
                "type": "number"
              },
              "enabled": {
                "description": "Enable or disable the report",
                "type": "boolean"
              },
              "frequency": {
                "description": "Updated frequency",
                "enum": [
                  "DAILY",
                  "WEEKLY"
                ],
                "type": "string"
              },
              "hourUtc": {
                "description": "Updated hour UTC",
                "maximum": 23,
                "minimum": 0,
                "type": "number"
              },
              "name": {
                "description": "Updated name",
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              "recipients": {
                "description": "Updated comma-separated email list",
                "type": "string"
              },
              "reportId": {
                "description": "The scheduled report ID to update",
                "type": "string"
              }
            },
            "required": [
              "reportId"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_scheduled_report",
          "title": "Delete Scheduled Report",
          "description": "Permanently delete a scheduled report.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "reportId": {
                "description": "The scheduled report ID to delete",
                "type": "string"
              }
            },
            "required": [
              "reportId"
            ],
            "type": "object"
          }
        },
        {
          "name": "get_team_settings",
          "title": "Get Team Settings",
          "description": "Get the team's configuration including AI enrichment, uptime monitoring, severity escalation, run policies, notification coalescing, SEO, and Kloner Tasks integration settings.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "update_team_settings",
          "title": "Update Team Settings",
          "description": "Update team configuration. All fields are optional — only provided fields are changed. Covers: AI enrichment (model, temperature, auto-enrich, spending cap), uptime (timeout, thresholds), severity escalation (recurrence/age triggers), run policies (concurrency, timeouts), SEO (rank tracking, keyword strategy), notification coalescing (digest), and the kill switch (testsPaused).",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "aiAutoEnrich": {
                "description": "Auto-enrich new findings with AI",
                "type": "boolean"
              },
              "aiCapAction": {
                "description": "Action when cap is reached",
                "enum": [
                  "disable",
                  "warn"
                ],
                "type": "string"
              },
              "aiEnabled": {
                "description": "Enable/disable AI finding enrichment",
                "type": "boolean"
              },
              "aiModel": {
                "description": "Model id on the AI gateway for finding enrichment (e.g. mistral/mistral-small-2603, an EU route)",
                "type": "string"
              },
              "aiMonthlyCapUsd": {
                "anyOf": [
                  {
                    "maximum": 10000,
                    "minimum": 0.01,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Monthly AI spending cap in USD (null = unlimited)"
              },
              "aiSourceReviewModel": {
                "description": "Model for AI source review plugin",
                "type": "string"
              },
              "defaultRunTimeoutMs": {
                "description": "Default run timeout in ms",
                "maximum": 3600000,
                "minimum": 30000,
                "type": "number"
              },
              "defaultScheduleMultiplier": {
                "description": "Schedule frequency multiplier (\u003c 1 = more frequent)",
                "maximum": 10,
                "minimum": 0.1,
                "type": "number"
              },
              "digestEnabled": {
                "description": "Enable notification alert coalescing",
                "type": "boolean"
              },
              "digestWindowSeconds": {
                "description": "Digest window duration in seconds",
                "maximum": 86400,
                "minimum": 30,
                "type": "number"
              },
              "escalateInfoAgeDays": {
                "description": "Finding age in days before INFO→WARNING",
                "maximum": 365,
                "minimum": 1,
                "type": "number"
              },
              "escalateInfoRecurrence": {
                "description": "Finding recurrences before INFO→WARNING",
                "maximum": 100,
                "minimum": 1,
                "type": "number"
              },
              "escalateWarningAgeDays": {
                "description": "Finding age in days before WARNING→CRITICAL",
                "maximum": 365,
                "minimum": 1,
                "type": "number"
              },
              "escalateWarningRecurrence": {
                "description": "Finding recurrences before WARNING→CRITICAL",
                "maximum": 100,
                "minimum": 1,
                "type": "number"
              },
              "maxConcurrentRunsPerTarget": {
                "description": "Max concurrent test runs per target",
                "maximum": 20,
                "minimum": 1,
                "type": "number"
              },
              "maxDailyRunsPerTarget": {
                "description": "Max test runs per target per day (0=unlimited). Prevents overwhelming hosted sites with limited request budgets.",
                "maximum": 1000,
                "minimum": 0,
                "type": "number"
              },
              "seoRankCheckEnabled": {
                "description": "Enable Google rank tracking",
                "type": "boolean"
              },
              "testsPaused": {
                "description": "Kill switch — pauses ALL scheduled and manual test runs",
                "type": "boolean"
              },
              "uptimeDegradedThresholdMs": {
                "description": "Response time threshold for DEGRADED status",
                "maximum": 15000,
                "minimum": 500,
                "type": "number"
              },
              "uptimeFailThreshold": {
                "description": "Consecutive failures before DOWN",
                "maximum": 10,
                "minimum": 1,
                "type": "number"
              },
              "uptimePingTimeoutMs": {
                "description": "Uptime ping timeout in ms",
                "maximum": 30000,
                "minimum": 1000,
                "type": "number"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "list_notification_rules",
          "title": "List Notification Rules",
          "description": "List all notification alert rules for the team. Rules map event types + severity levels to notification channels.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "create_notification_rule",
          "title": "Create Notification Rule",
          "description": "Create a notification alert rule. Defines which events at which severity levels trigger notifications on which channels. Supports quiet hours and per-target scoping.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "channelTypes": {
                "description": "Channels to notify",
                "items": {
                  "enum": [
                    "IN_APP",
                    "EMAIL",
                    "SLACK",
                    "WEBHOOK",
                    "SMS",
                    "WEB_PUSH"
                  ],
                  "type": "string"
                },
                "minItems": 1,
                "type": "array"
              },
              "enabled": {
                "default": true,
                "description": "Whether the rule is active",
                "type": "boolean"
              },
              "eventTypes": {
                "description": "Events that trigger this rule",
                "items": {
                  "enum": [
                    "INCIDENT_OPENED",
                    "INCIDENT_RESOLVED",
                    "INCIDENT_ACKNOWLEDGED",
                    "FINDING_CREATED",
                    "FINDING_RESOLVED",
                    "FINDING_ESCALATED",
                    "TARGET_DOWN",
                    "TARGET_RECOVERED",
                    "TEST_FAILED",
                    "TEST_RECOVERED",
                    "SCAN_COMPLETED",
                    "BILLING_LIMIT_REACHED",
                    "ACTION_REQUIRED"
                  ],
                  "type": "string"
                },
                "minItems": 1,
                "type": "array"
              },
              "name": {
                "description": "Rule name",
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              "quietHoursEnd": {
                "description": "Quiet hours end (hour UTC)",
                "maximum": 23,
                "minimum": 0,
                "type": "number"
              },
              "quietHoursStart": {
                "description": "Quiet hours start (hour UTC)",
                "maximum": 23,
                "minimum": 0,
                "type": "number"
              },
              "severities": {
                "description": "Only trigger for these severities",
                "items": {
                  "enum": [
                    "CRITICAL",
                    "WARNING",
                    "INFO"
                  ],
                  "type": "string"
                },
                "type": "array"
              },
              "targetId": {
                "description": "Scope to a specific target",
                "type": "string"
              }
            },
            "required": [
              "name",
              "eventTypes",
              "channelTypes"
            ],
            "type": "object"
          }
        },
        {
          "name": "update_notification_rule",
          "title": "Update Notification Rule",
          "description": "Update a notification rule. Only provided fields are changed.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "channelTypes": {
                "items": {
                  "enum": [
                    "IN_APP",
                    "EMAIL",
                    "SLACK",
                    "WEBHOOK",
                    "SMS",
                    "WEB_PUSH"
                  ],
                  "type": "string"
                },
                "minItems": 1,
                "type": "array"
              },
              "enabled": {
                "type": "boolean"
              },
              "eventTypes": {
                "items": {
                  "enum": [
                    "INCIDENT_OPENED",
                    "INCIDENT_RESOLVED",
                    "INCIDENT_ACKNOWLEDGED",
                    "FINDING_CREATED",
                    "FINDING_RESOLVED",
                    "FINDING_ESCALATED",
                    "TARGET_DOWN",
                    "TARGET_RECOVERED",
                    "TEST_FAILED",
                    "TEST_RECOVERED",
                    "SCAN_COMPLETED",
                    "BILLING_LIMIT_REACHED",
                    "ACTION_REQUIRED"
                  ],
                  "type": "string"
                },
                "minItems": 1,
                "type": "array"
              },
              "name": {
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              "quietHoursEnd": {
                "anyOf": [
                  {
                    "maximum": 23,
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "quietHoursStart": {
                "anyOf": [
                  {
                    "maximum": 23,
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "ruleId": {
                "description": "The notification rule ID",
                "type": "string"
              },
              "severities": {
                "items": {
                  "enum": [
                    "CRITICAL",
                    "WARNING",
                    "INFO"
                  ],
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "ruleId"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_notification_rule",
          "title": "Delete Notification Rule",
          "description": "Permanently delete a notification rule.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "ruleId": {
                "description": "The notification rule ID to delete",
                "type": "string"
              }
            },
            "required": [
              "ruleId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_notification_channels",
          "title": "List Notification Channels",
          "description": "List all notification channels (Email, Slack, Webhook, SMS, Web Push) configured for the team. Sensitive config values are redacted.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "list_keywords",
          "title": "List Target Keywords",
          "description": "List all SEO keywords tracked for a target, including latest Google rank position. Max 50 per target.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "add_keyword",
          "title": "Add Keyword",
          "description": "Add an SEO keyword to track for a target. Max 50 keywords per target.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "isPrimary": {
                "default": false,
                "description": "Mark as primary keyword",
                "type": "boolean"
              },
              "keyword": {
                "description": "The keyword to track",
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              "pageScope": {
                "description": "URL pathname pattern to scope the keyword to (e.g. /kategori/*)",
                "maxLength": 500,
                "type": "string"
              },
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId",
              "keyword"
            ],
            "type": "object"
          }
        },
        {
          "name": "remove_keyword",
          "title": "Remove Keyword",
          "description": "Remove an SEO keyword from a target.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "keywordId": {
                "description": "The keyword ID to remove",
                "type": "string"
              },
              "targetId": {
                "description": "The target ID (for access verification)",
                "type": "string"
              }
            },
            "required": [
              "keywordId",
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "start_load_test",
          "title": "Start Load Test",
          "description": "Start a load test against a target. Max 100 concurrent connections, max 5 min duration, 1 test at a time per target, 60s cooldown between tests. Modes: HTTP_FLOOD (autocannon), BROWSER_USERS (Playwright), COMBINED (both). OWNER/ADMIN only.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "acknowledgeSharedOrigin": {
                "description": "Acknowledge blast radius if target shares a server with other monitored sites",
                "type": "boolean"
              },
              "concurrency": {
                "default": 10,
                "description": "Number of concurrent connections",
                "maximum": 100,
                "minimum": 1,
                "type": "number"
              },
              "duration": {
                "default": 30,
                "description": "Test duration in seconds",
                "maximum": 300,
                "minimum": 10,
                "type": "number"
              },
              "httpMethod": {
                "description": "HTTP method",
                "enum": [
                  "GET",
                  "POST",
                  "PUT",
                  "DELETE",
                  "PATCH"
                ],
                "type": "string"
              },
              "mode": {
                "default": "HTTP_FLOOD",
                "description": "Load test mode",
                "enum": [
                  "HTTP_FLOOD",
                  "BROWSER_USERS",
                  "COMBINED"
                ],
                "type": "string"
              },
              "rampUp": {
                "description": "Ramp-up time in seconds",
                "maximum": 60,
                "minimum": 0,
                "type": "number"
              },
              "targetId": {
                "description": "The target ID to load test",
                "type": "string"
              },
              "targetUrl": {
                "description": "Override URL (defaults to target URL)",
                "format": "uri",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "cancel_load_test",
          "title": "Cancel Load Test",
          "description": "Cancel a running load test.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "loadTestRunId": {
                "description": "The load test run ID to cancel",
                "type": "string"
              }
            },
            "required": [
              "loadTestRunId"
            ],
            "type": "object"
          }
        },
        {
          "name": "get_load_test",
          "title": "Get Load Test Results",
          "description": "Get details and results of a load test run.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "loadTestRunId": {
                "description": "The load test run ID",
                "type": "string"
              }
            },
            "required": [
              "loadTestRunId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_load_tests",
          "title": "List Load Test History",
          "description": "List recent load test runs for a target.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "limit": {
                "default": 10,
                "description": "Max results",
                "maximum": 50,
                "minimum": 1,
                "type": "number"
              },
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_secrets",
          "title": "List Target Secrets",
          "description": "List secrets stored in a target's vault. Values are masked — only key names and labels are shown. Secrets are used by test plugins (e.g. LOGIN_EMAIL, LOGIN_PASSWORD for B2B shops, ga4_service_account for GA4).",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "targetId": {
                "description": "The target ID",
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "store_secret",
          "title": "Store Secret",
          "description": "Store an encrypted secret in a target's vault. Common keys: LOGIN_EMAIL, LOGIN_PASSWORD (B2B shop auth), ga4_service_account (GA4 monitoring). Values are AES-256-GCM encrypted at rest.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "description": {
                "description": "Optional description",
                "maxLength": 500,
                "type": "string"
              },
              "environment": {
                "default": "PRODUCTION",
                "description": "Environment scope",
                "enum": [
                  "PRODUCTION",
                  "STAGING",
                  "DEVELOPMENT"
                ],
                "type": "string"
              },
              "key": {
                "description": "Secret key (e.g. LOGIN_EMAIL)",
                "maxLength": 100,
                "minLength": 1,
                "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$",
                "type": "string"
              },
              "label": {
                "description": "Human-readable label",
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              "targetId": {
                "description": "The target ID",
                "type": "string"
              },
              "value": {
                "description": "Secret value (will be encrypted)",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "targetId",
              "key",
              "label",
              "value"
            ],
            "type": "object"
          }
        },
        {
          "name": "rotate_secret",
          "title": "Rotate Secret",
          "description": "Update the value of an existing secret.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "newValue": {
                "description": "New secret value",
                "minLength": 1,
                "type": "string"
              },
              "secretId": {
                "description": "The secret ID to rotate",
                "type": "string"
              },
              "targetId": {
                "description": "The target ID (for access verification)",
                "type": "string"
              }
            },
            "required": [
              "secretId",
              "targetId",
              "newValue"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_secret",
          "title": "Delete Secret",
          "description": "Permanently delete a secret from a target's vault.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "secretId": {
                "description": "The secret ID to delete",
                "type": "string"
              },
              "targetId": {
                "description": "The target ID (for access verification)",
                "type": "string"
              }
            },
            "required": [
              "secretId",
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_page_fragments",
          "title": "List Page Fragments",
          "description": "List all reusable page fragments for the team. Fragments are shared step sequences (e.g. \"Login\", \"Dismiss Cookies\") that can be inserted into multiple Journeys via the use_fragment action.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "create_page_fragment",
          "title": "Create Page Fragment",
          "description": "Create a reusable step sequence that can be shared across multiple Journeys. Fragment names must be unique per team.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "description": {
                "description": "Fragment description",
                "maxLength": 2000,
                "type": "string"
              },
              "name": {
                "description": "Fragment name (unique per team)",
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              "steps": {
                "description": "Ordered list of browser actions",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "action": {
                      "enum": [
                        "navigate",
                        "click",
                        "type",
                        "fill",
                        "select",
                        "assert",
                        "wait",
                        "screenshot",
                        "scroll",
                        "hover"
                      ],
                      "type": "string"
                    },
                    "assertionOperator": {
                      "enum": [
                        "element_visible",
                        "element_hidden",
                        "url_contains",
                        "text_contains",
                        "element_count"
                      ],
                      "type": "string"
                    },
                    "label": {
                      "description": "Step description",
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "screenshot": {
                      "default": false,
                      "type": "boolean"
                    },
                    "target": {
                      "description": "CSS selector or URL",
                      "type": "string"
                    },
                    "value": {
                      "description": "Value to type/fill or URL to navigate",
                      "type": "string"
                    },
                    "waitMs": {
                      "maximum": 30000,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "action",
                    "label"
                  ],
                  "type": "object"
                },
                "maxItems": 30,
                "minItems": 1,
                "type": "array"
              }
            },
            "required": [
              "name",
              "steps"
            ],
            "type": "object"
          }
        },
        {
          "name": "update_page_fragment",
          "title": "Update Page Fragment",
          "description": "Update a page fragment. When steps are provided, all existing steps are replaced.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "description": {
                "anyOf": [
                  {
                    "maxLength": 2000,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fragmentId": {
                "description": "The fragment ID",
                "type": "string"
              },
              "name": {
                "description": "Updated name",
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              "steps": {
                "description": "Replacement steps",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "action": {
                      "enum": [
                        "navigate",
                        "click",
                        "type",
                        "fill",
                        "select",
                        "assert",
                        "wait",
                        "screenshot",
                        "scroll",
                        "hover"
                      ],
                      "type": "string"
                    },
                    "assertionOperator": {
                      "enum": [
                        "element_visible",
                        "element_hidden",
                        "url_contains",
                        "text_contains",
                        "element_count"
                      ],
                      "type": "string"
                    },
                    "label": {
                      "description": "Step description",
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "screenshot": {
                      "default": false,
                      "type": "boolean"
                    },
                    "target": {
                      "description": "CSS selector or URL",
                      "type": "string"
                    },
                    "value": {
                      "description": "Value to type/fill or URL to navigate",
                      "type": "string"
                    },
                    "waitMs": {
                      "maximum": 30000,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "action",
                    "label"
                  ],
                  "type": "object"
                },
                "maxItems": 30,
                "minItems": 1,
                "type": "array"
              }
            },
            "required": [
              "fragmentId"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_page_fragment",
          "title": "Delete Page Fragment",
          "description": "Permanently delete a page fragment.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "fragmentId": {
                "description": "The fragment ID to delete",
                "type": "string"
              }
            },
            "required": [
              "fragmentId"
            ],
            "type": "object"
          }
        },
        {
          "name": "create_target",
          "title": "Create Target",
          "description": "Add a new website, API, or webshop target for monitoring with full onboarding. Automatically enables compatible tests, triggers an initial scan, and captures a page screenshot. Requires write scope (Free plan: 1 target). Use analyze_target first to detect platform and get test recommendations.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "environment": {
                "default": "PRODUCTION",
                "description": "Deployment environment",
                "enum": [
                  "PRODUCTION",
                  "STAGING",
                  "DEV"
                ],
                "type": "string"
              },
              "name": {
                "description": "Display name for the target",
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              },
              "tags": {
                "default": [],
                "description": "Optional tags for categorization",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "type": {
                "description": "Target type: WEBSITE, API, or WEBSHOP. Use analyze_target to auto-detect.",
                "enum": [
                  "WEBSITE",
                  "API",
                  "WEBSHOP"
                ],
                "type": "string"
              },
              "uptimeEnabled": {
                "default": true,
                "description": "Enable background uptime monitoring",
                "type": "boolean"
              },
              "url": {
                "description": "URL to monitor, e.g. \"https://example.com\"",
                "format": "uri",
                "type": "string"
              },
              "weight": {
                "default": "PUBLIC",
                "description": "Business weight, used to rank findings by consequence: REVENUE_PATH (checkout, payment, signup), PUBLIC (customer-visible but not transactional), INTERNAL (staging, admin tooling).",
                "enum": [
                  "REVENUE_PATH",
                  "PUBLIC",
                  "INTERNAL"
                ],
                "type": "string"
              }
            },
            "required": [
              "name",
              "url",
              "type"
            ],
            "type": "object"
          }
        },
        {
          "name": "update_target",
          "title": "Update Target",
          "description": "Update a target's properties (name, URL, type, environment, business weight, tags, uptime toggle).",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "environment": {
                "description": "New environment",
                "enum": [
                  "PRODUCTION",
                  "STAGING",
                  "DEV"
                ],
                "type": "string"
              },
              "name": {
                "description": "New display name",
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              },
              "tags": {
                "description": "New tags (replaces existing)",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "targetId": {
                "description": "The target ID to update",
                "type": "string"
              },
              "type": {
                "description": "New target type",
                "enum": [
                  "WEBSITE",
                  "API",
                  "WEBSHOP"
                ],
                "type": "string"
              },
              "uptimeEnabled": {
                "description": "Toggle uptime monitoring",
                "type": "boolean"
              },
              "uptimeKeyword": {
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "not": {}
                      },
                      {
                        "maxLength": 500,
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Keyword to verify in response body during uptime checks. When set, every uptime ping GETs the page and verifies this text appears (case-insensitive). If missing, the site is treated as DOWN even on HTTP 200. Set to null to disable keyword verification."
              },
              "url": {
                "description": "New URL",
                "format": "uri",
                "type": "string"
              },
              "weight": {
                "description": "New business weight: REVENUE_PATH, PUBLIC or INTERNAL. Changing this rescores the target's open findings so the consequence ranking updates immediately.",
                "enum": [
                  "REVENUE_PATH",
                  "PUBLIC",
                  "INTERNAL"
                ],
                "type": "string"
              }
            },
            "required": [
              "targetId"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete_target",
          "title": "Delete Target",
          "description": "Permanently delete a target and all its associated data (runs, findings, incidents, artifacts). This cannot be undone.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "confirm": {
                "description": "Must be true to confirm deletion",
                "type": "boolean"
              },
              "targetId": {
                "description": "The target ID to delete",
                "type": "string"
              }
            },
            "required": [
              "targetId",
              "confirm"
            ],
            "type": "object"
          }
        },
        {
          "name": "analyze_target",
          "title": "Analyze Target",
          "description": "Fingerprint a URL and get test recommendations before creating a target. Detects platform (Shopify, WordPress, etc.), CDN, server stack, frontend framework, analytics, and B2B/ecommerce signals. Returns recommended tests with explanations. Use this before create_target to know what type to assign and which tests will be enabled.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "url": {
                "description": "URL to analyze, e.g. \"https://example.com\"",
                "format": "uri",
                "type": "string"
              }
            },
            "required": [
              "url"
            ],
            "type": "object"
          }
        },
        {
          "name": "import_targets",
          "title": "Import Targets",
          "description": "Bulk import up to 100 websites for monitoring. Each URL gets a target created with auto-enabled tests, initial scan, and screenshot capture. Partial success — failed URLs are reported individually without blocking others.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "items": {
                "description": "Array of targets to import",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "name": {
                      "description": "Display name (defaults to hostname)",
                      "type": "string"
                    },
                    "type": {
                      "default": "WEBSITE",
                      "description": "Target type",
                      "enum": [
                        "WEBSITE",
                        "API",
                        "WEBSHOP"
                      ],
                      "type": "string"
                    },
                    "url": {
                      "description": "URL to monitor",
                      "format": "uri",
                      "type": "string"
                    }
                  },
                  "required": [
                    "url"
                  ],
                  "type": "object"
                },
                "maxItems": 100,
                "minItems": 1,
                "type": "array"
              }
            },
            "required": [
              "items"
            ],
            "type": "object"
          }
        },
        {
          "name": "create_muting_rule",
          "title": "Create Muting Rule",
          "description": "Create a rule to auto-mute findings matching a pattern. Existing open findings matching the rule are muted immediately. Supports muting by fingerprint pattern, test definition, or test+target combination.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "expiresAt": {
                "description": "Optional expiry as ISO 8601 string. Rule auto-expires after this time.",
                "type": "string"
              },
              "fingerprintPattern": {
                "description": "Substring to match in finding fingerprints (required for FINGERPRINT scope)",
                "type": "string"
              },
              "reason": {
                "description": "Reason for muting",
                "maxLength": 500,
                "type": "string"
              },
              "scope": {
                "description": "FINGERPRINT: match by finding fingerprint substring. TEST_DEFINITION: mute all findings from a test. TEST_TARGET: mute findings from a specific test on a specific target.",
                "enum": [
                  "FINGERPRINT",
                  "TEST_DEFINITION",
                  "TEST_TARGET"
                ],
                "type": "string"
              },
              "targetId": {
                "description": "Target ID to scope the rule to (required for TEST_TARGET, optional for others)",
                "type": "string"
              },
              "testDefinitionId": {
                "description": "Test definition ID (required for TEST_DEFINITION and TEST_TARGET scopes)",
                "type": "string"
              }
            },
            "required": [
              "scope"
            ],
            "type": "object"
          }
        },
        {
          "name": "system_health",
          "title": "System Health",
          "description": "Get a comprehensive system health report: BullMQ queue depths, active/stuck runs, user sessions, notification delivery stats, and recent error counts. Requires admin scope.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "update_test",
          "title": "Update Test Definition",
          "description": "Enable or disable a test definition globally, or update its schedule/timeout. Requires admin scope.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "defaultSchedule": {
                "description": "Cron schedule (e.g. \"0 */6 * * *\")",
                "type": "string"
              },
              "enabled": {
                "description": "Enable or disable the test globally",
                "type": "boolean"
              },
              "slug": {
                "description": "Test plugin slug (e.g. \"http-protocol-check\")",
                "type": "string"
              },
              "timeout": {
                "description": "Timeout in milliseconds",
                "type": "number"
              }
            },
            "required": [
              "slug"
            ],
            "type": "object"
          }
        },
        {
          "name": "enable_all_tests",
          "title": "Enable All Tests",
          "description": "Enable all test definitions globally. Optionally filter by category to only enable tests in that category. Requires admin scope.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "category": {
                "description": "Only enable tests in this category. Omit to enable all.",
                "enum": [
                  "SEO",
                  "SECURITY",
                  "PERFORMANCE",
                  "MOBILE",
                  "ACCESSIBILITY",
                  "ECOMMERCE",
                  "API_HEALTH"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "disable_all_tests",
          "title": "Disable All Tests",
          "description": "Disable all test definitions globally. Optionally filter by category to only disable tests in that category. Requires admin scope.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "category": {
                "description": "Only disable tests in this category. Omit to disable all.",
                "enum": [
                  "SEO",
                  "SECURITY",
                  "PERFORMANCE",
                  "MOBILE",
                  "ACCESSIBILITY",
                  "ECOMMERCE",
                  "API_HEALTH"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        }
      ]
    },
    "name": "validoria-mcp",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": [
      {
        "registryType": "npm",
        "identifier": "validoria-mcp",
        "version": "2.0.1",
        "transport": "stdio"
      }
    ],
    "pageJsonUrl": "https://www.anchorterminal.com/tools/validoria-mcp.json",
    "popularity": {
      "npmWeekly": 24
    },
    "registryName": "com.validoria/validoria-mcp",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://api.teste.no/api/mcp"
      }
    ],
    "repository": "",
    "reviewed": false,
    "slug": "validoria-mcp",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.validoria/validoria-mcp",
    "summary": "Continuous website testing by Validoria — monitor security, SEO, performance, and accessibility.",
    "updatedAt": "2026-08-10T05:49:33Z",
    "url": "https://www.anchorterminal.com/tools/validoria-mcp",
    "vendor": "validoria.com",
    "vendorUrl": "https://validoria.com",
    "version": "2.0.1",
    "websiteUrl": "https://validoria.com",
    "where": "both",
    "why": [
      "vendor"
    ]
  }
}
