
Read Frontier Desk's AI-data buyer index, notes, markets and guides. Read-only, no key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
One guide in full: its quick answer, its text as markdown, the day it was last updated, and its address on the site. Takes a slug from list_guides.
The guide's slug, for example "sell-an-msp".
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http desk https://www.frontierdesk.ai/mcp
One guide in full: its quick answer, its text as markdown, the day it was last updated, and its address on the site. Takes a slug from list_guides.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The guide's slug, for example "sell-an-msp". |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "The guide's slug, for example \"sell-an-msp\"."
}
},
"additionalProperties": false
}One sector's relationship graphs: the firms drawn in each column, the relations between them in each side's own words, the roster of who does what, and the lines on what the connections show. Takes a sector slug from list_markets: accounting, insurance, wealth, it, healthcare, staffing, legal, engineering, marketing, logistics, distribution, operators, software, business-services, property, manufacturing, build-out. By default (detail "summary") it answers compactly: per graph, the counts, the columns, the lines on what the connections show, and the first firms and relations in the order the page draws them, each named, with a link to the full JSON. detail "full" answers with the same JSON the /markets page loads when a visitor picks that sector, which can run past 100 KB.
| Argument | Type | Description |
|---|---|---|
| graph | string | One graph instead of all of them, by key, for example "services" or "credit". Omit for every graph the sector has. |
| limit | integer | With detail "summary": how many firms and relations to name per graph. Default 12. |
| detail | string | "summary" (the default) for counts and the first firms and relations in each graph; "full" for the whole JSON the page loads. |
| sector* | string | The sector to draw: accounting, insurance, wealth, it, healthcare, staffing, legal, engineering, marketing, logistics, distribution, operators, software, business-services, property, manufacturing, build-out. |
{
"type": "object",
"required": [
"sector"
],
"properties": {
"graph": {
"type": "string",
"maxLength": 40,
"description": "One graph instead of all of them, by key, for example \"services\" or \"credit\". Omit for every graph the sector has."
},
"limit": {
"type": "integer",
"default": 12,
"maximum": 50,
"minimum": 1,
"description": "With detail \"summary\": how many firms and relations to name per graph. Default 12."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"description": "\"summary\" (the default) for counts and the first firms and relations in each graph; \"full\" for the whole JSON the page loads."
},
"sector": {
"enum": [
"accounting",
"insurance",
"wealth",
"it",
"healthcare",
"staffing",
"legal",
"engineering",
"marketing",
"logistics",
"distribution",
"operators",
"software",
"business-services",
"property",
"manufacturing",
"build-out"
],
"type": "string",
"maxLength": 40,
"description": "The sector to draw: accounting, insurance, wealth, it, healthcare, staffing, legal, engineering, marketing, logistics, distribution, operators, software, business-services, property, manufacturing, build-out."
}
},
"additionalProperties": false
}One published note in full: its text as written, the day it was published, its address on the site, and every link it cites. Takes the slug from list_notes or search_notes, or the last part of a note's own URL.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The note's slug, for example "2026-10-28-a-note-title-1a2b3c4d". A full /intel/... path works too. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 160,
"minLength": 8,
"description": "The note's slug, for example \"2026-10-28-a-note-title-1a2b3c4d\". A full /intel/... path works too."
}
},
"additionalProperties": false
}One standing forecast: the odds Frontier Desk gives every path at each of the two dates it is scored on, the readings behind them, the scenarios with the markers that say which one we are on, and when it is next rescored. Odds come from a simulation of chained steps and are the desk's own; they are not a market price and nothing settles them but the dated public sources each report names. The whole report is on its page.
| Argument | Type | Description |
|---|---|---|
| outlook* | string | The outlook's route, as list_outlooks gives it: /outlook/company-data-market-2027, /outlook/ai-jobs-and-income-2035, /outlook/compute-financing-2028, /outlook/data-center-power-2028, /outlook/private-credit-lower-middle-market-2028, /outlook/accounting-firm-rollups-2028, /outlook/insurance-agency-consolidation-2028, /outlook/autonomous-companies-2028. |
{
"type": "object",
"required": [
"outlook"
],
"properties": {
"outlook": {
"enum": [
"/outlook/company-data-market-2027",
"/outlook/ai-jobs-and-income-2035",
"/outlook/compute-financing-2028",
"/outlook/data-center-power-2028",
"/outlook/private-credit-lower-middle-market-2028",
"/outlook/accounting-firm-rollups-2028",
"/outlook/insurance-agency-consolidation-2028",
"/outlook/autonomous-companies-2028"
],
"type": "string",
"maxLength": 120,
"description": "The outlook's route, as list_outlooks gives it: /outlook/company-data-market-2027, /outlook/ai-jobs-and-income-2035, /outlook/compute-financing-2028, /outlook/data-center-power-2028, /outlook/private-credit-lower-middle-market-2028, /outlook/accounting-firm-rollups-2028, /outlook/insurance-agency-consolidation-2028, /outlook/autonomous-companies-2028."
}
},
"additionalProperties": false
}One public page as written: its heading, its lead, and the sections it carries — what the page says it does, what it covers, and what it does not. This returns copy, not a run: the tools on these pages compute from a reader's own answers, and nothing here invents one. Routes: /tools, /first-pass, /deal-ready-ai, /roadmap, /data, /second-opinion, /compute, /build, /agents, /tools/mcp.
| Argument | Type | Description |
|---|---|---|
| page* | string | The page's route, as list_public_pages gives it: /tools, /first-pass, /deal-ready-ai, /roadmap, /data, /second-opinion, /compute, /build, /agents, /tools/mcp. |
{
"type": "object",
"required": [
"page"
],
"properties": {
"page": {
"enum": [
"/tools",
"/first-pass",
"/deal-ready-ai",
"/roadmap",
"/data",
"/second-opinion",
"/compute",
"/build",
"/agents",
"/tools/mcp"
],
"type": "string",
"maxLength": 60,
"description": "The page's route, as list_public_pages gives it: /tools, /first-pass, /deal-ready-ai, /roadmap, /data, /second-opinion, /compute, /build, /agents, /tools/mcp."
}
},
"additionalProperties": false
}One services vertical in full: the example firm it illustrates (headcount band, the tools such a firm runs on, how far its records go back, and the routes worth weighing), what changes in that line of work, and what decides whether a firm in it may license at all. The card is an illustration and says so in `evidence`. Figures for a real company come from instant_range, which quotes each buyer program's own published page.
| Argument | Type | Description |
|---|---|---|
| vertical* | string | The vertical's key, as list_verticals gives it. |
{
"type": "object",
"required": [
"vertical"
],
"properties": {
"vertical": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"description": "The vertical's key, as list_verticals gives it."
}
},
"additionalProperties": false
}The span of published per-company figures across the buyer programs a company of this size and age clears, with every source named and quoted. Give headcount and years if you know them; a company that has not stated one is not screened on it. A program is dropped only when the company certainly cannot meet its own stated floor. A /data band is screened the way /data screens it, at the top of the band, so a program is dropped only when the whole band is below its floor; the answer echoes the band, the figure it was screened as, and the programs that depend on where in the band the company sits. Returns has_range: false, with a reason, when fewer than two programs qualify — one program's advertisement is not a range, and no figure is estimated to fill the gap.
| Argument | Type | Description |
|---|---|---|
| years | integer | Years of records the company holds. Omit if unknown. |
| headcount | integer | Full-time employees. Omit if unknown. |
| years_band | string | A /data years band instead of an exact figure: under_3, 3_5, 6_10, 11_plus. |
| headcount_band | string | A /data headcount band instead of an exact figure: 1_29, 30_99, 100_249, 250_plus. |
{
"type": "object",
"properties": {
"years": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Years of records the company holds. Omit if unknown."
},
"headcount": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "Full-time employees. Omit if unknown."
},
"years_band": {
"enum": [
"under_3",
"3_5",
"6_10",
"11_plus"
],
"type": "string",
"description": "A /data years band instead of an exact figure: under_3, 3_5, 6_10, 11_plus."
},
"headcount_band": {
"enum": [
"1_29",
"30_99",
"100_249",
"250_plus"
],
"type": "string",
"description": "A /data headcount band instead of an exact figure: 1_29, 30_99, 100_249, 250_plus."
}
},
"additionalProperties": false
}Frontier Desk's guides: one page per question an owner asks before a sale, a loan or a data licence. Each row carries the question the guide answers, a forty-to-sixty-word answer to it, the day the guide was last updated, and its address. Pass a slug from here to get_guide for the whole guide. Newest first.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many guides to return. |
| query | string | Words to find in a guide's title, question or description, for example "MSP" or "data room". |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1,
"description": "How many guides to return."
},
"query": {
"type": "string",
"maxLength": 120,
"description": "Words to find in a guide's title, question or description, for example \"MSP\" or \"data room\"."
}
},
"additionalProperties": false
}The five markets Frontier Desk maps — services, compute, data, credit and capital — with the relationship graphs drawn in each, the columns each graph runs through, the sectors a caller can pick, and counts of what is drawn. Pass a sector slug from here to get_market_sector for that sector's graphs. The whole-field graphs render at https://www.frontierdesk.ai/markets.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Frontier Desk's published notes, newest first: each one's title, the day it was published, its own address on the site, and its first sentence. Pass a slug from here to get_note for the whole note. The same notes render at https://www.frontierdesk.ai/intel, with an RSS feed at https://www.frontierdesk.ai/intel/rss.xml.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many notes to return, newest first. |
| since | string | Only notes published on or after this day, as YYYY-MM-DD. For example "2026-10-01". |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1,
"description": "How many notes to return, newest first."
},
"since": {
"type": "string",
"maxLength": 10,
"description": "Only notes published on or after this day, as YYYY-MM-DD. For example \"2026-10-01\"."
}
},
"additionalProperties": false
}Frontier Desk's standing forecasts: what each one forecasts and over what horizon, the day it was published, and the date it is next rescored. Pass a route from here to get_outlook for the odds on every path.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}The tools Frontier Desk publishes for owners, each with what a reader gets from running it, plus the written pages behind them. Pass a route from here to get_public_page for that page's framing as written. The hub renders at https://www.frontierdesk.ai/tools. Every tool on this page runs on what you already know about the company and answers in one sitting. None of them asks for a data room, and none of them is a form that goes somewhere to be read later.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}The services verticals Frontier Desk writes a page for: what a data licence looks like in that line of work, the shape of firm each page illustrates, and what decides whether a firm in it may license at all. Pass a key from here to get_vertical. Each page's example card is an illustration, labelled as one; no dollar figure is ever stored on a vertical.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}A firm in Frontier Desk's markets directory, by name: what kind of firm it is in plain words, its own site, the relationships held for it (what it bought, backed, lent to or borrowed from, each naming the other party), and a line on its recent activity. Up to eight firms per call. This is the public projection: no internal ids, codes, tags, evidence text or third-party scores cross it, and no client, mandate or engagement is reachable here.
| Argument | Type | Description |
|---|---|---|
| query* | string | Part of a firm's name, for example "Monroe" or "CORE Industrial". |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"description": "Part of a firm's name, for example \"Monroe\" or \"CORE Industrial\"."
}
},
"additionalProperties": false
}Reads a pasted data-licensing offer and returns what it finds, with the offer's own words quoted back: the figure set against the published span, the payment trigger, exclusivity, export method and data retention — each reported as stated or as not stated — plus the terms worth settling before signing and the question to ask on each. A term the offer is silent on is reported as a finding, not filled in. Nothing is stored, and this is not legal advice.
| Argument | Type | Description |
|---|---|---|
| offer* | string | The offer text: a term sheet, an email, or the part to be read. |
| years | integer | Years of records. Omit if unknown. |
| headcount | integer | Full-time employees, so the price is set against the programs this company clears. Omit if unknown. |
{
"type": "object",
"required": [
"offer"
],
"properties": {
"offer": {
"type": "string",
"maxLength": 20000,
"minLength": 60,
"description": "The offer text: a term sheet, an email, or the part to be read."
},
"years": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Years of records. Omit if unknown."
},
"headcount": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "Full-time employees, so the price is set against the programs this company clears. Omit if unknown."
}
},
"additionalProperties": false
}Frontier Desk's dated index of AI-data buyer programs, one row per program: what it buys, the per-company figures and size screens it publishes, its stated payment trigger, exclusivity, de-identification and export method, a verbatim quote from its own page, and the day that page was read. Filter by a word in the program's name or in what it buys, or narrow to the programs that publish a per-company figure. The same rows render at https://www.frontierdesk.ai/data-buyers, with .csv and .json twins.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many rows to return. |
| query | string | Words to find in a program name or in what it buys, for example "tickets" or "Handshake". |
| publishes_a_range | boolean | true for only the programs that publish a per-company dollar figure; false for only those that do not. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1,
"description": "How many rows to return."
},
"query": {
"type": "string",
"maxLength": 120,
"description": "Words to find in a program name or in what it buys, for example \"tickets\" or \"Handshake\"."
},
"publishes_a_range": {
"type": "boolean",
"description": "true for only the programs that publish a per-company dollar figure; false for only those that do not."
}
},
"additionalProperties": false
}The published notes that carry every word asked for, in their title or their text, newest first. Matching is literal and case-insensitive: nothing is stemmed, ranked or inferred, so an empty answer means the words are not in the corpus rather than that the desk has no view. Pass a slug from here to get_note for the whole note.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many notes to return. |
| query* | string | Words every matching note has to carry, for example "carve-out" or "data centre power". |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1,
"description": "How many notes to return."
},
"query": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "Words every matching note has to carry, for example \"carve-out\" or \"data centre power\"."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 11, 2026.