mcpbeat

Opportunity Exchange MCP Server

ca.veilpoint/opportunity-exchange
answering

Opportunity Exchange is answering right now. Last checked 3 min ago. It exposes 30 tools.

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

Uptime history 39 hours of history
39 hours agonow
100.0%
Uptime 24h
91 of 91 checks
30
Tools
read from the server
307 ms
Response time
average over 24h
open, no key
Access
streamable-http

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 3 min ago.

run in your terminal
claude mcp add opportunity-exchange --transport http https://veilpoint.ca/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.opportunity-exchange]
url = "https://veilpoint.ca/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "opportunity-exchange": {
      "url": "https://veilpoint.ca/mcp"
    }
  }
}

Available tools 30

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

compare
compare_municipalities
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.
compare_outcomes
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.
compare_roles
Compare two or three roles using the shared occupation fields: wages, demand, outlook, entry requirements and work profile.
data
get_data_providers
Read runtime provider contracts grouped as evidence, preview, planned, first-party and derived. Only the evidence group is eligible to support factual claims.
get_data_sources
Read the governed upstream source registry: publisher datasets, stable source ids, licence decisions, approved and excluded uses, checked releases, materialization bindings and refresh controls.
economic
get_economic_signal
Get one governed economic signal by its source-stable id, including provenance, lifecycle state, mappings and uncertainty boundaries.
list_economic_signals
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.
knowledge
get_knowledge_graph_status
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.
query_knowledge_graph
Query the materialized semantic graph without downloading whole datasets. Resolve an entity name/code and optional municipality geography, then return typed facts and relationships. This supports municipality-by-NAICS GDP and business queries without encoding classifications in metric names. Missing facts or edges mean unknown, never zero or false.
community
get_community_economy
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.
economy
get_economy_overview
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.
emerging
get_emerging_signals
Backward-compatible alias for list_economic_signals.
employers
search_employers
Search the public employer directory by name, municipality, sector group and its disclosed hiring flag. Preview providers return modelled hiring scenarios, not employer claims.
entity
get_entity_context
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.
evaluate
evaluate_pathways
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.
identify
identify_credential_bottlenecks
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.
jobs
search_jobs
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.
municipality
get_municipality_evidence_coverage
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.
noc
list_noc_groups
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.
rank
rank_communities
Rank Saskatchewan communities by monthly discretionary income for exactly one role or explicit hourly wage.
real
get_real_estate
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.
rents
get_rents
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.
resolve
resolve_entities
Resolve a user-supplied name, slug, NOC code, SGC code, program, sector or governed source to its canonical OEX identity. Call this before joining datasets when the identifier is uncertain. Results include the correct follow-up MCP tool and arguments.
role
get_role
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).
roles
list_roles
The Saskatchewan occupation catalogue: id, title, NOC code, sector, hourly wage, demand score. Start here to find role ids.
sector
get_sector
One sector: its occupations, provider-qualified postings by community, and notable employers.
sectors
list_sectors
Sector rollups with provider-qualified posting-corpus counts, available talent, scenario ratios, median wage and demand. Read meta.evidence before interpreting a posting count.
source
get_source_provenance
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.
trade
get_trade_overview
Saskatchewan merchandise exports by NAPCS section from Statistics Canada. Station-level CGC rows are excluded pending commercial redistribution permission.
wages
get_wages
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.

Endpoints

URLTransportStateLatencyChecked
https://veilpoint.ca/mcp streamable-http answering 301 ms 3 min ago

Opportunity Exchange — questions

Answers built from our own checks of this server.

What can Opportunity Exchange do?
It exposes 30 tools, read directly from the server on our last check. Among them: compare_municipalities, compare_outcomes, compare_roles, evaluate_pathways, get_community_economy, get_data_providers and 24 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Opportunity Exchange mostly used for?
Its tools cluster around compare, data and economic. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Opportunity Exchange working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 307 ms. The bar chart above shows every period we have measured.
How do I connect Opportunity Exchange?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Opportunity Exchange need an API key?
No. Opportunity Exchange completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 30 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Opportunity Exchange?
It answers our handshake in 307 ms on average, which is faster than 46% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.