Canadian procurement intelligence: CanadaBuys and Alberta tenders, ranked for your shop.
The MCP server provides Canadian procurement intelligence by covering CanadaBuys and Alberta tenders, ranked for a user’s shop. It is identified by the slug io-github-harleycoops-workspace-alberta and described as io.github.HarleyCoops/workspace-alberta.
🛠️ Key Features
CanadaBuys coverage
Alberta tenders coverage
Ranked results for a shop
🚀 Use Cases
Finding and comparing Canadian procurement opportunities
Reviewing Alberta tender listings using ranked ordering
⚡ Developer Benefits
Scoped to a specific procurement domain: CanadaBuys and Alberta tenders
Clear, shop-oriented ranking of results
Captured live from the server via tools/list.
search_contracts
Search Canadian federal government contracts. Filter by keywords, province, or status.
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Show contracts closing within N days (default 30)",
"default": 30
},
"province": {
"type": "string",
"description": "Filter by province"
}
}
}
summarize_contracts
Get a summary of available contracts.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
refresh_data
Refresh contract data from CanadaBuys.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
set_business_profile
Tell me about your business. I'll save your profile and use it to find matching government contracts.
Parameters3
company_name
string
optional
Your company name
location
string
optional
Where you're located (e.g., 'Edmonton, Alberta')
description
string
required
What does your business do? Describe your products, services, and capabilities.
Raw schema
{
"type": "object",
"properties": {
"company_name": {
"type": "string",
"description": "Your company name"
},
"location": {
"type": "string",
"description": "Where you're located (e.g., 'Edmonton, Alberta')"
},
"description": {
"type": "string",
"description": "What does your business do? Describe your products, services, and capabilities."
}
},
"required": [
"description"
]
}
find_opportunities
Find government contracts that match your business profile. Returns scored and ranked opportunities with explanations of why each one fits your capabilities. Pass an inline `profile` to describe the business per call.
Parameters3
days
integer
optional
Only show contracts closing within N days (default: 60)
limit
integer
optional
Maximum opportunities to return (default: 15)
profile
object
optional
Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.
Raw schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Only show contracts closing within N days (default: 60)",
"default": 60
},
"limit": {
"type": "integer",
"description": "Maximum opportunities to return (default: 15)",
"default": 15
},
"profile": {
"type": "object",
"description": "Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.",
"properties": {
"company_name": {
"type": "string",
"description": "Company name"
},
"location": {
"type": "string",
"description": "Where the business is located, e.g. 'Edmonton, Alberta'"
},
"description": {
"type": "string",
"description": "What the business does: products, services, capabilities"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional explicit capability keywords; derived from description when omitted"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional industries such as steel, lumber, aluminum, construction"
}
}
}
}
}
get_my_profile
View your current business profile that's being used to match contracts.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
search_opportunities
Search CanadaBuys and Alberta Purchasing Connection together.
Parameters5
keywords
string
optional
Search words or phrase
source
string
optional
all, federal, or alberta
province
string
optional
Optional province or delivery region filter
category
string
optional
Optional category such as services, goods, construction, steel, lumber
limit
integer
optional
Maximum combined results (default 20, max 50)
Raw schema
{
"type": "object",
"properties": {
"keywords": {
"type": "string",
"description": "Search words or phrase"
},
"source": {
"type": "string",
"description": "all, federal, or alberta",
"default": "all"
},
"province": {
"type": "string",
"description": "Optional province or delivery region filter"
},
"category": {
"type": "string",
"description": "Optional category such as services, goods, construction, steel, lumber"
},
"limit": {
"type": "integer",
"description": "Maximum combined results (default 20, max 50)",
"default": 20
}
}
}
get_opportunity_details
Get details for a federal CanadaBuys or Alberta APC opportunity by reference number.
Parameters1
reference
string
required
Reference number, such as AB-2026-03908 or a CanadaBuys reference
Raw schema
{
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Reference number, such as AB-2026-03908 or a CanadaBuys reference"
}
},
"required": [
"reference"
]
}
list_deadlines
List CanadaBuys and Alberta APC opportunities closing soon.
Parameters5
days
integer
optional
Show opportunities closing within N days (default 30)
source
string
optional
all, federal, or alberta
province
string
optional
Optional province or delivery region filter
category
string
optional
Optional category filter
limit
integer
optional
Maximum combined results (default 20, max 50)
Raw schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Show opportunities closing within N days (default 30)",
"default": 30
},
"source": {
"type": "string",
"description": "all, federal, or alberta",
"default": "all"
},
"province": {
"type": "string",
"description": "Optional province or delivery region filter"
},
"category": {
"type": "string",
"description": "Optional category filter"
},
"limit": {
"type": "integer",
"description": "Maximum combined results (default 20, max 50)",
"default": 20
}
}
}
find_matching_opportunities
Rank CanadaBuys and Alberta APC opportunities against a business profile. Pass an inline `profile` to describe the business per call.
Parameters3
days
integer
optional
Only show opportunities closing within N days (default 60)
limit
integer
optional
Maximum opportunities to return (default 15, max 30)
profile
object
optional
Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.
Raw schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Only show opportunities closing within N days (default 60)",
"default": 60
},
"limit": {
"type": "integer",
"description": "Maximum opportunities to return (default 15, max 30)",
"default": 15
},
"profile": {
"type": "object",
"description": "Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.",
"properties": {
"company_name": {
"type": "string",
"description": "Company name"
},
"location": {
"type": "string",
"description": "Where the business is located, e.g. 'Edmonton, Alberta'"
},
"description": {
"type": "string",
"description": "What the business does: products, services, capabilities"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional explicit capability keywords; derived from description when omitted"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional industries such as steel, lumber, aluminum, construction"
}
}
}
}
}
daily_bid_brief
Generate a free daily bid brief from CanadaBuys and Alberta APC for a business profile. Pass an inline `profile` to describe the business per call.
Parameters3
days
integer
optional
Look ahead this many days for matches and deadlines (default 14)
limit
integer
optional
Maximum items per section (default 5, max 10)
profile
object
optional
Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.
Raw schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Look ahead this many days for matches and deadlines (default 14)",
"default": 14
},
"limit": {
"type": "integer",
"description": "Maximum items per section (default 5, max 10)",
"default": 5
},
"profile": {
"type": "object",
"description": "Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.",
"properties": {
"company_name": {
"type": "string",
"description": "Company name"
},
"location": {
"type": "string",
"description": "Where the business is located, e.g. 'Edmonton, Alberta'"
},
"description": {
"type": "string",
"description": "What the business does: products, services, capabilities"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional explicit capability keywords; derived from description when omitted"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional industries such as steel, lumber, aluminum, construction"
}
}
}
}
}
search_alberta_opportunities
Search Alberta Purchasing Connection opportunities from Alberta public-sector buyers.
Parameters4
keywords
string
optional
Search words or phrase
category
string
optional
Optional category: services, goods, or construction
List open Alberta Purchasing Connection opportunities closing soon.
Parameters3
days
integer
optional
Show opportunities closing within N days (default 30)
category
string
optional
Optional category: services, goods, or construction
limit
integer
optional
Maximum results (default 20, max 50)
Raw schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Show opportunities closing within N days (default 30)",
"default": 30
},
"category": {
"type": "string",
"description": "Optional category: services, goods, or construction"
},
"limit": {
"type": "integer",
"description": "Maximum results (default 20, max 50)",
"default": 20
}
}
}
summarize_alberta_opportunities
Summarize current open Alberta Purchasing Connection opportunities by category.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
find_alberta_opportunities
Find Alberta Purchasing Connection opportunities that match your business profile. Pass an inline `profile` to describe the business per call.
Parameters3
days
integer
optional
Only show opportunities closing within N days (default: 60)
limit
integer
optional
Maximum opportunities to return (default: 15)
profile
object
optional
Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.
Raw schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Only show opportunities closing within N days (default: 60)",
"default": 60
},
"limit": {
"type": "integer",
"description": "Maximum opportunities to return (default: 15)",
"default": 15
},
"profile": {
"type": "object",
"description": "Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.",
"properties": {
"company_name": {
"type": "string",
"description": "Company name"
},
"location": {
"type": "string",
"description": "Where the business is located, e.g. 'Edmonton, Alberta'"
},
"description": {
"type": "string",
"description": "What the business does: products, services, capabilities"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional explicit capability keywords; derived from description when omitted"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional industries such as steel, lumber, aluminum, construction"
}
}
}
}
}
process_bid_room
Use an E2B sandbox to process tender attachments and call Cohere Command A+ inside the sandbox for bid-room analysis.
Parameters6
reference
string
required
CanadaBuys or Alberta APC reference number
business_context
string
optional
Optional company capabilities or bid context. If omitted, the saved business profile is used.
max_attachments
integer
optional
Maximum direct attachments to process (default 5, max 5)
timeout_seconds
integer
optional
E2B sandbox timeout in seconds (default 900)
command_timeout_seconds
integer
optional
Sandbox command timeout in seconds (default 420)
profile
object
optional
Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.
Raw schema
{
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "CanadaBuys or Alberta APC reference number"
},
"business_context": {
"type": "string",
"description": "Optional company capabilities or bid context. If omitted, the saved business profile is used."
},
"max_attachments": {
"type": "integer",
"description": "Maximum direct attachments to process (default 5, max 5)",
"default": 5
},
"timeout_seconds": {
"type": "integer",
"description": "E2B sandbox timeout in seconds (default 900)",
"default": 900
},
"command_timeout_seconds": {
"type": "integer",
"description": "Sandbox command timeout in seconds (default 420)",
"default": 420
},
"profile": {
"type": "object",
"description": "Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.",
"properties": {
"company_name": {
"type": "string",
"description": "Company name"
},
"location": {
"type": "string",
"description": "Where the business is located, e.g. 'Edmonton, Alberta'"
},
"description": {
"type": "string",
"description": "What the business does: products, services, capabilities"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional explicit capability keywords; derived from description when omitted"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional industries such as steel, lumber, aluminum, construction"
}
}
}
},
"required": [
"reference"
]
}
check_cohere_status
Check whether the optional Cohere Command A+ model integration is configured. Does not call the model.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
analyze_contract_with_cohere
Use Cohere Command A+ to review a CanadaBuys tender and explain fit, risks, and next steps.
Parameters5
reference
string
required
Reference or solicitation number for the tender to analyze
business_context
string
optional
Optional company capabilities or bid context. If omitted, the saved business profile is used.
question
string
optional
Optional specific question to ask about the tender
max_tokens
integer
optional
Maximum model response tokens (default 1200, max 2000)
profile
object
optional
Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.
Raw schema
{
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Reference or solicitation number for the tender to analyze"
},
"business_context": {
"type": "string",
"description": "Optional company capabilities or bid context. If omitted, the saved business profile is used."
},
"question": {
"type": "string",
"description": "Optional specific question to ask about the tender"
},
"max_tokens": {
"type": "integer",
"description": "Maximum model response tokens (default 1200, max 2000)",
"default": 1200
},
"profile": {
"type": "object",
"description": "Inline business profile used for this call only. Overrides any saved profile. On the shared public endpoint without a subscriber key, this is the way to describe your business.",
"properties": {
"company_name": {
"type": "string",
"description": "Company name"
},
"location": {
"type": "string",
"description": "Where the business is located, e.g. 'Edmonton, Alberta'"
},
"description": {
"type": "string",
"description": "What the business does: products, services, capabilities"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional explicit capability keywords; derived from description when omitted"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional industries such as steel, lumber, aluminum, construction"
}
}
}
},
"required": [
"reference"
]
}
watch_opportunity
Add a CanadaBuys or Alberta APC opportunity to your persistent watchlist, with an optional note.
Parameters2
reference
string
required
Reference number to track
note
string
optional
Optional note, e.g. 'waiting on bonding quote'
Raw schema
{
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Reference number to track"
},
"note": {
"type": "string",
"description": "Optional note, e.g. 'waiting on bonding quote'"
}
},
"required": [
"reference"
]
}
list_watchlist
List watched opportunities sorted by closing date, with days remaining and notes.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
unwatch_opportunity
Remove an opportunity from the watchlist by reference number.
Fast deterministic bid/no-bid checklist for one opportunity: profile fit, runway to closing, region match, and a go/caution/no-go verdict with reasons. No model call.
Smoke test: python -m unittest tests.test_canadabuys_mcp_smoke. Client config variants live in mcp.json.example; full tool and REST reference in docs/mcp-tool-reference.md.
Canadian AI Security Is Canadian National Security
WorkspaceAlberta is a Canadian procurement intelligence workspace. It connects public tender data to the people who can actually do the work: fabricators, mills, contractors, shops, manufacturers, and the small teams that keep the real economy moving.
The direction is explicit:
Canadian demand signals: CanadaBuys and Alberta Purchasing Connection in one search surface.
Canadian AI company: Cohere as the first sovereign-model route.
Canadian open source model: Command A+ command-a-plus-05-2026, with the W4A4 Hugging Face route available through CohereLabs/command-a-plus-05-2026-w4a4.
Canadian tools: practical MCP wiring for the procurement sources Canadian firms already need to watch.
Canadian compute path: designed so sensitive public-sector and industrial workflows can move toward Canadian infrastructure, including Canadian chips and data-centre capacity where those options are available.
The point is not nationalism as decoration. The point is operational independence.
If Canadian companies are going to bid Canadian work, understand Canadian supply chains, and protect Canadian industrial capacity, then the AI layer underneath that work matters.
The Last Mile of Work
AI promised 5X productivity. Most small businesses got a chatbot that writes mediocre marketing copy.
The model is not the whole bottleneck. The connection is.
Wiring up the places where the work lives usually costs money, time, and technical patience a small business does not have. Government tender databases are a perfect example: the work is public, the demand is real, but the discovery process is still awkward enough that good companies miss good opportunities.
WorkspaceAlberta solves the last mile by giving an AI assistant the wiring it needs to search, compare, summarize, and brief public procurement opportunities from inside the workspace where the owner is already working.
The High Level Bridge between Edmonton and Strathcona under construction, circa 1909.
The High Level Bridge under construction, Edmonton, c. 1909 — Alberta steel, riveted by hand. City of Edmonton Archives, EA-500-4 (public domain).
What This Actually Does
WorkspaceAlberta is an MCP-first workspace for Canadian procurement.
It now brings together:
CanadaBuys for federal tender notices
Alberta Purchasing Connection for Alberta public-sector opportunities
Cohere Command A+ for optional tender analysis and fit review
A daily bid brief that summarizes the market, best-fit matches, and deadlines from both sources
A welder at Robin Nodwell Ltd., Calgary, 1963.
Welder at Robin Nodwell Ltd., Calgary, 1963 — from the Provincial Archives of Alberta series "What Alberta Makes Makes Alberta" (PA3324, no known copyright restrictions).
The assistant can:
search national and Alberta opportunities together
inspect a posting by reference number
list what is closing soon
match opportunities against a saved business profile
generate a free daily brief for the owner or estimator
use Cohere Command A+ to review tender fit, risks, requirements, and next actions
This is meant to answer practical questions:
What work is open right now?
Which opportunities fit what we actually do?
What closes soon?
What should we read first?
What should we ignore?
The Custom Procurement MCP Server
The custom MCP server is the product.
It is a deployed working endpoint that knows the live public procurement pipeline exposed by CanadaBuys and Alberta Purchasing Connection. It can serve that pipeline back to users through an AI assistant based on what they do, where they work, what they can supply, and what deadlines matter.
The core tools are:
search_opportunities for unified federal and Alberta search
get_opportunity_details for a single posting by reference number
list_deadlines for what is closing soon
find_matching_opportunities for profile-based ranking
daily_bid_brief for the daily owner/operator summary
analyze_contract_with_cohere for optional Cohere Command A+ tender review
process_bid_room for live E2B attachment extraction and Cohere tool-assisted bid review
watch_opportunity / list_watchlist for a persistent tracking list with closing-date countdowns
bid_no_bid_scorecard for a fast deterministic go/caution/no-go read on any reference
MCP is the first-class interface because this is meant to be used by agents. The same procurement core also exposes REST/OpenAPI so other AI tools can hook into the same contract intelligence without needing native MCP support.
Underneath the endpoint is pure Python procurement logic. The data processing, filtering, matching, deadline ranking, and brief generation do not require an LLM. The model layer is added only where judgment helps: risk review, requirements explanation, and bid/no-bid reasoning.
E2B sandboxes are the isolated compute layer for heavier bid-room work: opening tender packages, parsing attachments, extracting compliance requirements, and returning structured bid artifacts without putting unknown user files inside the always-on MCP service. Cohere Command A+ runs inside the short-lived sandbox with read-only evidence tools over the extracted documents. The build plan lives in docs/e2b-bid-room-plan.md, and the business-owner operating diagram lives in docs/bid-room-operating-diagram.md.
A machinist at Canada Oil Tool Manufacturing, Calgary, 1963.
Machinist at Canada Oil Tool Manufacturing, Calgary, 1963 — precision work for the energy sector. Provincial Archives of Alberta, PA3318/2 (no known copyright restrictions).
Why This Matters
Get 50% of the population 10% better. Every year. That is generational growth.
Not 10 developers 500% better. That is happening. But it does not scale to the economy.
"How do I save 5 hours a week?" "How do I save $700 a month?"
Those are the real questions. This is how you answer them.
Alberta's steel, lumber, and metals industries represent over 2,500 companies with a combined economic impact exceeding $37 billion annually.
Sector
Companies
Economic Impact
Jobs Supported
Forestry & Wood Products
676+ businesses, 40 major mills
$14 billion
41,400
Fabricated Metal Products
1,871 establishments
$23.4B manufacturing sector
16,600
Primary & Machinery Manufacturing
200+ facilities
Included above
12,000+
Three photographs of workers pouring steel at the Foothills Steel Foundry, Calgary, 1963.
What Alberta makes makes Alberta — the pour at Foothills Steel Foundry, Calgary, 1963. Provincial Archives of Alberta, PA3315.1–.3 (no known copyright restrictions).
Behind every one of these companies are dozens of systems that need to talk to each other just to get anything done: quoting software, inventory spreadsheets, accounting packages, project trackers, supplier portals, and government tender databases.
Any tool that helps a fabricator create demand, a mill manufacture more efficiently, or a contractor cut costs has multiplier effects across the entire province:
$4 billion in forest product exports alone
$1.6 billion in annual wages paid to forestry workers
70 communities across Alberta that depend directly on these industries
$988 million in tax revenue flowing back to the province
Walter's Saw Mill (1908) and the Alberta Lumber Co.'s Factory (1908), Edmonton — value-added Alberta manufacturing, first edition. City of Edmonton Archives, EA-500-205 and EA-500-290 (public domain).
More contracts won. More jobs kept. More skill developed. More value staying here at home.
A museum wall of Canadian industrial photography: steel, foundries, machine shops, and mills from 1870 to 1957.
The museum wall. Top row: crucible pour, Stelco, Hamilton, 1957 (Herb Taylor / Library and Archives Canada, CC BY 2.0); Norwood Foundry crew, Edmonton, 1935 (Provincial Archives of Alberta, A6237); Bawden Machine Co. blacksmith shop, Toronto, c. 1918 (LAC, CC BY 2.0); machinist, Alberta Foundry & Machine Shop, Medicine Hat, c. 1940s (PAA, A10335). Bottom row: grading lumber by hand (Nicholas Morant / LAC, CC BY 4.0); mill interior, Maberly, Ontario, c. 1870 (LAC, CC BY 2.0); Manitoba Bridge & Iron Works, Winnipeg, c. 1914–18 (LAC, CC BY 2.0); Alberta Foundry & Machine Co. lineup, Medicine Hat, c. 1915 (PAA, A10587).
The OPERA Analytics Server
The country is traveling west. Domestic travel to the western provinces is scaling, and the properties hosting those travelers run on systems like OPERA Cloud.
The Warre & Vavasour tourism thesis: in an extreme-AI world, people crave the analog. Real places, real adventures. The premium goes to authentic, place-bound experiences — and AI is invisible wiring, not the product.
The wiring problem looks exactly like procurement's last mile. A hotel's own data lives inside OPERA Cloud, and getting it out for analysis usually means expensive middleware or manual exports. Front-desk managers, revenue people, and owners can't use what they can't reach.
So the repo ships a second MCP server: mcp-servers/opera-analytics/server.py, a read-only analytics data tap for OPERA Cloud Reporting & Analytics Data APIs. A property's own user signs in as themselves — OAuth2 password grant, with credentials from the hotel's own OPERA Cloud Developer Portal. No partner program, no middleware vendor.
It covers 75 analytics subject areas — guest/deposit/AR ledgers, transactions, reservation statistics and pace, managers report, history and forecast, rate codes, profiles, blocks, catering events, housekeeping inventory — through 9 tools:
opera_auth_status to check the session
list_subject_areas / describe_subject_area to see what data exists
run_graphql_query / query_subject_area to pull it
export_to_csv / sync_subject_area to land it locally
list_local_tables / query_local_data to work with what's synced
Data lands in local CSV files and a DuckDB database the team can open in Excel or Power BI, or ask questions about in plain language through any MCP-capable assistant. Read-only by design. Set OPERA_MOCK=1 to try it offline with no credentials; smoke test: python -m unittest tests.test_opera_analytics_smoke. Server docs live in mcp-servers/opera-analytics/README.md.
Tools employees can actually use, from the systems they already have. The same pattern as the procurement work: take an awkward system of record, give people their own data back, charge for outcomes not visibility.