B2B SaaS competitor pricing changes, strategic moves, market landscapes, reports and comparisons.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Company name (e.g. 'Apollo'). Used when no domain is given.
Max competitors (default 10, max 50).
Company domain or homepage URL (e.g. 'apollo.io'). Preferred.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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.
| Argument | Type | Description |
|---|---|---|
| name | string | Company name (e.g. 'Apollo'). Used when no domain is given. |
| limit | integer | Max competitors (default 10, max 50). |
| domain | string | Company domain or homepage URL (e.g. 'apollo.io'). Preferred. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string",
"description": "Company name (e.g. 'Apollo'). Used when no domain is given."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max competitors (default 10, max 50)."
},
"domain": {
"type": "string",
"description": "Company domain or homepage URL (e.g. 'apollo.io'). Preferred."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Comparison slug from list_comparisons. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Comparison slug from list_comparisons."
}
},
"additionalProperties": false
}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).
| Argument | Type | Description |
|---|---|---|
| name | string | Company name (e.g. 'Apollo'). Used when no domain is given. |
| domain | string | Company domain or homepage URL (e.g. 'apollo.io'). Preferred — most precise. |
| companies | array | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string",
"description": "Company name (e.g. 'Apollo'). Used when no domain is given."
},
"domain": {
"type": "string",
"description": "Company domain or homepage URL (e.g. 'apollo.io'). Preferred — most precise."
},
"companies": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| name | string | Company name (e.g. 'Apollo'). Used when no domain is given. |
| limit | integer | Max moves (default 20, max 50). |
| since | string | Optional ISO date (YYYY-MM-DD). Only moves analyzed on/after this date are returned. |
| domain | string | Company domain or homepage URL (e.g. 'apollo.io'). Preferred — most precise. |
| companies | array | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string",
"description": "Company name (e.g. 'Apollo'). Used when no domain is given."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max moves (default 20, max 50)."
},
"since": {
"type": "string",
"description": "Optional ISO date (YYYY-MM-DD). Only moves analyzed on/after this date are returned."
},
"domain": {
"type": "string",
"description": "Company domain or homepage URL (e.g. 'apollo.io'). Preferred — most precise."
},
"companies": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| market* | string | A vertical slug (exact) or market name (ILIKE), e.g. 'sales-intelligence' or 'sales intelligence'. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"market"
],
"properties": {
"market": {
"type": "string",
"minLength": 1,
"description": "A vertical slug (exact) or market name (ILIKE), e.g. 'sales-intelligence' or 'sales intelligence'."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max changes (default 20, max 50). |
| since | string | ISO date lower bound for detection (e.g. '2026-01-01'). Defaults to 90 days ago. |
| competitor | string | Competitor name or domain (e.g. 'Apollo' or 'apollo.io'). Omit for a market-wide recent pricing feed. |
| competitors | array | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max changes (default 20, max 50)."
},
"since": {
"type": "string",
"description": "ISO date lower bound for detection (e.g. '2026-01-01'). Defaults to 90 days ago."
},
"competitor": {
"type": "string",
"description": "Competitor name or domain (e.g. 'Apollo' or 'apollo.io'). Omit for a market-wide recent pricing feed."
},
"competitors": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Report slug from list_reports (e.g. '/devops-hiring-q1-2026' or 'devops-hiring-q1-2026'). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"description": "Report slug from list_reports (e.g. '/devops-hiring-q1-2026' or 'devops-hiring-q1-2026')."
}
},
"additionalProperties": false
}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/<slug>.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 10, max 50). |
| competitor | string | Competitor name filter (matches either side, ILIKE). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 10, max 50)."
},
"competitor": {
"type": "string",
"description": "Competitor name filter (matches either side, ILIKE)."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max moves (default 10, max 50). |
| competitor* | string | Competitor name or domain (e.g. 'Apollo' or 'apollo.io'). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"competitor"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max moves (default 10, max 50)."
},
"competitor": {
"type": "string",
"minLength": 1,
"description": "Competitor name or domain (e.g. 'Apollo' or 'apollo.io')."
}
},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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/<slug>.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results (default 10, max 50). |
| industry | string | Industry filter, ILIKE match (e.g. 'hr tech', 'devops', 'fintech'). |
| target_role | string | Target role filter, ILIKE match (e.g. 'marketing', 'sales', 'product'). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max results (default 10, max 50)."
},
"industry": {
"type": "string",
"description": "Industry filter, ILIKE match (e.g. 'hr tech', 'devops', 'fintech')."
},
"target_role": {
"type": "string",
"description": "Target role filter, ILIKE match (e.g. 'marketing', 'sales', 'product')."
}
},
"additionalProperties": false
}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'.
| Argument | Type | Description |
|---|---|---|
| email* | string | The email address the user explicitly asked to subscribe. |
| source | string | Where the request came from (e.g. 'mcp_claude_desktop'). Defaults to 'mcp'. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "The email address the user explicitly asked to subscribe."
},
"source": {
"type": "string",
"description": "Where the request came from (e.g. 'mcp_claude_desktop'). Defaults to 'mcp'."
}
},
"additionalProperties": false
}