Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

ca.veilpoint/opportunity-exchange

REMOTE · VEILPOINT.CA · SCANNED AUG 3

Keyless Saskatchewan labour-market data: measured wages and rents, roles, jobs, outcomes, pathways.

Available components

+2 this week 66 Trust /100
Trust breakdown (6 categories)

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 →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability71
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 2199 tokens (~91/item across 24 items; 24 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · veilpoint.ca

# add to Claude Code
claude mcp add --transport http ca-veilpoint-opportunity-exchange https://veilpoint.ca/mcp
# ~/.codex/config.toml
[mcp_servers.ca-veilpoint-opportunity-exchange]
url = "https://veilpoint.ca/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ca-veilpoint-opportunity-exchange": {
      "type": "remote",
      "url": "https://veilpoint.ca/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ca-veilpoint-opportunity-exchange --url https://veilpoint.ca/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ca-veilpoint-opportunity-exchange:
    url: "https://veilpoint.ca/mcp"
// mcp.json
{
  "mcpServers": {
    "ca-veilpoint-opportunity-exchange": {
      "type": "http",
      "url": "https://veilpoint.ca/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

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.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 −2
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Jul 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “get_source_provenance” rewrote its description, which is the text the model reads security
    • Tool “list_sectors” rewrote its description, which is the text the model reads security
    • Tool “evaluate_pathways” rewrote its description, which is the text the model reads security
    • Tool “get_community_economy” rewrote its description, which is the text the model reads security
    • Tool “get_data_sources” rewrote its description, which is the text the model reads security
    • Tool “get_economy_overview” rewrote its description, which is the text the model reads security
    • Tool “get_sector” rewrote its description, which is the text the model reads security
    • Tool “identify_credential_bottlenecks” rewrote its description, which is the text the model reads security
    • Schema quality: 1830 → 2142 functional
    • New tool “get_economic_signal” functional
    • New tool “get_emerging_signals” functional
    • New tool “list_economic_signals” functional
    • “evaluate_pathways” added an optional parameter “householdSize” cosmetic
    • “get_source_provenance” reworded the description of “id” cosmetic
  • 28 Jul 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Schema quality: 1644 → 1830 functional
    • Stability: unverified → 0.03 functional
    • New tool “get_economy_overview” functional
    • New tool “get_community_economy” functional
  • 27 Jul 26 64

    First indexed and scored.

Diagnostics

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 3 Aug 2026 · Probed https://veilpoint.ca/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=veilpoint.ca CN=YE2,O=Let's Encrypt,C=US 25 Jul 2026 23 Oct 2026 ECDSA 256 ECDSA-SHA384 674f49e18d86df0961db13bfbdac660047e
SANs: veilpoint.ca
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd
DNSSEC insecure

Validation of veilpoint.ca. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ca. present 26384 13 Verified
veilpoint.ca. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
content-security-policy default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' data:; connect-src 'self' https:; worker-src 'self' blob:; child-src 'self' blob:; manifest-src 'self'
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=(), payment=(), usb=()
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://veilpoint.ca/mcp Verified 200
http (plaintext) http://veilpoint.ca/mcp HTTPS enforced 301 https://veilpoint.ca/mcp
MCP tools — 24 exposed · ~2,001 tokens

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.

Tool Tokens
compare_outcomes ~87

The wage-vs-cost join: what an hourly wage actually leaves over each month in every Saskatchewan community, after tax, housing, utilities and commuting. Pass occupation (models its median wage, with posting counts; their truth state is in meta.evidence) or wage.

NameTypeReqDescription
occupationstringRole id from list_roles.
wagenumberExplicit hourly wage, CAD.

No output schema declared.

No examples provided.

compare_roles ~46

Compare two or three roles using the shared occupation fields: wages, demand, outlook, entry requirements and work profile.

NameTypeReqDescription
idsarrayyesTwo or three role ids from list_roles.

No output schema declared.

No examples provided.

evaluate_pathways ~365

The decision tool: evaluate realistic routes into work for a person's stated credentials, education, experience, driver licence, relocation boundary, housing and family needs, savings, and retraining limit. Returns pass/conflict/unknown plus the same ordered, versioned evidence panel used by REST and the human evaluator. OSINT and placeholder values are excluded from ranking. Request-scoped: constraints are evaluated in-process and never stored.

NameTypeReqDescription
allowedMunicipalityIdsarrayOptional destination allowlist.
bedroomsRequiredstringRental unit size required by the household.
credentialsarrayCredential names held and current, e.g. "WHMIS", "Class 5 Licence".
currentMunicipalityIdstringCurrent community, required when maximumRelocationKm is supplied.
educationLevelstringHighest education level.
experienceAreasarrayCapability areas with real working experience.
householdSizeintegerPeople represented by the regional Market Basket Measure basket.
housingBudgetMonthlynumberMaximum monthly rent for the requested household.
incomeEarnersintegerIncome earners sharing housing and utilities.
licenceClassstringHighest Saskatchewan driver licence currently held.
limitnumberRanked list size (default 8, max 20).
maximumRelocationKmnumberMaximum move from currentMunicipalityId; zero means local only.
maximumRetrainingWeeksnumberMaximum acceptable retraining time; zero means direct entry.
savingsDollarsnumberCash available for training before funding.
targetOccupationIdstringRole id from list_roles — evaluates that target in depth.
vehicleAvailablebooleanWhether the scenario includes a vehicle commute.

No output schema declared.

No examples provided.

get_community_economy ~104

One community’s GDP report by 2021 SGC census subdivision code (e.g. 4708004 for Swift Current): central estimate with the income/production range and every sector’s amount and percentage share, or the suppression reason where the data cannot support a point estimate. Codes come from get_economy_overview or /api/v1/economy.

NameTypeReqDescription
codestringyes7-digit 2021 SGC census subdivision code.

No output schema declared.

No examples provided.

get_data_providers ~38

Read runtime provider contracts grouped as evidence, preview, planned, first-party and derived. Only the evidence group is eligible to support factual claims.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_data_sources ~41

Read the governed upstream source registry: publisher datasets, stable source ids, licence decisions, approved and excluded uses, checked releases, materialization bindings and refresh controls.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_economic_signal ~48

Get one governed economic signal by its source-stable id, including provenance, lifecycle state, mappings and uncertainty boundaries.

NameTypeReqDescription
idstringyesSignal id from list_economic_signals.

No output schema declared.

No examples provided.

get_economy_overview ~98

Modeled community GDP for Saskatchewan: official provincial sector GDP (36-10-0711-01, 2022 current dollars) allocated across all 951 census subdivisions by measured activity weights, reconciling to provincial totals. Returns benchmark/allocated/residual totals, top communities, the official 2017–2025 Saskatchewan real-GDP series, and the calculation version. Community figures are structured estimates, not official measurements.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_emerging_signals ~22

Backward-compatible alias for list_economic_signals.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_real_estate ~75

Housing market by community: median price, listings, market velocity, and the own-vs-rent monthly cost on the local wage. Pass municipalityId for one community with the price trend and full ownership model.

NameTypeReqDescription
municipalityIdstringMunicipality id (e.g. saskatoon). Omit for all communities.

No output schema declared.

No examples provided.

get_rents ~140

Measured rental markets (CMHC Rental Market Survey via Statistics Canada, real data): average rents by unit type (bachelor to 3+ bedroom) and rental vacancy rates for every surveyed centre in Canada, October survey. Pass province for one province’s centres, centre (cmhcCode) for one centre, neither for the national overview. Suppressed cells are null and unsurveyed centres absent — never zero.

NameTypeReqDescription
centrestringCMHC/StatCan geography code (cmhcCode) from a previous get_rents call.
provincestringSGC 2021 code or postal abbreviation (e.g. SK).

No output schema declared.

No examples provided.

get_role ~52

One occupation in full: market figures, entry requirements, working conditions, training programs, and per-community outcomes (net and discretionary monthly income at the median wage).

NameTypeReqDescription
idstringyesRole id from list_roles.

No output schema declared.

No examples provided.

get_sector ~37

One sector: its occupations, provider-qualified postings by community, and notable employers.

NameTypeReqDescription
idstringyesSector id from list_sectors.

No output schema declared.

No examples provided.

get_source_provenance ~65

Resolve either a governed upstream source id or runtime provider id. Returns the matching source or categorized provider with its lineage; omit id for the upstream source registry.

NameTypeReqDescription
idstringOptional registered source id from get_data_sources or provider id from get_data_providers.

No output schema declared.

No examples provided.

get_trade_overview ~37

Saskatchewan provincial exports by NAPCS section and producer grain deliveries by delivery point. Real published data (Statistics Canada, Canadian Grain Commission).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_wages ~148

Measured wages and vacancies (Statistics Canada, real data): LFS median/average hourly wages by occupation group × province, and JVWS job vacancies with average offered hourly wage by NOC 2021 unit group × province/territory. Pass noc for one unit group across geographies, province for one geography, both for one cell, neither for the national overview. Wage medians are group-level; each estimate names the published grouping that answered.

NameTypeReqDescription
nocstringFive-digit NOC 2021 unit-group code from list_noc_groups.
provincestringSGC 2021 code, postal abbreviation (e.g. SK), or "canada".

No output schema declared.

No examples provided.

identify_credential_bottlenecks ~47

Aggregate posting-corpus records associated with each credential against current and lapsed holders. Small cohorts are suppressed; null pressure means no holder denominator and never proves a labour deficit.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_economic_signals ~42

List governed Saskatchewan economic signals from official structured sources. Each row preserves lifecycle state and uncertainty; notices do not prove an award, project, hiring or outcome.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_noc_groups ~48

The complete NOC 2021 occupational classification: all 516 unit groups with bilingual titles, TEER tiers, and platform coverage flags. Use to map any Canadian occupation to its code.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_roles ~36

The Saskatchewan occupation catalogue: id, title, NOC code, sector, hourly wage, demand score. Start here to find role ids.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_sectors ~41

Sector rollups with provider-qualified posting-corpus counts, available talent, scenario ratios, median wage and demand. Read meta.evidence before interpreting a posting count.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

rank_communities ~75

Rank Saskatchewan communities by monthly discretionary income for exactly one role or explicit hourly wage.

NameTypeReqDescription
limitintegerNumber of ranked communities, 1-20 (default 10).
occupationstringRole id whose median wage should be modelled.
wagenumberExplicit positive hourly wage in CAD.

No output schema declared.

No examples provided.

search_employers ~132

Search the public employer directory by name, municipality, sector group and its disclosed hiring flag. Preview providers return modelled hiring scenarios, not employer claims.

NameTypeReqDescription
hiringbooleantrue to filter on the disclosed hiring flag; preview providers expose modelled scenarios.
limitintegerResult limit, 1-100 (default 25).
municipalitystringMunicipality id from /api/v1/municipalities.
qstringCase-insensitive text search over employer and sector names.
sectorstringSector-group id from /api/v1/sectors.

No output schema declared.

No examples provided.

search_jobs ~177

Job postings, newest first, filterable. Check meta.evidence.truthState: preview means the corpus is synthetic demonstration records. Rows with synthetic=true are preview records, never real vacancies.

NameTypeReqDescription
limitintegerPage size, 1-200 (default 50).
minWagenumberMinimum hourly wage, CAD.
municipalitystringExact municipality name.
occupationstringRole id from the occupation catalogue.
offsetintegerPagination offset (default 0).
postedWithinDaysintegerOnly postings newer than this many days.
qstringFree-text search over title, employer and description.
regionstringExact region name.
sectorstringSector id from the sector list.
typestringEmployment type.

No output schema declared.

No examples provided.