Skip to main content
Glama

GovWait

GovWait records processing and wait times published by government agencies, with a source URL, an honest date and append-only history. It currently covers immigration, visa, permit, sponsorship, resettlement and passport routes from Canada, the United Kingdom, New Zealand and Norway.

GovWait is independent and is not affiliated with any government. It does not create case-specific estimates or provide legal or immigration advice.

Use the public dataset

Example:

curl https://govwait.com/api/v1/entities/ca-visitor-visa--in.json

Related MCP server: FactCheck MCP Toolkit

Why the history matters

Government pages commonly replace an earlier processing-time value with the current one. GovWait stores a new observation when a published value changes and preserves the earlier record. It also keeps different measure types—such as backward-looking statistics, forward projections, service standards and percentiles—explicitly separate.

Current publication status, source dates and retrieval timestamps remain distinct. A successful build or search-engine submission is not presented as proof of indexing, traffic, demand or revenue.

Norway UDI collection is explicitly marked source_unavailable from 2026-09-04 after its robots endpoint began returning HTTP 403. The 19 prior UDI records remain append-only and carry their last successful verification; GovWait does not bypass the restriction or advance their freshness timestamps.

Repository map

  • pipeline/ — polite source collectors, validation, export and static API generation

  • data/exports/ — versioned latest, history, projection and summary exports

  • site/ — static Astro website and discoverability audit

  • machine/openapi.yaml — public API contract

  • machine/mcp-server/ — local stdio MCP server for AI tools

  • docs/ — architecture, QA, discoverability and operating notes

  • handoff/ — product research, project state and roadmap

Local verification

The cached pipeline path makes no network request:

node pipeline/run.js
node pipeline/build-api.js
cp machine/openapi.yaml site/public/api/v1/openapi.yaml
cd site
npm ci
npm run build
npm run audit:seo

MCP server:

cd machine/mcp-server
npm ci
npm run build
npm run smoke

The MCP build deterministically bundles the three validated exports plus a SHA-256 provenance manifest into the package. npm run verify builds it, runs the protocol smoke suite, enforces the exact package allow-list, and exercises the packed artifact in a clean temporary runtime. The verified public release is govwait-mcp@0.1.1. Its package policy requires interactive 2FA and disallows token publishing. Its official MCP Registry listing is active and latest for version 0.1.1; version 0.1.0 remains available in Registry history.

Version 0.1.1 adds source-collection state to every MCP result and returns Norway's retained UDI values only as dated last_verified_value fields, never as a current value. Building or verifying the package locally does not publish another npm, MCP Registry or directory release.

Collection safeguards

  • Official primary sources only; values and provenance, not copied pages.

  • Honest bot identity with a contact address.

  • robots.txt is checked and a blocked or ambiguous source fails closed.

  • At least three seconds between requests to the same host, with caching and per-host caps.

  • No browser impersonation or WAF bypass.

  • Append-only history and blocking validation floors.

  • Explicit retained-source states when a collector must close, with no fabricated retrieval or verification dates.

  • No personal application data.

See the methodology and MAINTENANCE_RUNBOOK.md before changing collection or history behavior.

Reuse and licensing

GovWait's original organization, field definitions and explanatory metadata are available under CC BY 4.0 where GovWait owns the rights. Underlying government information is not relicensed by GovWait; preserve the originating agency's attribution and follow its source-specific terms. Read the full data reuse and licensing notice.

GovWait-owned software code is licensed under the Apache License 2.0 terms in LICENSE, subject to the explicit code-only boundary in SOFTWARE-SCOPE.md. That scope expressly excludes government-source data, generated datasets, editorial/research/handoff content, government marks and other third-party material. The separate data notice and any file-specific terms continue to control those materials; see docs/MCP_RELEASE_RISK_ASSESSMENT.md.

Questions and corrections: contact@govwait.com.

Available Tools

4 tools
compare_valuesB

Compare latest source-backed processing-time records for one service across several applicant countries, sorted fastest first and labeled with collection status.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_keyYes
applicant_countriesYesISO alpha-2 codes, e.g. ['IN','NG','PH']

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose useful behavior: results are 'latest' records, 'source-backed', sorted fastest first, and labeled with collection status. However, it omits handling for missing data in some countries, auth/rate-limit requirements, and the shape of the 'collection status' label.

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?

A single dense sentence that front-loads the action and resource, with no filler. It packs sorting and labeling details efficiently, though the clause stacking makes it slightly harder to parse at a glance.

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

Completeness3/5

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

For a two-parameter tool with no annotations and no output schema, the description covers the result ordering and labeling but leaves service_key's format, error behavior, and partial-data handling unspecified. It is adequate but not fully self-sufficient.

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

Parameters2/5

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

Schema coverage is only 50%: applicant_countries is documented as ISO alpha-2 codes with an example, but service_key has no schema description at all. The description says 'for one service' but never clarifies whether service_key is an ID, slug, or name, so it fails to compensate for the undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (compare) and resource (latest source-backed processing-time records) with explicit scope (one service across several applicant countries). It is clear what the tool returns, though it does not explicitly name or contrast itself with the sibling get_latest_value, which likely covers the single-value case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across several applicant countries' implies the multi-country comparison scenario and distinguishes it implicitly from get_latest_value, but there is no explicit when-to-use/when-not statement or named alternative. The agent must infer the selection condition.

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

get_entityA

Get one route by entity_id (e.g. 'ca-visitor-visa--in'): latest retained value, collection status, and full recorded history. Forward-looking IRCC routes also include application-month cohort estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
entity_idYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the shape of the payload (latest value, collection status, full history, forward-looking cohort estimates). However it says nothing about size/volume of 'full recorded history', pagination, or whether the read is safe/idempotent, so coverage of the behavioral profile is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two tight sentences: the core action and parameters first, then the return contents, with the conditional cohort-estimate clause clearly marked by 'Forward-looking IRCC routes also include'. No filler.

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

Completeness4/5

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

There is no output schema and no annotations, so the description must carry return-value meaning, and it does describe the three main components plus a conditional fourth. Missing only operational detail such as response format or history volume limits.

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

Parameters4/5

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

Schema coverage is 0% for the single required parameter, so the description must compensate, and it does: the example 'ca-visitor-visa--in' reveals the expected entity_id format (route slug convention) that the bare 'type: string' schema omits. It stops short of documenting valid values or failure modes, but adds real meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get one route by entity_id') and enumerates exactly what comes back: latest retained value, collection status, full recorded history, plus cohort estimates for forward-looking routes. This implicitly separates it from the sibling get_latest_value (history vs. latest only), but no sibling is named outright, so it falls short of the 5 bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to reach for this tool versus search_entities, compare_values, or get_latest_value, and no preconditions or exclusions are stated. The agent must infer the routing decision entirely from the output-content wording.

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

get_latest_valueA

Get the latest retained official processing-time record for a service, optionally for a specific applicant country. Check source_collection_status before treating it as current. New Zealand services return both 50% and 80% records.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_keyYese.g. ca-visitor-visa, nz-visitor-visa, or any key from search results
applicant_countryNoISO 3166-1 alpha-2 of the applicant's country (omit for global service metrics)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose non-obvious traits: 'latest retained' implies data may be stale, the source_collection_status precondition warns the value may not be current, and the NZ note pre-empts a surprising dual-record return. It omits auth/permission needs and error or empty-result behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Three tight sentences with zero padding: the core purpose first, then the freshness caveat, then the NZ return-shape exception. Every sentence carries distinct, actionable information.

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

Completeness4/5

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

For a 2-parameter getter with no output schema and no annotations, the description supplies the freshness caveat and a return-shape quirk, which are the two things an agent most needs. It does not describe the general shape of the returned record or what happens when no record exists, leaving a small gap.

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

Parameters3/5

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

Schema coverage is 100% and both parameters carry their own descriptions (including examples for service_key and ISO format for applicant_country), so the schema does the heavy lifting. The description only restates that applicant_country is optional; it adds no syntax or format detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Get the latest retained official processing-time record for a service', with scope narrowed by the optional applicant country. It is clearly a single-record getter, which implicitly separates it from compare_values, but it never names or contrasts a sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete precondition ('Check source_collection_status before treating it as current') and explains that applicant_country is optional and what omitting it means (global metrics). It stops short of explicit when-to-use-vs-alternative routing against compare_values or search_entities.

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

search_entitiesB

Search tracked government processing-time routes by free text (service and/or country, e.g. 'canada study permit pakistan'). Returns matching entity_ids with latest source-backed values and collection status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesFree-text query; terms are matched against jurisdiction, service name and applicant country
jurisdictionNoOptional ISO country filter for the government, e.g. CA, GB, NZ or NO

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose the return payload (matching entity_ids with latest source-backed values and collection status), which is genuinely useful since there is no output schema. However, it says nothing about pagination (limit default/max), ranking, permissions, or rate limits, leaving real gaps for a search endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two tightly written sentences with no filler. The core action and scope are front-loaded, and the return summary follows immediately.

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

Completeness4/5

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

Given no annotations and no output schema, the description does the job of explaining what comes back (entity_ids, latest values, collection status), which is the critical missing piece. It stops short of covering pagination behavior or how to act on results, so it is strong but not exhaustive.

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

Parameters3/5

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

Schema coverage is 67%: query and jurisdiction are documented in the schema, limit is not. The description adds an example of free-text phrasing that the schema does not, which helps clarify query semantics (service and/or country terms), but it adds nothing about limit or jurisdiction scoping. Baseline 3 is appropriate given partial schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Search) and resource (tracked government processing-time routes) plus a concrete example query, so the purpose is unambiguous. It does not explicitly contrast itself with siblings like get_entity or compare_values, but the search-vs-retrieve distinction is inferable from the wording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It shows an example query format ('canada study permit pakistan'), which implies when the tool applies, but there is no explicit statement of when to use this versus get_entity, get_latest_value, or compare_values, and no exclusions or prerequisites. Usage is left to inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • First observedcompare_values
    • First observedget_entity
    • First observedget_latest_value
    • First observedsearch_entities

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation4/5

search_entities and compare_values have clearly distinct roles (free-text discovery vs. cross-country comparison). However, get_entity and get_latest_value overlap: both return the latest retained processing-time record, differing mainly in that get_entity adds full history and cohort estimates. The descriptions do clarify this, but an agent could still misselect between them.

Naming Consistency5/5

All four tools follow a clean snake_case verb_noun convention: get_entity, get_latest_value, compare_values, search_entities. The verbs (get, compare, search) are predictable and consistently used.

Tool Count4/5

Four tools is a lean but sensible scope for a focused read-only processing-time lookup service. It is on the thin side—no bulk/list-all operation—but each tool earns its place.

Completeness4/5

The surface covers the core read-only lifecycle: discovery (search_entities), single-record retrieval (get_entity, get_latest_value), and comparison (compare_values). As a data-browsing service no create/update is expected; only minor gaps like bulk retrieval or listing all sources remain.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server providing access to U.S. government primary-source records, fact-checks, news search, and trackers, with cross-referenced entity data and source links.
    4
    44 npm
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    MCP server for automatic fact-checking of political claims by querying official statistical APIs (INSEE, Eurostat, World Bank, OECD) and providing tools for data retrieval, comparison, and cherry-picking detection.
    18
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Access US state DMV data including vehicle registrations, EV adoption, DMV office locations and services, live wait times, and California forms and insurer lookups. Supports multiple states with per-state quirks documented.
    6 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Point-in-time access to Luxembourg law and ten EU acts: what any law said on a given date, not just the current text. 1,409 consolidated works and 4,705 dated versions from the official Legilux and EUR-Lex sources. Ten read-only tools: as-of text, timelines, per-article history, diffs between dates, and hash-verifiable provenance. No key.
    10
    9
    Apache 2.0