IndustryLens
Server Details
B2B SaaS competitor pricing changes, strategic moves, market landscapes, reports and comparisons.
- Status
- Healthy
- Uptime
- 97.5% over 61 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Server Listing
- industrylens-mcp
TDQS
Scored across 12 tools
Most tools are distinct, but get_competitor_moves_diff and list_competitor_moves appear to do nearly the same thing (dated was→now strategic shifts for one competitor, newest-first), which will cause misselection. find_competitors also overlaps with get_competitive_profile's 'who competes with a company' purpose, though descriptions help separate them.
Every tool follows a consistent verb_noun snake_case pattern (find_competitors, get_*, list_*, subscribe_to_newsletter). Verb choices (get for single-item fetch, list for browse, find for discovery) map predictably to behavior.
12 tools is well within a reasonable range and each covers a distinct facet (discovery, retrieval, change feeds, newsletter). No tool feels redundant in count terms even where their scope blurs.
The surface covers the full competitive-intelligence lifecycle: discovering markets/reports/comparisons, fetching each by slug, profiling competitors, tracking moves and pricing changes, and subscribing. Read-only design means no CRUD gaps, though there is no keyword/search tool across the published corpus.
Available Tools
12 toolsfind_competitorsFind who competes with a companyAInspect
Use when the user asks who else competes in a company's market, or wants a peer/competitor set for a given company. Given a company domain or name, returns the other companies IndustryLens tracks in the same market. Returns { covered: false } for companies not publicly tracked.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Company name (e.g. 'Apollo'). Used when no domain is given. | |
| limit | No | Max competitors (default 10, max 50). | |
| domain | No | Company domain or homepage URL (e.g. 'apollo.io'). Preferred. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does add real value: it discloses that results are limited to companies IndustryLens tracks and that the response is '{ covered: false }' for untracked companies. It omits auth, rate-limit, and ordering/pagination behavior, so it is informative but not exhaustive.
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?
Three short sentences, led by the 'Use when...' trigger, then the operation, then the edge-case return. Zero filler, though the timing/return sentence could be slightly tightened.
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 a three-param, zero-required read tool with no output schema, the description covers the trigger, the input form, and the notable 'covered: false' return case. It leaves the full response shape (fields per competitor, ordering) unstated, which is a minor gap rather than a blocking one.
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 name, domain, and limit are already fully documented, including the 'domain preferred' hint. The description only echoes that input may be a domain or name, adding nothing beyond the schema, so the baseline 3 applies.
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: it returns 'the other companies IndustryLens tracks in the same market' for a given company. That is clear and concrete, but it does not differentiate from siblings like get_competitive_profile or get_market_landscape, which an agent could easily confuse for this task.
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?
'Use when the user asks who else competes in a company's market, or wants a peer/competitor set' gives a clear triggering condition. It stops short of naming when NOT to use it or which sibling to pick for adjacent needs (e.g., market landscape vs. competitor set).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_comparisonGet a full IndustryLens comparisonAInspect
Use when the user wants the full head-to-head detail for one published comparison (after finding its slug via list_comparisons). Fetches the full structured body of a published competitor comparison by slug. Returns content_json (the structured breakdown: pricing, recent moves, positioning, displacement signals, when-to-choose, etc.) plus metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Comparison slug from list_comparisons. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose the shape of what comes back (content_json with pricing, recent moves, positioning, displacement signals, when-to-choose, plus metadata). It implies a read-only fetch but says nothing about auth requirements, rate limits, or what happens for an unpublished or missing slug — a meaningful gap for a lookup keyed on 'published' comparisons.
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?
Three sentences, usage condition front-loaded, with the fetch and return details following in a sensible order. The first sentence ('full head-to-head detail') and second ('full structured body') overlap slightly, so it is efficient but not waste-free.
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?
There is no output schema, so the description must describe the payload and it does so well by enumerating the content_json sections. With no annotations, some behavioral context (failure modes for bad/unpublished slugs) is still missing, but the definition is otherwise sufficient for correct invocation.
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 single slug parameter is already documented as coming from list_comparisons, which the description merely echoes. No additional format, validation, or edge-case meaning is added beyond the schema, so the baseline 3 applies.
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 (fetches) and resource (the full structured body of a published competitor comparison by slug), and clearly scopes it as the single-comparison detail view versus the list. An agent can distinguish it from list_comparisons and the other get_* siblings without opening any schema.
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?
Begins with an explicit trigger ('Use when the user wants the full head-to-head detail for one published comparison') and routes the agent through the prerequisite sibling, naming list_comparisons as the source of the slug. The when-to-use condition and the alternative are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_competitive_profileGet a competitive profile for a companyAInspect
Use when the user asks who competes with a company, what a competitor recently did, or for a competitive overview of one or more domains. Input a company domain or name and get a privacy-safe profile: firmographics (business model, stage, HQ, plus firmographics.funding_stage / last_raise / investors / employee_count — these read collected: false with a plain 'not yet collected' note until that enrichment source is wired up, never a guess), recent strategic moves (the existence of a shift + a was→now summary, with the real analysis date), and links to published reports/comparisons. Returns { covered: false } for companies IndustryLens doesn't publicly track. Pass companies (up to 10 names/domains) instead of domain/name to look up several companies in one call — each gets its own result block, in the order given, each tagged with a status (account / public / not_covered / ambiguous).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Company name (e.g. 'Apollo'). Used when no domain is given. | |
| domain | No | Company domain or homepage URL (e.g. 'apollo.io'). Preferred — most precise. | |
| companies | No | Batch alternative to domain/name: up to 10 company names or domains. Omit domain/name when using this. Returns one profile per entry, in input order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so richly: it discloses that unenriched firmographic fields read `collected: false` with a 'not yet collected' note rather than a guess, that moves include a real analysis date, that untracked companies return { covered: false }, and that batch entries are order-preserving and status-tagged. These are non-obvious data-freshness and coverage behaviors an agent could not infer from the schema.
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 trigger conditions before the payload description, which is the right ordering for an agent deciding whether to call. It is dense and runs long in its parenthetical field list, but nearly every clause carries actionable information rather than 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?
No output schema exists, so the description must describe returns — and it does, covering the profile contents, the covered:false case, and batch status tags. For a 3-param, annotation-less read tool, an agent has everything needed to call it correctly and interpret the response.
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%, so baseline is 3, and the description edges above it by adding semantics the schema lacks: the mutual exclusivity rule ('Omit domain/name when using this'), result ordering ('in the order given'), and the per-entry `status` value set (account / public / not_covered / ambiguous). The maxItems 10 and domain-preference hints are largely restatements of 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+resource with concrete triggers ('who competes with a company', 'what a competitor recently did', 'competitive overview of one or more domains') and spells out the returned payload (firmographics, recent strategic moves, report links). It stops short of naming how it differs from the sibling find_competitors, whose apparent purpose overlaps with the first trigger phrase.
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?
Gives explicit when-to-use triggers tied to user utterances, plus a clear batch condition ('Pass `companies` instead of domain/name to look up several companies in one call'). It never states when NOT to use it or routes the agent to alternatives like find_competitors, get_market_landscape, or get_comparison, so sibling selection remains partly inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_competitor_moves_diffGet a competitor's dated change feedAInspect
Use when the user asks what changed, what's new, or wants a timeline of a competitor's moves. Returns the dated CHANGE-FEED for one competitor: every real was→now strategic shift IndustryLens detected, newest-first, each stamped with its real analysis date (never a fabricated date) — optionally since a given date. Input a domain or name. Returns { covered: false } with a CTA for companies not publicly tracked. Pass companies (up to 10 names/domains) instead of domain/name to get a change feed for several competitors in one call — each gets its own result block, in the order given.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Company name (e.g. 'Apollo'). Used when no domain is given. | |
| limit | No | Max moves (default 20, max 50). | |
| since | No | Optional ISO date (YYYY-MM-DD). Only moves analyzed on/after this date are returned. | |
| domain | No | Company domain or homepage URL (e.g. 'apollo.io'). Preferred — most precise. | |
| companies | No | Batch alternative to domain/name: up to 10 company names or domains. Omit domain/name when using this. Returns one change feed per entry, in input order; `since`/`limit` apply to every entry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses ordering (newest-first), date fidelity (real analysis dates, never fabricated), the { covered: false } fallback with a CTA, and batch semantics — substantial behavioral context. It omits auth/permission needs and any rate limits, keeping it short of 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 trigger condition then details the return shape and batching. Dense with em-dashes and parentheticals, and the 'never a fabricated date' clause leans promotional, but each sentence conveys usable information.
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?
With no output schema and five parameters, the description supplies the return shape, the covered:false case, and the batch/multi-competitor behavior. It stops short of describing the individual move fields, but is otherwise sufficient to call the tool correctly.
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%, so baseline is 3, but the description adds real meaning: domain/name selection guidance, and the batch contract for `companies` (per-entry result blocks, input order preserved, since/limit applied to every entry). That goes beyond what the schema states.
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: returns the dated was→now change feed for one competitor, newest-first. It is clearly distinguishable from siblings like get_pricing_changes and list_competitor_moves by scoping to detected strategic shifts with real analysis dates.
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?
Gives explicit trigger conditions ('when the user asks what changed, what's new, or wants a timeline'). It does not name sibling alternatives (e.g., against get_pricing_changes or list_competitor_moves), so routing is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_landscapeGet the whole-category map for a marketAInspect
Use when the user wants an overview of a whole market/category — every player in it, not just a self-selected competitor set. Given a market (a vertical slug or name), returns the published category overview plus every player IndustryLens tracks in that market — the whole-CATEGORY map, not a self-selected competitor set. Returns the hub (title, abstract, tldr, hero_stats, url), the deduped list of players (name, domain, business_model), and market_news — the latest weekly market summary (narrative, top topics, new entrants, topic momentum, source URLs). Returns { covered: false } for markets IndustryLens doesn't publicly track. Use list_markets to discover slugs.
| Name | Required | Description | Default |
|---|---|---|---|
| market | Yes | A vertical slug (exact) or market name (ILIKE), e.g. 'sales-intelligence' or 'sales intelligence'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose substantial behavior: it enumerates the exact return shape (hub, deduped players, market_news), and crucially states the sentinel { covered: false } for untracked markets. Read-only nature is implied by 'returns' but not stated explicitly, and no permission/rate details are given — a minor gap.
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 trigger well, but the 'every player in it, not just a self-selected competitor set' idea is repeated twice (once in the usage clause, again after 'whole-CATEGORY map'), which is redundant. The long return-shape sentence is informative but dense.
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 output schema exists, so the description must describe returns — and it does thoroughly, listing hub fields, player fields, and market_news contents, plus the not-covered case. Everything an agent needs to call and interpret the result is present.
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 description already explains the slug-or-name matching (ILIKE, with examples). The description restates 'a vertical slug or name' without adding syntax beyond the schema, so baseline 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?
States a specific verb+resource (returns a whole-category market map) and explicitly distinguishes itself from siblings by contrasting 'the whole-CATEGORY map, not a self-selected competitor set' — implicitly vs find_competitors. An agent can route correctly without opening schemas.
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?
Opens with 'Use when the user wants an overview of a whole market/category' and names the alternative condition (a self-selected competitor set). Also routes to list_markets for slug discovery, so both when-to-use and a sibling alternative are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricing_changesGet recent competitor pricing changesAInspect
Use when the user asks about a competitor's pricing/packaging changes, or wants a recent pricing-change feed. Returns structured pricing/packaging changes IndustryLens has detected — each with a change_type, severity, materiality score, a plain-language summary, and the real detection date. Pass a competitor (name or domain) to scope to one company, or omit it for a recent pricing feed. Pass competitors (up to 10 names/domains) instead to get a feed per company in one call, each in input order. The feed spans the markets IndustryLens publicly tracks. No other public source exposes structured competitor pricing-diffs like this.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max changes (default 20, max 50). | |
| since | No | ISO date lower bound for detection (e.g. '2026-01-01'). Defaults to 90 days ago. | |
| competitor | No | Competitor name or domain (e.g. 'Apollo' or 'apollo.io'). Omit for a market-wide recent pricing feed. | |
| competitors | No | Batch alternative to `competitor`: up to 10 competitor names or domains. Omit `competitor` when using this. Returns one pricing feed per entry, in input order; `since`/`limit` apply to every entry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the return payload (change_type, severity, materiality score, summary, detection date), notes that the date is the 'real detection date', and states the coverage limit ('markets IndustryLens publicly tracks'). It omits auth/permission requirements, rate limits, and pagination behavior, so not a full 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-loaded with the usage trigger, then scoping, then return shape — a sensible order with no wasted sentences, though the closing 'No other public source exposes...' line is promotional rather than operational.
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 output schema exists, and the description compensates by describing the returned fields and their meaning, plus scope limits and default behavior. For a 4-parameter, zero-required read tool, an agent has everything needed to call it correctly.
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%, so the baseline is 3, but the description adds genuine meaning: it explains the scoping decision (pass `competitor` for one company, omit for a feed) and the batch semantics ('each in input order', with `since`/`limit` applying to every entry). That is real value beyond the schema text.
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+resource ('Returns structured pricing/packaging changes IndustryLens has detected') and enumerates the returned fields, making the scope concrete. It never names an alternative sibling (e.g. get_competitor_moves_diff or list_competitor_moves), so an agent must infer differentiation itself, which keeps it out of 5 territory.
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?
Opens with an explicit trigger ('Use when the user asks about a competitor's pricing/packaging changes, or wants a recent pricing-change feed') and clearly routes between the single `competitor` scope and the batched `competitors` scope. No exclusion criteria or when-not-to-use guidance is given, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportGet a full IndustryLens reportAInspect
Use when the user wants the full text of one published IndustryLens report (after finding its slug via list_reports). Fetch the full body of a published report by slug. Returns the report's structured fields plus content_html (the canonical body) and the report's web URL. There is no standalone hosted PDF file — pdf_url is always null (verified live: the marketing_reports.pdf_url column is unpopulated for every published report; an earlier version of this description incorrectly claimed a real generated-PDF link existed). A PDF IS available, but gated by design: pdf_download.url is the report's own web page, where a 'Download PDF' button opens after the reader submits a work email (IndustryLens's deliberate lead-capture gate) and then renders the PDF client-side in the browser via print-to-PDF — there is no URL an MCP client (or anything else) can fetch directly to get the PDF bytes. Never construct or guess a .pdf URL yourself; point the user at pdf_download.url (same as url) and tell them a work email is required.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Report slug from list_reports (e.g. '/devops-hiring-q1-2026' or 'devops-hiring-q1-2026'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that pdf_url is always null, that the PDF is gated behind a work-email lead capture and rendered client-side, and that no fetchable PDF bytes exist anywhere. It also warns against a concrete failure mode (constructing or guessing a .pdf URL), which is exactly the kind of non-obvious behavior an agent needs.
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 purpose and routing are front-loaded correctly, but the middle section is bloated with meta-narrative — a live-verification note about the marketing_reports.pdf_url column and an admission that an earlier description version was wrong. That changelog detail serves maintainers, not the calling agent, and the no-PDF point is restated more than once.
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?
There is no output schema and no annotations, so the description must describe the return shape and the operational traps; it does both, naming content_html, the web URL, pdf_url, and pdf_download.url. Nothing an agent needs to call this correctly or to advise the user afterward is missing.
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 gives the slug format with two concrete examples, so the baseline is 3. The description adds sourcing context by tying the parameter to list_reports output, which meaningfully reduces the chance of passing an unvalidated slug.
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 — 'Fetch the full body of a published report by slug' — and enumerates what comes back (structured fields, content_html, web URL). It is immediately distinguishable from list_reports, which it explicitly positions as the slug-discovery step.
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 the triggering condition ('Use when the user wants the full text of one published IndustryLens report') and the prerequisite ('after finding its slug via list_reports'). It also defines the boundary case — the PDF is not obtainable through this tool, so the agent must redirect the user rather than call something else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_comparisonsList IndustryLens head-to-head comparisonsAInspect
Use when the user wants to browse published competitor-vs-competitor breakdowns, or find one involving a specific competitor, rather than fetch one specific comparison by slug. Optionally filter by a competitor name (matches either side). Each item has a slug usable with get_comparison. URLs follow https://industry-lens.com/compare/.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, max 50). | |
| competitor | No | Competitor name filter (matches either side, ILIKE). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it delivers: results are restricted to published comparisons, each item carries a slug that composes with get_comparison, and URLs follow a stated pattern. It does not disclose ordering or whether results are paginated beyond the limit parameter, which is the remaining gap for a list tool.
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?
Three tight sentences: the use condition leads, the cross-tool slug hint follows, and the URL pattern closes. Nothing is repeated across sentences and every clause is actionable.
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?
There is no output schema, so the description rightly sketches the return shape (slug-bearing items) and the URL convention, which is enough to call and chain the tool. Ordering of results and behavior past the limit cap remain unspecified, a minor gap for a two-optional-parameter list endpoint.
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 both limit (default 10, max 50) and competitor (matches either side, ILIKE). The description restates the either-side matching already in the schema and adds no format or syntax detail beyond it, so the baseline 3 applies.
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 (list) and resource (published competitor-vs-competitor comparisons) and explicitly contrasts its scope with get_comparison's single-by-slug fetch. An agent can distinguish it from siblings without opening the schema.
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?
"Use when the user wants to browse ... rather than fetch one specific comparison by slug" gives both the trigger condition and the named alternative (get_comparison). The optional competitor filter is also framed as a browsing aid, so the when-to-use path is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_competitor_movesList a competitor's recent movesAInspect
Use when the user asks what a specific competitor has recently done or changed. Returns recent tracked strategic moves for one competitor, newest-first — the existence of each shift plus a was→now summary and the real analysis date (never a fabricated date). Returns { covered: false } for companies IndustryLens doesn't publicly track, and an empty list for covered companies with no moves detected yet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max moves (default 10, max 50). | |
| competitor | Yes | Competitor name or domain (e.g. 'Apollo' or 'apollo.io'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses ordering ('newest-first'), return structure ('existence of each shift plus a was→now summary'), a data-quality guarantee ('real analysis date, never a fabricated date'), and two edge cases ({ covered: false } for untracked companies and an empty list for covered ones with no moves). This is unusually thorough behavioral disclosure for a read-only list tool.
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?
Three tight sentences, front-loaded with the usage trigger and followed by return details and edge cases. No filler; each sentence adds routing or behavioral value.
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?
Despite lacking an output schema and annotations, the description explains the return shape, ordering, and edge cases well enough for correct invocation. Nothing critical is missing for a two-parameter read-only list tool.
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% with both parameters documented, so the baseline is 3. The description adds no parameter-specific information (e.g., acceptable competitor formats or limit semantics) beyond what the schema already provides.
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 opens with an explicit trigger ('Use when the user asks what a specific competitor has recently done or changed') and states the returned resource ('recent tracked strategic moves for one competitor'). It does not, however, distinguish this list view from sibling tools such as get_competitor_moves_diff or get_pricing_changes.
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?
Provides a clear when-to-use scenario tied to a user request about a specific competitor's recent changes. It does not name alternatives or state when not to use this tool (e.g., when diffing moves or when looking at pricing changes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketsList the markets IndustryLens tracksAInspect
Use when the user wants to know which B2B SaaS markets/categories IndustryLens tracks, or needs a slug for get_market_landscape. Returns the list of markets, ordered by name. Each item has a slug usable with get_market_landscape for the full category map.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden, and it does: it discloses the return ordering (by name) and that each item carries a slug. It stops short of describing result size or any limits, but for a zero-parameter read-only lister this is solid disclosure.
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?
Three short sentences, all front-loaded with the use case first. The slug is mentioned twice, which is mild redundancy, but no sentence is wasted.
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?
With no output schema, the description must characterize the return value, and it does (list of markets, name-ordered, each with a slug). It does not note whether the list is exhaustive or paginated, a minor gap for a discovery tool.
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?
The tool takes no parameters, so the baseline is 4. The description correctly describes no input and instead explains the output field (slug) the caller will consume.
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 ('list the markets IndustryLens tracks') with scoping that names the domain (B2B SaaS markets/categories). It is clearly distinguishable from siblings like list_reports or list_comparisons, which cover different resources.
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 names the trigger ('when the user wants to know which markets are tracked, or needs a slug for get_market_landscape') and routes the agent onward to get_market_landscape for the full category map. When-to-use and the alternative are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsList IndustryLens intelligence reportsAInspect
Use when the user wants to browse or discover published competitive-intelligence reports (e.g. by topic, role, or industry) rather than fetch one specific report by slug. Filter by industry or target_role; results are ordered newest-first. Each returned item has a slug usable with get_report. URLs follow https://industry-lens.com/reports/.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, max 50). | |
| industry | No | Industry filter, ILIKE match (e.g. 'hr tech', 'devops', 'fintech'). | |
| target_role | No | Target role filter, ILIKE match (e.g. 'marketing', 'sales', 'product'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and delivers useful behavioral facts: results are ordered newest-first, each item exposes a slug, and URLs follow a known pattern. It does not mention pagination behavior or any auth/permission requirements, so it stops short of full disclosure.
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?
Three sentences, all front-loaded: usage trigger first, then filtering and ordering, then the return/URL shape. No sentence is redundant and the most decision-relevant information leads.
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 a 3-parameter, zero-required list tool with no output schema, the description covers the usage trigger, the filters, ordering, and the shape of returned items plus a usable URL pattern. Nothing an agent needs to select or invoke it correctly is missing.
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 limit, industry, and target_role in detail. The description only restates the two filters ('Filter by industry or target_role') without adding syntax or format detail beyond the schema, matching the baseline 3.
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 precise verb+resource ('browse or discover published competitive-intelligence reports') and scopes it as list/browse behavior. It explicitly contrasts itself with fetching 'one specific report by slug', which maps directly to the sibling get_report.
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?
The opening 'Use when the user wants to browse or discover... rather than fetch one specific report by slug' gives an explicit when-to-use and when-not-to-use, and names the alternative tool (get_report) that handles the excluded case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_to_newsletterSubscribe to IndustryLens weekly briefingsAInspect
Use ONLY after the user explicitly asks to subscribe to IndustryLens's weekly intelligence-report newsletter — never subscribe an email without their direct, informed consent. Signs the given email up and returns a confirmation. The source argument is recorded for attribution and defaults to 'mcp'.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | The email address the user explicitly asked to subscribe. | ||
| source | No | Where the request came from (e.g. 'mcp_claude_desktop'). Defaults to 'mcp'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the consent precondition, that a confirmation is returned, and that the source argument is recorded for attribution with a default. It omits lower-priority traits like rate limits or unsubscribe behavior, but the mutation's safety-relevant behavior is covered.
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?
Two sentences, no filler, and the critical consent constraint is front-loaded before the mechanical description of what it does. Every clause 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?
For a simple two-parameter mutation with no output schema, the description supplies the consent gate, the return behavior, and the parameter rationale. It stops short of stating what the confirmation contains or error conditions, but nothing essential for correct invocation is missing.
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 already 100%, establishing a baseline of 3, and the description adds genuine meaning: it explains the purpose of source (recorded for attribution) and its default value, which the schema only states tersely.
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 (subscribe/signs up) and resource (the email address for IndustryLens's weekly newsletter), and makes the resulting confirmation explicit. An agent can immediately tell this apart from the read-oriented sibling tools like get_report or list_reports.
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 conditions use: 'Use ONLY after the user explicitly asks' and 'never subscribe an email without their direct, informed consent.' This is a clear when-to-use gate that goes beyond mere context.
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.
3 tool updates
- Changed
get_competitive_profile1 field changed- added
Input schema / properties / companiesAdded value: +{ + "description": "Batch alternative to domain/name: up to 10 company names or domains. Omit domain/name when using this. Returns one profile per entry, in input order.", + "items": { + "type": "string" + }, + "maxItems": 10, + "minItems": 1, + "type": "array" +}
- Changed
get_competitor_moves_diff1 field changed- added
Input schema / properties / companiesAdded value: +{ + "description": "Batch alternative to domain/name: up to 10 company names or domains. Omit domain/name when using this. Returns one change feed per entry, in input order; `since`/`limit` apply to every entry.", + "items": { + "type": "string" + }, + "maxItems": 10, + "minItems": 1, + "type": "array" +}
- Changed
get_pricing_changes1 field changed- added
Input schema / properties / competitorsAdded value: +{ + "description": "Batch alternative to `competitor`: up to 10 competitor names or domains. Omit `competitor` when using this. Returns one pricing feed per entry, in input order; `since`/`limit` apply to every entry.", + "items": { + "type": "string" + }, + "maxItems": 10, + "minItems": 1, + "type": "array" +}
4 tool updates
- Added
get_competitor_moves_diff - Added
get_market_landscape - Added
get_pricing_changes - Added
list_markets
3 tool updates
- Added
find_competitors - Added
get_competitive_profile - Added
list_competitor_moves
5 tool updates
- First observed
get_comparison - First observed
get_report - First observed
list_comparisons - First observed
list_reports - First observed
subscribe_to_newsletter
Related MCP Connectors
Live SaaS pricing: current plans, verified price changes, and comparisons for 33,000+ products.
Competitive intelligence: tracked competitors, evidence-backed signals, digests and battlecards.
Competitor intelligence for AI agents — SEO, traffic, social, Product Hunt, pricing, AI insights.
Competitor intelligence for AI agents — SEO, traffic, social, Product Hunt, pricing, AI insights.
Related MCP Servers
- AlicenseAqualityAmaintenanceCompetitive intelligence platform with 24 tools. Monitor competitor pricing, content, positioning, tech stacks, and AI visibility — track how ChatGPT, Claude, and Gemini rank your brand.483MIT
- FlicenseNot gradedqualityAmaintenanceAutonomous competitive intelligence tracking competitors across LinkedIn, news, reviews, job postings, and regulatory signals, generating executive briefs and sales battlecards.-
- AlicenseNot gradedqualityCmaintenanceA dated log of SaaS price changes across 494 tools: old price, new price and verification date for every move, plus category-level pulse and the biggest recorded increases.21 npm2MIT
- AlicenseAqualityBmaintenanceEnables users to query archived copies of SaaS pricing pages from the Wayback Machine to see plan names and prices at any past date, track price changes and periods over time, and compare up to eight competitors' pricing side by side.521 PyPIMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.