iGods GEO Visibility Tool (GVT)
REMOTE · MCP.GEO.IGODS.COM · SCANNED SEP 30
GEO visibility tests, score trends, sitemap discovery, and domain monitoring for AI agents.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability82
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4189 tokens (~161/item across 26 items; 19 tools + 7 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management34
- Stability check failed: schema churn in the 21 days we've observed: 6 tool removals, 0 breaking changes, 0 auth/transport breaks, 8 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the iGods GEO Visibility Tool (GVT) MCP server?
iGods GEO Visibility Tool (GVT) is a hosted endpoint at https://mcp.geo.igods.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.geo.igods.com
claude mcp add --transport http com-igods-gvt 'https://mcp.geo.igods.com/mcp'
{
"mcpServers": {
"com-igods-gvt": {
"url": "https://mcp.geo.igods.com/mcp"
}
}
} {
"servers": {
"com-igods-gvt": {
"type": "http",
"url": "https://mcp.geo.igods.com/mcp"
}
}
} [mcp_servers.com-igods-gvt] url = "https://mcp.geo.igods.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-igods-gvt": {
"type": "remote",
"url": "https://mcp.geo.igods.com/mcp",
"enabled": true
}
}
} openclaw mcp add com-igods-gvt --url 'https://mcp.geo.igods.com/mcp' --transport streamable-http
mcp_servers:
com-igods-gvt:
url: "https://mcp.geo.igods.com/mcp" {
"McpServers": {
"com-igods-gvt": {
"Transport": "http",
"Url": "https://mcp.geo.igods.com/mcp"
}
}
} assistant mcp add com-igods-gvt -t streamable-http -u 'https://mcp.geo.igods.com/mcp'
{
"mcpServers": {
"com-igods-gvt": {
"type": "http",
"url": "https://mcp.geo.igods.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 29 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 31.
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 27 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 21 to 24.
- 25 Sept 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 23 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 11.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 0 to 1.
- 12 Sept 26 −1
- Tool “gvt_get_batch_status” rewrote its description, which is the text the model reads security
- Tool “gvt_get_test_results” rewrote its description, which is the text the model reads security
- Tool “gvt_run_visibility_batch” rewrote its description, which is the text the model reads security
- New tool “gvt_get_batch_summary” functional
- “gvt_get_test_results” added an optional parameter “detail” cosmetic
- 11 Sept 26 0
- Tool “gvt_get_latest” rewrote its description, which is the text the model reads security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 30 Sept 2026 · Probed https://mcp.geo.igods.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.geo.igods.com | CN=WE1,O=Google Trust Services,C=US | 23 Sept 2026 | 22 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | 34b5382c8355f3c50ebb15e57f264e39 |
| SANs: mcp.geo.igods.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.geo.igods.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| igods.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://mcp.geo.igods.com/.well-known/oauth-protected-resource"
Bearer resource_metadata="https://mcp.geo.igods.com/.well-known/oauth-protected-resource" Protected resource metadata
| Document | https://mcp.geo.igods.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.geo.igods.com |
| Authorisation server | https://mcp.geo.igods.com |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.geo.igods.com/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.geo.igods.com/mcp | HTTPS enforced | 301 | https://mcp.geo.igods.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
gvt_delete_test Delete a test ~92
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.
| Name | Type | Req | Description |
|---|---|---|---|
| tid | string | yes | The 8-character test ID of the test to delete. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Human-readable confirmation |
| success | boolean | – | True when the test was deleted |
No examples provided.
gvt_get_baseline Get baseline snapshot ~160
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.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | The URL to look up (must match the URL used when the test was run). |
| Name | Type | Req | Description |
|---|---|---|---|
| analysisSummary | object | – | Aggregate scores for this test |
| createdAt | string | – | ISO 8601 instant this snapshot was created |
| expiresAt | string|null | – | ISO 8601 instant this snapshot will expire |
| findingSentence | string|null | – | Pre-generated natural language verdict for this snapshot |
| isPublic | boolean | – | Whether this test is publicly visible |
| message | string | – | Present only in the no-test case |
| oldest | object|null | – | Null when no test exists for the URL |
| shareableTid | string|null | – | Public share ID, non-null when shareable |
| status | string | – | Snapshot status (completed, failed, etc.) |
| testType | string | – | The type of the test run |
| tid | string | – | Test ID of the snapshot |
| updatedAt | string | – | ISO 8601 instant this snapshot was last updated |
| url | string | – | The URL this snapshot analyzed |
No examples provided.
gvt_get_batch_status Get batch status ~176
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.
| Name | Type | Req | Description |
|---|---|---|---|
| batchId | string | yes | The UUID of the batch to check, returned by gvt_run_visibility_batch. |
| Name | Type | Req | Description |
|---|---|---|---|
| batchId | string | – | The batch that was queried |
| completedAt | string|null | – | ISO 8601 instant when the batch reached a terminal state, null while in flight |
| counts | object | – | Per-URL test state counts; the four fields always sum to totalUrls |
| status | string | – | Aggregate batch state; completed means every per-URL test reached a terminal state |
| submittedAt | string | – | ISO 8601 instant of batch submission |
| totalUrls | integer | – | URLs in the batch after duplicate collapsing |
| urls | array | – | One entry per submitted URL, in submission order |
No examples provided.
gvt_get_batch_summary Get batch summary ~187
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.
| Name | Type | Req | Description |
|---|---|---|---|
| batchId | string | yes | The UUID of the completed batch to summarize, returned by gvt_run_visibility_batch. |
| Name | Type | Req | Description |
|---|---|---|---|
| batchId | string | – | The batch that was summarized |
| counts | object | – | Per-URL test state counts; the four fields always sum to totalUrls |
| message | string | – | Polling guidance, present when the batch is not completed |
| pages | array | – | One compact entry per URL, in batch order. Failed tests appear with status failed and null scores; they are excluded from the aggregates. |
| status | string | – | Aggregate batch state; pages and summary are present only when completed |
| summary | object | – | Aggregates computed over the completed pages |
| totalUrls | integer | – | URLs in the batch after duplicate collapsing |
No examples provided.
gvt_get_fix Read a fix record ~150
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.
| Name | Type | Req | Description |
|---|---|---|---|
| issue_id | string | yes | Stable issue identifier, e.g. og_title_missing or color-contrast. Matches the fixId field in gvt_get_test_results output. |
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Analysis category the issue belongs to |
| human_description | string | – | Human-readable description of the issue |
| impact | string | – | Plain-language statement of what the issue costs |
| issue_id | string | – | Stable issue identifier, e.g. og_title_missing |
| recommendation | string | – | The recommended remediation |
| resourceUri | string | – | The gvt:// resource this record was read from |
| severity_range | array | – | Severity levels this issue can take |
| subcategory | string | – | Finer-grained grouping within the category |
| ttlMs | integer | – | Suggested client cache lifetime in milliseconds |
| weight | number | – | Scoring weight |
No examples provided.
gvt_get_knowledge Read GVT knowledge ~153
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.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | 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),… |
| Name | Type | Req | Description |
|---|---|---|---|
| knowledge | object | – | Reference content for the requested topic |
| topic | string | – | The topic that was served |
| ttlMs | integer | – | Suggested client cache lifetime in milliseconds |
| uri | string | – | The gvt:// resource the content came from |
No examples provided.
gvt_get_latest Get latest snapshot ~139
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.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | The URL to look up (must match the URL used when the test was run). |
| Name | Type | Req | Description |
|---|---|---|---|
| analysisSummary | object | – | Aggregate scores for this test |
| createdAt | string | – | ISO 8601 instant this snapshot was created |
| expiresAt | string|null | – | ISO 8601 instant this snapshot will expire |
| findingSentence | string|null | – | Pre-generated natural language verdict for this snapshot |
| isPublic | boolean | – | Whether this test is publicly visible |
| latest | object|null | – | Null when no test exists for the URL |
| message | string | – | Present only in the no-test case |
| shareableTid | string|null | – | Public share ID, non-null when shareable |
| status | string | – | Snapshot status (completed, failed, etc.) |
| testType | string | – | The type of the test run |
| tid | string | – | Test ID of the snapshot |
| updatedAt | string | – | ISO 8601 instant this snapshot was last updated |
| url | string | – | The URL this snapshot analyzed |
No examples provided.
gvt_get_prompt Render a prompt workflow ~158
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.
| Name | Type | Req | Description |
|---|---|---|---|
| arguments | object | – | Argument values for the prompt, keyed by argument name (e.g. {"domain": "example.com", "frequency": "weekly"}). Omit optional arguments to use their defaults. |
| name | string | yes | Prompt name from gvt_list_prompts, e.g. gvt_setup_domain_monitoring. |
| Name | Type | Req | Description |
|---|---|---|---|
| arguments | object | – | Effective arguments after binding defaults |
| description | string | – | The prompt catalog description |
| name | string | – | The prompt name that was rendered |
| text | string | – | Fully interpolated instruction text referencing GVT tools by name |
No examples provided.
gvt_get_score_trend Get score trend ~264
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | Domain scope — matches the domain, www.<domain>, and subdomains (XOR with url). |
| limit | integer | – | Cap on returned records in domain mode (max 100, default 25). |
| offset | integer | – | 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. |
| url | string | – | Single URL scope (XOR with domain). |
| Name | Type | Req | Description |
|---|---|---|---|
| compare | object|null | – | Comparison window settings used |
| domain | string|null | – | The compared domain in domain mode, else null |
| hasMore | boolean | – | True when more pages exist |
| includeSubdomains | boolean | – | Whether subdomains were included in the domain search |
| limit | integer | – | Max records per page in domain mode |
| nextOffset | integer|null | – | Offset for the next page, null on the last page |
| offset | integer | – | Row offset applied to this page |
| returned | integer | – | Records in this page |
| scope | string | – | Which mode the comparison ran in |
| trends | array | – | One row per matched URL, baseline vs latest with deltas |
| truncated | boolean | – | Deprecated. Use `hasMore` instead. |
| ttlMs | integer | – | Suggested client cache lifetime in milliseconds |
| url | string|null | – | The compared URL in url mode, else null |
| urlCount | integer | – | Total matched URLs before pagination |
| windowSummary | object|null | – | Summary of window comparison results |
No examples provided.
gvt_get_test_results Get test results ~336
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.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | 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… |
| tid | string | yes | Opaque 8-character hash ID returned by gvt_run_visibility_test or gvt_list_tests. Not an integer. |
| Name | Type | Req | Description |
|---|---|---|---|
| analysisSummary | object | – | Aggregate scores for one test session |
| createdAt | string | – | ISO 8601 instant of test creation |
| detail | string | – | Present with value "summary" when detail=summary was requested; omitted from full responses so existing callers see no change |
| expiresAt | string|null | – | ISO 8601 instant when this test session and its results will expire and be deleted |
| findingSentence | string|null | – | Pre-generated natural language verdict; use as the primary summary |
| isPublic | boolean|null | – | Whether this test result is publicly accessible |
| results | array | – | 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 analy… |
| shareableTid | string|null | – | 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 indi… |
| status | string | – | Pending and running mean poll again; completed means full results are present |
| testType | string | – | Type of test performed (e.g., URL or direct HTML paste) |
| tid | string | – | The test ID that was polled |
| updatedAt | string | – | ISO 8601 instant of the last update to this test session |
| url | string|null | – | The URL that was analyzed |
No examples provided.
gvt_list_baselines List baselines (batch) ~164
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.
| Name | Type | Req | Description |
|---|---|---|---|
| urls | array | yes | Array of URLs to look up (max 100). |
| Name | Type | Req | Description |
|---|---|---|---|
| found | integer | – | URLs that had at least one test |
| requested | integer | – | Number of URLs requested |
| results | array | – | One entry per requested URL, in request order |
| ttlMs | integer | – | Suggested client cache lifetime in milliseconds |
No examples provided.
gvt_list_prompts List prompt workflows ~109
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.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| promptCount | integer | – | Number of prompt workflows in the catalog |
| prompts | array | – | The prompt workflow catalog |
| ttlMs | integer | – | Suggested client cache lifetime in milliseconds |
No examples provided.
gvt_list_schedules List schedules ~295
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | Filter to schedules matching this domain substring. |
| frequency | string | – | Filter by repetition interval. |
| includeCompletedOnce | boolean | – | 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. |
| includeSubdomains | boolean | – | Whether subdomains should be included in the domain filter match. |
| limit | integer | – | The maximum number of schedules requested for this page. |
| offset | integer | – | The number of skipped items from the beginning of the result set. |
| sortDirection | string | – | Sort order by creation time; desc is newest first. |
| status | string | – | Filter by the derived overall state of the schedule. |
| Name | Type | Req | Description |
|---|---|---|---|
| allowedFrequencies | array | – | Frequencies the caller may set when creating schedules |
| domain | string|null | – | The applied domain filter, null when unfiltered |
| frequency | string|null | – | The applied frequency filter, null when unfiltered |
| hasMore | boolean | – | True when more results exist beyond this page |
| includeCompletedOnce | boolean | – | Whether completed one-off rows were included in this response |
| includeSubdomains | boolean | – | The applied subdomain-inclusion setting |
| limit | integer | – | Page size applied to this response |
| maxActiveSchedules | integer | – | The caller's cap on active schedules; add mode enforces this limit |
| nextOffset | integer|null | – | Offset for the next page, null when hasMore is false |
| offset | integer | – | Offset applied to this response |
| schedules | array | – | One entry per schedule, newest first by creation time |
| status | string|null | – | The applied status filter, null when unfiltered |
| total | integer | – | Total schedules matching the filters, across all pages |
No examples provided.
gvt_list_sitemap_urls List sitemap URLs ~383
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).
| Name | Type | Req | Description |
|---|---|---|---|
| exclude | array | – | Wildcard patterns to reject (e.g., '*archive*'). |
| excludeDisallowed | boolean | – | If true, silently drops URLs that are blocked by robots.txt. |
| excludeScheduled | boolean | – | If true, omits URLs currently in the testing queue. |
| excludeTested | boolean | – | If true, omits URLs the user has already tested. |
| include | array | – | Wildcard patterns to require (e.g., '*blog*'). Only '*' wildcards are supported. |
| legalPages | string | – | 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 leg… |
| limit | integer | – | Maximum number of URLs to return (default 10). |
| sort | string | – | How to sort the discovered URLs. 'significance' uses SEO heuristics. |
| url | string | yes | The target website URL or an explicit sitemap .xml URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| bulkUrlLimit | integer | – | How many of these URLs the caller's tier permits in one batch-analyze call. |
| errors | array | – | Per-sitemap fetch or parse failures; non-empty means discovery was partial |
| hasMore | boolean | – | True when the filtered set was cut short by the limit |
| legalPages | string | – | The legal-page filter actually applied |
| legalPagesFound | integer | – | How many of the URLs discovered across all sitemaps were detected as legal/policy boilerplate, counted BEFORE any filtering or limiting is applied. |
| limit | integer | – | Effective result cap |
| matched | integer | – | URLs remaining after include/exclude and legalPages filters |
| requestedUrl | string | – | The URL or sitemap URL that was resolved |
| resolvedSitemaps | array | – | Sitemap URLs actually parsed |
| returned | integer | – | URLs actually returned after the limit |
| robotsTxtFound | boolean | – | Whether a robots.txt was found and consulted |
| sitemapCount | integer | – | Number of sitemaps parsed |
| sort | string | – | The sort actually applied to the results |
| totalDiscovered | integer | – | Raw URL count discovered before filtering |
| truncated | boolean | – | True if the underlying sitemap parser hit its 5000-URL cap during fetching. |
| urls | array | – | Discovered URLs, ranked per the sort setting |
No examples provided.
gvt_list_tests List tests ~417
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.
| Name | Type | Req | Description |
|---|---|---|---|
| createdFrom | string | – | Inclusive creation-date lower bound. YYYY-MM-DD (UTC midnight) or full ISO 8601 instant. |
| createdTo | string | – | Exclusive creation-date upper bound. YYYY-MM-DD (UTC midnight) or full ISO 8601 instant. |
| domain | string | – | Domain to filter tests by, e.g. example.com. Subdomains are included unless includeSubdomains is false. |
| includeSubdomains | boolean | – | If true (the default), includes tests for subdomains of the given domain. Set false to match the exact domain only. |
| limit | integer | – | Max results to return (default 10, max 100) |
| offset | integer | – | 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. |
| sortDirection | string | – | Sort direction by creation date: desc (newest first, default) or asc (oldest first). |
| status | string | – | Test status to filter by: pending, processing, completed, or failed. |
| testType | string | – | Test type to filter by: url, html, or html_paste. |
| url | string | – | URL to filter tests by; matched per urlMode (contains by default). |
| urlMode | string | – | How the url filter matches: "exact" for full-URL equality, "contains" for substring match. |
| Name | Type | Req | Description |
|---|---|---|---|
| createdFrom | string|null | – | Effective lower creation-date bound, if any |
| createdTo | string|null | – | Effective upper creation-date bound, if any |
| domain | string|null | – | The domain filter actually applied, if any |
| hasMore | boolean | – | True when more pages exist |
| includeSubdomains | boolean | – | Whether subdomains were included in the domain filter |
| limit | integer | – | Page size actually applied |
| nextOffset | integer|null | – | Offset for the next page, null on the last page |
| offset | integer | – | Row offset applied to this page |
| tests | array | – | The matching test sessions on this page |
| total | integer | – | Total matching tests before pagination |
| ttlMs | integer | – | Suggested client cache lifetime in milliseconds |
No examples provided.
gvt_run_visibility_batch Run batch tests ~216
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.
| Name | Type | Req | Description |
|---|---|---|---|
| urls | array | yes | Array of URL objects to test (max 500) |
| webhookUrl | string | – | Optional HTTPS URL to receive a batch completion webhook |
| Name | Type | Req | Description |
|---|---|---|---|
| batchId | string | – | UUID for tracking the batch |
| status | string | – | Always queued at submission time |
| totalUrls | integer | – | URLs accepted into the batch |
| webhookConfigured | boolean | – | True when a completion webhook URL was supplied |
| webhookSecret | string|null | – | HMAC secret for verifying the webhook, null when no webhook |
No examples provided.
gvt_run_visibility_test Run a visibility test ~146
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").
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | The URL to analyze |
| waitForJs | boolean | – | Wait for JavaScript rendering before analysis. Set to false to skip JS rendering (faster, but may miss dynamically injected content). |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Human-readable acknowledgement with polling guidance |
| next | object | – | The suggested next call |
| status | string | – | Always pending at queue time |
| tid | string | – | 8-character test ID to poll with |
No examples provided.
gvt_schedule_test Manage schedules ~365
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | 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. |
| frequency | string | – | New frequency for the schedule. Required for change_frequency mode. |
| mode | string | – | Schedule operation mode. add/delete/reset operate on URLs (require urls array). pause/resume/cancel/change_frequency operate on a single schedule (require schid). |
| schid | string | – | Schedule ID. Required for pause, resume, cancel, and change_frequency modes. |
| urls | array | – | Array of URL/schedule objects. Required for add, delete, and reset modes. |
| Name | Type | Req | Description |
|---|---|---|---|
| deletedByUrl | array | – | Per-URL breakdown of deleted schedules (delete mode). Present on delete mode responses, including schid-based deletes; omitted for reset mode. |
| deletedCount | integer | – | Schedule entries removed (delete/reset modes) |
| scheduled | array | – | Schedules now in effect (add/reset modes) |
| success | boolean | – | True when the requested mode completed |
| upsertedCount | integer | – | Schedules created or updated (add/reset modes) |
No examples provided.
gvt_set_test_visibility Set test visibility ~162
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.
| Name | Type | Req | Description |
|---|---|---|---|
| is_public | boolean | yes | true to make the test publicly shareable, false to make it private. |
| tid | string | yes | The 8-character test ID returned by gvt_run_visibility_test. |
| Name | Type | Req | Description |
|---|---|---|---|
| is_public | boolean | – | The new public visibility state |
| share_url | string|null | – | Public share URL, present when is_public is true; the recipient needs no authentication. Null when sharing failed or the test is private |
| success | boolean | – | True when the visibility change was applied |
| tid | string | – | The test that was modified |
No examples provided.
What is the iGods GEO Visibility Tool (GVT) MCP server?
iGods GEO Visibility Tool (GVT) is an MCP server listed in the public MCP registry as com.igods/gvt. GEO visibility tests, score trends, sitemap discovery, and domain monitoring for AI agents. This page covers its hosted endpoint (https://mcp.geo.igods.com/mcp).
Is the iGods GEO Visibility Tool (GVT) MCP server safe to use?
iGods GEO Visibility Tool (GVT) scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the iGods GEO Visibility Tool (GVT) MCP server expose?
iGods GEO Visibility Tool (GVT) exposes 19 tools: gvt_run_visibility_test, gvt_get_test_results, gvt_list_tests, gvt_get_baseline, gvt_get_latest, and 14 more. Their descriptions and schemas cost roughly 4,072 tokens of context every time the server is loaded.
Does the iGods GEO Visibility Tool (GVT) MCP server require authentication?
Yes. iGods GEO Visibility Tool (GVT) asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the iGods GEO Visibility Tool (GVT) MCP server still maintained?
iGods GEO Visibility Tool (GVT) is still listed as active in the MCP registry. We last reached this channel on 30 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.