Skip to main content
Glama

Audit a website

audit_website
Read-onlyIdempotent

Run the full 216-check audit of a website and return the overall score, every category score, and the ranked list of what to fix first. Use this when the user asks a broad question about a site — "how is my website", "what is wrong with it", "is this site any good" — or when you need grounding before advising on changes. Takes roughly 2-8 seconds. If the user only cares about one area, check_category is faster and returns less.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe website to inspect. A bare domain works — "example.com" is treated as https://example.com.
detailNosummary: scores plus priority actions (default, best for most answers). markdown: the whole report as prose written for a model to read. full: the complete JSON including every check, link, script and email found.summary

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL that was measured, after redirects.
gradeYesLetter grade from A+ to F.
scoreYesOverall score out of 100.
countsYesChecks by status. The last five are undetermined states and are never scored as passes.
categoriesYesEvery category with its own score.
undeterminedNoCheck ids that reached no verdict. Never treat these as passes.
priorityActionsNoFindings ranked by points recovered per unit of effort.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "categories": {
      +      "description": "Every category with its own score.",
      +      "items": {
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "score": {
      +            "description": "Null when no check in the category reached a verdict.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "counts": {
      +      "description": "Checks by status. The last five are undetermined states and are never scored as passes.",
      +      "properties": {
      +        "blocked": {
      +          "type": "integer"
      +        },
      +        "fail": {
      +          "type": "integer"
      +        },
      +        "inconclusive": {
      +          "type": "integer"
      +        },
      +        "info": {
      +          "type": "integer"
      +        },
      +        "na": {
      +          "type": "integer"
      +        },
      +        "pass": {
      +          "type": "integer"
      +        },
      +        "requires_browser": {
      +          "type": "integer"
      +        },
      +        "timeout": {
      +          "type": "integer"
      +        },
      +        "unknown": {
      +          "type": "integer"
      +        },
      +        "warn": {
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "grade": {
      +      "description": "Letter grade from A+ to F.",
      +      "type": "string"
      +    },
      +    "priorityActions": {
      +      "description": "Findings ranked by points recovered per unit of effort.",
      +      "items": {
      +        "properties": {
      +          "action": {
      +            "type": "string"
      +          },
      +          "category": {
      +            "type": "string"
      +          },
      +          "pointsIfFixed": {
      +            "description": "Arithmetic from the weights that produced the score, not an estimate.",
      +            "type": "number"
      +          },
      +          "rank": {
      +            "type": "integer"
      +          },
      +          "severity": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "score": {
      +      "description": "Overall score out of 100.",
      +      "type": "number"
      +    },
      +    "undetermined": {
      +      "description": "Check ids that reached no verdict. Never treat these as passes.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "url": {
      +      "description": "The URL that was measured, after redirects.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "url",
      +    "score",
      +    "grade",
      +    "counts",
      +    "categories"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds value beyond them with a latency expectation ('roughly 2-8 seconds') and a summary of what is returned, which helps the agent decide whether to call it in an interactive turn. It does not mention auth or rate limits, but none are implied for a public read-only audit.

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

Conciseness5/5

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

Three sentences, front-loaded with the action and return shape, then usage triggers, then the alternative and latency. Every sentence earns its place with no redundancy.

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?

An output schema exists, so the description need not enumerate return fields, yet it still sketches them. Combined with the timing note and the alternative routing, an agent has everything needed to select and invoke the tool correctly.

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%, with both url and the detail enum fully documented in the schema, so the baseline is 3. The description hints at the summary output but adds no syntax or format detail for the parameters beyond what the schema already states.

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

Purpose5/5

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

States a specific verb and resource ('run the full 216-check audit of a website') plus the exact output shape (overall score, category scores, ranked fixes). It also distinguishes itself from the sibling check_category by name, so an agent can select it without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use triggers with quoted example user questions ('how is my website', 'what is wrong with it') and a precise when-not condition: 'If the user only cares about one area, check_category is faster and returns less.' Both the trigger and the alternative are named.

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