Index / MCP servers / Opportunity Exchange

Opportunity Exchange MCP server

Connect Opportunity Exchange and your agent gets 71 tools, among them assess_procurement_relevance, assess_workforce_demand, check_business_health. It answers at https://veilpoint.ca/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 10 of 10 times since 4 September 2026; the last check, on 17 October 2026, succeeded.

Status
Answering
Tools
71
Official
yes, served from veilpoint.ca
Reliability
10 of 10 checks
Response time
240 ms
Transport
streamable HTTP
Last checked
17 October 2026

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

Description as the publisher wrote it.

The 71 tools Opportunity Exchange offers

ToolWhat it does
assess_procurement_relevanceCompare 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, suppl
Inputs: businessId, includeHistory, limit
assess_workforce_demandReport 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-h
Inputs: limit
check_business_healthRun 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
Inputs: name, website, address, category, description, phone
check_comparabilityCheck whether requested community observations share compatible concepts, units, geographic boundaries, and reference periods; return explicit reasons where they do not.
Inputs: entities, bundle, metrics
check_opportunity_readinessFor 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
Inputs: businessId, limit
compare_communitiesCompare 2–10 Saskatchewan communities and return explicit missing-data and comparability results for every requested metric.
Inputs: entities, bundle, metrics
compare_municipalitiesCompare 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 ev
Inputs: entities, bundle, metrics
compare_outcomesThe 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 m
Inputs: occupation, wage
compare_rolesCompare two or three roles using the shared occupation fields: wages, demand, outlook, entry requirements and work profile.
Inputs: ids
create_sandbox_businessStart 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
Inputs: name, address, category, description, phone
evaluate_pathwaysThe 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 plu
Inputs: credentials, educationLevel, experienceAreas, licenceClass, currentMunicipalityId, allowedMunicipalityIds
explain_business_claimWhat 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
Inputs: businessName
explain_confidenceExplain the OEX A–D record-confidence vocabulary, its weakest-input rule for derived values, and the interpretation contract.
Inputs: confidence
explain_truth_stateExplain what an OEX truth state permits an agent to claim and return the complete interpretation contract.
Inputs: truthState
find_connected_entitiesFind entities connected through governed graph predicates, with source, truth state, confidence, and hop annotations.
Inputs: entity, geography, type, bundle, metrics, predicates
find_potential_customersFind 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 in
Inputs: businessId
find_potential_suppliersFind 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 neithe
Inputs: businessId
get_business_evidenceRetrieve the governed context and evidence boundary for one business entity. Licence presence establishes snapshot presence only.
Inputs: id
get_business_healthThe 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 an
Inputs: businessId
get_business_health_markdownThe same report as markdown — the form an owner would hand to whoever maintains their website.
Inputs: businessId
get_community_economyOne 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 cann
Inputs: code
get_community_profileRetrieve one municipality as a governed economic profile with canonical identity, available evidence, links, and qualifications.
Inputs: id
get_data_providersRead runtime provider contracts grouped as evidence, preview, planned, first-party and derived. Only the evidence group is eligible to support factual claims.
get_data_sourcesRead the governed upstream source registry: publisher datasets, stable source ids, licence decisions, approved and excluded uses, checked releases, materialization bindings and refresh controls.
get_economic_signalGet one governed economic signal by its source-stable id, including provenance, lifecycle state, mappings and uncertainty boundaries.
Inputs: id
get_economy_overviewModeled 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/allo
get_emerging_signalsBackward-compatible alias for list_economic_signals.
Inputs: limit, offset
get_entityRetrieve one governed entity record with its evidence, provenance, canonical links, and permitted interpretation.
Inputs: type, id
get_entity_contextFetch 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 a
Inputs: type, id
get_evidenceRetrieve a governed upstream source or runtime provider and its lineage, licence boundary, releases, and serving status.
Inputs: id
get_generated_assetGet an asset OEX generates from the business's own record: 'local-business-jsonld' or 'corrected-info-block'.
Inputs: businessId, assetId
get_health_action_historyThe 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.
Inputs: businessId, checkId
get_knowledge_graph_statusReturn 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.
get_labour_demandRetrieve governed Saskatchewan labour-demand evidence while keeping advertised openings, statistical vacancies, live listings, and modelled sector allocations distinct.
get_municipality_evidence_coverageEvidence 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 actio
get_real_estateHousing 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.
Inputs: municipalityId
get_rentsMeasured 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 pr
Inputs: province, centre
get_roleOne occupation in full: market figures, entry requirements, working conditions, training programs, and per-community outcomes (net and discretionary monthly income at the median wage).
Inputs: id
get_sectorOne sector: its occupations, provider-qualified postings by community, and notable employers.
Inputs: id
get_source_provenanceResolve 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.
Inputs: id
31 more tools

get_trade_overview, get_wage_evidence, get_wages, grant_business_consent, inspect_procurement_activity, investigate_economic_question, list_economic_signals, list_health_capabilities, list_noc_groups, list_roles, list_sandbox_businesses, list_sectors, query_knowledge_graph, rank_communities, recheck_business_health, report_health_action_complete, resolve_citation, resolve_entities, resolve_entity, run_business_study, run_business_study_markdown, search_businesses, search_employers, search_entities, search_hiring_activity, search_licensed_businesses, set_website_domain, start_health_action, summarize_credential_demand, traverse_relationships, update_business_record

Add Opportunity Exchange to your AI client

Every block below points at https://veilpoint.ca/mcp. Pick your client and copy.

Claude Code: one command in your terminal
claude mcp add --transport http opportunity-exchange https://veilpoint.ca/mcp
Claude Desktop: claude_desktop_config.json
{
  "mcpServers": {
    "opportunity-exchange": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://veilpoint.ca/mcp"]
    }
  }
}
Cursor: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
  "mcpServers": {
    "opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
VS Code and GitHub Copilot: .vscode/mcp.json
{
  "servers": {
    "opportunity-exchange": {
      "type": "http",
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
Zed: Zed settings.json
{
  "context_servers": {
    "opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
Windsurf: ~/.codeium/mcp_config.json
{
  "mcpServers": {
    "opportunity-exchange": {
      "serverUrl": "https://veilpoint.ca/mcp"
    }
  }
}
JetBrains AI Assistant: Settings, Tools, AI Assistant, MCP, New MCP Server, as JSON
{
  "mcpServers": {
    "opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
Continue: .continue/mcpServers/neuronto.yaml
name: Opportunity Exchange
version: 0.0.1
schema: v1
mcpServers:
  - name: Opportunity Exchange
    type: streamable-http
    url: https://veilpoint.ca/mcp
Gemini CLI: ~/.gemini/settings.json
{
  "mcpServers": {
    "opportunity-exchange": {
      "httpUrl": "https://veilpoint.ca/mcp"
    }
  }
}
Codex CLI: MCP server config
{
  "mcpServers": {
    "opportunity-exchange": {
      "type": "http",
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
Warp: MCP servers, + Add, paste JSON
{
  "mcpServers": {
    "opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
Goose: a one-click extension link
goose://extension?url=https%3A%2F%2Fveilpoint.ca%2Fmcp&type=streamable_http&id=opportunity-exchange&name=Opportunity%20Exchange

Is Opportunity Exchange up right now?

It answered our last check on 17 October 2026 in 240 ms. Over 10 checks since 4 September 2026 it answered 10. Status here comes from Neuronto's own probes, not from the publisher.

MCP servers similar to Opportunity Exchange

Questions about Opportunity Exchange

Is there an official Opportunity Exchange MCP server?

Yes. It is published by veilpoint.ca and served from veilpoint.ca, the vendor's own domain: https://veilpoint.ca/mcp.

How many tools does Opportunity Exchange have?

71, as returned by the server's own tools/list on 9 September 2026: assess_procurement_relevance, assess_workforce_demand, check_business_health, check_comparability, check_opportunity_readiness, compare_communities, compare_municipalities, compare_outcomes, and 63 more.

Is Opportunity Exchange down?

It answered our last check on 17 October 2026 in 240 ms. Over 10 checks since 4 September 2026 it answered 10.

How do I add Opportunity Exchange to Cursor?

Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://veilpoint.ca/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.

Does Opportunity Exchange need an API key?

It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.

Where this comes from

Publisher: ca.veilpoint. Endpoint host: veilpoint.ca. ARD identifier: urn:air:ca.veilpoint:mcp:opportunity-exchange. First indexed 31 August 2026. The tools are exactly what the server returned; nothing on this page is inferred from its name. Ranking in Neuronto search is never for sale.

Is this your server? Get a message the day it stops answering or its tools change: monitoring, 14 days free. Or claim the domain to manage how it is listed.