The Concessio API and MCP Server Are Now Live
Concessio has published a REST API and a remote MCP server that expose its dataset of 22,000+ tracked concessions across 185 countries and 15 asset classes directly to software and AI assistants, no browser session required. The MCP server — six tools covering search, detail, operator portfolios, expirations, database-wide stats, and country views — is now listed on the official Model Context Protocol registry as io.concessio/concessio v2.0.0. Records returned by either surface are keyed to a stable, Luhn-validated Concessio ID (format CC-AA-S-NNNNNN-K) that stays fixed even when the underlying concession is renamed, re-tendered, or moves to a new operating consortium.
Last updated: August 5, 2026
Published August 5, 2026
Until today, getting Concessio's concession-level data into another system meant exporting from the app by hand, one query at a time. That changes with two access points launching together: a bearer-token REST API and a remote MCP server, both drawing on the same underlying dataset and both keyed to the same Concessio ID — so a downstream system never has to re-match a record after a rename or a re-tender.
Figures as of August 2026. Full sourcing and methodology: /docs/methodology.
What does the Concessio API expose?
The REST API lives at app.concessio.io/api/v1 and authenticates with a bearer token. It exposes endpoints to search concessions, retrieve concession detail, get sectors, get countries, get operators, and retrieve stats — the same underlying dataset that powers the Concessio app, queryable programmatically.
| Data object | Coverage |
|---|---|
| Concessions tracked | 22,000+ |
| Countries | 185 |
| Asset classes | 15 |
| Data sources | 720+ |
| Update cadence | Daily |
| Ownership events | 12,875 |
| Transactions | 6,596 |
| Contract clauses | 3,500+ |
| Operational KPIs | 3,500+ |
Contract clauses and operational KPIs are tracked as separate record types; both currently stand at 3,500+ — the matching figures above are not a typo.
Full endpoint documentation: /docs/api-reference. General API orientation: /docs.
What is a Concessio ID, and why does concession data need one?
Concession assets have a naming problem most infrastructure datasets don't solve for: the same physical asset gets renamed at re-tender, moves between operating consortia, and often carries more than one name across different filings (project name, SPV name, contract reference number). A dataset keyed on name strings breaks every time one of those things happens — joins silently split, history gets orphaned.
Concessio assigns each concession a permanent, 12-character identifier, stable for the life of the concession: CC-AA-S-NNNNNN-K, Luhn-validated.
| Segment | Length | What it encodes |
|---|---|---|
CC | 2 | Country — ISO 3166-1 alpha-2 |
AA | 2 | Asset class code |
S | 1 | Structure code |
NNNNNN | 6 | Sequence number within that CC-AA-S prefix |
K | 1 | Luhn check digit |
Asset class codes (AA): 10 Airport · 11 Toll Road · 12 Port · 13 Rail · 14 Marina · 20 Water · 21 Power Distribution · 22 Gas Distribution · 23 District Heating · 30 Waste · 40 Social · 99 Other. The first digit marks the family — 10s transport, 20s utilities, 30s environmental, 40s social.
Structure codes (S): C Concession · B BOT · O BOOT · T BTO · W BOO · D DBFOM · F DBFO · R ROT · L Lease · A Affermage · M Management Contract · P PPP · X Other. This is deliberate: the third segment encodes contractual structure, not sector — the same structure-not-sector distinction that underlies how Concessio scopes every record in the first place (see What Is an Infrastructure Concession?). Two toll-road concessions in the same country can carry different structure codes — a straight Concession versus a BOT — while sharing identical country and asset-class segments; sector lives in AA, deal structure lives in S.
Worked example: Lyon-Saint Exupéry Airport, France, is stored as FR10C0000401 and displayed as FR-10-C-000040-1 — France (FR), Airport (10), Concession structure (C), sequence 000040 within that prefix, check digit 1.
Every ID is directly citable at concessio.io/id/{ID} — for example concessio.io/id/FR10C0000401 — a free, public lookup that needs no authentication (unlike the bearer-token REST API and MCP tools above, which query the full record set). And the ID itself never changes: a rename, a stake sale, a restructuring, an operator transfer, or a re-tender changes the fields underneath it, never the identifier. Full spec: /docs/concessio-id.
What are the six MCP tools, and what do they return?
The MCP server is remote — no local install, no binary to run. It connects over SSE at app.concessio.io/api/mcp/sse and exposes six tools:
| Tool | What it's for |
|---|---|
search_concessions | Query concessions by country, sector, operator, or expiry date |
get_concession_detail | Full details for a concession, including ownership history and contract terms |
get_operator_portfolio | Concessions held by a specific company |
get_expiring_concessions | Concessions expiring soon, for deal sourcing |
get_concession_stats | Database overview by sector, region, and status |
get_country_concessions | Concessions in a country, broken down by sector |
Any MCP-compatible client can call these tools directly in the course of answering a question, without a human constructing a REST query by hand. Full tool schemas and parameters: /docs/mcp-server.
What does it mean that Concessio is on the official MCP registry?
The Model Context Protocol maintains a public registry of published servers, the way a package registry indexes libraries. Concessio's MCP server is listed there as io.concessio/concessio, currently version 2.0.0, which makes it discoverable through the standard registry lookup. That's the whole claim: a registry entry is a directory listing, not an audit. It doesn't mean the MCP project has independently vetted Concessio's server, and it doesn't remove the step of configuring the connection yourself — an MCP client still needs the app.concessio.io/api/mcp/sse endpoint entered before it can call any of the six tools above.
How would an analyst actually use this?
A worked example, using an MCP-connected assistant:
Analyst asks: "Which of the toll-road concessions you track in Poland are approaching the end of their term?"
Tool called:
get_expiring_concessions— concessions expiring soon, for deal sourcing.Answer returned: Of the 36 visible toll-road concessions Concessio tracks in Poland, 7 fall due within 36 months.
No REST call, no query language — the assistant picks the right tool from the six exposed and returns the figure.
What sourcing standard backs the API's data?
Concessio's sourcing standard accepts primary government and regulatory documents, gazette publications, regulator filings, stock-exchange disclosures (SEC EDGAR, HKEX and peers), and multilateral development bank project databases — and excludes Wikipedia, paywalled secondary aggregators, and fund marketing pages as citations.
That standard is easiest to check where Concessio actually publishes its own provenance numbers: in the clause library — 3,750 visible clauses — every one carries a source URL, zero cite a banned source, and 44% (1,663) carry a page-level citation pinpointing the exact page the language was read from. Concessio does not currently publish an equivalent provenance breakdown for transaction or ownership-event records returned by the API. Full detail: /docs/methodology.
For API access or a walkthrough of the MCP connection against your own workflow, Request Demo.
Figures as of August 2026. Methodology and sourcing standard: /docs/methodology.
Frequently asked questions
- Where is the REST API and how do I authenticate?
- app.concessio.io/api/v1, authenticated with a bearer token, with endpoints to search concessions, retrieve concession detail, get sectors, get countries, get operators, and retrieve stats.
- What is a Concessio ID?
- A stable, 12-character identifier in the format CC-AA-S-NNNNNN-K — country, asset class code, structure code, a sequence number within that prefix, and a Luhn check digit — assigned per concession and held constant regardless of renaming, re-tendering, or consortium changes. It can be looked up directly and for free at concessio.io/id/{ID}, no authentication required.
- How many tools does the MCP server expose?
- Six: search_concessions (query by country, sector, operator, or expiry date), get_concession_detail (full details including ownership history and contract terms), get_operator_portfolio (concessions held by a specific company), get_expiring_concessions (concessions expiring soon, for deal sourcing), get_concession_stats (a database overview by sector, region, and status), and get_country_concessions (concessions in a country, broken down by sector).
- Is the MCP server something I have to install?
- No, it is remote, connecting over SSE at app.concessio.io/api/mcp/sse, rather than a local server you run yourself.
- Does Concessio's listing on the official MCP registry mean the server has been independently vetted?
- No. The listing, as io.concessio/concessio v2.0.0, makes the server discoverable through the registry's standard lookup — that's a directory entry, not an audit. It doesn't imply independent verification of the server's behavior, and you still configure the app.concessio.io/api/mcp/sse endpoint yourself in your MCP client.
Relevant documentation
More questions answered
- How do I find concessions expiring in the next 3–5 years?
- Where can I find the actual terms of concession agreements?
- Have governments ever terminated or expropriated concessions?
- Infrastructure Concessions Guide
- European Toll Road Market
- Transaction Multiples Analysis
- AI Document Extraction
- Ownership Tracking