Skip to main content
Glama

Check one area of a website

check_category
Read-onlyIdempotent

Inspect a single area and return its verdict, the checks that failed, why each matters and how to fix it. Categories: seo, ai (whether AI crawlers and answer engines can read and cite the site), security (headers, exposure, secrets in source), privacy, tls (certificate and protocol), dns (records, SPF, DMARC, CAA), a11y (accessibility), content, slop (AI-generated-filler signals), design, infra, tech, credibility, correlation (does the page deliver what its title promises), faq, discoverability, local, contact. Use this rather than audit_website when the question is narrow: "is my site secure", "why is my SEO bad", "can ChatGPT see my site".

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "url": "<url>",
      "category": "<category>"
    },
    "name": "check_category"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYesThe website to inspect. A bare domain works: "example.com" is treated as https://example.com.
categoryYesWhich area to inspect.
failing_onlyNoReturn only problems, omitting checks that passed.

Output Schema

NameRequiredDescriptionDefault
urlYes
nameNoHuman-readable category name.
scoreYes
countsNoChecks by status. The last five are undetermined states and are never scored as passes.
categoryYesThe category id that was inspected.
problemsNoChecks that failed or warned, in check order.
passingCountNo
undeterminedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / url / description
      Previous value: -"The website to inspect. A bare domain works — \"example.com\" is treated as https://example.com."New value: +"The website to inspect. A bare domain works: \"example.com\" is treated as https://example.com."
  2. Changed1 schema field changed
    • changedInput schema / properties / category / enum
      Previous value: -[
      -  "seo",
      -  "local",
      -  "ai",
      -  "dns",
      -  "tls",
      -  "security",
      -  "privacy",
      -  "infra",
      -  "tech",
      -  "content",
      -  "slop",
      -  "design",
      -  "a11y",
      -  "credibility",
      -  "correlation",
      -  "faq",
      -  "discoverability",
      -  "contact"
      -]New value: +[
      +  "seo",
      +  "schema",
      +  "local",
      +  "ai",
      +  "dns",
      +  "tls",
      +  "security",
      +  "privacy",
      +  "infra",
      +  "speed",
      +  "tech",
      +  "content",
      +  "slop",
      +  "design",
      +  "a11y",
      +  "credibility",
      +  "correlation",
      +  "faq",
      +  "discoverability",
      +  "contact"
      +]
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "category": {
      +      "description": "The category id that was inspected.",
      +      "type": "string"
      +    },
      +    "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"
      +    },
      +    "name": {
      +      "description": "Human-readable category name.",
      +      "type": "string"
      +    },
      +    "passingCount": {
      +      "type": "integer"
      +    },
      +    "problems": {
      +      "description": "Checks that failed or warned, in check order.",
      +      "items": {
      +        "properties": {
      +          "fix": {
      +            "type": "string"
      +          },
      +          "found": {
      +            "description": "What was actually observed.",
      +            "type": "string"
      +          },
      +          "id": {
      +            "description": "Stable check id, e.g. sec.csp.",
      +            "type": "string"
      +          },
      +          "severity": {
      +            "enum": [
      +              "low",
      +              "medium",
      +              "high",
      +              "critical",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "enum": [
      +              "fail",
      +              "warn"
      +            ],
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          },
      +          "why": {
      +            "description": "Why it matters. Our reading, not the observation.",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "score": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "undetermined": {
      +      "items": {
      +        "description": "A check that reached no verdict. Report it as undetermined, never as a pass.",
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "reason": {
      +            "enum": [
      +              "unknown",
      +              "blocked",
      +              "timeout",
      +              "inconclusive",
      +              "requires_browser"
      +            ],
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "url": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "url",
      +    "category",
      +    "score"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds genuinely non-redundant behavior: it discloses the return contents (verdict, failing checks, rationale, remediation), which annotations cannot convey. It stops short of noting cost, latency, or whether results are cached, so it is not exhaustive.

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?

Front-loaded with the action and return shape, then the routing rule, with the category inventory last where it belongs. The long parenthetical glossary is dense but each gloss adds real disambiguation value, so only the two-category omission and sheer length keep it off a 5.

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 return values need no further spelling out, yet the description still summarizes the verdict/failure/remediation structure. Combined with unambiguous category semantics, defaults on failing_only, and the audit_website routing rule, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description earns extra credit by glossing what several enum values actually mean (ai = AI crawlers and answer engines can read and cite; tls = certificate and protocol; dns = records, SPF, DMARC, CAA). Minor defect: the prose list omits 'schema' and 'speed', which are present in the enum, leaving two valid categories unglossed.

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 (inspect) and resource (a single area of a website) and immediately specifies the output shape: verdict, failed checks, why each matters, and how to fix it. The enumerated category list makes the scope of 'area' concrete, so an agent can tell exactly what this does versus audit_website.

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?

Explicitly says to use this 'rather than audit_website when the question is narrow' and supplies three realistic trigger questions ('is my site secure', 'why is my SEO bad', 'can ChatGPT see my site'). This is a direct when/when-not/alternative statement naming the correct sibling.

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