Give your agent what the desk publishes.
A read-only MCP server over what Frontier Desk publishes: the dated index of AI-data buyer programs and the two readings built on it, the desk's notes, the five markets it maps, and its guides, outlooks and verticals. No key, no account.
What it is
MCP (Model Context Protocol) is the open standard for connecting an AI assistant to a source outside itself. This server is one address an assistant connects to. It reads the list of tools here and calls them while it works.
Every tool reads something Frontier Desk already publishes on this site, and every answer carries its source and its date. Nothing writes, nothing needs a key, and nothing about a particular company is held here.
Is this MCP server right for your work?
It is for people who would otherwise read the same pages by hand, and for the agents working for them.
Owners and their advisors
Researching what AI-data buyer programs publish, which ones a company clears, and what a licence offer says before anyone signs it.
M&A advisors
Looking up who buys, backs and lends in a sector, and what the desk has written about it.
Lenders
Checking who lent to whom, and which firms are active in a line of work.
Analysts
Reading the desk's notes and outlooks with their sources, and holding the buyer index whole as JSON or CSV.
Not for: A valuation of a company or its records, a run of an owner tool on your own answers (those run on their pages), or anything that writes. Frontier Desk is an advisor, not a broker.
The tools are the same functions the website runs, so an agent and a reader get the same answer. The owner tools that compute from your own answers (the first pass, the data check, the compute check) run on their pages. Here, an agent reads what those pages publish and the figures behind them.
The endpoint
https://www.frontierdesk.ai/mcp
- Transport
- Streamable HTTP
- Authentication
- None. No key, no account, no allow-list.
- Protocol revisions
- 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05
- Server
- frontier-desk 1.2.0
Connect
Pick your client. Each one takes the same address and nothing else.
Claude Code
Add it for this project, on this machine (the default scope)
claude mcp add --transport http frontier-desk https://www.frontierdesk.ai/mcpAdd it for every project you open
claude mcp add --transport http frontier-desk --scope user https://www.frontierdesk.ai/mcpShare it with the team: writes .mcp.json in the project root
claude mcp add --transport http frontier-desk --scope project https://www.frontierdesk.ai/mcpClaude Code asks you to approve a project-scoped server the first time it starts in that project.
Client docs: code.claude.com
Claude (desktop app and claude.ai)
- Open Customize, then Connectors.
- Choose + and then Add custom connector.
- Name it Frontier Desk and paste https://www.frontierdesk.ai/mcp as the URL.
- Under Authentication choose No sign in, then Add.
On Team and Enterprise plans an Owner adds the connector under Organization settings, then Connectors, and members connect it from Customize. Anthropic lists custom connectors on its Free, Pro, Max, Ultra, Team and Enterprise plans, with Free limited to one. Claude reaches the server from Anthropic's cloud, which this endpoint allows.
Client docs: support.claude.com
Cursor
~/.cursor/mcp.json for every project, or .cursor/mcp.json in one project
{
"mcpServers": {
"frontier-desk": {
"url": "https://www.frontierdesk.ai/mcp"
}
}
}Client docs: cursor.com, cursor.com
VS Code and GitHub Copilot
.vscode/mcp.json in the workspace. VS Code uses a servers key, not mcpServers
{
"servers": {
"frontier-desk": {
"type": "http",
"url": "https://www.frontierdesk.ai/mcp"
}
}
}Or add it to your user profile from a terminal
code --add-mcp '{"name":"frontier-desk","type":"http","url":"https://www.frontierdesk.ai/mcp"}'Client docs: code.visualstudio.com, code.visualstudio.com
ChatGPT
- On the web, open chatgpt.com/plugins.
- Choose + and then Add custom MCP server.
- Name it Frontier Desk, paste https://www.frontierdesk.ai/mcp as the server URL, and choose No authentication.
- Create it as a plugin, install it, and call it in a chat by typing @.
Which plans and workspaces can add a custom MCP server is OpenAI's to set, and its docs did not name them when this page was written; check them before you start. Every tool here is marked read-only, so ChatGPT does not treat a call as a write.
Client docs: developers.openai.com, developers.openai.com
Windsurf
Windsurf's MCP config file. Open it from Cascade's MCP settings; on macOS and Linux it is ~/.config/devin/mcp_config.json
{
"mcpServers": {
"frontier-desk": {
"serverUrl": "https://www.frontierdesk.ai/mcp"
}
}
}Press refresh in Cascade's MCP panel after saving.
Client docs: docs.windsurf.com
OpenAI Agents SDK (Python)
Lists the tools. Pass the server to Agent(mcp_servers=[server]) to use them
import asyncio
from agents.mcp import MCPServerStreamableHttp
async def main():
async with MCPServerStreamableHttp(
name="frontier-desk",
params={"url": "https://www.frontierdesk.ai/mcp", "timeout": 30},
cache_tools_list=True,
) as server:
for tool in await server.list_tools():
print(tool.name)
asyncio.run(main())Client docs: github.com
OpenAI Responses API
The remote mcp tool. Use the model your account runs; OpenAI's docs show the current one
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-6-astra",
tools=[{
"type": "mcp",
"server_label": "frontier-desk",
"server_url": "https://www.frontierdesk.ai/mcp",
"require_approval": "never",
}],
input="Which AI-data buyer programs publish a per-company figure?",
)
print(response.output_text)require_approval can be never here because every tool is read-only.
Client docs: developers.openai.com
Any other client
- Point any client that speaks Streamable HTTP at the endpoint, with no headers and no key. A client that opens with initialize negotiates one of the revisions listed under The endpoint.
From a terminal: the handshake, then the tool list
curl -s https://www.frontierdesk.ai/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
curl -s https://www.frontierdesk.ai/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'MCP Inspector, from its command line
npx @modelcontextprotocol/inspector --cli https://www.frontierdesk.ai/mcp --transport http --method tools/listClient docs: github.com, modelcontextprotocol.io
What you can use it for
Prompts people type, and the tools each one calls. Every example here runs against the live server in a daily check, and the check fails if one comes back empty.
An owner, or the advisor working for one
See which buyer programs a company clears
Which AI-data buyer programs would a 60-person accounting firm with 12 years of records clear, and what do they publish?
Calls: instant_range, search_data_buyers
An owner holding an offer
Read an offer before signing it
Read this term sheet and tell me what to settle before signing.
Is $45,000 for a non-exclusive licence inside what these programs publish?
Calls: read_data_offer
A lender or an M&A advisor
Look a firm up
Who lent to Hidden Harbor recently?
Calls: lookup_firm
An analyst
Read what the desk has published on a subject
What has the desk published on data-center power, and what odds does it give the paths ahead?
Calls: search_notes, get_outlook
An M&A advisor
Map who buys and lends in a sector
Who lends to accounting and tax firms, and what kinds of lender are they?
Calls: list_markets, get_market_sector
An owner thinking about a sale
Find what buyers check
What do buyers check when they look at an MSP?
Calls: list_guides, get_guide
An owner who knows the bands, not the exact figures
Start from a line of work
What does a data licence look like for an accounting firm of 30 to 99 people with more than ten years of records?
Calls: get_vertical, instant_range
An analyst or an investor
Read a standing forecast
What odds does Frontier Desk give on how company-record deals are structured by the end of 2027?
Calls: list_outlooks, get_outlook
Tools
17 tools in 5 groups, listed here from the same registry the endpoint serves on tools/list. Every argument is optional unless it says required.
The AI-data buyer index
Every answer in this group carries this notice: “Figures are each buyer program's own published figures, quoted from the page named in the row and checked on the date given. A published range is an advertisement, not an offer, and not a valuation of any company's records. Frontier Desk advises the company on a sale or licence of its data; it is not a broker, a data buyer, or a law firm, and nothing here is legal advice.”
- search_data_buyersSearch the AI-data buyer index
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.
Returns: Rows, each with its program URL, source URL, source quote and check date, and the total that matched. The same rows render at /data-buyers.
Arguments
query string, 0–120 characters
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.
limit integer, 1–50, default 25
How many rows to return.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- instant_rangePublished range for a company
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.
Returns: has_range; the low and high figures and a label when there is a range; the programs behind it with their quotes; the programs screened out with the reason for each; the inputs as screened, including any band and how it was read; and the check date.
Arguments
headcount integer, 1–1000000
Full-time employees. Omit if unknown.
years integer, 0–200
Years of records the company holds. Omit if unknown.
headcount_band string, one of: 1_29, 30_99, 100_249, 250_plus
A /data headcount band instead of an exact figure: 1_29, 30_99, 100_249, 250_plus.
years_band string, one of: under_3, 3_5, 6_10, 11_plus
A /data years band instead of an exact figure: under_3, 3_5, 6_10, 11_plus.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- read_data_offerRead a data-licensing offer
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.
Returns: The price set against the published span, each term reported as stated or not stated with the offer's own words quoted, and the terms to settle before signing with a question for each. stored is always false.
Arguments
offer string, 60–20000 characters, required
The offer text: a term sheet, an email, or the part to be read.
headcount integer, 1–1000000
Full-time employees, so the price is set against the programs this company clears. Omit if unknown.
years integer, 0–200
Years of records. Omit if unknown.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
The desk's notes
Every answer in this group carries this notice: “A note is Frontier Desk's own reading, as published on the day it carries. The links it cites are its sources: check a claim against them rather than the note's word, and read a figure as of the note's date. Frontier Desk advises the company on a sale or licence of its data; it is not a broker, a data buyer, or a law firm, and nothing here is legal advice.”
- list_notesList the desk's published notes
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.
Returns: Rows, each with a slug to pass to get_note, the note's URL, its publication day, what kind of note it is, and how many sourced items it counted. The same notes render at /intel.
Arguments
limit integer, 1–50, default 25
How many notes to return, newest first.
since string, 0–10 characters
Only notes published on or after this day, as YYYY-MM-DD. For example "2026-10-01".
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- search_notesSearch the desk's published notes
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.
Returns: The same rows list_notes returns, filtered. An empty answer means the words are not in the corpus, not that the desk has no view on them.
Arguments
query string, 2–120 characters, required
Words every matching note has to carry, for example "carve-out" or "data centre power".
limit integer, 1–50, default 25
How many notes to return.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- get_noteRead one published note
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.
Returns: The note's body as markdown, plus a sources list of every link in it, so a reader can check the note rather than take its word.
Arguments
slug string, 8–160 characters, required
The note's slug, for example "2026-10-28-a-note-title-1a2b3c4d". A full /intel/... path works too.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
The five markets
Every answer in this group carries this notice: “This is the public projection of the markets Frontier Desk maps, as of the read date given: what kind of firm each one is and the relationships held for it, in reader words. A firm or a relationship listed here is not a recommendation and not a rating. Frontier Desk advises the company on a sale or licence of its data; it is not a broker, a data buyer, or a law firm, and nothing here is legal advice.”
- list_marketsList the five markets
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.
Returns: One entry per market with its graphs and their columns, the sector slugs to pass to get_market_sector, and the day the model was read. The whole-field graphs render at /markets.
Arguments
No arguments.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- lookup_firmLook up a firm in the markets directory
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.
Returns: Each firm with its type in reader words, its site where we hold one, and each relation naming the other party — what it bought, backed, lent to or borrowed from. No internal ids, codes, tags, evidence text or third-party scores cross this.
Arguments
query string, 2–60 characters, required
Part of a firm's name, for example "Monroe" or "CORE Industrial".
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- get_market_sectorOne sector's relationship graphs
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.
Returns: By default, each graph's counts, columns, lines on what the connections show, and its first firms and relations by name, with full_json linking the rest. With detail "full", the same JSON the /markets page loads when a visitor picks that sector. Either way, the graphs this sector is not drawn in, which is a fact about the sector rather than a gap.
Arguments
sector string, one of: accounting, insurance, wealth, it, healthcare, staffing, legal, engineering, marketing, logistics, distribution, operators, software, business-services, property, manufacturing, build-out, required
The sector to draw: accounting, insurance, wealth, it, healthcare, staffing, legal, engineering, marketing, logistics, distribution, operators, software, business-services, property, manufacturing, build-out.
graph string, 0–40 characters
One graph instead of all of them, by key, for example "services" or "credit". Omit for every graph the sector has.
detail string, one of: summary, full, default "summary"
"summary" (the default) for counts and the first firms and relations in each graph; "full" for the whole JSON the page loads.
limit integer, 1–50, default 12
With detail "summary": how many firms and relations to name per graph. Default 12.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
The written library
Every answer in this group carries this notice: “Guides, outlooks and vertical pages are Frontier Desk's own published writing, dated on each answer. An outlook's odds are the desk's own judgement, settled only by the dated public sources the report names; a vertical's card is an illustration, not a figure for any company. Frontier Desk advises the company on a sale or licence of its data; it is not a broker, a data buyer, or a law firm, and nothing here is legal advice.”
- list_guidesList the desk's guides
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.
Returns: Rows with a slug to pass to get_guide, the guide's URL, its quick answer, and the day it was last updated. Newest first.
Arguments
query string, 0–120 characters
Words to find in a guide's title, question or description, for example "MSP" or "data room".
limit integer, 1–50, default 25
How many guides to return.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- get_guideRead one guide
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.
Returns: The guide's body as markdown, written to be quoted, with the question it answers and its update date beside it.
Arguments
slug string, 2–120 characters, required
The guide's slug, for example "sell-an-msp".
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- list_outlooksList the standing outlooks
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.
Returns: One row per outlook with its route, to pass to get_outlook, and its own summary and publication date, imported from the report rather than retyped.
Arguments
No arguments.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- get_outlookRead one outlook's odds and readings
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.
Returns: Odds tables whose columns each sum to 100, the bottom-line readings with their confidences, the scenarios, and — on the reports published from November 2026 — the signposts and the dated calls. Every call names the public source that settles it. The whole report is on its page.
Arguments
outlook string, one of: /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, required
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.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- list_verticalsList the services verticals
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.
Returns: One row per vertical with the key to pass to get_vertical, its heading and lead, and whether its card is an illustration or built from aggregate data.
Arguments
No arguments.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- get_verticalRead one services vertical
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.
Returns: The card's headcount and years bands, the tools such a firm runs on, and the routes worth weighing — labelled as an illustration in `evidence`. No dollar figure is ever stored on a vertical; pass the bands to instant_range for the figures the buyer programs publish.
Arguments
vertical string, 2–60 characters, required
The vertical's key, as list_verticals gives it.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
The public pages, as written
Every answer in this group carries this notice: “This is a public page's copy as written, not a run of the tool on it: the tools on these pages compute from a reader's own answers. Frontier Desk advises the company on a sale or licence of its data; it is not a broker, a data buyer, or a law firm, and nothing here is legal advice.”
- list_public_pagesList the desk's public tool pages
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.
Returns: Each tool with its route and what a reader gets from running it, and the routes get_public_page carries. One row is a Frontier Desk tool on its own domain and says so.
Arguments
No arguments.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
- get_public_pageRead one public page's framing
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.
Returns: The page's own copy. This is not a run of the tool on it: /first-pass ranks a list from a live read for whoever answers its four questions, and nothing here invents one.
Arguments
page string, one of: /tools, /first-pass, /deal-ready-ai, /roadmap, /data, /second-opinion, /compute, /build, /agents, /tools/mcp, required
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.
Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
What it returns whole
4 resources: files the site already serves, each built by the same function as its HTTP twin, so the bytes match. A client reads one with resources/read.
- fd://data-buyers.json · application/json
- The whole buyer index as JSON, byte for byte the file at https://www.frontierdesk.ai/data-buyers.json: one object per program with its published terms, the quote from its own page, and the day that page was read, under a dataset name, a citation line and the index's check date. Use search_data_buyers to filter; use this to hold the set.
- fd://data-buyers.csv · text/csv
- The same index as RFC 4180 CSV, byte for byte the file at https://www.frontierdesk.ai/data-buyers.csv. One row per program, with the source URL, the quote and the check date on every row.
- fd://llms.txt · text/plain
- Frontier Desk's llms.txt, the file at https://www.frontierdesk.ai/llms.txt: what the desk does, and a link to every public page worth reading, grouped. Nothing in it is hidden from the site.
- fd://intel/rss.xml · application/rss+xml
- The desk's published notes as RSS 2.0, byte for byte the feed at https://www.frontierdesk.ai/intel/rss.xml: the same published, public notes list_notes returns, newest first, each with its title, its address and its first sentences.
Limits and guarantees
Read-only
Every tool is annotated read-only and non-destructive, and none writes. Saving a note or sending a company is a form on the site, not a tool.
Keyless, and it keeps nothing
No key, no account, no cookie. An offer passed to read_data_offer is read and forgotten.
Sources and dates on every answer
An index row names the page its figure came from, quotes that page and gives the day it was read. A note carries its own address and every link it cites. The markets carry their as-of time.
A published range is not an offer
It is what a buyer program advertises. It is not an offer, and it is not a valuation of any company's records. With fewer than two qualifying programs, instant_range returns no range and says why.
An advisor, not a broker
Frontier Desk advises the company on a sale or licence of its data. It is not a broker, a data buyer or a law firm, and nothing these tools return is legal advice.
Rate and size
Up to 60 calls a minute from one address, counted by each server instance, and a request body up to 64 KB. A call over the limit is answered 429 with Retry-After: 60; a body over it is answered 413.
Terms, privacy and contact
- Terms
- Privacy
- Contact: info@frontierdesk.ai, on the About page
- Everything else for agents: llms.txt, the feeds, the index as JSON and CSV
Version
frontier-desk 1.2.0, as the server reports it on initialize.
Directory metadata: /.well-known/mcp.json, the same server.json the MCP Registry reads.
Questions
- Does it need a key?
- No. There is no key, no account and no allow-list. Point a client at the endpoint and it works.
- Does it write anything?
- No. Every tool reads. Nothing you send is stored, including an offer passed to read_data_offer.
- What does it never expose?
- Anything about Frontier Desk's clients, mandates or engagements, and anything priced for a particular company. Where a tool reads one of the desk's own tables, it reads the same published projection the public page renders: no internal ids, codes, scores or evidence text cross it.
- How fresh is the data?
- Every answer carries its date. Each buyer-index row gives the day its source page was checked, each note its publication day, and the markets the time they were read, which is usually within six hours of the answer. Guides and outlooks carry their own update and publication dates.
- Which version is running?
- The server reports its version in the handshake, and this page shows the same number under Version, above. A change to what a tool takes or returns moves it.
- How do I report a problem?
- Write to info@frontierdesk.ai with the tool, the arguments and what came back. The same address is on the About page.