Skip to main content
Glama

iGods GEO Visibility Tool (GVT)

Get score trend

gvt_get_score_trend
Read-onlyIdempotent

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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoSingle URL scope (XOR with domain).
limitNoCap on returned records in domain mode (max 100, default 25).
domainNoDomain scope — matches the domain, www.<domain>, and subdomains (XOR with url).
offsetNoNumber 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.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoThe compared URL in url mode, else null
limitNoMax records per page in domain mode
scopeNoWhich mode the comparison ran in
ttlMsNoSuggested client cache lifetime in milliseconds
domainNoThe compared domain in domain mode, else null
offsetNoRow offset applied to this page
trendsNoOne row per matched URL, baseline vs latest with deltas
compareNoComparison window settings used
hasMoreNoTrue when more pages exist
returnedNoRecords in this page
urlCountNoTotal matched URLs before pagination
truncatedNoDeprecated. Use `hasMore` instead.
nextOffsetNoOffset for the next page, null on the last page
windowSummaryNoSummary of window comparison results
includeSubdomainsNoWhether subdomains were included in the domain search

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedOutput schema / properties / compare
      Added value: +{
      +  "description": "Comparison window settings used",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / includeSubdomains
      Added value: +{
      +  "description": "Whether subdomains were included in the domain search",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "deprecated": true,
      +  "description": "Deprecated. Use `hasMore` instead.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / windowSummary
      Added value: +{
      +  "description": "Summary of window comparison results",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  2. Changed23 schema fields changed
    • addedOutput schema / properties / domain / description
      Added value: +"The compared domain in domain mode, else null"
    • addedOutput schema / properties / hasMore / description
      Added value: +"True when more pages exist"
    • addedOutput schema / properties / limit / description
      Added value: +"Max records per page in domain mode"
    • addedOutput schema / properties / nextOffset / description
      Added value: +"Offset for the next page, null on the last page"
    • addedOutput schema / properties / offset / description
      Added value: +"Row offset applied to this page"
    • addedOutput schema / properties / returned / description
      Added value: +"Records in this page"
    • addedOutput schema / properties / scope / description
      Added value: +"Which mode the comparison ran in"
    • addedOutput schema / properties / trends / description
      Added value: +"One row per matched URL, baseline vs latest with deltas"
    • addedOutput schema / properties / trends / items / properties / baseline / properties / categoryScores / description
      Added value: +"Score per analysis category (0-100)"
    • addedOutput schema / properties / trends / items / properties / baseline / properties / createdAt / description
      Added value: +"ISO 8601 instant of this snapshot"
    • addedOutput schema / properties / trends / items / properties / baseline / properties / overallScore / description
      Added value: +"Overall GEO visibility score (0-100), null when the test failed"
    • addedOutput schema / properties / trends / items / properties / baseline / properties / tid / description
      Added value: +"Test ID of this snapshot"
    • addedOutput schema / properties / trends / items / properties / deltas / properties / categories / description
      Added value: +"Per-category score change, latest minus baseline"
    • addedOutput schema / properties / trends / items / properties / deltas / properties / overall / description
      Added value: +"Overall score change, latest minus baseline"
    • addedOutput schema / properties / trends / items / properties / latest / properties / categoryScores / description
      Added value: +"Score per analysis category (0-100)"
    • addedOutput schema / properties / trends / items / properties / latest / properties / createdAt / description
      Added value: +"ISO 8601 instant of this snapshot"
    • addedOutput schema / properties / trends / items / properties / latest / properties / overallScore / description
      Added value: +"Overall GEO visibility score (0-100), null when the test failed"
    • addedOutput schema / properties / trends / items / properties / latest / properties / tid / description
      Added value: +"Test ID of this snapshot"
    • addedOutput schema / properties / trends / items / properties / testCount / description
      Added value: +"Total tests ever run for this URL"
    • addedOutput schema / properties / trends / items / properties / url / description
      Added value: +"The URL this trend row describes"
    • addedOutput schema / properties / ttlMs / description
      Added value: +"Suggested client cache lifetime in milliseconds"
    • addedOutput schema / properties / url / description
      Added value: +"The compared URL in url mode, else null"
    • addedOutput schema / properties / urlCount / description
      Added value: +"Total matched URLs before pagination"
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Baseline vs latest comparison with pre-computed deltas, scoped to one URL or a whole domain",
      +  "properties": {
      +    "domain": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "hasMore": {
      +      "type": "boolean"
      +    },
      +    "limit": {
      +      "type": "integer"
      +    },
      +    "nextOffset": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "offset": {
      +      "type": "integer"
      +    },
      +    "returned": {
      +      "type": "integer"
      +    },
      +    "scope": {
      +      "enum": [
      +        "url",
      +        "domain"
      +      ],
      +      "type": "string"
      +    },
      +    "trends": {
      +      "items": {
      +        "properties": {
      +          "baseline": {
      +            "description": "One test snapshot: tid, createdAt, overallScore, categoryScores",
      +            "properties": {
      +              "categoryScores": {
      +                "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": {
      +                "type": "string"
      +              },
      +              "overallScore": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "tid": {
      +                "type": "string"
      +              }
      +            },
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "deltas": {
      +            "description": "Latest minus baseline",
      +            "properties": {
      +              "categories": {
      +                "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": {
      +                "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": {
      +                "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": {
      +                "type": "string"
      +              },
      +              "overallScore": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "tid": {
      +                "type": "string"
      +              }
      +            },
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "testCount": {
      +            "type": "integer"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "ttlMs": {
      +      "type": "integer"
      +    },
      +    "url": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "urlCount": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, it discloses meaningful behavior: only non-expired tests are considered, deltas are pre-computed, results are limited to scores/deltas (not full snapshots), domain mode is alphabetical and capped by limit, and pagination follows hasMore/nextOffset. 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.

Conciseness4/5

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

The description is front-loaded with the core comparison, then logically moves through scope, pagination, return scope, and alternatives. Every sentence has a purpose, though the pagination explanation partly duplicates the schema and could be tightened.

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 two-mode behavior, pagination, and likely domain expansion, the description covers all operational essentials: what the call does, how to constrain scope, how to page, what is returned, and which sibling to use for full snapshots. The output schema and annotations handle the remaining detail.

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 reinforces the XOR relationship and pagination flow, but most of that detail already exists in the input schema (offset is a row skip, ignored in single-URL mode, default limit 25, max 100). It adds clarity but not much new semantic information.

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 names a specific verb ('Compare'), a clear resource (oldest baseline vs latest non-expired test), and precise scope (single URL or domain). It also distinguishes itself from siblings by stating it returns scores and deltas only, and that full snapshots belong to gvt_get_baseline and gvt_get_latest.

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?

It gives explicit usage rules: provide exactly one of url or domain, describes domain-mode matching and pagination, and tells the agent when to prefer siblings ('for complete snapshots of one URL use gvt_get_baseline and gvt_get_latest'). This is actionable, not merely implied.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources