THE INFXL ANGLE
Server Details
Competitive-intelligence briefs on any company's competitors, market and prospects. Early access.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Each tool maps to a distinct action on a distinct resource: free pre-flight validation (check_company), account state (get_account), starting a brief (request_brief), polling/reading one brief (get_brief), and enumerating briefs (list_briefs). The only potential overlap, check_company vs request_brief, is explicitly separated by cost and side effects, so misselection is unlikely.
All five names follow a clean snake_case verb_noun pattern (check_/get_/list_/request_ + resource). Verbs are distinct and accurately signal the operation, with no camelCase or stylistic mixing.
Five tools is tightly scoped to a single workflow: validate a company, spend a credit to generate a brief, poll for it, list past briefs, and check account state. Nothing feels redundant or padded, and nothing essential is missing from the count.
The core lifecycle (check → request → poll → read → list, plus account/credit visibility) is fully covered, with sensible free/charged semantics and idempotent retries. The main gap is the absence of a cancel/abandon operation for an in-progress brief or a delete for stored briefs, which agents cannot work around directly.
Available Tools
5 toolscheck_companyCheck companyARead-onlyIdempotentInspect
Check that a company's website is usable for a brief, before spending anything. Pass the domain (acme.com) or any URL on it. Returns the normalised domain, the company name if this company has been seen before (otherwise null), and the credits available. Free: no credit is spent and no brief is started. Errors explain how to fix the input; URL_REDIRECTS_ELSEWHERE includes a suggested_url.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The company's own website: a domain such as acme.com, or a URL on it. Not a LinkedIn or directory page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | The normalised domain: lowercase, no www. |
| company_name | Yes | From the identity cache when this company was seen before, otherwise null. |
| normalized_url | Yes | |
| credits_remaining | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real cost/idempotency context beyond the readOnly and idempotent annotations: no credit spent, no brief started, and errors are actionable with a concrete URL_REDIRECTS_ELSEWHERE code carrying a suggested_url. This is exactly the kind of information an agent needs to safely retry or self-correct.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information: purpose, input, return values, cost/error behaviour. Front-loaded with the decision-relevant clause ('before spending anything') and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, accepted input shape, return contents (normalised domain, company name or null, credits), cost side-effects and error remediation. With an output schema present, the description gives just enough without duplicating it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already states 'domain such as acme.com, or a URL on it. Not a LinkedIn or directory page.' The description's 'Pass the domain (acme.com) or any URL on it' restates that with no additional format or normalisation syntax, so it adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — validate that a company's website is usable for a brief before spending credits — which is clearly distinct from get_account, get_brief, list_briefs and request_brief. It does not name any sibling, so the differentiation is implied by the 'before spending anything' framing rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'before spending anything' plus 'Free: no credit is spent and no brief is started' establishes clear pre-conditions for calling this instead of the paid path. It stops short of naming request_brief as the tool to use afterwards, leaving the alternative implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountGet accountARead-onlyIdempotentInspect
Show this account: credits available, credits held by briefs in progress, the limits that apply, and whether this key is read-only. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| limits | Yes | |
| status | Yes | |
| timezone | Yes | |
| read_only | Yes | |
| key_prefix | Yes | |
| credits_reserved | Yes | |
| credits_remaining | Yes | Credits available to spend: the balance minus credits held by briefs in progress. |
| briefs_in_progress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's job is narrower. It still adds real value with 'Free' (no credit consumption) and by surfacing 'whether this key is read-only', which tells the agent it can self-inspect credential scope before attempting writes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with zero filler: verb first, then a tight list of returned fields, with the cost note ('Free') as a short trailing clause. Everything after 'Show this account' earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters, a full output schema, and annotations covering the safety profile mean the description only needs to frame intent and cost. It does both; the only gap is not stating the relationship to check_company or when an agent should prefer each.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. 'this account' / 'this key' usefully clarifies that the target is implicit from authentication rather than a parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ('Show') plus the resource ('this account'), followed by an enumeration of exactly what is returned: credits available, credits held by in-progress briefs, applicable limits, and key read-only status. That enumeration also separates it in spirit from siblings like check_company and list_briefs, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'this account' and 'this key' signal it is about the caller's own credential rather than another entity. There is no explicit when-to-use, when-not-to-use, or pointer to check_company for company-level data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_briefGet briefARead-onlyIdempotentInspect
Get the status of a brief started with request_brief and, once it is ready, the brief. While it is queued or generating, wait poll_after_seconds and call again. Call at most once every 15 seconds per brief. format: markdown (default, ready to relay in chat), json, or html (the full email render). structuredContent always holds the brief as JSON. Relay the markdown to the user unchanged, from the notice line to the footer: it is the whole brief, and it has no web page, so never link to the website as the brief. The brief states the date range its news is from; every item date falls inside it. The Focal Point names the most important development; the Wide Angle says what the news means together; each item's angle says what it means for the company and how to respond; Significance rates its urgency (CRITICAL, HIGH, MODERATE, LOW) and Signal type names the kind of move. empty means no news in the window and failed means it could not be generated; neither is charged.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | What the text block carries once the brief is ready: markdown (default, for chat), json, or html (the full email render, tens of KB). structuredContent always carries the JSON. | |
| brief_id | Yes | The brief_id returned by request_brief or list_briefs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| brief | No | Present only when the status is ready. |
| domain | Yes | |
| reason | Yes | Set only when the status is failed. |
| status | Yes | |
| charged | Yes | True only when the brief is ready with at least one item and a credit was spent. |
| brief_id | Yes | |
| created_at | Yes | |
| poll_after_seconds | Yes | Seconds to wait before calling get_brief again. Set only while queued or generating. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, idempotent, non-destructive read, so the safety burden is covered. The description adds genuinely new behavior: the polling contract, the 15-second throttling rule, the empty/failed terminal states with the billing note that neither is charged, and the warning that the brief has no web page. It stops short of describing pagination or error/pending status codes, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the polling contract in the first two sentences, which is the right order. The back half walks through brief fields (Focal Point, Wide Angle, Significance, Signal type) that an output schema already covers, so it is longer than strictly necessary, though the relay instruction still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 2-parameter polling tool with annotations and an output schema, the description covers everything an agent needs: how often to poll, what the terminal states mean, which format to choose, and how to present the result. No operational gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents format's enum and default, so much of the description's format sentence is duplicative. It does add value by clarifying that structuredContent always carries JSON regardless of the text-block format and by sizing the html render ('tens of KB'), which is relevant to an agent deciding whether to request it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the status of a brief') and ties it back to the originating request_brief tool, making clear this is the polling/retrieval counterpart to request_brief and list_briefs. It also names the dual nature of the response (status while pending, the brief once ready), which no sibling does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the call loop ('While it is queued or generating, wait poll_after_seconds and call again') and enforces a concrete rate limit ('at most once every 15 seconds per brief'). It also tells the agent what to do with the result (relay the markdown unchanged), leaving no inference about the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_briefsList briefsARead-onlyIdempotentInspect
List this account's briefs, newest first, with each brief_id, domain, status and creation time. Briefs are kept for 30 days. Use get_brief(brief_id) to read one.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many briefs to return, newest first. 1 to 50; defaults to 20. |
Output Schema
| Name | Required | Description |
|---|---|---|
| briefs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as a read-only, idempotent, non-destructive, open-world list operation. The description adds useful behavioral context beyond that: newest-first ordering, returned fields, and the 30-day retention window for briefs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly written sentences with no filler. Scope and ordering are front-loaded, and the alternative tool is mentioned at the end as a clear next step.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has full schema coverage, annotations covering safety traits, and an output schema. The description adds the non-schema details that matter most: ordering, retention, and the read-one alternative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, limit, and the schema description coverage is 100%, including range and default. The description does not add meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List this account's briefs") along with scope (this account), ordering (newest first), and included fields. It also distinguishes itself from the sibling get_brief by saying to use get_brief to read one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent to get_brief(brief_id) when the goal is to read one brief, which is a clear alternative. It does not mention request_brief or explain when not to use this listing tool, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_briefRequest briefAIdempotentInspect
Start a competitive-intelligence brief for one company. Returns at once with a brief_id; generation takes 3 to 6 minutes. Then call get_brief(brief_id) after poll_after_seconds. Cost: one credit is held now and spent only if the brief is ready with at least one item. An empty or failed brief costs nothing. Pass the same idempotency_key to retry safely: it returns the original brief instead of starting a second one.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The company's own website: a domain such as acme.com, or a URL on it. Not a LinkedIn or directory page. | |
| lookback_days | No | Days of news to cover, 1 to 7. Defaults to 7. The search reaches 2 days further back, because news is often published a day or more after the event; the brief states the exact date range it covers. | |
| idempotency_key | No | Optional. Reusing the same key with the same parameters returns the original brief and spends nothing new, for 24 hours. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| brief_id | Yes | |
| duplicate | Yes | True when this returned an earlier request instead of starting a new brief. |
| credits_remaining | Yes | Credits available after this request: the balance minus credits held by briefs in progress. |
| poll_after_seconds | Yes | Seconds to wait before calling get_brief. 0 when the brief is already settled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the asynchronous return behavior, expected generation latency, cost model (one credit held now and spent only if a non-empty brief is ready), zero-cost failure behavior, and safe idempotent retry semantics. These are exactly the behavioral details an agent needs before invoking a non-read-only, open-world operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it immediately states purpose, return behavior, latency, next step, cost, and retry semantics. Every sentence carries useful operational information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async, billable, idempotent operation, it covers the essential contract: what is returned, how long generation takes, what to call next, when credits are spent, and how retries behave. Since an output schema exists, the description does not need to explain response fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents domain, lookback_days, and idempotency_key thoroughly. The description reinforces idempotency_key retry behavior but does not add meaning for domain or lookback_days beyond the schema, so this is the baseline level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: start a competitive-intelligence brief for one company. It also makes the async contract explicit (returns brief_id immediately, generation takes 3–6 minutes), which clearly separates it from retrieval siblings like get_brief.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational guidance: start this tool, then poll with get_brief after poll_after_seconds, and reuse idempotency_key to avoid duplicate briefs. It does not explain when to prefer check_company or list_briefs instead, so it falls short of a full when/when-not/alternatives routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
check_company - First observed
get_account - First observed
get_brief - First observed
list_briefs - First observed
request_brief
Related MCP Connectors
Competitive intelligence: tracked competitors, evidence-backed signals, digests and battlecards.
Market research and competitive intelligence for startup ideas - every finding source-linked.
AI competitive intelligence: competitor pricing, features, reviews and news for B2B SaaS.
Competitive intelligence and battlecards, with a source on every claim
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAutonomous competitive intelligence tracking competitors across LinkedIn, news, reviews, job postings, and regulatory signals, generating executive briefs and sales battlecards.PolyForm Noncommercial 1.0.0
- FlicenseNot gradedqualityDmaintenanceProvides tools for automated company research, competitor identification, and business model analysis to generate comprehensive business intelligence. It enables users to extract market keywords and synthesize competitive insights via AI-powered research capabilities.-
- AlicenseAqualityDmaintenanceCompetitive intelligence for AI agents — analyze any URL or company description and get structured JSON with positioning, pain points, competitors, and unique market angles. Payments via x402 protocol ($0.05 USDC on Base mainnet), no accounts required.41MIT
- FlicenseNot gradedqualityDmaintenanceEnables competitive analysis by validating companies, identifying sectors and top competitors, and generating comparative reports with actionable insights.-
Glama MCP Gateway
Add one secure layer between your agents and this server.