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

ca.veilpoint/opportunity-exchange

REMOTE · VEILPOINT.CA · SCANNED SEP 20

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

Available components

0 this week 80 Trust /100
Trust breakdown (7 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 → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability76
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8036 tokens (~111/item across 72 items; 72 tools + 0 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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage93
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 79% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 72 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 73 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
Install

How do I install the ca.veilpoint/opportunity-exchange MCP server?

ca.veilpoint/opportunity-exchange is a hosted endpoint at https://veilpoint.ca/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 · veilpoint.ca

# add to Claude Code
claude mcp add --transport http ca-veilpoint-opportunity-exchange 'https://veilpoint.ca/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "ca-veilpoint-opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ca-veilpoint-opportunity-exchange": {
      "type": "http",
      "url": "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"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ca-veilpoint-opportunity-exchange": {
      "Transport": "http",
      "Url": "https://veilpoint.ca/mcp"
    }
  }
}
# add to Vellum
assistant mcp add ca-veilpoint-opportunity-exchange -t streamable-http -u '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.

  • 16 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
  • 14 Sept 26 0
    • Stability: fail → pass security
  • 13 Sept 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
  • 12 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “inspect_knowledge_frontier” functional
  • 10 Sept 26 +1
    • MCP protocol: fail → pass functional
    • MCP protocol version: 2025-06-18 → 2026-07-28 functional
  • 3 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 91 to 93.

  • 28 Aug 26 0
    • Tool “check_business_health” rewrote its description, which is the text the model reads security
    • “check_business_health” reworded the description of “website” cosmetic
  • 27 Aug 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “check_opportunity_readiness” functional
    • New tool “list_health_capabilities” functional
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 20 Sept 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

Background: What to check on a remote MCP endpoint →

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=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

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 · 72 exposed · ~7,211 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. 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 →

Tool Tokens
assess_procurement_relevance ~139

Compare the supply categories a business has published against the UNSPSC categories official buyers have requested. Returns category compatibility only, classed as inferred_compatibility: it establishes no qualification, eligibility, supplier relationship, competitiveness, or likelihood of award, and it never reads capabilities the business withheld from publication. Use inspect_procurement_activity for the buyer-side observations themselves.

NameTypeReqDescription
businessIdstringyesExact graph business id, e.g. business:<canonical-id>, from resolve_entities.
includeHistorybooleanInclude closed notices as historical demand evidence; default false.
limitintegerMaximum overlapping notices returned; default 50.

No output schema declared.

No examples provided.

assess_workforce_demand ~100

Report occupational demand, credential demand, training availability and a training-route constraint indicator separately. It does not combine them into a shortage claim: a shortage is a claim about labour supply and requires a credential-holder denominator OEX does not hold. Advertised record counts are counts of advertisements, not of unfilled positions or people needed, and are not deduplicated across employers.

NameTypeReqDescription
limitintegerMaximum rows per view; default 50.

No output schema declared.

No examples provided.

check_business_health ~168

Run Business Health on a real business from details you supply — the free public check. Use this when someone asks about *their own* business: it needs no account, stores nothing, and creates no record. Supply the website to unlock the nine checks that read the site. OEX asserts nothing about the business and holds no record of it; the report describes the details given and the site named. For experimenting with the workflow instead, use create_sandbox_business.

NameTypeReqDescription
addressstring
categorystringWhat the business does.
descriptionstringHow the business describes itself.
namestringyesThe business name.
phonestring
websitestringDomain or URL. Worth supplying — nine checks depend on it.

No output schema declared.

No examples provided.

check_comparability ~83

Check whether requested community observations share compatible concepts, units, geographic boundaries, and reference periods; return explicit reasons where they do not.

NameTypeReqDescription
bundlestringComparison metric preset; defaults to municipal-economic-profile-v1.
entitiesarrayyesMunicipality names, local slugs, or SGC codes.
metricsarrayOptional additional fact metrics.

No output schema declared.

No examples provided.

check_opportunity_readiness ~134

For each public procurement notice whose requested categories overlap what this business has published, what about the business's OEX representation is in order and what is not. Every gap names the Business Health check that owns it, so the fix is the same one the health report already offers. Establishes category compatibility only: never qualification, eligibility, a supplier relationship, competitiveness, or any likelihood of award. There is no fit score and no probability, and asking for one will not produce one.

NameTypeReqDescription
businessIdstringyes
limitnumberOptional, default 5. How many overlapping notices to assess.

No output schema declared.

No examples provided.

compare_communities ~78

Compare 2–10 Saskatchewan communities and return explicit missing-data and comparability results for every requested metric.

NameTypeReqDescription
bundlestringComparison metric preset; defaults to municipal-economic-profile-v1.
entitiesarrayyesMunicipality names, local slugs, or SGC codes.
metricsarrayOptional additional fact metrics.

No output schema declared.

No examples provided.

compare_municipalities ~103

Compare 2–10 exact Saskatchewan municipalities using the newest governed fact for each standard economic metric. A metric is comparable only when all resolved municipalities have the same unit and reference period; missing and mismatched evidence is returned explicitly.

NameTypeReqDescription
bundlestringComparison metric preset; defaults to municipal-economic-profile-v1.
entitiesarrayyesMunicipality names, local slugs, or SGC codes.
metricsarrayOptional additional fact metrics.

No output schema declared.

No examples provided.

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.

create_sandbox_business ~139

Start here to try Business Health. Creates a synthetic business you may then operate, and returns its id. Sandbox businesses never appear in OEX search, the directory or any public count — they exist so the workflow can be walked end to end. Give it whatever characteristics the scenario you want to test needs; leaving fields out produces a business with gaps to find.

NameTypeReqDescription
addressstringOptional civic address.
categorystringOptional industry or category.
descriptionstringOptional description of what it does.
namestringyesTrading name for the synthetic business.
phonestringOptional phone number.

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.

explain_business_claim ~122

What claiming a business on OEX involves, and how to start. Call this after check_business_health when the person wants to act on the findings inside OEX rather than only on their own website — claiming is what unlocks correcting the record, granting consent and verified rechecks. Read-only: it explains the process and returns the URL. You cannot claim a business on someone's behalf, and OEX will not accept an agent's word for who owns a business.

NameTypeReqDescription
businessNamestringOptional — the business being asked about, echoed back for context.

No output schema declared.

No examples provided.

explain_confidence ~40

Explain the OEX A–D record-confidence vocabulary, its weakest-input rule for derived values, and the interpretation contract.

NameTypeReqDescription
confidencestring

No output schema declared.

No examples provided.

explain_truth_state ~36

Explain what an OEX truth state permits an agent to claim and return the complete interpretation contract.

NameTypeReqDescription
truthStatestring

No output schema declared.

No examples provided.

find_connected_entities ~329

Find entities connected through governed graph predicates, with source, truth state, confidence, and hop annotations.

NameTypeReqDescription
bundlestringBounded metric preset. municipal-economic-profile-v1 requires one municipality entity.
depthintegerHops to expand outward from entity; default 1. Above 1 adds an expansion block of nodes and edges annotated with the hop that reached them, so a containment chain such as municipality -> census-divis…
entitystringExact name, slug, graph id, NOC code, SGC code, source id, or provider id.
geographystringOptional exact municipality name, slug, or SGC code for geography-scoped facts.
limitintegerMaximum facts, relationships, or listed entities; default 25.
maxNodesintegerCeiling on entities across the whole expansion; default 200. Distinct from limit, which bounds one level — without it a depth of 2 from a municipality would pull every business in it.
metricsarrayFact metrics, e.g. population.
minimumConfidencestring
predicatesarrayRelationship predicates, e.g. classified_as or serves.
referencePeriodEndstringInclusive ISO-8601 upper bound for fact reference periods.
referencePeriodStartstringInclusive ISO-8601 lower bound for fact reference periods.
truthStatesarray
typestringOptional entity-type constraint.

No output schema declared.

No examples provided.

find_potential_customers ~96

Find businesses whose published purchasing categories match the categories a business has published as things it can supply. Returns potential_compatibility only: it is not a customer list, and a business appearing in it has expressed no interest in anything. Nothing is matched on industry. Withheld categories on either side are excluded.

NameTypeReqDescription
businessIdstringyesExact graph business id, e.g. business:<canonical-id>, from resolve_entities.

No output schema declared.

No examples provided.

find_potential_suppliers ~98

Find businesses whose published supply categories match the categories a business has published as things it buys. Returns potential_compatibility only: no relationship is asserted, neither party has said they have done business, and neither may be aware of the other. Nothing is matched on industry. Withheld categories on either side are excluded.

NameTypeReqDescription
businessIdstringyesExact graph business id, e.g. business:<canonical-id>, from resolve_entities.

No output schema declared.

No examples provided.

get_business_evidence ~48

Retrieve the governed context and evidence boundary for one business entity. Licence presence establishes snapshot presence only.

NameTypeReqDescription
idstringyesCanonical business id from search_businesses or a graph query.

No output schema declared.

No examples provided.

get_business_health ~66

The full health report for a sandbox business: the headline, findings worth attention with an action each, invitations, what passed, and what could not be evaluated. The headline is categorical — OEX publishes no numeric health score, in any cycle.

NameTypeReqDescription
businessIdstringyes

No output schema declared.

No examples provided.

get_business_health_markdown ~37

The same report as markdown — the form an owner would hand to whoever maintains their website.

NameTypeReqDescription
businessIdstringyes

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_community_profile ~46

Retrieve one municipality as a governed economic profile with canonical identity, available evidence, links, and qualifications.

NameTypeReqDescription
idstringyesMunicipality name, slug, or SGC 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 ~36

Backward-compatible alias for list_economic_signals.

NameTypeReqDescription
limitnumber
offsetnumber

No output schema declared.

No examples provided.

get_entity ~52

Retrieve one governed entity record with its evidence, provenance, canonical links, and permitted interpretation.

NameTypeReqDescription
idstringyesExact canonical id, local slug, or name from resolve_entities.
typestringyes

No output schema declared.

No examples provided.

get_entity_context ~84

Fetch the governed context for one resolved entity in a single call. Accepts a canonical id, local slug or exact name and routes to the existing occupation, municipality, sector, training, NOC or source resource so evidence and provenance are preserved.

NameTypeReqDescription
idstringyesExact canonical id, local slug, or name from resolve_entities.
typestringyes

No output schema declared.

No examples provided.

get_evidence ~53

Retrieve a governed upstream source or runtime provider and its lineage, licence boundary, releases, and serving status.

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

No output schema declared.

No examples provided.

get_generated_asset ~51

Get an asset OEX generates from the business's own record: 'local-business-jsonld' or 'corrected-info-block'.

NameTypeReqDescription
assetIdstringyes
businessIdstringyes

No output schema declared.

No examples provided.

get_health_action_history ~60

The event history for a sandbox business: what was detected, what the owner reported, and what a recheck verified — with the timestamps that make the sequence auditable.

NameTypeReqDescription
businessIdstringyes
checkIdstring

No output schema declared.

No examples provided.

get_knowledge_graph_status ~52

Return the current database graph inventory by entity type, predicate and metric plus deterministic core reconciliation. ok=true means every governed core entity, alias, edge and fact is present; additional materializers may add records.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_labour_demand ~35

Retrieve governed Saskatchewan labour-demand evidence while keeping advertised openings, statistical vacancies, live listings, and modelled sector allocations distinct.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_municipality_evidence_coverage ~64

Evidence availability and confidence-gate work queue for all 17 Saskatchewan cities and 149 towns. Returns current Tier A–D counts, evidence-domain coverage, public-model input counts, local-context status and the next defensible data action for each municipality.

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 ~34

Saskatchewan merchandise exports by NAPCS section from Statistics Canada. Station-level CGC rows are excluded pending commercial redistribution permission.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_wage_evidence ~81

Retrieve wage evidence for an occupation and geography with units, period, source, confidence, and comparability qualifications.

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.

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.

grant_business_consent ~65

Grant a purpose-scoped consent on behalf of the sandbox business. This is what an invitation in the report is asking for. The classes are separate on purpose: granting one never widens another.

NameTypeReqDescription
businessIdstringyes
consentClassstringyes

No output schema declared.

No examples provided.

inspect_knowledge_frontier ~229

What OEX has asked about a subject, what it could not conclude, why, and which registered question logically follows. Governed and deterministic: every field is a typed governed value or a fixed catalogue constant, no model is invoked, and nothing is derived from prose. This is not a work queue — it carries no identifiers to act on, and OEX accepts no report that a dependency was addressed. A dependency stops being reported when the same question, asked again against changed governed evidence, no longer derives it. Use investigate_economic_question or the subject’s own resource for the facts; this reports only what remains unresolved. Follow only nextInquiries; awaiting_evidence means stop until admissible evidence changes. evidenceRequirements names public question prerequisites without exposing private sources. Already evaluated questions are replaced by their blockers.

NameTypeReqDescription
subjectIdstringyesThe canonical OEX identifier for the subject, such as a municipality slug.
subjectKindstringyesThe kind of subject. Kinds any registered inquiry type asks about are listed in the response under admissibility.inquirableSubjectKinds.

No output schema declared.

No examples provided.

inspect_procurement_activity ~148

Inspect official Saskatchewan CanadaBuys procurement observations by buyer, notice, or UNSPSC product/service category. Returns current and historical lifecycle evidence, amendments, conflicts, provenance, and explicit missing-evidence boundaries. It does not rank tenders, infer supplier fit, or expose private supplier/customer relationships.

NameTypeReqDescription
buyerIdstringExact source-scoped organization id from resolve_entities.
categoryCodestringExact eight-digit UNSPSC code from resolve_entities.
includeHistorybooleanInclude closed historical demand observations; default true.
limitintegerMaximum observations returned; default 100.
noticeIdstringExact source-stable procurement-notice id.

No output schema declared.

No examples provided.

investigate_economic_question ~168

Turn a natural-language economic question into an inspectable deterministic plan, resolve governed entities, execute a bounded set of existing OEX graph/data primitives, and return a citation-ready evidence bundle. OEX does not invoke a hosted model or generate a hidden reasoning chain; synthesize only from the returned evidence and limitations.

NameTypeReqDescription
depthintegerMaximum graph traversal depth; default 2.
entitiesarrayOptional exact entity hints. Use these when a place, business, occupation, sector, signal, or source is not stated unambiguously in the question.
maxEvidenceCallsintegerMaximum governed evidence calls executed; default 6.
minimumConfidencestring
questionstringyesThe economic question. Do not include personal or confidential information.

No output schema declared.

No examples provided.

list_economic_signals ~62

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.

NameTypeReqDescription
limitnumberPage size.
offsetnumberZero-based page offset.

No output schema declared.

No examples provided.

list_health_capabilities ~112

What Business Health can actually inspect, fix, generate, verify and escalate — every check, what evidence it reads, what it needs before it will run, and what it offers as a fix. Read this before promising a business anything: it is the authoritative list of what OEX can do about a finding, and it distinguishes the checks that run for anyone from the ones that need a claim or a verified claim. Read-only, needs no account and no business, and answers even when the database is down.

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.

Common questions

What is the ca.veilpoint/opportunity-exchange MCP server?

ca.veilpoint/opportunity-exchange is an MCP server listed in the public MCP registry as ca.veilpoint/opportunity-exchange. Keyless Saskatchewan labour-market data: measured wages and rents, roles, jobs, outcomes, pathways. This page covers its hosted endpoint (https://veilpoint.ca/mcp).

Is the ca.veilpoint/opportunity-exchange MCP server safe to use?

ca.veilpoint/opportunity-exchange scores 80 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 ca.veilpoint/opportunity-exchange MCP server expose?

ca.veilpoint/opportunity-exchange exposes 72 tools: investigate_economic_question, inspect_knowledge_frontier, resolve_entities, get_entity_context, query_knowledge_graph, and 67 more. Their descriptions and schemas cost roughly 7,211 tokens of context every time the server is loaded.

Does the ca.veilpoint/opportunity-exchange MCP server require authentication?

No. We connected to ca.veilpoint/opportunity-exchange without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the ca.veilpoint/opportunity-exchange MCP server still maintained?

ca.veilpoint/opportunity-exchange is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.