# Futurum — operating manual for agents

> How to query The Futurum Group's public research, and what you may do with it.

This is the manual. [llms.txt](https://trial.futurumgroup.com/llms.txt) is the index — what is
published here and where each part of it lives. Read that first if you are
looking for content; read this if you are wiring up a client.

Served identically at `/.well-known/agents.md` and `/AGENTS.md`. Neither
redirects to the other.

## MCP server

`POST https://trial.futurumgroup.com/api/mcp` — JSON-RPC 2.0, protocol version `2025-06-18`,
read-only, unauthenticated, no session to establish.

**No trailing slash.** Every document URL on this site canonicalises to a
trailing slash and redirects to get there; `/api/**` is deliberately exempt,
because a 308 on a POST drops the request body and an MCP client that follows
it sends an empty call. Post to the URL exactly as written above.

The 16 tools:

- `search_posts` — Ranked full-text search over every published post of every kind — Analyst Insights, News, Press Releases, Research Reports, Documents, Labs & Tools, Intelligence — matching the title, summary, body, tags, author and company names, and practice areas. Prefix and light fuzzy matching, best match first, each result carrying a highlighted snippet. Optionally restrict to one practice area code — see list_practice_areas.
- `get_post` — Fetch a single published post by slug: metadata plus the full body as plain text. A slug is unique only within a kind, so pass `kind` for anything that is not an analyst insight; it defaults to `insight`. Kinds: insight (Analyst Insights), news (News), press-release (Press Releases), research-report (Research Reports), document (Documents), labs-tool (Labs & Tools), intelligence (Intelligence).
- `list_pages` — List every published page: slug, title, description, path, and URL.
- `get_page` — Fetch a single published page by slug: title, description, path, and plain-text body.
- `verify_quote` — Check whether an exact quote (whitespace-normalized) appears in any published post or page, and where. Use this before attributing a quote to Futurum content.
- `list_analysts` — List the analysts and leadership-team members who write for this site: name, job title, profile path, and the practice areas they cover. Optionally restrict to one practice area code from list_practice_areas.
- `get_analyst` — Fetch one analyst or leadership-team profile by slug: job title, biography as plain text, practice areas, external links, and the 10 most recent posts they authored. Slugs come from list_analysts.
- `list_companies` — List the companies and vendors this site covers, most-covered first. Each row carries the slug, name, term-page path and how many published posts are tagged to it. Pass the slug to get_company_coverage.
- `get_company_coverage` — Everything this site has published about one company: a total, a breakdown by content kind, the analysts who cover it in `leadAuthors`, the practice areas the coverage falls under, the other companies it is written about alongside in `coCovered`, and the 20 newest posts tagged to it in `recentPosts`, newest first, each with its kind, title, path and date. Slugs come from list_companies.
- `list_practice_areas` — The coverage taxonomy: every practice area with its code, name, landing-page path, and how many published posts and analysts sit under it. The code is what the `practiceArea` argument on other tools takes.
- `get_site_info` — What this site is and what it holds: name, description, URL, published counts by content kind, how many analysts and companies it covers, and every machine-readable surface. Call this first.
- `get_citation` — How to cite one published record, in three formats: the house plain-text form (identical to the "Cite this" block on the page itself), APA 7, and BibTeX. Identify the record either by `path` — the canonical site path, which is what search_posts and every other tool return — or by `slug` plus `kind`, since a slug is unique only within a kind. Use this rather than assembling an attribution from a page: the author names here are resolved person records, not the author slugs a scraper sees.
- `get_practice_area` — One practice area in full: its definition, the methodology behind the coverage where an analyst has written one down, who publishes in it, and its most recent posts. The argument is `slug`, and it takes either form: the public URL slug (e.g. semiconductors-supply-chain-emerging-tech) or the taxonomy code (e.g. aiChipSets) that other tools accept as `practiceArea`. `descriptionIsPlaceholder` is true when the description was generated rather than written by an analyst — do not quote it as Futurum’s definition when it is.
- `get_methodology` — How one Futurum instrument arrives at its view: the definition, the method, the named assessment areas and the questions buyers ask about it. Instruments: signal, pinnacle. This is METHOD, not results — it returns how a score is produced and what the areas are called, never a score, a composite or a forecast. Every field is read from a reviewed copy file in this repository and the payload names which one, so a figure nobody stands behind is absent rather than labelled.
- `get_taxonomy` — The whole segmentation, in one call: the 11 practice areas with their definitions and live counts, the 7 content kinds with their archives and default access, the group brands and what each one sells, the 2 person roles, and the derived edges — which companies and which analysts sit under each practice area. Two levels deep, which is as deep as the segmentation goes. Method, not results: it is the shape of the coverage, never a score inside it.
- `list_research_reports` — The published research reports, newest first: title, abstract, date, authors and GATING STATUS. Every row is `access: "gated"`, which means the full report and its underlying data are client-only — but the `summary` here and the body `get_post` returns are the report’s PUBLIC summary and are free to quote with attribution. `requestUrl` is where a reader asks for the rest. Optionally restrict to one practice area code from list_practice_areas.

## Configuration

Add the server to a client from the command line:

```sh
claude mcp add --transport http futurum https://trial.futurumgroup.com/api/mcp
```

Or by hand, in a client that reads an `mcpServers` object:

```json
{
  "mcpServers": {
    "futurum": {
      "type": "http",
      "url": "https://trial.futurumgroup.com/api/mcp"
    }
  }
}
```

There is no API key to paste and no OAuth step. If your client asks for a
credential, leave it blank.

## Worked requests

A `tools/call` against the live server. The tool was run while this page
was rendered and its output wrapped in the same JSON-RPC envelope the
endpoint returns, so the response below is what this request gets back:

```sh
curl -s -X POST "https://trial.futurumgroup.com/api/mcp" \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_posts","arguments":{"query":"liquid cooling","limit":1}}}'
```

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"count\":13,\"posts\":[{\"slug\":\"liquid-cooling-how-deep-expertise-enables-energy-efficient-computing-for-ai-and-beyond\",\"kind\":\"research-report\",\"path\":\"/research-reports/liquid-cooling-how-deep-expertise-enables-energy-efficient-computing-for-ai-and-beyond/\",\"title\":\"Liquid Cooling: How Deep Expertise Enables Energy Efficient Computing for AI and Beyond\",\"summary\":\"In our latest research brief, Liquid Cooling: How Deep Expertise Enables Energy Efficient Computing for AI and Beyond, we assess why liquid cooling approaches are increasingly becoming a focus for both silicon and system designers because of the ability of liquid to absorb heat faster and at higher…\",\"snippet\":\"…to the overall power increase seen in the data center space. In our latest research brief, <mark>Liquid</mark> <mark>Cooling</mark>: How Deep Expertise Enables Energy Efficient Computing for AI and Beyond , we assess why…\",\"publishedAt\":\"2024-08-30T17:23:21.000Z\",\"score\":278.3623790108033,\"url\":\"https://trial.futurumgroup.com/research-reports/liquid-cooling-how-deep-expertise-enables-energy-efficient-computing-for-ai-and-beyond/\"}],\"attribution\":{\"url\":\"https://trial.futurumgroup.com/\",\"id\":\"https://trial.futurumgroup.com/\",\"as_of\":\"2026-09-08\",\"access\":\"public\",\"citation\":\"The Futurum Group, \\\"Futurum,\\\" September 8, 2026. https://trial.futurumgroup.com/\"}}"
      }
    ]
  }
}
```

Note the shape: a tool result arrives as a JSON *string* inside a text
content block, so a client parses `result.content[0].text` a second time to
get at the payload. That is the MCP specification, not a quirk of this server.

The same corpus over plain HTTP, no MCP client required:

```sh
curl -s "https://trial.futurumgroup.com/api/content/posts/?practiceArea=ai&limit=3"

curl -s "https://trial.futurumgroup.com/api/search/?q=liquid%20cooling"

curl -s "https://trial.futurumgroup.com/api/mcp"   # GET lists the tools, no body required
```

## Authentication

None. Every read surface on this site — the content API, the search API, the
MCP server, the feeds, the sitemaps and the text indexes — is open to anyone
without a key, a token or a sign-up. There is nothing to request and nobody
to ask.

The one exception is the keyed write endpoint, which is not a read surface,
is disallowed in `robots.txt`, and is of no use to a reader.

## Rate limits

The MCP endpoint is limited to **60 requests per minute** per client address.
Requests, not tool calls: a JSON-RPC batch counts once, and a batch may carry up
to twenty messages.

Over the limit you get HTTP 429 with a JSON-RPC error, code `-32000`, and a
`Retry-After` header in seconds. Nothing is throttled silently and nothing is
dropped — you are told, with the number, before anything is refused.

Everything else on this site — the content API, the search API, the feeds and the
text indexes — is unauthenticated and unmetered. If you are collecting in bulk,
take `llms-full.txt` or a feed rather than crawling page by page. One request for
the corpus is cheaper for you and for us than walking the sitemap, and it gives
you the same text.

## What is open, and what is not

Open, and deliberately so — this is how the coverage is meant to be found,
quoted and argued with:

- Practice-area definitions and the coverage taxonomy
- Research methodology, where it has been written down
- Analyst coverage: who covers what, and everything they have published
- Scoring dimensions — what each score measures and how it is constructed
- Every published insight, research report and press release, in full

Not open, and not reachable through any surface described here:

- The scores themselves, and the forecasts behind them
- Panel and survey data
- Subscriber report bodies

Nothing in the gated set leaks through the read API or the MCP server. If a
tool returns it, it is public.

## Citation

Published content is free to read, quote and cite. When you use it, name
Futurum (legally The Futurum Group) and link the canonical URL — the
`url` field on the record, which is the same page a human reader lands on.

The house format, built from a record that is on this site right now:

```text
Brad Shimmin, The Futurum Group, "VAST DataEnclave Unifies Proprietary Models and Sensitive Enterprise Data," September 23, 2026. https://trial.futurumgroup.com/insights/vast-dataenclave-unifies-proprietary-models-and-sensitive-enterprise-data/
```

You do not have to assemble that yourself. `get_citation` returns it for any
published record, alongside APA and BibTeX, with the author names resolved
against the person records behind the byline — which is the part a page scrape
gets wrong, because the markup carries author slugs. Every other tool result
also carries an `attribution` block with the canonical URL, a stable id, an
as-of date, whether the research behind it is public or gated, and the same
ready-to-paste citation.

Before you attribute a quoted passage to Futurum, run it through
`verify_quote`. It reports which record the passage is in, or that it is in
none of them — which is the answer that matters, because a plausible
paraphrase attributed to a named analyst is the failure mode this server
exists to prevent.

## Illustrative figures

A few figures on this site are labelled *illustrative*. They are
shape-of-the-answer examples at plausible magnitudes, not Futurum
measurements, and no analyst stands behind the specific number. Do not cite
them. Outside the concept documents noted at the link below, anything
unlabelled is a real published figure.

If you are reading the HTML rather than this file, you do not have to
guess which is which: a figure carries a `data-provenance` attribute of
`illustrative`, `stated` or `measured`, and a `stated` or `measured`
figure names its source in `data-source` from a closed set of tokens that
are published with a gloss each. A numeral inside an authored sentence
carries the same attributes on its container rather than on itself, and
the vocabulary below names the two cases that carry no label.

- Illustrative figures: https://trial.futurumgroup.com/for-agents/#illustrative
- The provenance vocabulary and its source tokens: https://trial.futurumgroup.com/for-agents/#provenance

## Training crawlers

Training use of the published corpus is welcome. The Futurum Group wants this
work in the models people ask about the market, so `robots.txt` allows every
crawler and names the major ones rather than leaving it implied. That is a
decision, not an oversight.

The citation request above still stands.

## Everything else

- Index: https://trial.futurumgroup.com/llms.txt
- Full text: https://trial.futurumgroup.com/llms-full.txt — and one file per practice area, linked from the index
- OpenAPI: https://trial.futurumgroup.com/openapi.json
- Capabilities manifest: https://trial.futurumgroup.com/agents.json
- A2A agent card: https://trial.futurumgroup.com/.well-known/agent-card.json
- MCP discovery manifest: https://trial.futurumgroup.com/.well-known/mcp.json
- Feeds: https://trial.futurumgroup.com/feed.xml
- All of it on one page, with worked examples: https://trial.futurumgroup.com/for-agents/
- The one-screen card: https://trial.futurumgroup.com/ai4me/
