Skip to main content
Glama

Get site readiness

get_readiness
Read-onlyIdempotent

The brand site's AI readiness scan. view summary: score, verdict, lens and pillar scores, and open findings by severity. view action_plan: open findings to fix, with the questions no page answers. view pages: pages the scan read, or with page_id one page's open findings. view history: past scans. view competitors: competitor scans, the checks they pass that the brand fails, and the plan's competitor limit and cooldown; competitor scans are started in the app, not through MCP.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNoaction_plan order. Defaults to points.
viewNoDefaults to summary.
brandYesBrand or study: its ID from list_brands, or its name (exact or a unique prefix).
limitNoRows per page. Defaults to 25, max 100. A page may hold fewer rows to stay within the response size; follow next_cursor.
cursorNonext_cursor from the previous page. Leave out for the first page.
run_idNoOptional scan ID; defaults to the latest.
statusNoaction_plan filter. Defaults to open.
page_idNopages view: a page_id from the pages list, for that page's findings.
severityNoaction_plan filter: comma list of critical, major, minor, info.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYes
generated_atYesRFC 3339 time the response was made.
schema_versionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / page_id
      Added value: +{
      +  "description": "pages view: a page_id from the pages list, for that page's findings.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / data / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "brand": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "description": "The brand's website, or empty when none is set.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "name",
      -          "url"
      -        ],
      -        "type": "object"
      -      },
      -      "lenses": {
      -        "description": "Readiness, SEO health and security scores.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "lens": {
      -              "type": "string"
      -            },
      -            "score": {
      -              "type": [
      -                "null",
      -                "number"
      -              ]
      -            },
      -            "verdict": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "lens",
      -            "score",
      -            "verdict"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "open_findings": {
      -        "additionalProperties": false,
      -        "description": "Checks the site fails or only partly passes, by severity. view action_plan lists them.",
      -        "properties": {
      -          "critical": {
      -            "type": "integer"
      -          },
      -          "info": {
      -            "type": "integer"
      -          },
      -          "major": {
      -            "type": "integer"
      -          },
      -          "minor": {
      -            "type": "integer"
      -          },
      -          "total": {
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "critical",
      -          "major",
      -          "minor",
      -          "info",
      -          "total"
      -        ],
      -        "type": "object"
      -      },
      -      "pages_audited": {
      -        "type": "integer"
      -      },
      -      "passing_checks": {
      -        "type": "integer"
      -      },
      -      "pillars": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "label": {
      -              "type": "string"
      -            },
      -            "pillar": {
      -              "type": "string"
      -            },
      -            "points_awarded": {
      -              "type": "number"
      -            },
      -            "points_possible": {
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "pillar",
      -            "label",
      -            "points_awarded",
      -            "points_possible"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "poll_after_seconds": {
      -        "description": "While a scan runs, how long to wait before reading again; 0 otherwise.",
      -        "type": "integer"
      -      },
      -      "progress": {
      -        "additionalProperties": false,
      -        "description": "Set while a scan runs.",
      -        "properties": {
      -          "message": {
      -            "type": "string"
      -          },
      -          "page_limit": {
      -            "type": "integer"
      -          },
      -          "pages_fetched": {
      -            "type": "integer"
      -          },
      -          "percent": {
      -            "type": "integer"
      -          },
      -          "stage": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "stage",
      -          "message",
      -          "percent",
      -          "pages_fetched",
      -          "page_limit"
      -        ],
      -        "type": [
      -          "null",
      -          "object"
      -        ]
      -      },
      -      "scan": {
      -        "additionalProperties": false,
      -        "description": "The scan summarised; null before the first scan.",
      -        "properties": {
      -          "completed_at": {
      -            "type": "string"
      -          },
      -          "error": {
      -            "type": "string"
      -          },
      -          "id": {
      -            "description": "Scan ID, the run_id other readiness calls take.",
      -            "type": "string"
      -          },
      -          "started_at": {
      -            "type": "string"
      -          },
      -          "status": {
      -            "description": "queued, processing, complete, or failed.",
      -            "type": "string"
      -          },
      -          "url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "status",
      -          "url",
      -          "error",
      -          "started_at",
      -          "completed_at"
      -        ],
      -        "type": [
      -          "null",
      -          "object"
      -        ]
      -      },
      -      "scan_in_progress": {
      -        "type": "boolean"
      -      },
      -      "score": {
      -        "description": "Readiness score, 0-100.",
      -        "type": [
      -          "null",
      -          "number"
      -        ]
      -      },
      -      "verdict": {
      -        "description": "Excellent (90+), Good (75+), Needs work (60+), Poor (40+), or Critical.",
      -        "type": "string"
      -      },
      -      "view": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "brand",
      -      "view",
      -      "scan",
      -      "score",
      -      "verdict",
      -      "lenses",
      -      "pillars",
      -      "open_findings",
      -      "passing_checks",
      -      "pages_audited",
      -      "scan_in_progress",
      -      "progress",
      -      "poll_after_seconds"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "brand": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "description": "The brand's website, or empty when none is set.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "name",
      -          "url"
      -        ],
      -        "type": "object"
      -      },
      -      "findings": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "affected_pages": {
      -              "type": "integer"
      -            },
      -            "check_id": {
      -              "description": "Pass to get_readiness_finding or verify_readiness_fix.",
      -              "type": "string"
      -            },
      -            "consequence": {
      -              "type": "string"
      -            },
      -            "effort_minutes": {
      -              "type": [
      -                "null",
      -                "integer"
      -              ]
      -            },
      -            "fix_type": {
      -              "type": "string"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "latest_check": {
      -              "additionalProperties": false,
      -              "description": "The latest re-check since the scan.",
      -              "properties": {
      -                "check_id": {
      -                  "type": "string"
      -                },
      -                "completed_at": {
      -                  "type": "string"
      -                },
      -                "created_at": {
      -                  "type": "string"
      -                },
      -                "error": {
      -                  "type": "string"
      -                },
      -                "id": {
      -                  "description": "The check_request_id get_readiness_finding takes.",
      -                  "type": "string"
      -                },
      -                "per_url": {
      -                  "items": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "status": {
      -                        "type": "string"
      -                      },
      -                      "url": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "url",
      -                      "status"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "type": "array"
      -                },
      -                "recharges_at": {
      -                  "description": "When the re-check's charge returns to the monthly allowance; empty when it used none.",
      -                  "type": "string"
      -                },
      -                "resolved": {
      -                  "description": "Whether the issue is fixed; null until complete.",
      -                  "type": [
      -                    "null",
      -                    "boolean"
      -                  ]
      -                },
      -                "status": {
      -                  "description": "queued, processing, complete, or failed.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "check_id",
      -                "status",
      -                "resolved",
      -                "per_url",
      -                "error",
      -                "created_at",
      -                "completed_at",
      -                "recharges_at"
      -              ],
      -              "type": [
      -                "null",
      -                "object"
      -              ]
      -            },
      -            "owner_role": {
      -              "type": "string"
      -            },
      -            "pillar": {
      -              "type": "string"
      -            },
      -            "points_recoverable": {
      -              "type": "number"
      -            },
      -            "severity": {
      -              "description": "critical, major, minor, or info; empty when passing.",
      -              "type": "string"
      -            },
      -            "site_wide": {
      -              "description": "One fix applies to the whole site.",
      -              "type": "boolean"
      -            },
      -            "status": {
      -              "description": "fail, warning, pass, or not_applicable.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "check_id",
      -            "label",
      -            "pillar",
      -            "status",
      -            "severity",
      -            "consequence",
      -            "points_recoverable",
      -            "effort_minutes",
      -            "owner_role",
      -            "fix_type",
      -            "affected_pages",
      -            "site_wide",
      -            "latest_check"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "open_findings": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "critical": {
      -            "type": "integer"
      -          },
      -          "info": {
      -            "type": "integer"
      -          },
      -          "major": {
      -            "type": "integer"
      -          },
      -          "minor": {
      -            "type": "integer"
      -          },
      -          "total": {
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "critical",
      -          "major",
      -          "minor",
      -          "info",
      -          "total"
      -        ],
      -        "type": "object"
      -      },
      -      "pagination": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "next_cursor": {
      -            "description": "Pass as cursor to get the next page; empty on the last page.",
      -            "type": "string"
      -          },
      -          "total": {
      -            "description": "Items across all pages; null when not counted.",
      -            "type": [
      -              "null",
      -              "integer"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "next_cursor",
      -          "total"
      -        ],
      -        "type": "object"
      -      },
      -      "questions_no_page_answers": {
      -        "description": "Tracked prompts no page on the site answers well.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "monthly_ai_searches": {
      -              "type": [
      -                "null",
      -                "integer"
      -              ]
      -            },
      -            "opportunity_id": {
      -              "description": "The content gap opportunity for it, when there is one.",
      -              "type": "string"
      -            },
      -            "prompt_id": {
      -              "type": "string"
      -            },
      -            "text": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "prompt_id",
      -            "text",
      -            "monthly_ai_searches",
      -            "opportunity_id"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "scan_id": {
      -        "type": "string"
      -      },
      -      "view": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "brand",
      -      "view",
      -      "scan_id",
      -      "open_findings",
      -      "findings",
      -      "questions_no_page_answers",
      -      "pagination"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "brand": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "description": "The brand's website, or empty when none is set.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "name",
      -          "url"
      -        ],
      -        "type": "object"
      -      },
      -      "pages": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "page_type": {
      -              "type": "string"
      -            },
      -            "response_time_ms": {
      -              "type": "integer"
      -            },
      -            "status_code": {
      -              "type": "integer"
      -            },
      -            "text_chars": {
      -              "type": "integer"
      -            },
      -            "url": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "url",
      -            "page_type",
      -            "status_code",
      -            "response_time_ms",
      -            "text_chars"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "pagination": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "next_cursor": {
      -            "description": "Pass as cursor to get the next page; empty on the last page.",
      -            "type": "string"
      -          },
      -          "total": {
      -            "description": "Items across all pages; null when not counted.",
      -            "type": [
      -              "null",
      -              "integer"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "next_cursor",
      -          "total"
      -        ],
      -        "type": "object"
      -      },
      -      "scan_id": {
      -        "type": "string"
      -      },
      -      "view": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "brand",
      -      "view",
      -      "scan_id",
      -      "pages",
      -      "pagination"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "brand": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "description": "The brand's website, or empty when none is set.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "name",
      -          "url"
      -        ],
      -        "type": "object"
      -      },
      -      "pagination": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "next_cursor": {
      -            "description": "Pass as cursor to get the next page; empty on the last page.",
      -            "type": "string"
      -          },
      -          "total": {
      -            "description": "Items across all pages; null when not counted.",
      -            "type": [
      -              "null",
      -              "integer"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "next_cursor",
      -          "total"
      -        ],
      -        "type": "object"
      -      },
      -      "scans": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "completed_at": {
      -              "type": "string"
      -            },
      -            "created_at": {
      -              "type": "string"
      -            },
      -            "error": {
      -              "type": "string"
      -            },
      -            "fixed": {
      -              "description": "Findings fixed since the previous scan.",
      -              "type": "integer"
      -            },
      -            "new": {
      -              "type": "integer"
      -            },
      -            "pages_audited": {
      -              "type": [
      -                "null",
      -                "integer"
      -              ]
      -            },
      -            "readiness": {
      -              "type": [
      -                "null",
      -                "number"
      -              ]
      -            },
      -            "regressed": {
      -              "type": "integer"
      -            },
      -            "scan_id": {
      -              "type": "string"
      -            },
      -            "security": {
      -              "type": [
      -                "null",
      -                "number"
      -              ]
      -            },
      -            "seo": {
      -              "type": [
      -                "null",
      -                "number"
      -              ]
      -            },
      -            "status": {
      -              "type": "string"
      -            },
      -            "trigger": {
      -              "description": "manual or scheduled.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scan_id",
      -            "status",
      -            "trigger",
      -            "readiness",
      -            "seo",
      -            "security",
      -            "pages_audited",
      -            "fixed",
      -            "new",
      -            "regressed",
      -            "created_at",
      -            "completed_at",
      -            "error"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "view": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "brand",
      -      "view",
      -      "scans",
      -      "pagination"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "allowed": {
      -        "description": "Whether competitor scans are available.",
      -        "type": "boolean"
      -      },
      -      "brand": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "description": "The brand's website, or empty when none is set.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "name",
      -          "url"
      -        ],
      -        "type": "object"
      -      },
      -      "competitors": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "brand": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "id": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                },
      -                "url": {
      -                  "description": "The brand's website, or empty when none is set.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "id",
      -                "name",
      -                "url"
      -              ],
      -              "type": "object"
      -            },
      -            "next_available_at": {
      -              "type": "string"
      -            },
      -            "scan_id": {
      -              "type": "string"
      -            },
      -            "scanned_at": {
      -              "type": "string"
      -            },
      -            "scores": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "readiness": {
      -                  "type": [
      -                    "null",
      -                    "number"
      -                  ]
      -                },
      -                "security": {
      -                  "type": [
      -                    "null",
      -                    "number"
      -                  ]
      -                },
      -                "seo": {
      -                  "type": [
      -                    "null",
      -                    "number"
      -                  ]
      -                }
      -              },
      -              "required": [
      -                "readiness",
      -                "seo",
      -                "security"
      -              ],
      -              "type": [
      -                "null",
      -                "object"
      -              ]
      -            },
      -            "status": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "brand",
      -            "scan_id",
      -            "status",
      -            "scores",
      -            "scanned_at",
      -            "next_available_at"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "gaps": {
      -        "description": "Checks competitors pass and the brand does not.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "check_id": {
      -              "type": "string"
      -            },
      -            "competitors": {
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "fix_summary": {
      -              "type": "string"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "pillar": {
      -              "type": "string"
      -            },
      -            "points_possible": {
      -              "type": "number"
      -            },
      -            "your_status": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "check_id",
      -            "label",
      -            "pillar",
      -            "your_status",
      -            "competitors",
      -            "points_possible",
      -            "fix_summary"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "reason": {
      -        "description": "Why not: plan, role, or no_competitors.",
      -        "type": "string"
      -      },
      -      "view": {
      -        "type": "string"
      -      },
      -      "you": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "readiness": {
      -            "type": [
      -              "null",
      -              "number"
      -            ]
      -          },
      -          "security": {
      -            "type": [
      -              "null",
      -              "number"
      -            ]
      -          },
      -          "seo": {
      -            "type": [
      -              "null",
      -              "number"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "readiness",
      -          "seo",
      -          "security"
      -        ],
      -        "type": [
      -          "null",
      -          "object"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "brand",
      -      "view",
      -      "allowed",
      -      "reason",
      -      "you",
      -      "competitors",
      -      "gaps"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "brand": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The brand's website, or empty when none is set.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "url"
      +        ],
      +        "type": "object"
      +      },
      +      "can_start_scan": {
      +        "description": "Whether run_readiness_scan can start a scan for you now.",
      +        "type": "boolean"
      +      },
      +      "disabled_reason": {
      +        "description": "Why it cannot: scheduled_only (later scans run weekly), run_active, role, or no_site; empty when it can.",
      +        "type": "string"
      +      },
      +      "lenses": {
      +        "description": "Readiness, SEO health and security scores.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "lens": {
      +              "type": "string"
      +            },
      +            "score": {
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "verdict": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "lens",
      +            "score",
      +            "verdict"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "next_run_at": {
      +        "description": "When the next weekly scan runs; empty before the first scan completes.",
      +        "type": "string"
      +      },
      +      "open_findings": {
      +        "additionalProperties": false,
      +        "description": "Checks the site fails or only partly passes, by severity. view action_plan lists them.",
      +        "properties": {
      +          "critical": {
      +            "type": "integer"
      +          },
      +          "info": {
      +            "type": "integer"
      +          },
      +          "major": {
      +            "type": "integer"
      +          },
      +          "minor": {
      +            "type": "integer"
      +          },
      +          "total": {
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "critical",
      +          "major",
      +          "minor",
      +          "info",
      +          "total"
      +        ],
      +        "type": "object"
      +      },
      +      "pages_audited": {
      +        "type": "integer"
      +      },
      +      "passing_checks": {
      +        "type": "integer"
      +      },
      +      "pillars": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "label": {
      +              "type": "string"
      +            },
      +            "pillar": {
      +              "type": "string"
      +            },
      +            "points_awarded": {
      +              "type": "number"
      +            },
      +            "points_possible": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "pillar",
      +            "label",
      +            "points_awarded",
      +            "points_possible"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "poll_after_seconds": {
      +        "description": "While a scan runs, how long to wait before reading again; 0 otherwise.",
      +        "type": "integer"
      +      },
      +      "progress": {
      +        "additionalProperties": false,
      +        "description": "Set while a scan runs.",
      +        "properties": {
      +          "message": {
      +            "type": "string"
      +          },
      +          "page_limit": {
      +            "type": "integer"
      +          },
      +          "pages_fetched": {
      +            "type": "integer"
      +          },
      +          "percent": {
      +            "type": "integer"
      +          },
      +          "stage": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "stage",
      +          "message",
      +          "percent",
      +          "pages_fetched",
      +          "page_limit"
      +        ],
      +        "type": [
      +          "null",
      +          "object"
      +        ]
      +      },
      +      "scan": {
      +        "additionalProperties": false,
      +        "description": "The scan summarised; null before the first scan.",
      +        "properties": {
      +          "completed_at": {
      +            "type": "string"
      +          },
      +          "error": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "description": "Scan ID, the run_id other readiness calls take.",
      +            "type": "string"
      +          },
      +          "started_at": {
      +            "type": "string"
      +          },
      +          "status": {
      +            "description": "queued, processing, complete, or failed.",
      +            "type": "string"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "status",
      +          "url",
      +          "error",
      +          "started_at",
      +          "completed_at"
      +        ],
      +        "type": [
      +          "null",
      +          "object"
      +        ]
      +      },
      +      "scan_in_progress": {
      +        "type": "boolean"
      +      },
      +      "score": {
      +        "description": "Readiness score, 0-100.",
      +        "type": [
      +          "null",
      +          "number"
      +        ]
      +      },
      +      "verdict": {
      +        "description": "Excellent (90+), Good (75+), Needs work (60+), Poor (40+), or Critical.",
      +        "type": "string"
      +      },
      +      "view": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "brand",
      +      "view",
      +      "scan",
      +      "score",
      +      "verdict",
      +      "lenses",
      +      "pillars",
      +      "open_findings",
      +      "passing_checks",
      +      "pages_audited",
      +      "scan_in_progress",
      +      "progress",
      +      "poll_after_seconds",
      +      "can_start_scan",
      +      "disabled_reason",
      +      "next_run_at"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "brand": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The brand's website, or empty when none is set.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "url"
      +        ],
      +        "type": "object"
      +      },
      +      "findings": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "affected_pages": {
      +              "type": "integer"
      +            },
      +            "check_id": {
      +              "description": "Pass to get_readiness_finding or verify_readiness_fix.",
      +              "type": "string"
      +            },
      +            "consequence": {
      +              "type": "string"
      +            },
      +            "effort_minutes": {
      +              "type": [
      +                "null",
      +                "integer"
      +              ]
      +            },
      +            "fix_type": {
      +              "type": "string"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "latest_check": {
      +              "additionalProperties": false,
      +              "description": "The latest re-check since the scan.",
      +              "properties": {
      +                "check_id": {
      +                  "type": "string"
      +                },
      +                "completed_at": {
      +                  "type": "string"
      +                },
      +                "created_at": {
      +                  "type": "string"
      +                },
      +                "error": {
      +                  "type": "string"
      +                },
      +                "id": {
      +                  "description": "The check_request_id get_readiness_finding takes.",
      +                  "type": "string"
      +                },
      +                "per_url": {
      +                  "items": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "status": {
      +                        "type": "string"
      +                      },
      +                      "url": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "url",
      +                      "status"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "recharges_at": {
      +                  "description": "When the re-check's charge returns to the monthly allowance; empty when it used none.",
      +                  "type": "string"
      +                },
      +                "resolved": {
      +                  "description": "Whether the issue is fixed; null until complete.",
      +                  "type": [
      +                    "null",
      +                    "boolean"
      +                  ]
      +                },
      +                "status": {
      +                  "description": "queued, processing, complete, or failed.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "check_id",
      +                "status",
      +                "resolved",
      +                "per_url",
      +                "error",
      +                "created_at",
      +                "completed_at",
      +                "recharges_at"
      +              ],
      +              "type": [
      +                "null",
      +                "object"
      +              ]
      +            },
      +            "owner_role": {
      +              "type": "string"
      +            },
      +            "pillar": {
      +              "type": "string"
      +            },
      +            "points_recoverable": {
      +              "type": "number"
      +            },
      +            "severity": {
      +              "description": "critical, major, minor, or info; empty when passing.",
      +              "type": "string"
      +            },
      +            "site_wide": {
      +              "description": "One fix applies to the whole site.",
      +              "type": "boolean"
      +            },
      +            "status": {
      +              "description": "fail, warning, pass, or not_applicable.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "check_id",
      +            "label",
      +            "pillar",
      +            "status",
      +            "severity",
      +            "consequence",
      +            "points_recoverable",
      +            "effort_minutes",
      +            "owner_role",
      +            "fix_type",
      +            "affected_pages",
      +            "site_wide",
      +            "latest_check"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "open_findings": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "critical": {
      +            "type": "integer"
      +          },
      +          "info": {
      +            "type": "integer"
      +          },
      +          "major": {
      +            "type": "integer"
      +          },
      +          "minor": {
      +            "type": "integer"
      +          },
      +          "total": {
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "critical",
      +          "major",
      +          "minor",
      +          "info",
      +          "total"
      +        ],
      +        "type": "object"
      +      },
      +      "pagination": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "next_cursor": {
      +            "description": "Pass as cursor to get the next page; empty on the last page.",
      +            "type": "string"
      +          },
      +          "total": {
      +            "description": "Items across all pages; null when not counted.",
      +            "type": [
      +              "null",
      +              "integer"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "next_cursor",
      +          "total"
      +        ],
      +        "type": "object"
      +      },
      +      "questions_no_page_answers": {
      +        "description": "Tracked prompts no page on the site answers well.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "monthly_ai_searches": {
      +              "type": [
      +                "null",
      +                "integer"
      +              ]
      +            },
      +            "opportunity_id": {
      +              "description": "The content gap opportunity for it, when there is one.",
      +              "type": "string"
      +            },
      +            "prompt_id": {
      +              "type": "string"
      +            },
      +            "text": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "prompt_id",
      +            "text",
      +            "monthly_ai_searches",
      +            "opportunity_id"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "scan_id": {
      +        "type": "string"
      +      },
      +      "view": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "brand",
      +      "view",
      +      "scan_id",
      +      "open_findings",
      +      "findings",
      +      "questions_no_page_answers",
      +      "pagination"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "brand": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The brand's website, or empty when none is set.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "url"
      +        ],
      +        "type": "object"
      +      },
      +      "pages": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "page_id": {
      +              "description": "Pass to get_readiness view pages with page_id for this page's findings.",
      +              "type": "string"
      +            },
      +            "page_type": {
      +              "type": "string"
      +            },
      +            "response_time_ms": {
      +              "type": "integer"
      +            },
      +            "status_code": {
      +              "type": "integer"
      +            },
      +            "text_chars": {
      +              "type": "integer"
      +            },
      +            "url": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "page_id",
      +            "url",
      +            "page_type",
      +            "status_code",
      +            "response_time_ms",
      +            "text_chars"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "pagination": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "next_cursor": {
      +            "description": "Pass as cursor to get the next page; empty on the last page.",
      +            "type": "string"
      +          },
      +          "total": {
      +            "description": "Items across all pages; null when not counted.",
      +            "type": [
      +              "null",
      +              "integer"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "next_cursor",
      +          "total"
      +        ],
      +        "type": "object"
      +      },
      +      "scan_id": {
      +        "type": "string"
      +      },
      +      "view": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "brand",
      +      "view",
      +      "scan_id",
      +      "pages",
      +      "pagination"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "brand": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The brand's website, or empty when none is set.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "url"
      +        ],
      +        "type": "object"
      +      },
      +      "findings": {
      +        "description": "Open findings that affect this page, in fix order; at most 25.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "affected_pages": {
      +              "type": "integer"
      +            },
      +            "check_id": {
      +              "description": "Pass to get_readiness_finding or verify_readiness_fix.",
      +              "type": "string"
      +            },
      +            "consequence": {
      +              "type": "string"
      +            },
      +            "effort_minutes": {
      +              "type": [
      +                "null",
      +                "integer"
      +              ]
      +            },
      +            "fix_type": {
      +              "type": "string"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "latest_check": {
      +              "additionalProperties": false,
      +              "description": "The latest re-check since the scan.",
      +              "properties": {
      +                "check_id": {
      +                  "type": "string"
      +                },
      +                "completed_at": {
      +                  "type": "string"
      +                },
      +                "created_at": {
      +                  "type": "string"
      +                },
      +                "error": {
      +                  "type": "string"
      +                },
      +                "id": {
      +                  "description": "The check_request_id get_readiness_finding takes.",
      +                  "type": "string"
      +                },
      +                "per_url": {
      +                  "items": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "status": {
      +                        "type": "string"
      +                      },
      +                      "url": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "url",
      +                      "status"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "recharges_at": {
      +                  "description": "When the re-check's charge returns to the monthly allowance; empty when it used none.",
      +                  "type": "string"
      +                },
      +                "resolved": {
      +                  "description": "Whether the issue is fixed; null until complete.",
      +                  "type": [
      +                    "null",
      +                    "boolean"
      +                  ]
      +                },
      +                "status": {
      +                  "description": "queued, processing, complete, or failed.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "check_id",
      +                "status",
      +                "resolved",
      +                "per_url",
      +                "error",
      +                "created_at",
      +                "completed_at",
      +                "recharges_at"
      +              ],
      +              "type": [
      +                "null",
      +                "object"
      +              ]
      +            },
      +            "owner_role": {
      +              "type": "string"
      +            },
      +            "pillar": {
      +              "type": "string"
      +            },
      +            "points_recoverable": {
      +              "type": "number"
      +            },
      +            "severity": {
      +              "description": "critical, major, minor, or info; empty when passing.",
      +              "type": "string"
      +            },
      +            "site_wide": {
      +              "description": "One fix applies to the whole site.",
      +              "type": "boolean"
      +            },
      +            "status": {
      +              "description": "fail, warning, pass, or not_applicable.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "check_id",
      +            "label",
      +            "pillar",
      +            "status",
      +            "severity",
      +            "consequence",
      +            "points_recoverable",
      +            "effort_minutes",
      +            "owner_role",
      +            "fix_type",
      +            "affected_pages",
      +            "site_wide",
      +            "latest_check"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "page": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "page_id": {
      +            "description": "Pass to get_readiness view pages with page_id for this page's findings.",
      +            "type": "string"
      +          },
      +          "page_type": {
      +            "type": "string"
      +          },
      +          "response_time_ms": {
      +            "type": "integer"
      +          },
      +          "status_code": {
      +            "type": "integer"
      +          },
      +          "text_chars": {
      +            "type": "integer"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "page_id",
      +          "url",
      +          "page_type",
      +          "status_code",
      +          "response_time_ms",
      +          "text_chars"
      +        ],
      +        "type": "object"
      +      },
      +      "scan_id": {
      +        "type": "string"
      +      },
      +      "total_findings": {
      +        "type": "integer"
      +      },
      +      "view": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "brand",
      +      "view",
      +      "scan_id",
      +      "page",
      +      "findings",
      +      "total_findings"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "brand": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The brand's website, or empty when none is set.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "url"
      +        ],
      +        "type": "object"
      +      },
      +      "pagination": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "next_cursor": {
      +            "description": "Pass as cursor to get the next page; empty on the last page.",
      +            "type": "string"
      +          },
      +          "total": {
      +            "description": "Items across all pages; null when not counted.",
      +            "type": [
      +              "null",
      +              "integer"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "next_cursor",
      +          "total"
      +        ],
      +        "type": "object"
      +      },
      +      "scans": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "completed_at": {
      +              "type": "string"
      +            },
      +            "created_at": {
      +              "type": "string"
      +            },
      +            "error": {
      +              "type": "string"
      +            },
      +            "fixed": {
      +              "description": "Findings fixed since the previous scan.",
      +              "type": "integer"
      +            },
      +            "new": {
      +              "type": "integer"
      +            },
      +            "pages_audited": {
      +              "type": [
      +                "null",
      +                "integer"
      +              ]
      +            },
      +            "readiness": {
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "regressed": {
      +              "type": "integer"
      +            },
      +            "scan_id": {
      +              "type": "string"
      +            },
      +            "security": {
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "seo": {
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "status": {
      +              "type": "string"
      +            },
      +            "trigger": {
      +              "description": "manual or scheduled.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scan_id",
      +            "status",
      +            "trigger",
      +            "readiness",
      +            "seo",
      +            "security",
      +            "pages_audited",
      +            "fixed",
      +            "new",
      +            "regressed",
      +            "created_at",
      +            "completed_at",
      +            "error"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "view": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "brand",
      +      "view",
      +      "scans",
      +      "pagination"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "allowed": {
      +        "description": "Whether competitor scans are available.",
      +        "type": "boolean"
      +      },
      +      "brand": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The brand's website, or empty when none is set.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "url"
      +        ],
      +        "type": "object"
      +      },
      +      "competitors": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "brand": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "description": "The brand's website, or empty when none is set.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            "next_available_at": {
      +              "type": "string"
      +            },
      +            "scan_id": {
      +              "type": "string"
      +            },
      +            "scanned_at": {
      +              "type": "string"
      +            },
      +            "scores": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "readiness": {
      +                  "type": [
      +                    "null",
      +                    "number"
      +                  ]
      +                },
      +                "security": {
      +                  "type": [
      +                    "null",
      +                    "number"
      +                  ]
      +                },
      +                "seo": {
      +                  "type": [
      +                    "null",
      +                    "number"
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "readiness",
      +                "seo",
      +                "security"
      +              ],
      +              "type": [
      +                "null",
      +                "object"
      +              ]
      +            },
      +            "status": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "brand",
      +            "scan_id",
      +            "status",
      +            "scores",
      +            "scanned_at",
      +            "next_available_at"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "cooldown_days": {
      +        "description": "Days before a competitor can be scanned again.",
      +        "type": "integer"
      +      },
      +      "gaps": {
      +        "description": "Checks competitors pass and the brand does not.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "check_id": {
      +              "type": "string"
      +            },
      +            "competitors": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "fix_summary": {
      +              "type": "string"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "pillar": {
      +              "type": "string"
      +            },
      +            "points_possible": {
      +              "type": "number"
      +            },
      +            "your_status": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "check_id",
      +            "label",
      +            "pillar",
      +            "your_status",
      +            "competitors",
      +            "points_possible",
      +            "fix_summary"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "max_competitors": {
      +        "description": "How many competitors can be scanned.",
      +        "type": "integer"
      +      },
      +      "note": {
      +        "description": "Where competitor scans are started: in the app, not through MCP.",
      +        "type": "string"
      +      },
      +      "reason": {
      +        "description": "Why not: plan, role, or no_competitors.",
      +        "type": "string"
      +      },
      +      "view": {
      +        "type": "string"
      +      },
      +      "you": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "readiness": {
      +            "type": [
      +              "null",
      +              "number"
      +            ]
      +          },
      +          "security": {
      +            "type": [
      +              "null",
      +              "number"
      +            ]
      +          },
      +          "seo": {
      +            "type": [
      +              "null",
      +              "number"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "readiness",
      +          "seo",
      +          "security"
      +        ],
      +        "type": [
      +          "null",
      +          "object"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "brand",
      +      "view",
      +      "allowed",
      +      "reason",
      +      "max_competitors",
      +      "cooldown_days",
      +      "note",
      +      "you",
      +      "competitors",
      +      "gaps"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed6 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / brand / minLength
      Added value: +1
    • changedInput schema / properties / cursor / description
      Previous value: -"next_cursor from the previous page."New value: +"next_cursor from the previous page. Leave out for the first page."
    • changedInput schema / properties / limit / description
      Previous value: -"Rows per page. Defaults to 25, max 100."New value: +"Rows per page. Defaults to 25, max 100. A page may hold fewer rows to stay within the response size; follow next_cursor."
    • changedInput schema / properties / sort / description
      Previous value: -"action_plan order."New value: +"action_plan order. Defaults to points."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "data": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "brand": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "description": "The brand's website, or empty when none is set.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            "lenses": {
      +              "description": "Readiness, SEO health and security scores.",
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "lens": {
      +                    "type": "string"
      +                  },
      +                  "score": {
      +                    "type": [
      +                      "null",
      +                      "number"
      +                    ]
      +                  },
      +                  "verdict": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "lens",
      +                  "score",
      +                  "verdict"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "open_findings": {
      +              "additionalProperties": false,
      +              "description": "Checks the site fails or only partly passes, by severity. view action_plan lists them.",
      +              "properties": {
      +                "critical": {
      +                  "type": "integer"
      +                },
      +                "info": {
      +                  "type": "integer"
      +                },
      +                "major": {
      +                  "type": "integer"
      +                },
      +                "minor": {
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "critical",
      +                "major",
      +                "minor",
      +                "info",
      +                "total"
      +              ],
      +              "type": "object"
      +            },
      +            "pages_audited": {
      +              "type": "integer"
      +            },
      +            "passing_checks": {
      +              "type": "integer"
      +            },
      +            "pillars": {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "label": {
      +                    "type": "string"
      +                  },
      +                  "pillar": {
      +                    "type": "string"
      +                  },
      +                  "points_awarded": {
      +                    "type": "number"
      +                  },
      +                  "points_possible": {
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "pillar",
      +                  "label",
      +                  "points_awarded",
      +                  "points_possible"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "poll_after_seconds": {
      +              "description": "While a scan runs, how long to wait before reading again; 0 otherwise.",
      +              "type": "integer"
      +            },
      +            "progress": {
      +              "additionalProperties": false,
      +              "description": "Set while a scan runs.",
      +              "properties": {
      +                "message": {
      +                  "type": "string"
      +                },
      +                "page_limit": {
      +                  "type": "integer"
      +                },
      +                "pages_fetched": {
      +                  "type": "integer"
      +                },
      +                "percent": {
      +                  "type": "integer"
      +                },
      +                "stage": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "stage",
      +                "message",
      +                "percent",
      +                "pages_fetched",
      +                "page_limit"
      +              ],
      +              "type": [
      +                "null",
      +                "object"
      +              ]
      +            },
      +            "scan": {
      +              "additionalProperties": false,
      +              "description": "The scan summarised; null before the first scan.",
      +              "properties": {
      +                "completed_at": {
      +                  "type": "string"
      +                },
      +                "error": {
      +                  "type": "string"
      +                },
      +                "id": {
      +                  "description": "Scan ID, the run_id other readiness calls take.",
      +                  "type": "string"
      +                },
      +                "started_at": {
      +                  "type": "string"
      +                },
      +                "status": {
      +                  "description": "queued, processing, complete, or failed.",
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "status",
      +                "url",
      +                "error",
      +                "started_at",
      +                "completed_at"
      +              ],
      +              "type": [
      +                "null",
      +                "object"
      +              ]
      +            },
      +            "scan_in_progress": {
      +              "type": "boolean"
      +            },
      +            "score": {
      +              "description": "Readiness score, 0-100.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "verdict": {
      +              "description": "Excellent (90+), Good (75+), Needs work (60+), Poor (40+), or Critical.",
      +              "type": "string"
      +            },
      +            "view": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "brand",
      +            "view",
      +            "scan",
      +            "score",
      +            "verdict",
      +            "lenses",
      +            "pillars",
      +            "open_findings",
      +            "passing_checks",
      +            "pages_audited",
      +            "scan_in_progress",
      +            "progress",
      +            "poll_after_seconds"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "brand": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "description": "The brand's website, or empty when none is set.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            "findings": {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "affected_pages": {
      +                    "type": "integer"
      +                  },
      +                  "check_id": {
      +                    "description": "Pass to get_readiness_finding or verify_readiness_fix.",
      +                    "type": "string"
      +                  },
      +                  "consequence": {
      +                    "type": "string"
      +                  },
      +                  "effort_minutes": {
      +                    "type": [
      +                      "null",
      +                      "integer"
      +                    ]
      +                  },
      +                  "fix_type": {
      +                    "type": "string"
      +                  },
      +                  "label": {
      +                    "type": "string"
      +                  },
      +                  "latest_check": {
      +                    "additionalProperties": false,
      +                    "description": "The latest re-check since the scan.",
      +                    "properties": {
      +                      "check_id": {
      +                        "type": "string"
      +                      },
      +                      "completed_at": {
      +                        "type": "string"
      +                      },
      +                      "created_at": {
      +                        "type": "string"
      +                      },
      +                      "error": {
      +                        "type": "string"
      +                      },
      +                      "id": {
      +                        "description": "The check_request_id get_readiness_finding takes.",
      +                        "type": "string"
      +                      },
      +                      "per_url": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "status": {
      +                              "type": "string"
      +                            },
      +                            "url": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "url",
      +                            "status"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "type": "array"
      +                      },
      +                      "recharges_at": {
      +                        "description": "When the re-check's charge returns to the monthly allowance; empty when it used none.",
      +                        "type": "string"
      +                      },
      +                      "resolved": {
      +                        "description": "Whether the issue is fixed; null until complete.",
      +                        "type": [
      +                          "null",
      +                          "boolean"
      +                        ]
      +                      },
      +                      "status": {
      +                        "description": "queued, processing, complete, or failed.",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "id",
      +                      "check_id",
      +                      "status",
      +                      "resolved",
      +                      "per_url",
      +                      "error",
      +                      "created_at",
      +                      "completed_at",
      +                      "recharges_at"
      +                    ],
      +                    "type": [
      +                      "null",
      +                      "object"
      +                    ]
      +                  },
      +                  "owner_role": {
      +                    "type": "string"
      +                  },
      +                  "pillar": {
      +                    "type": "string"
      +                  },
      +                  "points_recoverable": {
      +                    "type": "number"
      +                  },
      +                  "severity": {
      +                    "description": "critical, major, minor, or info; empty when passing.",
      +                    "type": "string"
      +                  },
      +                  "site_wide": {
      +                    "description": "One fix applies to the whole site.",
      +                    "type": "boolean"
      +                  },
      +                  "status": {
      +                    "description": "fail, warning, pass, or not_applicable.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "check_id",
      +                  "label",
      +                  "pillar",
      +                  "status",
      +                  "severity",
      +                  "consequence",
      +                  "points_recoverable",
      +                  "effort_minutes",
      +                  "owner_role",
      +                  "fix_type",
      +                  "affected_pages",
      +                  "site_wide",
      +                  "latest_check"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "open_findings": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "critical": {
      +                  "type": "integer"
      +                },
      +                "info": {
      +                  "type": "integer"
      +                },
      +                "major": {
      +                  "type": "integer"
      +                },
      +                "minor": {
      +                  "type": "integer"
      +                },
      +                "total": {
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "critical",
      +                "major",
      +                "minor",
      +                "info",
      +                "total"
      +              ],
      +              "type": "object"
      +            },
      +            "pagination": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "next_cursor": {
      +                  "description": "Pass as cursor to get the next page; empty on the last page.",
      +                  "type": "string"
      +                },
      +                "total": {
      +                  "description": "Items across all pages; null when not counted.",
      +                  "type": [
      +                    "null",
      +                    "integer"
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "next_cursor",
      +                "total"
      +              ],
      +              "type": "object"
      +            },
      +            "questions_no_page_answers": {
      +              "description": "Tracked prompts no page on the site answers well.",
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "monthly_ai_searches": {
      +                    "type": [
      +                      "null",
      +                      "integer"
      +                    ]
      +                  },
      +                  "opportunity_id": {
      +                    "description": "The content gap opportunity for it, when there is one.",
      +                    "type": "string"
      +                  },
      +                  "prompt_id": {
      +                    "type": "string"
      +                  },
      +                  "text": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "prompt_id",
      +                  "text",
      +                  "monthly_ai_searches",
      +                  "opportunity_id"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "scan_id": {
      +              "type": "string"
      +            },
      +            "view": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "brand",
      +            "view",
      +            "scan_id",
      +            "open_findings",
      +            "findings",
      +            "questions_no_page_answers",
      +            "pagination"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "brand": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "description": "The brand's website, or empty when none is set.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            "pages": {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "page_type": {
      +                    "type": "string"
      +                  },
      +                  "response_time_ms": {
      +                    "type": "integer"
      +                  },
      +                  "status_code": {
      +                    "type": "integer"
      +                  },
      +                  "text_chars": {
      +                    "type": "integer"
      +                  },
      +                  "url": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "url",
      +                  "page_type",
      +                  "status_code",
      +                  "response_time_ms",
      +                  "text_chars"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "pagination": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "next_cursor": {
      +                  "description": "Pass as cursor to get the next page; empty on the last page.",
      +                  "type": "string"
      +                },
      +                "total": {
      +                  "description": "Items across all pages; null when not counted.",
      +                  "type": [
      +                    "null",
      +                    "integer"
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "next_cursor",
      +                "total"
      +              ],
      +              "type": "object"
      +            },
      +            "scan_id": {
      +              "type": "string"
      +            },
      +            "view": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "brand",
      +            "view",
      +            "scan_id",
      +            "pages",
      +            "pagination"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "brand": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "description": "The brand's website, or empty when none is set.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            "pagination": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "next_cursor": {
      +                  "description": "Pass as cursor to get the next page; empty on the last page.",
      +                  "type": "string"
      +                },
      +                "total": {
      +                  "description": "Items across all pages; null when not counted.",
      +                  "type": [
      +                    "null",
      +                    "integer"
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "next_cursor",
      +                "total"
      +              ],
      +              "type": "object"
      +            },
      +            "scans": {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "completed_at": {
      +                    "type": "string"
      +                  },
      +                  "created_at": {
      +                    "type": "string"
      +                  },
      +                  "error": {
      +                    "type": "string"
      +                  },
      +                  "fixed": {
      +                    "description": "Findings fixed since the previous scan.",
      +                    "type": "integer"
      +                  },
      +                  "new": {
      +                    "type": "integer"
      +                  },
      +                  "pages_audited": {
      +                    "type": [
      +                      "null",
      +                      "integer"
      +                    ]
      +                  },
      +                  "readiness": {
      +                    "type": [
      +                      "null",
      +                      "number"
      +                    ]
      +                  },
      +                  "regressed": {
      +                    "type": "integer"
      +                  },
      +                  "scan_id": {
      +                    "type": "string"
      +                  },
      +                  "security": {
      +                    "type": [
      +                      "null",
      +                      "number"
      +                    ]
      +                  },
      +                  "seo": {
      +                    "type": [
      +                      "null",
      +                      "number"
      +                    ]
      +                  },
      +                  "status": {
      +                    "type": "string"
      +                  },
      +                  "trigger": {
      +                    "description": "manual or scheduled.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "scan_id",
      +                  "status",
      +                  "trigger",
      +                  "readiness",
      +                  "seo",
      +                  "security",
      +                  "pages_audited",
      +                  "fixed",
      +                  "new",
      +                  "regressed",
      +                  "created_at",
      +                  "completed_at",
      +                  "error"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "view": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "brand",
      +            "view",
      +            "scans",
      +            "pagination"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "allowed": {
      +              "description": "Whether competitor scans are available.",
      +              "type": "boolean"
      +            },
      +            "brand": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "description": "The brand's website, or empty when none is set.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "name",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            "competitors": {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "brand": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "id": {
      +                        "type": "string"
      +                      },
      +                      "name": {
      +                        "type": "string"
      +                      },
      +                      "url": {
      +                        "description": "The brand's website, or empty when none is set.",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "id",
      +                      "name",
      +                      "url"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "next_available_at": {
      +                    "type": "string"
      +                  },
      +                  "scan_id": {
      +                    "type": "string"
      +                  },
      +                  "scanned_at": {
      +                    "type": "string"
      +                  },
      +                  "scores": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "readiness": {
      +                        "type": [
      +                          "null",
      +                          "number"
      +                        ]
      +                      },
      +                      "security": {
      +                        "type": [
      +                          "null",
      +                          "number"
      +                        ]
      +                      },
      +                      "seo": {
      +                        "type": [
      +                          "null",
      +                          "number"
      +                        ]
      +                      }
      +                    },
      +                    "required": [
      +                      "readiness",
      +                      "seo",
      +                      "security"
      +                    ],
      +                    "type": [
      +                      "null",
      +                      "object"
      +                    ]
      +                  },
      +                  "status": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "brand",
      +                  "scan_id",
      +                  "status",
      +                  "scores",
      +                  "scanned_at",
      +                  "next_available_at"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "gaps": {
      +              "description": "Checks competitors pass and the brand does not.",
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "check_id": {
      +                    "type": "string"
      +                  },
      +                  "competitors": {
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "fix_summary": {
      +                    "type": "string"
      +                  },
      +                  "label": {
      +                    "type": "string"
      +                  },
      +                  "pillar": {
      +                    "type": "string"
      +                  },
      +                  "points_possible": {
      +                    "type": "number"
      +                  },
      +                  "your_status": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "check_id",
      +                  "label",
      +                  "pillar",
      +                  "your_status",
      +                  "competitors",
      +                  "points_possible",
      +                  "fix_summary"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "reason": {
      +              "description": "Why not: plan, role, or no_competitors.",
      +              "type": "string"
      +            },
      +            "view": {
      +              "type": "string"
      +            },
      +            "you": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "readiness": {
      +                  "type": [
      +                    "null",
      +                    "number"
      +                  ]
      +                },
      +                "security": {
      +                  "type": [
      +                    "null",
      +                    "number"
      +                  ]
      +                },
      +                "seo": {
      +                  "type": [
      +                    "null",
      +                    "number"
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "readiness",
      +                "seo",
      +                "security"
      +              ],
      +              "type": [
      +                "null",
      +                "object"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "brand",
      +            "view",
      +            "allowed",
      +            "reason",
      +            "you",
      +            "competitors",
      +            "gaps"
      +          ],
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "generated_at": {
      +      "description": "RFC 3339 time the response was made.",
      +      "type": "string"
      +    },
      +    "schema_version": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "schema_version",
      +    "generated_at",
      +    "data"
      +  ],
      +  "type": "object"
      +}
  3. Added

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, so safety and mutability are covered. The description adds that competitor scans are started in the app, not via MCP, which is useful behavioral context. Beyond that, it doesn't disclose pagination behavior or rate limits, though the schema covers pagination.

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

Conciseness4/5

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

The description is front-loaded with the tool's purpose, followed by a compact enumeration of views. It is reasonably concise, though the view list is long and could be slightly more structured (e.g., bulleted). No wasted sentences.

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

Completeness5/5

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

Given nine parameters (one required), full schema coverage, an output schema, and comprehensive annotations, the description covers each view's return content and notes the out-of-band competitor scan behavior. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so all nine parameters are already documented in the schema with defaults and constraints. The description maps view values to returned content, which is useful, but adds no syntax or format details beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool returns the brand site's AI readiness scan and enumerates the five views (summary, action_plan, pages, history, competitors) with what each returns. It is distinguishable from siblings like get_readiness_finding and run_readiness_scan, though it does not explicitly name them.

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

Usage Guidelines4/5

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

The description gives clear context for each view and notes that competitor scans are started in the app, not through MCP (a useful exclusion). It does not explicitly state when to use get_readiness_finding or run_readiness_scan instead, but the view enumeration functions as usage guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources