list_competitors
list_competitors MCP tool: tracked competitors with mention totals, average position, LLM presence and prompt coverage. Filter by status, AI verdict, source, mentions threshold.
Updated 2026-10-07
list_competitors returns the competitors tracked on a project, with mention totals, average ranking position, the LLMs where they are mentioned and how many of your prompts they show up on. Three statuses are supported: CONFIRMED, SUGGESTED (auto-detected, awaiting moderation), REJECTED.
Each row also carries the verdict given by the AI or by a person. On an e-commerce project (a brand selling products online, see update_project_settings), entities cited in answers are sorted into competitor brands, retailers (where the buyer is sent: Amazon, pharmacies, marketplaces) and products (product names). Retailers and products are never CONFIRMED, so they stay out of the default list.
When to use
Reach for this tool whenever the user asks "who am I competing against in AI answers?", "who is gaining visibility on my prompts?", "list new competitors I need to review". The default filters.status: ["CONFIRMED"] returns the validated set; switch to ["SUGGESTED"] to triage the auto-detection queue, or filter by verdict to list the retailers or products of an e-commerce project. Combine with bulk_update_competitor_status to act on the result.
Input
| Field | Type | Default | Description |
|---|---|---|---|
projectId |
string (CUID) | required | Project to query. |
cursor |
string | - | Pagination cursor. |
limit |
integer | 20 | 1 to 100. |
filters.status |
enum[] | ["CONFIRMED"], or every status when filters.verdict is set |
CONFIRMED, SUGGESTED, REJECTED. |
filters.verdict |
enum[] | - | COMPETITOR, NOT_COMPETITOR, UNSURE, RETAILER, PRODUCT. RETAILER and PRODUCT exist on e-commerce projects only and are never CONFIRMED. |
filters.source |
string[] | - | Filter by detection source. |
filters.minMentions |
integer | 0 | Minimum total mentions. |
filters.nameContains |
string | - | Case-insensitive substring on canonical name. |
sortBy |
enum | mentions_desc |
mentions_desc, created_desc, name_asc. |
Response
Each row is a competitor with aliases, status, verdict, source and a stats block. verdict is one of COMPETITOR, NOT_COMPETITOR, UNSURE, RETAILER, PRODUCT, or null when the entity has not been judged yet. The top-level summary.byStatus lets the agent see the moderation backlog without a second call.
{
"data": [
{
"id": "clxcomp001",
"canonicalName": "Otterly",
"aliases": ["Otterly.ai", "OtterlyAI"],
"status": "CONFIRMED",
"verdict": "COMPETITOR",
"source": "auto-detected",
"createdAt": "2026-02-15T00:00:00.000Z",
"stats": {
"totalMentions": 89,
"averagePosition": 2.3,
"llmsWhereMentioned": ["CHATGPT", "PERPLEXITY"],
"promptCoverage": 12
}
}
],
"pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": 7 },
"summary": {
"totalCompetitors": 7,
"byStatus": { "CONFIRMED": 7, "SUGGESTED": 12, "REJECTED": 3 }
}
}
Tips and patterns
- Sort by
mentions_descfor competitive intel; sort bycreated_descto surface newcomers in the auto-detection queue. averagePositionis computed across runs where the competitor was mentioned. A lowtotalMentionsmakes it noisy.promptCoverageis the count of distinct prompts where the competitor showed up. Pair it withlist_promptsto see which prompts overlap.- List the retailers of an e-commerce project with
filters.verdict: ["RETAILER"](and products with["PRODUCT"]). The status filter then defaults to every status, so nothing is hidden. - A competitor that is really a retailer or a product can be moved with
bulk_update_competitor_statusand itskindfield. - Pull
filters.status: ["SUGGESTED"]periodically and feed the IDs intobulk_update_competitor_statusto keep the dataset clean.
Related tools
- list_competitor_sources: domains where a given competitor is cited.
- bulk_update_competitor_status: confirm, reject or reclassify competitors in bulk.
- update_project_settings: turn on the e-commerce sorting of a project.
- list_prompts: see your own visibility on the same prompts.