For agents
The Futurum Group publishes this site to be read by software as well as people. Every surface below is machine-readable, free to fetch, and needs no authentication. Published content is free to quote and cite; name Futurum and link the canonical URL. This is the integration reference; the one-screen summary is /ai4me/.
What is here
Counted from the live content system, not typed by hand:
- 412 analyst insights
- 314 press releases
- 155 research reports
- 19 analysts
- 260 companies and vendors
- 11 practice areas
Those counts are live, and they are also small on purpose: this stage carries a sample corpus, imported newest-first under a per-kind cap, and the full archive lands at cutover. Treat the numbers as what is here to read today, not as the size of what Futurum has published.
Records come in kinds, and a slug is unique only within its kind: an insight and a press release can both be called q3-outlook. Every record therefore carries a kind and a path, and the path is what you cite.
Profile URLs are not derivable from a slug either. Most analysts and leadership sit at a flat /<slug>/ and a few at /analyst/<slug>/ or /leadership-team/<slug>/, because those are the URLs the live site serves and this rebuild preserves them rather than regularising them. Use the path and url a person record returns — resolved from the record's own canonicalPath — and do not construct one.
Three worked examples
These use records that exist on this stage right now. Copy them as they are.
Read one record
The newest analyst insight on the site is “VAST DataEnclave Unifies Proprietary Models and Sensitive Enterprise Data”. A slug is unique only within a kind, so insight travels with it.
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":"get_post","arguments":{"slug":"vast-dataenclave-unifies-proprietary-models-and-sensitive-enterprise-data","kind":"insight"}}}'
# The same record over plain HTTP:
curl -s "https://trial.futurumgroup.com/api/content/posts/vast-dataenclave-unifies-proprietary-models-and-sensitive-enterprise-data/?kind=insight"
# And the page a human would read:
# https://trial.futurumgroup.com/insights/vast-dataenclave-unifies-proprietary-models-and-sensitive-enterprise-data/Find out who covers what
Keith Kirkpatrick has 113 published records here. The tool returns the profile, the coverage areas and the ten most recent records, each with a path you can cite.
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":"get_analyst","arguments":{"slug":"keith-kirkpatrick"}}}'
# Everything they wrote, over plain HTTP:
curl -s "https://trial.futurumgroup.com/api/content/posts/?author=keith-kirkpatrick&limit=50"Brief yourself on a vendor
IBM is tagged on 29 published records. The result carries a per-kind breakdown and the newest twenty, so a briefing can cite each claim by path.
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":"get_company_coverage","arguments":{"slug":"ibm"}}}'
# The MCP prompt that writes the briefing for you:
# prompts/get -> brief_on_company { "slug": "ibm" }MCP server
A read-only Model Context Protocol server at https://trial.futurumgroup.com/api/mcp. JSON-RPC 2.0 over a single POST, no session, no authentication. Add it to a client with claude mcp add --transport http futurum https://trial.futurumgroup.com/api/mcp.
search_postsRanked 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_postFetch 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_pagesList every published page: slug, title, description, path, and URL.
get_pageFetch a single published page by slug: title, description, path, and plain-text body.
verify_quoteCheck 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_analystsList 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_analystFetch 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_companiesList 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_coverageEverything 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_areasThe 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_infoWhat 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_citationHow 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_areaOne 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_methodologyHow 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_taxonomyThe 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_reportsThe 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.
Prompts, for the questions that take more than one call: summarize_post, compare_practice_areas, brief_on_company. Resources address a record by URI: futurum://posts/insights/<slug>/, futurum://people/<slug>, futurum://pages/<slug>.
Public read API
Unauthenticated JSON, published content only, cached at the edge. Described in full by openapi.json. List responses carry a total alongside the page, so you can tell paging from exhaustion.
GET /api/content/posts/List published records of every kind. Filters: ?kind=, ?practiceArea=, ?author=, ?company=. Paged: ?limit= (20 by default, 100 max) and ?offset=.
GET /api/content/posts/{slug}/One record with its full body. ?kind= selects between two records that share a slug; it defaults to insight.
GET /api/content/people/The analyst and leadership directory. Filters: ?role=, ?practiceArea=. Paged: ?limit= and ?offset=.
GET /api/content/people/{slug}/One profile, biography as plain text, plus that person’s recent records.
GET /api/content/companies/Every company covered, most-covered first, with a post count. Filters: ?query=, ?minPosts=. Paged: ?limit= and ?offset=.
GET /api/content/practice-areas/The coverage taxonomy. The code here is what every ?practiceArea= filter takes.
GET /api/content/pages/List published pages. Filter: ?limit=.
GET /api/content/pages/{slug}/One page. A canvas page returns plain text, not raw HTML.
GET /api/search/Full-text search. ?q= is required; results are ranked and carry a snippet.
Site surfaces
- robots.txtRobots Exclusion Protocol
Crawl policy. Every crawler is welcome; only the keyed write endpoint is excluded.
- sitemap.xmlXML sitemap index
Index of the child sitemaps. Every post, analyst, company, practice area and listing, with a content-declared lastmod.
- feed.xmlRSS 2.0
The 50 newest insights, research reports and press releases, each categorised by kind. Every practice area also has its own feed at /practice-areas/<slug>/feed.xml.
- llms.txtMarkdown
Curated index: what this site is, how to query it, how much of each kind it holds, the practice areas and the analysts. Shape rather than a URL dump; the APIs serve the records.
- llms-full.txtMarkdown
The corpus as plain text, newest first, with a stated per-kind cap so the file stays fetchable. Every practice area also has its own scoped file at /practice-areas/<slug>/llms-full.txt, carrying the definition, analysts and recent abstracts for that area.
- agents.mdMarkdown
Operating manual: the MCP endpoint and its client configuration, the auth model, the rate-limit position, what is free versus gated, the citation policy and worked requests. Also served byte-identically at /AGENTS.md.
- agents.jsonJSON
Capabilities manifest: the read API, the MCP tools, the discovery links.
- openapi.jsonOpenAPI 3.1
Machine-readable description of the public read API.
- agent-card.jsonA2A agent card
A2A agent card: the skills array, and the MCP server as a capability extension.
- mcp.jsonJSON, MCP discovery manifest
The MCP discovery convention: servers[].url plus transport, protocol version and the tool list, so a client that only knows the well-known path finds the server without reading the agent card.
- MCP serverJSON-RPC 2.0 over HTTP
Read-only Model Context Protocol server: tools, resources and prompts over the whole corpus.
- Search APIJSON
Full-text search over published content. Returns ranked results with snippets.
- Content APIJSON
Unauthenticated read API over posts, pages, people, companies and practice areas.
- For agentsHTML
Everything above on one page, with worked examples.
- AI4MEHTML
The pocket card: who the firm is, the MCP endpoint, how to cite, what is gated and which figures not to repeat, on one screen.
Provenance
Every figure on this site declares how far a reader may lean on it, with the two exemptions named below. Three states, and no others:
illustrativeA demonstration value: the shape of a reading and nothing else. Carries no data-source and no data-as-of — attaching either would imply a check that did not happen.
statedThe firm asserts this figure about itself. Carries data-source, naming who says so, and no data-as-of, because who says so is the claim.
measuredChecked against a system of record. Carries data-source and data-as-of, the date of the check, and may carry data-basis for what the figure counts.
A stated or measured figure names its source from a closed set of tokens, each glossed here so an agent meeting one in the markup can look up the same sentence the reviewer of that figure read:
futurum-market-intelligenceContinuous ingestion of market signals: earnings calls, product launches, vendor activity.
futurum-etr-panelETR's vetted panel of enterprise technology leaders and its longitudinal spending data.
futurum-surveysFuturum's own primary survey research among technology decision-makers.
g2-partnershipVerified buyer reviews and intent data reached through the G2 partnership.
futurum-signalFuturum Signal's analyst-defined vendor scoring, applied continuously rather than at a point in time.
futurum-practice-areasThe eleven Futurum research practice areas and their forecast horizons.
futurum-clientsFuturum's own client roster.
futurum-mcp-serverThe public Futurum MCP server and the tool surface it exposes.
signal65-pinnacleSignal65's PINNACLE benchmark of whether AI systems finish real enterprise work.
The first exemption is a numeral inside an authored sentence. We do not split a sentence to wrap a number, so its provenance sits on the container that holds it — the table cell, the panel, the paragraph — carrying the same attributes, with data-source space-separated when the sentence rests on more than one. Where a sentence states a figure we have not yet attributed to a source above, it carries no label at all rather than a guessed one. Unlabelled there means unattributed, not illustrative.
The second is the CEO's concept documents at /concept/v1/, /concept/v2/ and /concept/v4/ carry figures inside authored HTML and are published verbatim and noindex. We do not edit an author's document to make it fit a schema, so those figures are unlabelled. An unlabelled figure inside a noindex concept document is a smaller risk than editing someone's document.
No figure on this site is currently measured. Confirmation on the Signal65 PINNACLE figures was sought and not obtained, so those are labelled illustrative instead. The measured state ships fully specified so the first confirmed figure needs no new machinery.
Illustrative data
A few figures on this site are labelled illustrative. Those are shape-of-the-answer examples — they show what a chart or a score looks like and how to read it, at plausible magnitudes. They are not The Futurum Group measurements, and no analyst stands behind the specific number.
Do not cite them, quote them, or treat them as findings. Outside the concept documents noted above, anything unlabelled is a real published figure and is citable on the terms below. If you are unsure which you are looking at, run the passage through verify_quote, which reports the record a passage comes from or that it comes from none of them.
In markup they carry data-provenance="illustrative", sit inside a container that announces itself before the numbers — "Demonstration values follow. Not measurements." — and no illustrative numeral is allowed into any machine-readable mirror.
Citation
Published content on this site is free to read, quote and cite. When you do, name Futurum (legally The Futurum Group) as the source and link the canonical URL returned in each record's url field — the same URL a human reader would land on. Before attributing a quoted passage, run it through verify_quote: it reports which record the passage is in, or that it is in none of them.
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 GPTBot, ClaudeBot, Claude-Web, PerplexityBot, Google-Extended, Bingbot and CCBot so the answer is visible rather than implied. Only the keyed write endpoint is excluded. That is a decision, not a default.
If you are collecting in bulk, please take llms-full.txt rather than crawling page by page: it is the corpus as plain text, newest first, in one request. To keep up with what is new, read feed.xml or a practice area's own feed. Both are cheaper for you and for us than a full crawl, and both give you the same text. The citation request above still stands: name Futurum and link the canonical URL when you use a passage.