This page describes how to use Decision Insights programmatically. It is written for AI agents and for the people who point them here: founders, marketers, strategists, and the technical buyers evaluating the same vendors.
For AI Agents
Start here
There is nothing to sign up for. The endpoint answers an anonymous caller, so the first useful thing to do is one command.
curl "https://api.decisioninsights.ai/api/public/v1/search?q=observability"
That is the REST surface. The same records are served over MCP at https://mcp.decisioninsights.ai/api/mcp-public, and the next section connects that to the tool you are already in.
An anonymous caller is counted, not refused. Every response carries X-DI-Tier with the tier you resolved to, X-RateLimit-Limit with the per minute ceiling that goes with it, and X-RateLimit-Remaining. Read your allowance off the reply rather than off this page.
Connect your tool
Claude Code
claude mcp add --transport http decision-insights https://mcp.decisioninsights.ai/api/mcp-public
Claude Desktop
One command, then restart Claude Desktop. It needs Node 18 or newer.
npx decision-insights-mcp-install
Any other MCP client
The server speaks Streamable HTTP at https://mcp.decisioninsights.ai/api/mcp-public. A client that accepts a URL needs nothing else. A client that expects to run a local command needs a bridge instead: npx mcp-remote https://mcp.decisioninsights.ai/api/mcp-public.
Command line
The CLI is published on npm as decision-insights-cli and installs a command named di. It needs Node 18 or newer.
npm i -g decision-insights-cli
Then di search-company observability. Every command is one MCP call against the endpoint above, so the CLI returns the same records the API and MCP return.
The JSON configuration block some assistants ask for, with a copy button, is on the setup page. It is readable without an account.
Try it with your agent
Paste any of these into the assistant you just connected. Each one exercises a different tool from the table further down this page.
-
Map a company's competitive neighbourhood Analyst, uses related_companies
Using the Decision Insights MCP server, look up Netskope, then find the companies publishing on the same technology topics. For each one, tell me which topics they share with Netskope and cite the signal that shows it. Note that these are topical neighbours, not an assertion that they compete.
-
Brief me on a market this week Founder, uses search_content
Using the Decision Insights MCP server, search the signals for AI infrastructure activity from the last 30 days. Group what you find by theme, and for each item link to the primary source it was written from rather than to Decision Insights.
-
Check how a vendor is being described Vendor, uses get_company and search_content
Using the Decision Insights MCP server, pull the profile for MY_COMPANY. Tell me which technology terms our coverage is filed under, how many dated signals name us, and which of the four markets we appear in. Then tell me which topics in those markets we are absent from.
-
Define a term and name who owns it Buyer, uses search_glossary
Using the Decision Insights MCP server, define Zero Trust from the glossary, then list the companies most associated with that term and what each one publishes about it.
-
Verify the data before you trust it Engineer, uses any tool
Using the Decision Insights MCP server, fetch any company record. Then open that company's page on decisioninsights.ai and read its JSON-LD. Tell me whether the @id in the API response matches the @id the page publishes, and whether isBasedOn resolves to a real primary source.
What this covers
Four markets: cybersecurity, data centers, network operators, and AI infrastructure.
Nothing else. A general knowledge graph gives an agent more documents and fewer usable connections. This one is narrow so that the links between records mean something.
The signals are announcements, product updates, advisories, partnerships, acquisitions, funding, and market activity.
As of today
What a record carries
Every page is published as schema.org structured data. Not a plugin, and not an export. Read the JSON-LD on any page and you get:
| Page | Schema type | Provenance properties |
|---|---|---|
| Company | Organization or Corporation, in a ProfilePage | sameAs, subjectOf |
| Open source project | SoftwareSourceCode | author, subjectOf |
| Technology term | DefinedTerm, in a CollectionPage | inDefinedTermSet, termCode |
| Signal or brief | NewsArticle or BlogPosting | isBasedOn, about, author, datePublished |
isBasedOn carries the source a record was written from. sameAs ties a company record to the company's own canonical properties, so you can resolve the entity rather than guess at it. subjectOf points from a company to the coverage about it.
Check any of this with view-source. That is the point of publishing it this way.
See what an agent sees puts a company's profile and the JSON-LD an agent receives for it side by side.
What connects to what
A record is not stored on its own. Each one is linked to the organizations, open source projects, and technology terms it refers to, so it can be reached from any of them.
In practice: ask for Netskope and you can reach the technology terms its coverage is filed under, the other companies publishing on those same terms, and every dated signal that names it, without issuing a second search.
One thing worth encoding in how you use it. Company-to-company links normally come from the curated peer set on the company's own record, the same list that record publishes as Similar organizations, so the two surfaces agree and can be joined on each peer's id. That set is built from the organization's own topic profile over the listed directory and excludes its parent and subsidiaries. For a company with no curated peers, the response falls back to topical overlap between the articles we publish about each company, which measures our coverage rather than the companies. The method field on every response names which of the two produced it. Neither is an assertion that two companies compete, and neither is an alternatives list.
How something gets in here
Every organization, open source project, and term is reviewed before it is admitted, and checked against the rest of the graph rather than taken on its own: whether the entity is real, whether it belongs in these four markets, and whether what we hold about it agrees with what the other records say.
Every signal and brief is written from a primary source, links back to it, and labels what kind of source that was. A newswire release and a company blog post carry different weight, so each record says which one it came from. The original author is credited whenever the source provides one.
What we do not do is fact-check the underlying claims. A vendor announcement summarized here is a faithful summary of that announcement, not a finding that the announcement is true. Follow isBasedOn and read the original where the claim matters.
Sourcing rules, correction process, and named editorial oversight are on Standards and Methodology.
How an agent finds this at all
Two different questions get answered below, and they are kept apart on purpose. The first is for something already pointed here. The second is for anything that has to find us on its own, and it is also the honest answer to a vendor asking whether their content will actually be reachable.
If you have been pointed here
| MCP endpoint | https://mcp.decisioninsights.ai/api/mcp-public, no signup required |
| REST API | https://api.decisioninsights.ai/api/public/v1 |
| CLI | npm i -g decision-insights-cli, then di |
If you are finding us on your own
- llms.txt at the site root, and sitemaps
- robots.txt allows GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, CCBot and Google-Extended, and declares Content-Signal: search=yes,ai-input=yes,ai-train=yes for each of them and for every other crawler, so search, AI input and AI training are all permitted on this content
- schema.org on every page: Organization, DefinedTerm, SoftwareSourceCode, and NewsArticle or BlogPosting carrying isBasedOn
- agent-card.json at the well-known path, naming the MCP endpoint and the nine tools it serves
- /.well-known/agents.json, one document naming the MCP endpoint, the agent card, the skills index and the feeds. There is no ratified schema for a manifest like this yet, so the shape is ours and the document says so in itself
- /.well-known/agent-skills/index.json, two Agent Skills: one for researching the graph over MCP, one for downloading everything in bulk over plain HTTP. Each carries a sha256 digest of the skill it points at. These are skill documents rather than MCP tools, which is why there are two here and nine above
- /.well-known/ard.json, an Agent Resource Descriptor listing the same resources in that format
- /.well-known/mcp/server-card.json, an MCP server card. It labels itself sep-1649-draft, because SEP-1649 is an open proposal and not a ratified schema
- /.well-known/api-catalog, an RFC 9727 linkset. The same path on api.decisioninsights.ai redirects here, which is the canonical instance
- /openapi.json, the REST surface as OpenAPI, so a client can generate itself rather than being written by hand
- /.well-known/http-message-signatures-directory, our Web Bot Auth keys. Requests we make outbound carry a Signature-Agent header signed with them, so we can be allowed by verified identity rather than by IP
- Every record links to the primary source it came from, so a citation resolves past us to the original
Every line above is checkable in a browser, or in a terminal.
Access points
| MCP endpoint | https://mcp.decisioninsights.ai/api/mcp-public |
| REST base URL | https://api.decisioninsights.ai/api/public/v1 |
| Site index for language models | https://decisioninsights.ai/llms.txt |
| Sitemap | https://decisioninsights.ai/sitemaps.xml |
Tools available over MCP
| Tool | What it returns |
|---|---|
| search_company | Companies matching a query |
| get_company | One company profile |
| search_project | Open source projects matching a query |
| get_project | One project record |
| search_content | Signals and briefs matching a query |
| get_content | One content record |
| search_glossary | Technology terms matching a query |
| get_glossary | One glossary entry |
| related_companies | The peer companies for one you name, the same set its record publishes |
Authentication and limits
No credential is required. This is published data, so a caller without one is counted rather than refused, at the lowest allowance.
Sending no Authorization header is a supported way to call this, not a failure. Sending one we cannot recognise returns 401 invalid_token, naming both what arrived and what we accept. If we cannot reach our own identity service to check a token, we serve you at the anonymous tier rather than failing the request, so a token that stops working on our side looks like a lower allowance rather than an error.
Signing in raises the allowance. There is no key to copy: you sign in with OAuth and the access token is the credential. From an MCP client, point it at https://mcp.decisioninsights.ai/api/mcp-public?auth=oauth and the server answers with a sign-in challenge instead of serving you anonymously. From the CLI, run di login. From your own code, send the token in an Authorization header with the value Bearer YOUR_TOKEN, or in an x-api-key header for a client that only sends that one.
The allowances today:
| Tier | Per minute | Per day | How you get it |
|---|---|---|---|
| Anonymous | 10 | 50 | No sign-in. The default. |
| Free | 30 | 1,000 | Signed in on a free plan. |
| Paid 1 | 60 | 10,000 | Signed in on a paid plan. |
| Paid 2 | 60 | 15,000 | Signed in on a higher paid plan. |
| Paid 3 | 60 | 40,000 | Signed in on the top paid plan. |
Those are the current values, not a guarantee. They are retuned without a deploy, so read the tier and the ceiling you actually got off X-DI-Tier and X-RateLimit-Limit on any response rather than trusting this table.
Lookups return the full record at every tier. Ranked relationships between records, such as a company's peers, come back as a short preview at the lowest allowance. Nothing is cut silently: a response that carries a relationship list also carries truncated and withheld, and an upgrade link when rows were held back.
Over the limit returns a 429 with Retry-After in seconds. Back off for that long rather than retrying straight away.
Getting an account
An agent cannot open an account on its own, by design. One step needs a person, and it is quick.
- Choose a plan on Pricing, including the free one. The button hands off to my.decisioninsights.ai.
- Use the work address at the domain your company publishes from. The domain is what attaches the account to your company, so a personal mailbox would attach it to the mailbox provider instead. Free mailboxes are refused on this path for that reason.
- Open the link we email you. That is the step that verifies the address and signs you in, and it is the only thing that turns a pending registration into a working account.
- On a free plan you are done, and the allowance moves up the moment your client signs in. A paid plan takes a card, in a browser, on the account from step 1.
Using what you find
Signals and briefs are written from a primary source and carry a link to it in original_url. Cite that source, not this site, when you report a fact from one.
Company, project and term records are compiled from the graph rather than from one fetched page, so they carry no source link of their own, and a signal whose source URL we do not hold returns original_url empty. Where there is no source link, cite the record's own page on this site rather than treating the omission as an error.
Records are summaries. Where a claim matters, follow the source link and read the original.
Traffic we send you is attributable
A link to a listed company's own site carries utm_source=decisioninsights.ai&utm_medium=referral, over the API, MCP and CLI as well as on these pages. Traffic an agent sends you from here arrives in your analytics as a named referral rather than as direct or unassigned. Tagging is applied to the site addresses we hold for listed organizations and projects, and to a source link on an article only when that link points at a listed organization's own host, so a link to a newswire or to a third party is left alone.
For the people configuring this
Connect Decision Insights to your AI assistant covers setup over MCP with no code, for Claude Code, Claude Desktop, and any other client that accepts a URL. Developers covers the REST API and the CLI. Both take about ten minutes.
Common questions
Do I need an API key or an account?
No. The endpoints answer an anonymous caller, counted rather than refused, at the lowest allowance. A token we cannot recognise returns 401 invalid_token instead.
There is no key to copy. Signing in raises the allowance and it is done over OAuth: point an MCP client at https://mcp.decisioninsights.ai/api/mcp-public?auth=oauth and the server challenges instead of serving you anonymously, run di login from the CLI, or send the access token in an Authorization header as Bearer YOUR_TOKEN.
What are the rate limits?
They apply per caller, per minute and per day, and they rise when you sign in. An anonymous caller gets 10 a minute and 50 a day today.
Do not take that from this page. The allowances are retuned without a deploy, so read what you got off the reply: every response carries X-DI-Tier, X-RateLimit-Limit and X-RateLimit-Remaining. Over the limit returns a 429 with Retry-After in seconds.
MCP, REST or the command line, which should I use?
They return the same records, so pick by where you already are. MCP inside an assistant that speaks it, at https://mcp.decisioninsights.ai/api/mcp-public. REST from your own code, at https://api.decisioninsights.ai/api/public/v1. The CLI at a terminal, with npm i -g decision-insights-cli.
Every CLI command is one MCP call against the same endpoint, so the three cannot answer differently.
How current is what I get back?
Date it yourself. Every record carries datePublished in its JSON-LD and isBasedOn pointing at the primary source it was written from, so you can age anything you retrieve rather than relying on a promise made here.
How should I attribute what I use?
Cite the primary source a record links to, not this site, when you report a fact from it.
Records are summaries. Where a claim matters, follow isBasedOn and read the original.