Server definition
- Hash
- sha256:c77c9a7c877f05b8efad9eef5d6b0e3a7bc322ecfdc88c2bb13d888f0a489779
- What it is
- What a remote MCP server returned when asked what it offers: 19 tools
The blob, as servednamed by its sha256
{
"instructions": "GVT measures how readable a website's technical structure is to AI answer engines (GEO). Core workflow: gvt_run_visibility_test returns a tid immediately; poll gvt_get_test_results until status is not pending or running, and lead any summary with findingSentence. Discover important URLs with gvt_list_sitemap_urls before batch testing, compare history with gvt_get_score_trend, and consult gvt_get_knowledge before explaining scoring. Tools that queue tests consume credits and rate limits; the read-only tools do not.",
"tools": [
{
"description": "Permanently delete a test session and all its associated results. This action cannot be undone. Use gvt_set_test_visibility instead if you only want to hide a test from public view. Deleting a test does not delete its schedule (if one exists): recurring runs continue until removed via gvt_schedule_test delete mode.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tid": {
"description": "The 8-character test ID of the test to delete.",
"type": "string"
}
},
"required": [
"tid"
],
"type": "object"
},
"name": "gvt_delete_test",
"outputSchema": {
"properties": {
"message": {
"description": "Human-readable confirmation",
"type": "string"
},
"success": {
"description": "True when the test was deleted",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "Get the oldest baseline test snapshot for a single URL, including expired tests. For pre-computed baseline-vs-latest deltas without fetching full snapshots, use gvt_get_score_trend instead; for baselines across many URLs in one call, use gvt_list_baselines. Use with gvt_get_latest to compare baseline vs current when you need the full snapshot detail on both ends. The url must be passed exactly as the test was run — matching is exact string equality (scheme, host, path, trailing slash), not nearest-match. When unsure of the recorded form, discover it with gvt_list_tests first.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"url": {
"description": "The URL to look up (must match the URL used when the test was run).",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "gvt_get_baseline",
"outputSchema": {
"description": "Oldest baseline snapshot for one URL, including expired tests. On success the snapshot fields sit at the top level; when no test exists the response is { url, oldest: null, message }.",
"properties": {
"analysisSummary": {
"description": "Aggregate scores for this test",
"properties": {
"categoryIssueCounts": {
"description": "Open issue count per analysis category",
"properties": {
"accessibility": {
"description": "Number of open accessibility issues",
"type": "integer"
},
"headings": {
"description": "Number of open heading structure issues",
"type": "integer"
},
"javascript": {
"description": "Number of open JavaScript dependency issues",
"type": "integer"
},
"nojs": {
"description": "Number of open No-JS rendering issues",
"type": "integer"
},
"schema": {
"description": "Number of open schema.org markup issues",
"type": "integer"
},
"semantic": {
"description": "Number of open semantic HTML5 issues",
"type": "integer"
},
"social": {
"description": "Number of open social tag issues",
"type": "integer"
}
},
"type": "object"
},
"categoryScores": {
"description": "Score per analysis category (0-100)",
"properties": {
"accessibility": {
"description": "Accessibility score (0-100)",
"type": "number"
},
"headings": {
"description": "Heading structure score (0-100)",
"type": "number"
},
"javascript": {
"description": "JavaScript dependency score (0-100)",
"type": "number"
},
"nojs": {
"description": "No-JS rendering score (0-100)",
"type": "number"
},
"schema": {
"description": "schema.org markup score (0-100)",
"type": "number"
},
"semantic": {
"description": "Semantic HTML5 score (0-100)",
"type": "number"
},
"social": {
"description": "Social tags score (0-100)",
"type": "number"
}
},
"type": "object"
},
"jsDependencySource": {
"description": "How the JS dependency score was derived",
"enum": [
"measured",
"estimated",
"unavailable"
],
"type": "string"
},
"overallScore": {
"description": "Overall GEO visibility score (0-100)",
"type": "number"
},
"timestamp": {
"description": "ISO 8601 instant of the analysis",
"type": "string"
},
"totalIssues": {
"description": "Total open issues across all categories",
"type": "integer"
}
},
"type": "object"
},
"createdAt": {
"description": "ISO 8601 instant this snapshot was created",
"type": "string"
},
"expiresAt": {
"description": "ISO 8601 instant this snapshot will expire",
"type": [
"string",
"null"
]
},
"findingSentence": {
"description": "Pre-generated natural language verdict for this snapshot",
"type": [
"string",
"null"
]
},
"isPublic": {
"description": "Whether this test is publicly visible",
"type": "boolean"
},
"message": {
"description": "Present only in the no-test case",
"type": "string"
},
"oldest": {
"description": "Null when no test exists for the URL",
"type": [
"object",
"null"
]
},
"shareableTid": {
"description": "Public share ID, non-null when shareable",
"type": [
"string",
"null"
]
},
"status": {
"description": "Snapshot status (completed, failed, etc.)",
"type": "string"
},
"testType": {
"description": "The type of the test run",
"enum": [
"url",
"html_paste"
],
"type": "string"
},
"tid": {
"description": "Test ID of the snapshot",
"type": "string"
},
"updatedAt": {
"description": "ISO 8601 instant this snapshot was last updated",
"type": "string"
},
"url": {
"description": "The URL this snapshot analyzed",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Retrieves the current progress, state, and test IDs (tids) of an ongoing or completed visibility testing batch. Poll this tool with the batchId returned by gvt_run_visibility_batch until status is completed or failed. A tid appears on each URL entry only after its test completes — then call gvt_get_batch_summary for the compact per-page scores and top shared issues, or gvt_get_test_results for a single test. Batch records are retained for the lifetime of the account (no automated pruning); an unknown, pruned, or foreign batchId returns 404. Read-only: consumes rate limit, never test credits. Duplicate URLs in a batch are collapsed, so counts always sum to totalUrls.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"batchId": {
"description": "The UUID of the batch to check, returned by gvt_run_visibility_batch.",
"format": "uuid",
"type": "string"
}
},
"required": [
"batchId"
],
"type": "object"
},
"name": "gvt_get_batch_status",
"outputSchema": {
"description": "Batch progress and per-URL state. Poll until status is completed or failed.",
"properties": {
"batchId": {
"description": "The batch that was queried",
"type": "string"
},
"completedAt": {
"description": "ISO 8601 instant when the batch reached a terminal state, null while in flight",
"type": [
"string",
"null"
]
},
"counts": {
"description": "Per-URL test state counts; the four fields always sum to totalUrls",
"properties": {
"completed": {
"description": "Tests that completed successfully",
"type": "integer"
},
"failed": {
"description": "Tests that failed or were skipped",
"type": "integer"
},
"queued": {
"description": "Tests not yet started",
"type": "integer"
},
"running": {
"description": "Tests currently executing",
"type": "integer"
}
},
"type": "object"
},
"status": {
"description": "Aggregate batch state; completed means every per-URL test reached a terminal state",
"enum": [
"queued",
"running",
"completed",
"failed"
],
"type": "string"
},
"submittedAt": {
"description": "ISO 8601 instant of batch submission",
"type": "string"
},
"totalUrls": {
"description": "URLs in the batch after duplicate collapsing",
"type": "integer"
},
"urls": {
"description": "One entry per submitted URL, in submission order",
"items": {
"properties": {
"status": {
"description": "This URL test state",
"enum": [
"queued",
"running",
"completed",
"failed"
],
"type": "string"
},
"tid": {
"description": "Test ID once that test completed, null while queued, running, or failed",
"type": [
"string",
"null"
]
},
"url": {
"description": "The submitted URL",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Compact per-page results and pre-computed aggregates for a completed visibility testing batch: per-URL overall and category scores, findingSentence, average overall score, strongest and weakest categories, best and worst scoring pages, and the top shared issue types with their fixIds. One call replaces one gvt_get_test_results call per URL for audit and status-report workflows — a 10-URL batch drops from roughly 1.6 MB to a few KB of context. The batch must be completed (poll gvt_get_batch_status first); an in-flight batch returns its current status without per-page data. Read-only: consumes rate limit, never test credits. For element-level detail on a single page, call gvt_get_test_results with that page's tid.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"batchId": {
"description": "The UUID of the completed batch to summarize, returned by gvt_run_visibility_batch.",
"format": "uuid",
"type": "string"
}
},
"required": [
"batchId"
],
"type": "object"
},
"name": "gvt_get_batch_summary",
"outputSchema": {
"description": "Compact per-page results and pre-computed aggregates for a completed batch. An in-flight or failed batch returns its status and counts without per-page data.",
"properties": {
"batchId": {
"description": "The batch that was summarized",
"type": "string"
},
"counts": {
"description": "Per-URL test state counts; the four fields always sum to totalUrls",
"type": "object"
},
"message": {
"description": "Polling guidance, present when the batch is not completed",
"type": "string"
},
"pages": {
"description": "One compact entry per URL, in batch order. Failed tests appear with status failed and null scores; they are excluded from the aggregates.",
"items": {
"properties": {
"categoryScores": {
"description": "Score per analysis category (0-100)",
"type": [
"object",
"null"
]
},
"findingSentence": {
"description": "Pre-generated natural language verdict",
"type": [
"string",
"null"
]
},
"overallScore": {
"description": "Overall GEO visibility score (0-100), null when the test failed",
"type": [
"number",
"null"
]
},
"status": {
"description": "This URL test state",
"type": "string"
},
"tid": {
"description": "Test ID, for gvt_get_test_results deep dives",
"type": "string"
},
"url": {
"description": "The tested URL",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"status": {
"description": "Aggregate batch state; pages and summary are present only when completed",
"enum": [
"queued",
"running",
"completed",
"failed"
],
"type": "string"
},
"summary": {
"description": "Aggregates computed over the completed pages",
"properties": {
"averageOverallScore": {
"description": "Mean overall score across completed pages, rounded to one decimal",
"type": [
"number",
"null"
]
},
"bestPage": {
"description": "Highest scoring page: url and overallScore",
"type": [
"object",
"null"
]
},
"categoryAverages": {
"description": "Mean score per category across completed pages",
"type": "object"
},
"strongestCategory": {
"description": "Category with the highest average score",
"type": [
"string",
"null"
]
},
"topIssueTypes": {
"description": "Up to five issue types shared across pages (error and warning severities, counted once per page), each with its fixId for gvt_get_fix",
"items": {
"properties": {
"count": {
"description": "Pages carrying this issue type",
"type": "integer"
},
"fixId": {
"description": "fixId for gvt_get_fix, when the issue type is mapped",
"type": [
"string",
"null"
]
},
"severity": {
"description": "Highest severity observed for this issue type",
"type": "string"
},
"type": {
"description": "Issue type identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"weakestCategory": {
"description": "Category with the lowest average score",
"type": [
"string",
"null"
]
},
"worstPage": {
"description": "Lowest scoring page: url and overallScore",
"type": [
"object",
"null"
]
}
},
"type": "object"
},
"totalUrls": {
"description": "URLs in the batch after duplicate collapsing",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Read the canonical fix record for one GVT issue type: severity range, impact, scoring weight, plain-language description, and the recommended remediation. Issue IDs come from the fixId field on issues in gvt_get_test_results output. The same content is served as the gvt://knowledge/fixes/{issue_id} resource template for resource-capable clients. Copy fixId verbatim from the results output — unknown or mistyped IDs return not-found rather than a fuzzy match. Responses are static reference content and cacheable.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"issue_id": {
"description": "Stable issue identifier, e.g. og_title_missing or color-contrast. Matches the fixId field in gvt_get_test_results output.",
"type": "string"
}
},
"required": [
"issue_id"
],
"type": "object"
},
"name": "gvt_get_fix",
"outputSchema": {
"description": "Canonical fix record for one issue type",
"properties": {
"category": {
"description": "Analysis category the issue belongs to",
"type": "string"
},
"human_description": {
"description": "Human-readable description of the issue",
"type": "string"
},
"impact": {
"description": "Plain-language statement of what the issue costs",
"type": "string"
},
"issue_id": {
"description": "Stable issue identifier, e.g. og_title_missing",
"type": "string"
},
"recommendation": {
"description": "The recommended remediation",
"type": "string"
},
"resourceUri": {
"description": "The gvt:// resource this record was read from",
"type": "string"
},
"severity_range": {
"description": "Severity levels this issue can take",
"items": {
"type": "string"
},
"type": "array"
},
"subcategory": {
"description": "Finer-grained grouping within the category",
"type": "string"
},
"ttlMs": {
"description": "Suggested client cache lifetime in milliseconds",
"type": "integer"
},
"weight": {
"description": "Scoring weight",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Read GVT reference knowledge: how scoring works, score bands and category weights, what each analysis category checks, or GEO glossary definitions. Use it to interpret test results and scores correctly instead of guessing. The topic is matched exactly and case-sensitively (Methodology will not match methodology); unrecognized values fail fast with the valid list. The same content is served as MCP resources at gvt://knowledge/app/* for resource-capable clients.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"topic": {
"default": "all",
"description": "Which knowledge topic to read: methodology (how GVT analyzes pages), scoring (score bands and category weights), categories (what each of the six categories checks), glossary (GEO term definitions), or all (complete knowledge base).",
"enum": [
"all",
"methodology",
"scoring",
"categories",
"glossary"
],
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "gvt_get_knowledge",
"outputSchema": {
"properties": {
"knowledge": {
"description": "Reference content for the requested topic",
"type": "object"
},
"topic": {
"description": "The topic that was served",
"enum": [
"all",
"methodology",
"scoring",
"categories",
"glossary"
],
"type": "string"
},
"ttlMs": {
"description": "Suggested client cache lifetime in milliseconds",
"type": "integer"
},
"uri": {
"description": "The gvt:// resource the content came from",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Get the most recent non-expired test snapshot for a single URL. For pre-computed baseline-vs-latest deltas without fetching full snapshots, use gvt_get_score_trend instead. Use with gvt_get_baseline to compare baseline vs current when you need the full snapshot detail on both ends. The url must be passed exactly as the test was run — matching is exact string equality, not nearest-match; an unrecorded URL returns 404. Considers only the authenticated caller's own non-expired tests.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"url": {
"description": "The URL to look up (must match the URL used when the test was run).",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "gvt_get_latest",
"outputSchema": {
"description": "Most recent non-expired snapshot for one URL. On success the snapshot fields sit at the top level; when no test exists the response is { url, latest: null, message }.",
"properties": {
"analysisSummary": {
"description": "Aggregate scores for this test",
"properties": {
"categoryIssueCounts": {
"description": "Open issue count per analysis category",
"properties": {
"accessibility": {
"description": "Number of open accessibility issues",
"type": "integer"
},
"headings": {
"description": "Number of open heading structure issues",
"type": "integer"
},
"javascript": {
"description": "Number of open JavaScript dependency issues",
"type": "integer"
},
"nojs": {
"description": "Number of open No-JS rendering issues",
"type": "integer"
},
"schema": {
"description": "Number of open schema.org markup issues",
"type": "integer"
},
"semantic": {
"description": "Number of open semantic HTML5 issues",
"type": "integer"
},
"social": {
"description": "Number of open social tag issues",
"type": "integer"
}
},
"type": "object"
},
"categoryScores": {
"description": "Score per analysis category (0-100)",
"properties": {
"accessibility": {
"description": "Accessibility score (0-100)",
"type": "number"
},
"headings": {
"description": "Heading structure score (0-100)",
"type": "number"
},
"javascript": {
"description": "JavaScript dependency score (0-100)",
"type": "number"
},
"nojs": {
"description": "No-JS rendering score (0-100)",
"type": "number"
},
"schema": {
"description": "schema.org markup score (0-100)",
"type": "number"
},
"semantic": {
"description": "Semantic HTML5 score (0-100)",
"type": "number"
},
"social": {
"description": "Social tags score (0-100)",
"type": "number"
}
},
"type": "object"
},
"jsDependencySource": {
"description": "How the JS dependency score was derived",
"enum": [
"measured",
"estimated",
"unavailable"
],
"type": "string"
},
"overallScore": {
"description": "Overall GEO visibility score (0-100)",
"type": "number"
},
"timestamp": {
"description": "ISO 8601 instant of the analysis",
"type": "string"
},
"totalIssues": {
"description": "Total open issues across all categories",
"type": "integer"
}
},
"type": "object"
},
"createdAt": {
"description": "ISO 8601 instant this snapshot was created",
"type": "string"
},
"expiresAt": {
"description": "ISO 8601 instant this snapshot will expire",
"type": [
"string",
"null"
]
},
"findingSentence": {
"description": "Pre-generated natural language verdict for this snapshot",
"type": [
"string",
"null"
]
},
"isPublic": {
"description": "Whether this test is publicly visible",
"type": "boolean"
},
"latest": {
"description": "Null when no test exists for the URL",
"type": [
"object",
"null"
]
},
"message": {
"description": "Present only in the no-test case",
"type": "string"
},
"shareableTid": {
"description": "Public share ID, non-null when shareable",
"type": [
"string",
"null"
]
},
"status": {
"description": "Snapshot status (completed, failed, etc.)",
"type": "string"
},
"testType": {
"description": "The type of the test run",
"enum": [
"url",
"html_paste"
],
"type": "string"
},
"tid": {
"description": "Test ID of the snapshot",
"type": "string"
},
"updatedAt": {
"description": "ISO 8601 instant this snapshot was last updated",
"type": "string"
},
"url": {
"description": "The URL this snapshot analyzed",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Render a GVT prompt workflow with concrete argument values, returning the complete step-by-step instruction text ready to follow. Also returns the effective arguments that were bound (provided values plus defaults for omitted optionals). Prompt names and their arguments come from gvt_list_prompts; an unknown name or argument key errors rather than guessing. The rendered text references GVT tools by name — call them as instructed.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"arguments": {
"additionalProperties": {
"type": "string"
},
"description": "Argument values for the prompt, keyed by argument name (e.g. {\"domain\": \"example.com\", \"frequency\": \"weekly\"}). Omit optional arguments to use their defaults.",
"type": "object"
},
"name": {
"description": "Prompt name from gvt_list_prompts, e.g. gvt_setup_domain_monitoring.",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "gvt_get_prompt",
"outputSchema": {
"properties": {
"arguments": {
"description": "Effective arguments after binding defaults",
"type": "object"
},
"description": {
"description": "The prompt catalog description",
"type": "string"
},
"name": {
"description": "The prompt name that was rendered",
"type": "string"
},
"text": {
"description": "Fully interpolated instruction text referencing GVT tools by name",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Compare the oldest baseline vs the latest non-expired test for a single URL or an entire domain, with pre-computed per-category deltas (latest minus baseline). Provide exactly one of url or domain. Domain mode matches the exact domain, www.<domain>, and subdomains (alphabetical, capped by limit). Page through the whole domain with offset: offset=0 for the first page, offset=limit for the second, following hasMore/nextOffset. Returns scores and deltas only, not full snapshot detail; for complete snapshots of one URL use gvt_get_baseline and gvt_get_latest. This replaces paging the full test history and computing comparisons client-side, one call per site.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"domain": {
"description": "Domain scope — matches the domain, www.<domain>, and subdomains (XOR with url).",
"type": "string"
},
"limit": {
"default": 25,
"description": "Cap on returned records in domain mode (max 100, default 25).",
"maximum": 100,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of matched URLs to skip in domain mode (row skip, not a page number). Use offset=0 for the first page, offset=limit for the second. Ignored in single-URL mode.",
"minimum": 0,
"type": "integer"
},
"url": {
"description": "Single URL scope (XOR with domain).",
"type": "string"
}
},
"type": "object"
},
"name": "gvt_get_score_trend",
"outputSchema": {
"description": "Baseline vs latest comparison with pre-computed deltas, scoped to one URL or a whole domain",
"properties": {
"compare": {
"description": "Comparison window settings used",
"type": [
"object",
"null"
]
},
"domain": {
"description": "The compared domain in domain mode, else null",
"type": [
"string",
"null"
]
},
"hasMore": {
"description": "True when more pages exist",
"type": "boolean"
},
"includeSubdomains": {
"description": "Whether subdomains were included in the domain search",
"type": "boolean"
},
"limit": {
"description": "Max records per page in domain mode",
"type": "integer"
},
"nextOffset": {
"description": "Offset for the next page, null on the last page",
"type": [
"integer",
"null"
]
},
"offset": {
"description": "Row offset applied to this page",
"type": "integer"
},
"returned": {
"description": "Records in this page",
"type": "integer"
},
"scope": {
"description": "Which mode the comparison ran in",
"enum": [
"url",
"domain"
],
"type": "string"
},
"trends": {
"description": "One row per matched URL, baseline vs latest with deltas",
"items": {
"properties": {
"baseline": {
"description": "One test snapshot: tid, createdAt, overallScore, categoryScores",
"properties": {
"categoryScores": {
"description": "Score per analysis category (0-100)",
"properties": {
"accessibility": {
"description": "Accessibility score (0-100)",
"type": "number"
},
"headings": {
"description": "Heading structure score (0-100)",
"type": "number"
},
"javascript": {
"description": "JavaScript dependency score (0-100)",
"type": "number"
},
"nojs": {
"description": "No-JS rendering score (0-100)",
"type": "number"
},
"schema": {
"description": "schema.org markup score (0-100)",
"type": "number"
},
"semantic": {
"description": "Semantic HTML5 score (0-100)",
"type": "number"
},
"social": {
"description": "Social tags score (0-100)",
"type": "number"
}
},
"type": "object"
},
"createdAt": {
"description": "ISO 8601 instant of this snapshot",
"type": "string"
},
"overallScore": {
"description": "Overall GEO visibility score (0-100), null when the test failed",
"type": [
"number",
"null"
]
},
"tid": {
"description": "Test ID of this snapshot",
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"deltas": {
"description": "Latest minus baseline",
"properties": {
"categories": {
"description": "Per-category score change, latest minus baseline",
"properties": {
"accessibility": {
"description": "Accessibility score (0-100)",
"type": "number"
},
"headings": {
"description": "Heading structure score (0-100)",
"type": "number"
},
"javascript": {
"description": "JavaScript dependency score (0-100)",
"type": "number"
},
"nojs": {
"description": "No-JS rendering score (0-100)",
"type": "number"
},
"schema": {
"description": "schema.org markup score (0-100)",
"type": "number"
},
"semantic": {
"description": "Semantic HTML5 score (0-100)",
"type": "number"
},
"social": {
"description": "Social tags score (0-100)",
"type": "number"
}
},
"type": "object"
},
"overall": {
"description": "Overall score change, latest minus baseline",
"type": [
"number",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"isSameTest": {
"description": "True when baseline and latest are the same test (no movement yet)",
"type": "boolean"
},
"latest": {
"description": "One test snapshot: tid, createdAt, overallScore, categoryScores",
"properties": {
"categoryScores": {
"description": "Score per analysis category (0-100)",
"properties": {
"accessibility": {
"description": "Accessibility score (0-100)",
"type": "number"
},
"headings": {
"description": "Heading structure score (0-100)",
"type": "number"
},
"javascript": {
"description": "JavaScript dependency score (0-100)",
"type": "number"
},
"nojs": {
"description": "No-JS rendering score (0-100)",
"type": "number"
},
"schema": {
"description": "schema.org markup score (0-100)",
"type": "number"
},
"semantic": {
"description": "Semantic HTML5 score (0-100)",
"type": "number"
},
"social": {
"description": "Social tags score (0-100)",
"type": "number"
}
},
"type": "object"
},
"createdAt": {
"description": "ISO 8601 instant of this snapshot",
"type": "string"
},
"overallScore": {
"description": "Overall GEO visibility score (0-100), null when the test failed",
"type": [
"number",
"null"
]
},
"tid": {
"description": "Test ID of this snapshot",
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"testCount": {
"description": "Total tests ever run for this URL",
"type": "integer"
},
"url": {
"description": "The URL this trend row describes",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"truncated": {
"deprecated": true,
"description": "Deprecated. Use `hasMore` instead.",
"type": "boolean"
},
"ttlMs": {
"description": "Suggested client cache lifetime in milliseconds",
"type": "integer"
},
"url": {
"description": "The compared URL in url mode, else null",
"type": [
"string",
"null"
]
},
"urlCount": {
"description": "Total matched URLs before pagination",
"type": "integer"
},
"windowSummary": {
"description": "Summary of window comparison results",
"type": [
"object",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Get results for a visibility test by tid: overall scores, findingSentence, shareableTid, and per-category resultData. The tid is an opaque 8-character HashID — copy it verbatim from gvt_run_visibility_test, gvt_list_tests, or gvt_get_batch_status; partial or reformatted values will not match, and results are scoped to the caller's own tests. If status is \"pending\" or \"running\", wait and retry. findingSentence is a pre-generated natural-language verdict; use it as the primary summary. shareableTid is non-null when the result is public and linkable. detail selects the payload shape: \"summary\" (recommended for reporting workflows) returns analysisSummary plus the top issues per category without the semantic tree, per-element markup, or the nojs_rendered duplicate pass; \"full\" (the default) returns complete per-category resultData for all 7 analysis types (heading, semantic, accessibility, schema, javascript, nojs, social). For compact per-page scores across a whole completed batch, prefer gvt_get_batch_summary instead of one call per tid.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"detail": {
"default": "full",
"description": "Payload shape. summary: analysisSummary plus the top issues per category (deduplicated by type, capped at 10, sorted by severity then weight) — no semantic tree, per-element markup, or nojs_rendered pass. full: complete resultData for all analysis types (previous behavior, the default).",
"enum": [
"summary",
"full"
],
"type": "string"
},
"tid": {
"description": "Opaque 8-character hash ID returned by gvt_run_visibility_test or gvt_list_tests. Not an integer.",
"type": "string"
}
},
"required": [
"tid"
],
"type": "object"
},
"name": "gvt_get_test_results",
"outputSchema": {
"description": "Results for one test. While status is pending or running, results are incomplete — wait and retry. detail=summary returns the compact shape; detail=full (the default) returns complete per-category resultData.",
"properties": {
"analysisSummary": {
"description": "Aggregate scores for one test session",
"properties": {
"categoryIssueCounts": {
"description": "Open issue count per analysis category",
"properties": {
"accessibility": {
"description": "Number of open accessibility issues",
"type": "integer"
},
"headings": {
"description": "Number of open heading structure issues",
"type": "integer"
},
"javascript": {
"description": "Number of open JavaScript dependency issues",
"type": "integer"
},
"nojs": {
"description": "Number of open No-JS rendering issues",
"type": "integer"
},
"schema": {
"description": "Number of open schema.org markup issues",
"type": "integer"
},
"semantic": {
"description": "Number of open semantic HTML5 issues",
"type": "integer"
},
"social": {
"description": "Number of open social tag issues",
"type": "integer"
}
},
"type": "object"
},
"categoryScores": {
"description": "Score per analysis category (0-100)",
"properties": {
"accessibility": {
"description": "Accessibility score (0-100)",
"type": "number"
},
"headings": {
"description": "Heading structure score (0-100)",
"type": "number"
},
"javascript": {
"description": "JavaScript dependency score (0-100)",
"type": "number"
},
"nojs": {
"description": "No-JS rendering score (0-100)",
"type": "number"
},
"schema": {
"description": "schema.org markup score (0-100)",
"type": "number"
},
"semantic": {
"description": "Semantic HTML5 score (0-100)",
"type": "number"
},
"social": {
"description": "Social tags score (0-100)",
"type": "number"
}
},
"type": "object"
},
"jsDependencySource": {
"description": "How the JS dependency score was derived",
"enum": [
"measured",
"estimated",
"unavailable"
],
"type": "string"
},
"overallScore": {
"description": "Overall GEO visibility score (0-100)",
"type": "number"
},
"timestamp": {
"description": "ISO 8601 instant of the analysis",
"type": "string"
},
"totalIssues": {
"description": "Total open issues across all categories",
"type": "integer"
}
},
"type": "object"
},
"createdAt": {
"description": "ISO 8601 instant of test creation",
"type": "string"
},
"detail": {
"description": "Present with value \"summary\" when detail=summary was requested; omitted from full responses so existing callers see no change",
"enum": [
"summary"
],
"type": "string"
},
"expiresAt": {
"description": "ISO 8601 instant when this test session and its results will expire and be deleted",
"type": [
"string",
"null"
]
},
"findingSentence": {
"description": "Pre-generated natural language verdict; use as the primary summary",
"type": [
"string",
"null"
]
},
"isPublic": {
"description": "Whether this test result is publicly accessible",
"type": [
"boolean",
"null"
]
},
"results": {
"description": "Per-category result records. detail=full: each carries analysisType and complete resultData (semantic tree, per-element issues); issues carry fixId for gvt_get_fix. detail=summary: each carries analysisType, score, and the top issues deduplicated by type (capped at 10 per category); the nojs_rendered duplicate pass is omitted — analysisSummary.categoryIssueCounts keeps the true totals.",
"items": {
"properties": {
"analysisType": {
"description": "Which analysis category this record holds",
"enum": [
"heading",
"semantic",
"accessibility",
"schema",
"javascript",
"nojs",
"social"
],
"type": "string"
},
"issues": {
"description": "Issue records; in summary mode each carries type, severity, impact, weight, element, description, and fixId (remediation comes from gvt_get_fix, not the payload)",
"type": "array"
},
"score": {
"description": "Category score (0-100), present in summary mode when the category reports one",
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"shareableTid": {
"description": "Non-null when the result is publicly shareable. Public share identifier for this session. Equal to tid when the session is shareable; null when the session is private. Presence of a value is the indicator that share links may be generated.",
"type": [
"string",
"null"
]
},
"status": {
"description": "Pending and running mean poll again; completed means full results are present",
"enum": [
"pending",
"processing",
"completed",
"failed"
],
"type": "string"
},
"testType": {
"description": "Type of test performed (e.g., URL or direct HTML paste)",
"enum": [
"url",
"html_paste"
],
"type": "string"
},
"tid": {
"description": "The test ID that was polled",
"type": "string"
},
"updatedAt": {
"description": "ISO 8601 instant of the last update to this test session",
"type": "string"
},
"url": {
"description": "The URL that was analyzed",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Get the oldest baseline test snapshots for a batch of URLs (up to 100) in a single call. Each result includes the URL and its oldest test object (null if no test exists for that URL). For a single URL use gvt_get_baseline; for pre-computed baseline-vs-latest deltas use gvt_get_score_trend. This bulk form is ideal for monthly/periodic batch comparisons: fetch baselines in bulk here, then call gvt_get_latest per URL. One call replaces up to 100 gvt_get_baseline calls; split larger URL sets into consecutive calls of at most 100. Order of results follows the submitted order.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"urls": {
"description": "Array of URLs to look up (max 100).",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
}
},
"required": [
"urls"
],
"type": "object"
},
"name": "gvt_list_baselines",
"outputSchema": {
"description": "Oldest baseline snapshots for a batch of URLs (up to 100)",
"properties": {
"found": {
"description": "URLs that had at least one test",
"type": "integer"
},
"requested": {
"description": "Number of URLs requested",
"type": "integer"
},
"results": {
"description": "One entry per requested URL, in request order",
"items": {
"properties": {
"oldest": {
"description": "One test snapshot: tid, createdAt, overallScore, categoryScores",
"properties": {
"categoryScores": {
"description": "Score per analysis category (0-100)",
"properties": {
"accessibility": {
"description": "Accessibility score (0-100)",
"type": "number"
},
"headings": {
"description": "Heading structure score (0-100)",
"type": "number"
},
"javascript": {
"description": "JavaScript dependency score (0-100)",
"type": "number"
},
"nojs": {
"description": "No-JS rendering score (0-100)",
"type": "number"
},
"schema": {
"description": "schema.org markup score (0-100)",
"type": "number"
},
"semantic": {
"description": "Semantic HTML5 score (0-100)",
"type": "number"
},
"social": {
"description": "Social tags score (0-100)",
"type": "number"
}
},
"type": "object"
},
"createdAt": {
"description": "ISO 8601 instant of this snapshot",
"type": "string"
},
"overallScore": {
"description": "Overall GEO visibility score (0-100), null when the test failed",
"type": [
"number",
"null"
]
},
"tid": {
"description": "Test ID of this snapshot",
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"url": {
"description": "The URL this record describes",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"ttlMs": {
"description": "Suggested client cache lifetime in milliseconds",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "List the GVT prompt workflows: user-invocable recipes that chain GVT tools into complete tasks (check a page, review a monthly batch, analyze regressions, verify fixes, set up domain monitoring, report client status). Each entry lists its arguments. Use gvt_get_prompt to render a prompt with concrete argument values, then follow the rendered instructions to run the workflow. This catalog is static and costs nothing to call on every session start — it never queues tests or consumes credits.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "gvt_list_prompts",
"outputSchema": {
"properties": {
"promptCount": {
"description": "Number of prompt workflows in the catalog",
"type": "integer"
},
"prompts": {
"description": "The prompt workflow catalog",
"items": {
"properties": {
"arguments": {
"description": "Arguments the prompt accepts",
"items": {
"properties": {
"description": {
"description": "What the argument controls",
"type": "string"
},
"name": {
"description": "Argument name",
"type": "string"
},
"required": {
"description": "True when the argument must be supplied",
"type": "boolean"
}
},
"type": "object"
},
"type": "array"
},
"description": {
"description": "What the prompt workflow does",
"type": "string"
},
"name": {
"description": "Prompt name for gvt_get_prompt",
"type": "string"
},
"title": {
"description": "Human-readable display name",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"ttlMs": {
"description": "Suggested client cache lifetime in milliseconds",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Retrieves the paginated roster of the authenticated caller's test monitoring schedules, allowing filtering by domain, frequency, and status. This is the only way to discover existing schedules and their schids, which the pause/resume/cancel/change_frequency modes of gvt_schedule_test require. Completed one-off rows are hidden by default: batch runs create a throwaway once row per queued URL, so include them only with includeCompletedOnce true. The row's tid is deliberately not surfaced (it is often stale); use gvt_list_tests or gvt_get_latest for test result lookups. Read-only: consumes rate limit, never test credits.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"domain": {
"description": "Filter to schedules matching this domain substring.",
"type": "string"
},
"frequency": {
"description": "Filter by repetition interval.",
"enum": [
"daily",
"weekly",
"monthly",
"once"
],
"type": "string"
},
"includeCompletedOnce": {
"default": false,
"description": "Whether to include completed one-off schedules in the results. Hidden by default because batch runs create a throwaway once row per queued URL; include them only when investigating batch history.",
"type": "boolean"
},
"includeSubdomains": {
"default": true,
"description": "Whether subdomains should be included in the domain filter match.",
"type": "boolean"
},
"limit": {
"default": 25,
"description": "The maximum number of schedules requested for this page.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "The number of skipped items from the beginning of the result set.",
"minimum": 0,
"type": "integer"
},
"sortDirection": {
"default": "desc",
"description": "Sort order by creation time; desc is newest first.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"status": {
"description": "Filter by the derived overall state of the schedule.",
"enum": [
"active",
"paused",
"completed"
],
"type": "string"
}
},
"type": "object"
},
"name": "gvt_list_schedules",
"outputSchema": {
"description": "Paginated roster of the caller's monitoring schedules with applied filters echoed back.",
"properties": {
"allowedFrequencies": {
"description": "Frequencies the caller may set when creating schedules",
"items": {
"type": "string"
},
"type": "array"
},
"domain": {
"description": "The applied domain filter, null when unfiltered",
"type": [
"string",
"null"
]
},
"frequency": {
"description": "The applied frequency filter, null when unfiltered",
"type": [
"string",
"null"
]
},
"hasMore": {
"description": "True when more results exist beyond this page",
"type": "boolean"
},
"includeCompletedOnce": {
"description": "Whether completed one-off rows were included in this response",
"type": "boolean"
},
"includeSubdomains": {
"description": "The applied subdomain-inclusion setting",
"type": "boolean"
},
"limit": {
"description": "Page size applied to this response",
"type": "integer"
},
"maxActiveSchedules": {
"description": "The caller's cap on active schedules; add mode enforces this limit",
"type": "integer"
},
"nextOffset": {
"description": "Offset for the next page, null when hasMore is false",
"type": [
"integer",
"null"
]
},
"offset": {
"description": "Offset applied to this response",
"type": "integer"
},
"schedules": {
"description": "One entry per schedule, newest first by creation time",
"items": {
"properties": {
"autoPauseReason": {
"description": "Reason the schedule was automatically paused, null when not auto-paused",
"type": [
"string",
"null"
]
},
"consecutiveFailureCount": {
"description": "Number of consecutive failed runs; a high count precedes auto-pause",
"type": "integer"
},
"createdAt": {
"description": "ISO 8601 instant the schedule was created",
"type": "string"
},
"frequency": {
"description": "How often the test recurs; once is a one-off scheduled run",
"enum": [
"daily",
"weekly",
"monthly",
"once"
],
"type": "string"
},
"isPaused": {
"description": "True when the schedule is paused; a paused schedule retains its schid and its nextRunAt",
"type": "boolean"
},
"lastRunAt": {
"description": "ISO 8601 instant of the most recent completed run, null when it has not run yet",
"type": [
"string",
"null"
]
},
"nextRunAt": {
"description": "ISO 8601 instant of the next queued run. Retained while paused (it fires on resume); null for completed one-off runs or when nothing is scheduled yet",
"type": [
"string",
"null"
]
},
"schid": {
"description": "Opaque 8-character schedule identifier, accepted by the gvt_schedule_test pause/resume/cancel/change_frequency modes",
"type": "string"
},
"status": {
"description": "Derived overall state; cancelled schedules are deleted outright and never appear here",
"enum": [
"active",
"paused",
"completed"
],
"type": "string"
},
"updatedAt": {
"description": "ISO 8601 instant of the most recent schedule change, null when never modified",
"type": [
"string",
"null"
]
},
"url": {
"description": "The monitored URL",
"type": "string"
},
"wpPostId": {
"description": "WordPress post ID when the schedule was created from the WordPress plugin, null otherwise",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"status": {
"description": "The applied status filter, null when unfiltered",
"type": [
"string",
"null"
]
},
"total": {
"description": "Total schedules matching the filters, across all pages",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Discovers and ranks URLs from a domain's XML sitemaps to find the most significant pages (homepages, product pages, recently updated content) before analyzing them. Supports URL-pattern filtering and automatically flags robots.txt-blocked and already-tested pages. Legal/policy boilerplate (privacy, terms, cookies, disclaimers, refunds) is flagged legalPage:true with a -25 significance penalty; use the legalPages filter to drop it (exclude) or isolate it for a policy-coverage audit (only). Parameters group into three jobs: discovery (url), ranking and paging (limit, sort), and filtering (include and exclude URL patterns, excludeDisallowed, excludeTested, excludeScheduled, legalPages).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"exclude": {
"description": "Wildcard patterns to reject (e.g., '*archive*').",
"items": {
"type": "string"
},
"type": "array"
},
"excludeDisallowed": {
"default": false,
"description": "If true, silently drops URLs that are blocked by robots.txt.",
"type": "boolean"
},
"excludeScheduled": {
"default": false,
"description": "If true, omits URLs currently in the testing queue.",
"type": "boolean"
},
"excludeTested": {
"default": false,
"description": "If true, omits URLs the user has already tested.",
"type": "boolean"
},
"include": {
"description": "Wildcard patterns to require (e.g., '*blog*'). Only '*' wildcards are supported.",
"items": {
"type": "string"
},
"type": "array"
},
"legalPages": {
"default": "include",
"description": "Tri-state filter for legal/policy boilerplate pages (privacy, terms, cookies, disclaimers, refund policies, etc). \"include\" keeps them (default), \"exclude\" drops them, and \"only\" returns just the legal/policy pages — useful for auditing a site's policy coverage.",
"enum": [
"include",
"exclude",
"only"
],
"type": "string"
},
"limit": {
"default": 10,
"description": "Maximum number of URLs to return (default 10).",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"sort": {
"default": "significance",
"description": "How to sort the discovered URLs. 'significance' uses SEO heuristics.",
"enum": [
"significance",
"lastmod",
"alphabetical",
"document"
],
"type": "string"
},
"url": {
"description": "The target website URL or an explicit sitemap .xml URL.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "gvt_list_sitemap_urls",
"outputSchema": {
"description": "Ranked URL discovery from a domain XML sitemaps",
"properties": {
"bulkUrlLimit": {
"description": "How many of these URLs the caller's tier permits in one batch-analyze call.",
"type": "integer"
},
"errors": {
"description": "Per-sitemap fetch or parse failures; non-empty means discovery was partial",
"items": {
"type": "object"
},
"type": "array"
},
"hasMore": {
"description": "True when the filtered set was cut short by the limit",
"type": "boolean"
},
"legalPages": {
"description": "The legal-page filter actually applied",
"enum": [
"include",
"exclude",
"only"
],
"type": "string"
},
"legalPagesFound": {
"description": "How many of the URLs discovered across all sitemaps were detected as legal/policy boilerplate, counted BEFORE any filtering or limiting is applied.",
"type": "integer"
},
"limit": {
"description": "Effective result cap",
"type": "integer"
},
"matched": {
"description": "URLs remaining after include/exclude and legalPages filters",
"type": "integer"
},
"requestedUrl": {
"description": "The URL or sitemap URL that was resolved",
"type": "string"
},
"resolvedSitemaps": {
"description": "Sitemap URLs actually parsed",
"items": {
"type": "string"
},
"type": "array"
},
"returned": {
"description": "URLs actually returned after the limit",
"type": "integer"
},
"robotsTxtFound": {
"description": "Whether a robots.txt was found and consulted",
"type": "boolean"
},
"sitemapCount": {
"description": "Number of sitemaps parsed",
"type": "integer"
},
"sort": {
"description": "The sort actually applied to the results",
"enum": [
"significance",
"lastmod",
"alphabetical",
"document"
],
"type": "string"
},
"totalDiscovered": {
"description": "Raw URL count discovered before filtering",
"type": "integer"
},
"truncated": {
"description": "True if the underlying sitemap parser hit its 5000-URL cap during fetching.",
"type": "boolean"
},
"urls": {
"description": "Discovered URLs, ranked per the sort setting",
"items": {
"properties": {
"alreadyScheduled": {
"description": "True when this URL is already in the testing queue",
"type": "boolean"
},
"alreadyTested": {
"description": "True when the caller has an existing test for this URL",
"type": "boolean"
},
"changefreq": {
"description": "Sitemap change frequency hint, when present",
"type": [
"string",
"null"
]
},
"disallowedByRobots": {
"description": "True when robots.txt disallows crawling this URL",
"type": "boolean"
},
"lastmod": {
"description": "Last-modified timestamp from the sitemap, when present",
"type": [
"string",
"null"
]
},
"legalPage": {
"description": "True when detected as legal/policy boilerplate",
"type": "boolean"
},
"pathDepth": {
"description": "Path depth from the site root (1 = homepage)",
"type": "integer"
},
"priority": {
"description": "Sitemap priority hint, when present",
"type": [
"number",
"null"
]
},
"significanceScore": {
"description": "SEO significance score used for the default ranking",
"type": "number"
},
"url": {
"description": "The discovered URL",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "List visibility tests for the authenticated user, newest first. Supports filtering by domain (optionally including subdomains), by URL (exact or contains match), by creation date range, by status, and by test type. This is the tid and history discovery surface: use it to find the exact recorded URL string and tids that gvt_get_baseline, gvt_get_latest, and gvt_get_test_results require, and use gvt_get_score_trend instead when you only need baseline-vs-latest deltas — it skips the paging entirely.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"createdFrom": {
"description": "Inclusive creation-date lower bound. YYYY-MM-DD (UTC midnight) or full ISO 8601 instant.",
"type": "string"
},
"createdTo": {
"description": "Exclusive creation-date upper bound. YYYY-MM-DD (UTC midnight) or full ISO 8601 instant.",
"type": "string"
},
"domain": {
"description": "Domain to filter tests by, e.g. example.com. Subdomains are included unless includeSubdomains is false.",
"type": "string"
},
"includeSubdomains": {
"default": true,
"description": "If true (the default), includes tests for subdomains of the given domain. Set false to match the exact domain only.",
"type": "boolean"
},
"limit": {
"default": 10,
"description": "Max results to return (default 10, max 100)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of records to skip before returning results (not a page number). Use offset=0 for the first page, offset=limit for the second page, etc.",
"minimum": 0,
"type": "integer"
},
"sortDirection": {
"default": "desc",
"description": "Sort direction by creation date: desc (newest first, default) or asc (oldest first).",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"status": {
"description": "Test status to filter by: pending, processing, completed, or failed.",
"enum": [
"pending",
"processing",
"completed",
"failed"
],
"type": "string"
},
"testType": {
"description": "Test type to filter by: url, html, or html_paste.",
"enum": [
"url",
"html",
"html_paste"
],
"type": "string"
},
"url": {
"description": "URL to filter tests by; matched per urlMode (contains by default).",
"type": "string"
},
"urlMode": {
"default": "contains",
"description": "How the url filter matches: \"exact\" for full-URL equality, \"contains\" for substring match.",
"enum": [
"exact",
"contains"
],
"type": "string"
}
},
"type": "object"
},
"name": "gvt_list_tests",
"outputSchema": {
"description": "Filtered, paginated test history, newest first",
"properties": {
"createdFrom": {
"description": "Effective lower creation-date bound, if any",
"type": [
"string",
"null"
]
},
"createdTo": {
"description": "Effective upper creation-date bound, if any",
"type": [
"string",
"null"
]
},
"domain": {
"description": "The domain filter actually applied, if any",
"type": [
"string",
"null"
]
},
"hasMore": {
"description": "True when more pages exist",
"type": "boolean"
},
"includeSubdomains": {
"description": "Whether subdomains were included in the domain filter",
"type": "boolean"
},
"limit": {
"description": "Page size actually applied",
"type": "integer"
},
"nextOffset": {
"description": "Offset for the next page, null on the last page",
"type": [
"integer",
"null"
]
},
"offset": {
"description": "Row offset applied to this page",
"type": "integer"
},
"tests": {
"description": "The matching test sessions on this page",
"items": {
"description": "Test session summaries (tid, url, status, analysisSummary, createdAt)",
"type": "object"
},
"type": "array"
},
"total": {
"description": "Total matching tests before pagination",
"type": "integer"
},
"ttlMs": {
"description": "Suggested client cache lifetime in milliseconds",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Queue up to 500 URLs for batch GEO visibility testing. Returns a batch ID for tracking progress. Optionally add URLs to recurring schedules (daily, weekly, monthly) during the same call. Poll gvt_get_batch_status with the batchId until status is completed or failed; then get the compact per-page score summary with gvt_get_batch_summary, or individual results with gvt_get_test_results. This tool queues paid test runs and consumes credits; for score interpretation, methodology, or reference knowledge, use gvt_get_knowledge instead — it never runs tests. A webhook URL can be provided to receive a completion notification; when set, the response returns webhookSecret, an HMAC key for verifying that the notification genuinely came from GVT. Duplicate URLs in the submitted array are collapsed, so totalUrls may be smaller than the array you sent.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"urls": {
"description": "Array of URL objects to test (max 500)",
"items": {
"properties": {
"addToSchedule": {
"properties": {
"frequency": {
"description": "How often to re-run the test",
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
}
},
"required": [
"frequency"
],
"type": "object"
},
"url": {
"description": "The URL to analyze",
"type": "string"
},
"wpPostId": {
"description": "Optional WordPress post ID for association",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"maxItems": 500,
"minItems": 1,
"type": "array"
},
"webhookUrl": {
"description": "Optional HTTPS URL to receive a batch completion webhook",
"type": "string"
}
},
"required": [
"urls"
],
"type": "object"
},
"name": "gvt_run_visibility_batch",
"outputSchema": {
"description": "Batch acknowledgement. Poll gvt_get_batch_status with the batchId until status is completed or failed, then retrieve results via gvt_get_test_results.",
"properties": {
"batchId": {
"description": "UUID for tracking the batch",
"type": "string"
},
"status": {
"description": "Always queued at submission time",
"enum": [
"queued"
],
"type": "string"
},
"totalUrls": {
"description": "URLs accepted into the batch",
"type": "integer"
},
"webhookConfigured": {
"description": "True when a completion webhook URL was supplied",
"type": "boolean"
},
"webhookSecret": {
"description": "HMAC secret for verifying the webhook, null when no webhook",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Run a GEO visibility test on a URL. Analyzes 7 categories: JavaScript dependencies (js), no-JS rendering (nojs), semantic HTML5, heading structure, schema.org markup, social tags, and accessibility. This is an async operation — it returns a tid immediately. Pass that tid to gvt_get_test_results to retrieve scores and issues once the test completes (poll until status is not \"pending\" or \"running\").",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"url": {
"description": "The URL to analyze",
"type": "string"
},
"waitForJs": {
"default": true,
"description": "Wait for JavaScript rendering before analysis. Set to false to skip JS rendering (faster, but may miss dynamically injected content).",
"type": "boolean"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "gvt_run_visibility_test",
"outputSchema": {
"description": "Async acknowledgement. Poll gvt_get_test_results with the returned tid until status is not pending or running.",
"properties": {
"message": {
"description": "Human-readable acknowledgement with polling guidance",
"type": "string"
},
"next": {
"description": "The suggested next call",
"properties": {
"arguments": {
"description": "Arguments for the next call",
"properties": {
"tid": {
"description": "The tid to poll with",
"type": "string"
}
},
"type": "object"
},
"tool": {
"description": "The tool to call next",
"enum": [
"gvt_get_test_results"
],
"type": "string"
}
},
"type": "object"
},
"status": {
"description": "Always pending at queue time",
"enum": [
"pending"
],
"type": "string"
},
"tid": {
"description": "8-character test ID to poll with",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Manage recurring GVT test schedules: add, delete, reset, pause, resume, cancel, and change_frequency. Discover existing schedules and their schids via gvt_list_schedules; control modes require a schid. For one-off tests use gvt_run_visibility_test; for queued batches without recurrence use gvt_run_visibility_batch. Modes: \"add\" upserts schedules for the provided urls without duplicating; \"delete\" permanently removes schedule entries by schid or url (test results are never deleted by any mode); \"reset\" is destructive — deletes all matching schedules first (domain-scoped when provided, otherwise ALL account-wide), then upserts the provided urls; \"pause\" halts reversibly; \"resume\" restarts a paused schedule and clears auto-pause reasons and failure counts; \"cancel\" permanently ends the schedule (schid unusable); \"change_frequency\" updates the recurrence interval. Management modes (add/delete/reset) require urls; control modes require schid. Subscription-tier enforcement applies.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"domain": {
"description": "Domain to scope a reset operation (reset mode only). e.g. \"example.com\". Matches https://, http://, with/without www., with/without trailing path. Omit to reset ALL schedules.",
"type": "string"
},
"frequency": {
"description": "New frequency for the schedule. Required for change_frequency mode.",
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
},
"mode": {
"default": "add",
"description": "Schedule operation mode. add/delete/reset operate on URLs (require urls array). pause/resume/cancel/change_frequency operate on a single schedule (require schid).",
"enum": [
"add",
"delete",
"reset",
"pause",
"resume",
"cancel",
"change_frequency"
],
"type": "string"
},
"schid": {
"description": "Schedule ID. Required for pause, resume, cancel, and change_frequency modes.",
"type": "string"
},
"urls": {
"description": "Array of URL/schedule objects. Required for add, delete, and reset modes.",
"items": {
"properties": {
"addToSchedule": {
"properties": {
"frequency": {
"description": "How often to re-run the test",
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
}
},
"required": [
"frequency"
],
"type": "object"
},
"schid": {
"description": "Schedule ID (required for delete/reset modes)",
"type": "string"
},
"url": {
"description": "The URL to schedule (required for add mode; optional in delete mode if schid is provided)",
"type": "string"
},
"wpPostId": {
"description": "Optional WordPress post ID for association",
"type": "string"
}
},
"required": [],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [],
"type": "object"
},
"name": "gvt_schedule_test",
"outputSchema": {
"description": "Result varies by mode: add/reset return upsertedCount and scheduled; delete returns deletedCount and deletedByUrl",
"properties": {
"deletedByUrl": {
"description": "Per-URL breakdown of deleted schedules (delete mode). Present on delete mode responses, including schid-based deletes; omitted for reset mode.",
"items": {
"properties": {
"count": {
"description": "Number of schedule entries deleted for this URL",
"type": "integer"
},
"frequencies": {
"description": "Frequencies that were removed for this URL",
"items": {
"enum": [
"daily",
"weekly",
"monthly",
"once"
],
"type": "string"
},
"type": "array"
},
"url": {
"description": "The URL whose schedules were deleted",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"deletedCount": {
"description": "Schedule entries removed (delete/reset modes)",
"type": "integer"
},
"scheduled": {
"description": "Schedules now in effect (add/reset modes)",
"items": {
"properties": {
"schid": {
"description": "Schedule ID for later pause/resume/cancel calls",
"type": "string"
},
"url": {
"description": "The URL placed on schedule",
"type": "string"
},
"wpPostId": {
"description": "Associated WordPress post ID, when provided",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"success": {
"description": "True when the requested mode completed",
"type": "boolean"
},
"upsertedCount": {
"description": "Schedules created or updated (add/reset modes)",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Toggle the public visibility of a test session. Set is_public to true to make the test shareable and receive its public share URL, or false to make it private. The response confirms the new state and, when making a test public, includes the share_url the recipient can visit without any authentication. is_public is the only lever: true both publishes and yields the link in this same response; false revokes access to any previously issued share_url immediately. This is the only way to control who can view a test result without requiring MCP authentication.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"is_public": {
"description": "true to make the test publicly shareable, false to make it private.",
"type": "boolean"
},
"tid": {
"description": "The 8-character test ID returned by gvt_run_visibility_test.",
"type": "string"
}
},
"required": [
"tid",
"is_public"
],
"type": "object"
},
"name": "gvt_set_test_visibility",
"outputSchema": {
"properties": {
"is_public": {
"description": "The new public visibility state",
"type": "boolean"
},
"share_url": {
"description": "Public share URL, present when is_public is true; the recipient needs no authentication. Null when sharing failed or the test is private",
"type": [
"string",
"null"
]
},
"success": {
"description": "True when the visibility change was applied",
"type": "boolean"
},
"tid": {
"description": "The test that was modified",
"type": "string"
}
},
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:c77c9a7c877f05b8efad9eef5d6b0e3a7bc322ecfdc88c2bb13d888f0a489779 | sha256sum