GovWait
This GovWait MCP server lets AI tools search, inspect, and compare government processing-time routes with source-backed values and collection status.
Search tracked routes by free text (service/country) with optional ISO-2 jurisdiction filter and limit up to 50.
Fetch one route by
entity_id, returning latest retained value, collection status, full append-only history, and IRCC forward-looking cohort estimates where available.Get the latest retained processing-time record for a
service_key, optionally filtered by applicant country, withsource_collection_status; NZ services return both 50% and 80% records.Compare latest records for one service across 2–30 applicant countries, sorted fastest first and labeled with collection status.
Treat retained-source states honestly: e.g., Norway UDI values are returned only as dated
last_verified_value, never as current.
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.jsonRelated 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 generationdata/exports/— versioned latest, history, projection and summary exportssite/— static Astro website and discoverability auditmachine/openapi.yaml— public API contractmachine/mcp-server/— local stdio MCP server for AI toolsdocs/— architecture, QA, discoverability and operating noteshandoff/— 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:seoMCP server:
cd machine/mcp-server
npm ci
npm run build
npm run smokeThe 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.txtis 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 toolscompare_valuesB
Compare latest source-backed processing-time records for one service across several applicant countries, sorted fastest first and labeled with collection status.
| Name | Required | Description | Default |
|---|---|---|---|
| service_key | Yes | ||
| applicant_countries | Yes | ISO alpha-2 codes, e.g. ['IN','NG','PH'] |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| service_key | Yes | e.g. ca-visitor-visa, nz-visitor-visa, or any key from search results | |
| applicant_country | No | ISO 3166-1 alpha-2 of the applicant's country (omit for global service metrics) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Free-text query; terms are matched against jurisdiction, service name and applicant country | |
| jurisdiction | No | Optional ISO country filter for the government, e.g. CA, GB, NZ or NO |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
- First observed
compare_values - First observed
get_entity - First observed
get_latest_value - First observed
search_entities
TDQS
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
Curated gateway to snapshot-versioned Canadian public data services with source provenance.
Search, filter, count and sum Australian government open data, with every version kept.
Normalized official data with provenance, aggregations, insights, free samples and agent access.
Normalized official data with provenance, aggregations, insights, free samples and agent access.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server providing access to U.S. government primary-source records, fact-checks, news search, and trackers, with cross-referenced entity data and source links.444 npmMIT
- FlicenseAqualityDmaintenanceMCP 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-

@pipeworx/us-dmvofficial
AlicenseNot gradedqualityFmaintenanceAccess 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 npmMIT- AlicenseAqualityBmaintenancePoint-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.109Apache 2.0