Skip to main content
Glama

Server Details

The observation layer for AI agents. Outrings provides deterministic web intelligence through MCP, transforming websites into structured, evidence-backed signals that AI systems can inspect and trust.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

TDQS

A4.4/5.0
Disambiguation4/5

Most tools have clearly distinct purposes: full audit vs. single-category check vs. score-only vs. comparison vs. badge embed vs. inventory vs. change tracking. However, check_ai_visibility overlaps with check_category's 'ai' area, potentially causing confusion for agents. Descriptions help delineate but the overlap is notable.

Naming Consistency4/5

Seven of eight tools follow a consistent verb_noun snake_case pattern (audit_website, check_ai_visibility, check_category, compare_websites, get_badge_embed, get_score, get_site_inventory). Only 'what_changed' breaks the pattern by using a question phrase. Otherwise naming is uniform and predictable.

Tool Count5/5

8 tools is well-scoped for a website intelligence server. Each tool addresses a distinct need (full audit, narrow check, AI visibility, comparison, score, badge, inventory, diff tracking) without being excessive or sparse. The set feels complete for its domain.

Completeness5/5

The tool surface covers the full lifecycle of analyzing a website: comprehensive audit (audit_website), granular category checks (check_category, check_ai_visibility), score retrieval (get_score), comparison (compare_websites), change monitoring (what_changed), asset inventory (get_site_inventory), and even a sharing artifact (get_badge_embed). No obvious dead ends or missing operations for the stated purpose.

Available Tools

8 tools
audit_websiteAudit a websiteA
Read-onlyIdempotent
Inspect

Run the full 200-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.

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
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.

TDQS

A4.7/5.0
Behavior4/5

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

Goes beyond the provided annotations by adding useful behavioral context like the expected response time ('Takes roughly 2-8 seconds') and a note about using the tool as 'grounding' before advising on changes. It doesn't contradict the read-only and idempotent annotations.

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?

Perfectly sized. Three sentences, each with a distinct purpose: what the tool does, when to use it, and what to expect in terms of performance. Every sentence earns its place, and the information is structured logically.

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?

The description is perfectly complete for a tool with only two simple parameters and no complex return types. It thoughtfully covers the functionality, provides examples for the parameter, and explicitly acknowledges the existence of a sibling tool without going into unnecessary depth about it.

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?

While the schema already covers most of the descriptive burden with 100% coverage, the description adds excellent VALUE BEYOND that, particularly for the 'url' parameter with the real-world example that a bare domain is treated as https. This proactive clarification is exactly what a helper should do.

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?

The description is exceptionally clear with a strong verb and resource ('Run the full 200-check audit of a website'). It explicitly distinguishes itself from siblings by mentioning the use case for broad questions and specifically names the alternative 'check_category' for narrower queries.

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?

Offers explicit trigger phrases and when-to-use guidance. It also provides a clear alternative ('If the user only cares about one area, check_category is faster') and notes the trade-off in terms of speed and output size, which is invaluable for an agent to select the right tool.

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

check_ai_visibilityCheck whether AI assistants can read and cite a siteA
Read-onlyIdempotent
Inspect

Measures technical crawler access and the page signals that affect whether an AI system can retrieve and parse a site. Reports, per crawler, whether GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Google-Extended, Googlebot, Bingbot, Applebot-Extended and CCBot are allowed or blocked, naming the exact robots.txt rule responsible. Also checks whether content is served in HTML rather than requiring JavaScript, whether structured data is present and valid, and whether llms.txt exists. It does NOT determine whether an assistant will rank, select, mention or cite the page: access is a precondition for citation, not a cause of it, and the crawlers serve different purposes — for OpenAI, OAI-SearchBot governs eligibility for ChatGPT search while GPTBot relates to model training. Use this to rule out or confirm a technical blocker, and say plainly that ranking and selection are outside what any measurement here can establish.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe website to inspect. A bare domain works — "example.com" is treated as https://example.com.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
nameNo
scoreYesTechnical retrievability only. Not a prediction of citation.
countsNoChecks by status. The last five are undetermined states and are never scored as passes.
categoryYes
problemsNoBlocked crawlers and missing signals, each naming the rule responsible.
passingCountNo
undeterminedNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds substantial behavioral nuance: it lists all 11 crawlers inspected, explains that crawlers serve different purposes (e.g., OAI-SearchBot vs GPTBot), and explicitly discloses the interpretive limitation that technical access is a precondition for citation, not a cause of it. This goes well beyond the annotation flags.

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?

The description is dense but every sentence earns its place: the crawler enumeration, the checks performed, and the explicit boundary on conclusions are all relevant. It is appropriately sized for a tool of this breadth, with the caveat clearly separated as 'It does NOT.'

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 the tool's complexity—multiple checks across 11 crawlers, structured data validation, and llms.txt detection—the description covers purpose, scope, and interpretation thoroughly. It even sets expectations about what cannot be inferred. Since an output schema exists, return values need no additional explanation. Nothing operationally important 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?

The single parameter url is fully documented in the schema, including bare-domain normalization ('example.com' → https://example.com). The description adds no extra parameter-level meaning beyond that, so the schema carries the burden; per the rubric, the high schema coverage baseline of 3 applies.

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?

The description opens with a specific, action-oriented statement: 'Measures technical crawler access and the page signals that affect whether an AI system can retrieve and parse a site.' It then enumerates the exact checks (per-crawler robots.txt rules, HTML vs JS, structured data, llms.txt) and explicitly distinguishes the tool from ranking/selection concerns, clearly differentiating it from sibling tools like audit_website or get_score.

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 explicit when-to-use guidance: 'Use this to rule out or confirm a technical blocker.' It also provides a strong when-not boundary by stating it does not determine ranking, selection, mention, or citation. It does not name an alternative sibling tool for those ranking questions, so it lacks fully explicit alternatives, but the contextual guidance is clear.

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

check_categoryCheck one area of a websiteA
Read-onlyIdempotent
Inspect

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".

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
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

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds transparency about the output structure (verdict, checks, why, how to fix), which complements the annotations without contradicting them.

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 moderately verbose due to the category list, but it is well-organized with clear explanations. It avoids unnecessary fluff and stays focused on purpose, usage, and output, making it appropriately concise for the complexity.

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

Completeness4/5

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

Given the comprehensive schema and annotations, the description provides sufficient context. It explains what the tool does, when to use it, and what it returns. The absence of output schema details is acceptable since the description already outlines the return content.

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?

The schema already covers each parameter's meaning (url, category, failing_only). The description enriches the category parameter by explaining each enumerated value (e.g., 'ai' as AI crawlers and answer engines), improving semantic clarity beyond the schema.

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?

The description clearly states it inspects a single area and returns verdicts, failed checks, reasons, and fixes. It explicitly distinguishes itself from audit_website for narrow questions, making the purpose and scope precise.

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?

Provides explicit guidance on when to use this tool over audit_website (narrow questions) and gives concrete examples ('is my site secure', 'why is my SEO bad'). It also enumerates all categories, facilitating correct selection.

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

compare_websitesCompare websites side by sideA
Read-onlyIdempotent
Inspect

Score two to four sites and return them ranked, with the category gaps between them. Use it for "how do I compare to my competitors" or "which of these is better built". Each site is a real audit, so this takes several seconds per URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesThe sites to compare. Bare domains are fine.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rankedNoThe same sites, highest score first.
resultsYesOne entry per URL, in the order given.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds valuable behavioral context: 'Each site is a real audit, so this takes several seconds per URL.' This warns about latency and conveys that the operation performs real work. It also explains that output is ranked with category gaps, which is beyond the annotations.

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?

The description is two sentences, front-loaded with the core action and output, followed by use cases and a performance note. No filler or redundancy. Every sentence earns its place.

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 the tool's complexity (multiple URLs, ranking, output schema exists), the description is complete: it states input scope (two to four sites), output behavior (ranked with category gaps), and performance characteristics (several seconds per URL). The output schema covers return value structure, so no further detail is needed.

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?

The schema provides 100% coverage for the single 'urls' parameter, already describing it as 'The sites to compare. Bare domains are fine.' The description reinforces the two-to-four site range but does not add new semantic details beyond the schema. With high schema coverage, the baseline is 3, and there is no additional value from the description.

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?

The description clearly states the tool's function: 'Score two to four sites and return them ranked, with the category gaps between them.' It uses a specific verb ('score' and 'rank') and resource ('sites'), and the use cases ('how do I compare to my competitors' or 'which of these is better built') make the purpose unmistakable. This also distinguishes it from sibling audit_website, which likely handles a single site.

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 explicit when-to-use guidance: 'Use it for "how do I compare to my competitors" or "which of these is better built".' This is clear context, but it does not explicitly mention alternatives or when not to use it (e.g., for a single-site audit), which would warrant a 5. The sibling list suggests audit_website as an alternative, but the description doesn't reference it.

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

get_badge_embedGenerate an embeddable verification badgeA
Read-onlyIdempotent
Inspect

Produce the HTML (and Markdown) for a badge the site owner can paste into their footer or README. It renders a live SVG showing a real measured score that refreshes every six hours and links through to the full audit, so a visitor can verify it. Use this when someone wants to display that their site was checked.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe website to inspect. A bare domain works — "example.com" is treated as https://example.com.
styleNoBadge shape. score shows the number, verified shows a tick and wordmark, shield is the flat two-part style used by build badges, compact is the smallest.score
themeNoColour scheme to match the page it will sit on.light
metricNoWhich score the badge displays. Use overall unless the site wants to highlight one category.overall

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
htmlYesReady-to-paste anchor and image markup.
linkUrlNoFull report the badge links to, so a visitor can verify the score.
imageUrlYesLive SVG badge; re-renders from a real audit every six hours.
markdownNoThe same badge for a README.

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations (readOnly, idempotent, non-destructive), the description adds that the badge is a live SVG that refreshes every six hours and links to the full audit, which is valuable for setting user expectations about behavior. This is meaningful additional context without contradiction.

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?

Two efficient sentences: the first front-loads the action and output, the second gives usage context. No filler or redundant phrasing, making it easy to parse quickly.

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

Completeness4/5

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

For a relatively simple tool, the description covers the output format, live behavior, refresh rate, linkage, and usage trigger. With a full schema and output schema present, it doesn't need to explain return values further. It could mention limitations (e.g., public accessibility requirement) but is otherwise complete.

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?

Input schema covers 100% of parameters with descriptive text for each (url, style, theme, metric). The description does not add parameter-specific semantics beyond the schema, so baseline 3 is appropriate for high coverage.

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?

The description clearly states it produces HTML (and Markdown) for an embeddable verification badge, specifying the output format and target user (site owner). This distinguishes it from sibling tools like get_score (which returns a numeric score) by focusing on the embeddable code artifact.

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 explicitly says 'Use this when someone wants to display that their site was checked,' providing a clear trigger condition. It does not explicitly mention alternatives or exclusions, but this context is sufficient to guide selection among siblings.

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

get_scoreGet a website scoreA
Read-onlyIdempotent
Inspect

The cheapest useful call: overall score, letter grade and every category score, with no findings or prose. Use it when comparing sites, when the user only wants a number, or as a first step before deciding which category to look into.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe website to inspect. A bare domain works — "example.com" is treated as https://example.com.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
gradeYes
scoreYesOverall score out of 100.
auditedAtNo
categoriesYesCategory id to score. Null where nothing was determinable.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds value by specifying the return content (overall score, letter grade, category scores) and the 'no findings or prose' limitation, plus the efficiency angle ('cheapest useful call'). No contradictions with annotations.

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?

The description is two tight sentences that lead with the core value proposition ('cheapest useful call') and return details, then provide usage guidance. No filler or repetitive content.

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?

For a simple retrieval tool with one well-documented parameter, an output schema (indicated), and strong annotations, the description covers the essentials: what it returns, when to use, and how it differs from heavier options. It gives enough context for an agent to decide and invoke 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?

The input schema has 100% coverage and adequately describes the url parameter, including the bare domain handling. The description does not add parameter-specific information, but since the schema is complete, a baseline score of 3 is appropriate.

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?

The description clearly states the tool returns an overall score, letter grade, and every category score, with no findings or prose. It distinguishes from siblings like check_category (which would provide category details) and compare_websites by emphasizing it's the 'cheapest useful call' and a first step before going deeper.

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 explicitly lists use cases: comparing sites, when the user only wants a number, or as a first step before deciding which category to look into. It also hints at when not to use it ('with no findings or prose'), implying that for detailed findings one should use other tools, though it doesn't name them directly.

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

get_site_inventoryList what a page containsA
Read-onlyIdempotent
Inspect

Return a complete inventory of what the Outrings collector observed on a page — not a sample of it — for one kind of thing: internal links, external links, sitemap URLs, email addresses, scripts, images, forms, iframes, stylesheets or API endpoints referenced. The collector does not execute JavaScript, so this is everything present in the served HTML and the responses it fetched, which is not necessarily everything a real browser would end up loading at runtime. Use it for "what third-party scripts am I loading", "which email addresses are exposed on my site", "how many images are missing alt text", "what does my page link out to".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe website to inspect. A bare domain works — "example.com" is treated as https://example.com.
limitNoCap the rows returned. The total count is always reported.
inventoryYesWhich listing to return. internalLinks and externalLinks are URLs; externalDomains is the deduplicated hosts they point at; endpoints are API paths found in scripts; discovered are paths seen in sitemaps and robots.txt; exposedProbe is the result of probing commonly exposed paths.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
rowsNoShape depends on the inventory: a list of URLs or strings, or an object keyed by host with counts.
totalYesRows observed, before any limit.
returnedNoRows in this response.
inventoryYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, idempotent, non-destructive), the description adds valuable behavioral context: the collector does not execute JavaScript, results are based on served HTML and fetched responses, and the inventory is complete rather than sampled. This meaningfully clarifies the tool's limitations and output fidelity.

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?

The description is three well-structured sentences: a precise statement of what it returns, an important caveat about JavaScript, and concrete use cases. No sentence is wasted, and the most important information is front-loaded.

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 an output schema is present and annotations already cover safety and world-openness, the description provides the remaining essential context: the exact inventory categories, the non-JavaScript limitation, and typical use cases. It is complete for an agent to select and call this tool appropriately.

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 description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema, though it does reinforce the meaning of 'inventory' and the completeness guarantee. This is adequate but not exceptional.

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?

The description opens with a specific verb and resource: 'Return a complete inventory of what the Outrings collector observed on a page.' It enumerates the exact kinds of inventory items, which directly maps to the inventory enum and clearly distinguishes this from a sample or aggregate view.

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 explicitly gives intended use cases with quotes ('what third-party scripts am I loading', 'which email addresses are exposed on my site', etc.). It also usefully cautions that JavaScript is not executed, implying it should not be used for runtime-loaded resources, though it does not name alternative tools.

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

what_changedCompare a site against its last auditAInspect

Re-audit a site and report what moved since it was last checked: which findings are new, which were resolved, and how each category score shifted. Use it after the user says they fixed something, or to verify that a deployment did not regress anything. Returns comparable=false when the site has no earlier snapshot, which is not an error — it means history starts now. Unlike the other tools this one WRITES: it stores a durable snapshot of the result, because a comparison against history requires contributing to it. The baseline is the most recent retained snapshot and snapshots are kept at most once per site per six hours, so baselineAt may not be the deployment immediately before this one — read baselineAt rather than assuming it is the last change. Check comparable before attributing any score movement to the site: when the ruleset differed between the two measurements it is false, and the difference then includes a change in grading rather than a change in the website.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe website to inspect. A bare domain works — "example.com" is treated as https://example.com.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toNoOne end of the comparison.
fromNoOne end of the comparison.
hostYes
noteNo
scoreNoPresent instead of a diff when history starts with this call.
summaryNo
resolvedNo
worsenedNo
currentAtNo
directionNo
spanHoursNo
baselineAtNoTimestamp of the snapshot being compared against. Snapshots are retained at most once per site per six hours, so this may not be the deployment immediately before the current one.
categoriesNo
comparableYesFalse when the two measurements used different rulesets, or when no earlier snapshot exists. Check this before attributing any score movement to the website.
scoreDeltaNo
newProblemsNo
schemaChangedNo
partlyImprovedNo
rulesetChangedNoNull when one snapshot predates version tracking.
comparabilityNoteNoPlain-language account of whether the two ends can be compared.

TDQS

A4.4/5.0
Behavior5/5

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

Goes far beyond the annotations (readOnlyHint=false, idempotentHint=false). It discloses the write behavior ("Unlike the other tools this one WRITES: it stores a durable snapshot"), the 6-hour snapshot retention limit, the baselineAt caveat, and the comparable flag semantics including the ruleset-difference scenario. This is exemplary transparency with no contradiction to annotations.

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 long but every sentence carries non-obvious, decision-relevant information (write behavior, snapshot rate limiting, baselineAt, comparable flag, ruleset caveat). It is front-loaded with purpose and usage before the caveats. Slightly dense, but the complexity of the tool justifies the length — no wasted words.

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 an output schema exists (covering return values), the description correctly focuses on behavioral semantics rather than return format. It covers write side-effects, snapshot retention policy, baseline ambiguity, and the critical comparable flag pitfall. For a tool with this complexity, nothing important appears 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% — the input schema already fully documents the url parameter, including the bare-domain normalization ("example.com" treated as https://example.com). The description adds no parameter-specific meaning beyond the schema, so the baseline of 3 applies.

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?

The description opens with a specific verb+resource statement: "Re-audit a site and report what moved since it was last checked: which findings are new, which were resolved, and how each category score shifted." It clearly distinguishes from the sibling compare_websites (which compares two sites) by anchoring on comparison against past history rather than another site.

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?

Provides explicit trigger conditions: "Use it after the user says they fixed something, or to verify that a deployment did not regress anything." It also hints at differentiation from "the other tools" by noting this one writes. However, it does not explicitly name alternatives or state when NOT to use it (e.g., when comparing two arbitrary sites, which would be compare_websites).

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 8 tool updates
    • Changedaudit_website1 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"
        +}
    • Changedcheck_ai_visibility1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "category": {
        +      "const": "ai",
        +      "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": {
        +      "type": "string"
        +    },
        +    "passingCount": {
        +      "type": "integer"
        +    },
        +    "problems": {
        +      "description": "Blocked crawlers and missing signals, each naming the rule responsible.",
        +      "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": {
        +      "description": "Technical retrievability only. Not a prediction of citation.",
        +      "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"
        +}
    • Changedcheck_category1 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"
        +}
    • Changedcompare_websites1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "ranked": {
        +      "description": "The same sites, highest score first.",
        +      "items": {
        +        "properties": {
        +          "categories": {
        +            "additionalProperties": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "type": "object"
        +          },
        +          "grade": {
        +            "type": "string"
        +          },
        +          "score": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "results": {
        +      "description": "One entry per URL, in the order given.",
        +      "items": {
        +        "properties": {
        +          "categories": {
        +            "additionalProperties": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "type": "object"
        +          },
        +          "grade": {
        +            "type": "string"
        +          },
        +          "score": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedget_badge_embed4 fields changed
      • addedInput schema / properties / metric / description
        Added value: +"Which score the badge displays. Use overall unless the site wants to highlight one category."
      • addedInput schema / properties / style / description
        Added value: +"Badge shape. score shows the number, verified shows a tick and wordmark, shield is the flat two-part style used by build badges, compact is the smallest."
      • addedInput schema / properties / theme / description
        Added value: +"Colour scheme to match the page it will sit on."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "host": {
        +      "type": "string"
        +    },
        +    "html": {
        +      "description": "Ready-to-paste anchor and image markup.",
        +      "type": "string"
        +    },
        +    "imageUrl": {
        +      "description": "Live SVG badge; re-renders from a real audit every six hours.",
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "linkUrl": {
        +      "description": "Full report the badge links to, so a visitor can verify the score.",
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "markdown": {
        +      "description": "The same badge for a README.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "host",
        +    "imageUrl",
        +    "html"
        +  ],
        +  "type": "object"
        +}
    • Changedget_score1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "auditedAt": {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    "categories": {
        +      "additionalProperties": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "description": "Category id to score. Null where nothing was determinable.",
        +      "type": "object"
        +    },
        +    "grade": {
        +      "type": "string"
        +    },
        +    "score": {
        +      "description": "Overall score out of 100.",
        +      "type": "number"
        +    },
        +    "url": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "url",
        +    "score",
        +    "grade",
        +    "categories"
        +  ],
        +  "type": "object"
        +}
    • Changedget_site_inventory1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "inventory": {
        +      "enum": [
        +        "internalLinks",
        +        "externalLinks",
        +        "externalDomains",
        +        "sitemapUrls",
        +        "emails",
        +        "phones",
        +        "forms",
        +        "scripts",
        +        "iframes",
        +        "styles",
        +        "images",
        +        "endpoints",
        +        "icons",
        +        "discovered",
        +        "exposedProbe",
        +        "crawledPages"
        +      ],
        +      "type": "string"
        +    },
        +    "returned": {
        +      "description": "Rows in this response.",
        +      "type": "integer"
        +    },
        +    "rows": {
        +      "description": "Shape depends on the inventory: a list of URLs or strings, or an object keyed by host with counts.",
        +      "oneOf": [
        +        {
        +          "items": true,
        +          "type": "array"
        +        },
        +        {
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "total": {
        +      "description": "Rows observed, before any limit.",
        +      "type": "integer"
        +    },
        +    "url": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "url",
        +    "inventory",
        +    "total"
        +  ],
        +  "type": "object"
        +}
    • Changedwhat_changed1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "baselineAt": {
        +      "description": "Timestamp of the snapshot being compared against. Snapshots are retained at most once per site per six hours, so this may not be the deployment immediately before the current one.",
        +      "format": "date-time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "categories": {
        +      "items": {
        +        "properties": {
        +          "category": {
        +            "type": "string"
        +          },
        +          "delta": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "from": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "note": {
        +            "type": "string"
        +          },
        +          "to": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "comparabilityNote": {
        +      "description": "Plain-language account of whether the two ends can be compared.",
        +      "type": "string"
        +    },
        +    "comparable": {
        +      "description": "False when the two measurements used different rulesets, or when no earlier snapshot exists. Check this before attributing any score movement to the website.",
        +      "type": "boolean"
        +    },
        +    "currentAt": {
        +      "format": "date-time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "direction": {
        +      "enum": [
        +        "improved",
        +        "regressed",
        +        "stable",
        +        "not-comparable",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "from": {
        +      "description": "One end of the comparison.",
        +      "properties": {
        +        "at": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "grade": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "score": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "versions": {
        +          "description": "Ruleset that produced this measurement. Null for snapshots written before version tracking existed.",
        +          "properties": {
        +            "collector": {
        +              "type": "string"
        +            },
        +            "ruleset": {
        +              "type": "string"
        +            },
        +            "schema": {
        +              "type": "string"
        +            }
        +          },
        +          "type": [
        +            "object",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "host": {
        +      "type": "string"
        +    },
        +    "newProblems": {
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "partlyImproved": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "resolved": {
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "string"
        +          },
        +          "was": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "rulesetChanged": {
        +      "description": "Null when one snapshot predates version tracking.",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "schemaChanged": {
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "score": {
        +      "description": "Present instead of a diff when history starts with this call.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "scoreDelta": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "spanHours": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "summary": {
        +      "type": "string"
        +    },
        +    "to": {
        +      "description": "One end of the comparison.",
        +      "properties": {
        +        "at": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "grade": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "score": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "versions": {
        +          "description": "Ruleset that produced this measurement. Null for snapshots written before version tracking existed.",
        +          "properties": {
        +            "collector": {
        +              "type": "string"
        +            },
        +            "ruleset": {
        +              "type": "string"
        +            },
        +            "schema": {
        +              "type": "string"
        +            }
        +          },
        +          "type": [
        +            "object",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "worsened": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "host",
        +    "comparable"
        +  ],
        +  "type": "object"
        +}
  2. 8 tool updates
    • First observedaudit_website
    • First observedcheck_ai_visibility
    • First observedcheck_category
    • First observedcompare_websites
    • First observedget_badge_embed
    • First observedget_score
    • First observedget_site_inventory
    • First observedwhat_changed

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables detection and analysis of pre-public product launches through web search, content extraction, AI-powered scoring, and automated alerting. Provides comprehensive tools for surfacing stealth startup signals before they trend publicly.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI chat clients to perform market research and competitive intelligence by gathering company overviews, competitor lists, product portfolios, pricing snapshots, and recent news via live Tavily search.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources