SEOSearch IndexActive in MCP

Discover Competitors

discover_competitors(domain: string, limit?: number)

Organic competitors by overlap or seed keywords.

Lists organic competitor domains ranked by search keyword overlap, average position, and shared keywords.

Input Parameters

2 arguments
ParameterTypeRequirementDefault / ConstraintsDescription
domainstringrequired
none
The domain to find organic search competitors for.
limitnumberoptional
default: 20Integer between 1 and 100
Maximum number of competitor domains to return.

Return Envelope (OFE / 1.0)

Open Fact Envelope

Every response adheres to the strict ofe/1.0 envelope schema, returning verified data, typed facts, entity references, and follow-up tool suggestions:

data Payload

Lists organic competitor domains ranked by search keyword overlap, average position, and shared keywords.

coverage & Freshness

Reports returned count vs total items, observation timestamp as_of, and scope notes. Evaluated live per request.

resources (Dataset Exports)

If a query yields high row counts (e.g. >1,000 queries in Search Console), full unpaginated tables are persisted to R2 and linked as an mcpseo:// URI for follow-up retrieval via export_dataset.

next_actions

Provides suggested follow-up tool calls with pre-filled arguments so your AI agent can navigate from discovery to detailed inspection autonomously.

Emitted Facts & Entities

Knowledge Graph

Typed Facts

Facts emitted in the facts[] array with provenance receipts:

Fact TypeClaim DescriptionEmitted Data Fields
seo.competitorCompetitor domain with average position and count of shared ranking keywords.
competitor_domainavg_positionshared_keyword_count
core.data_freshnessObservation timestamp and search index crawl freshness.
observed_at

Registered Entities

Entities registered in the entities[] array to establish subject relationships:

domain

Target domain and each identified competitor domain.

Request & Response Examples

Live MCP Payloads

Exact JSON schemas transmitted over Model Context Protocol (stdio or HTTP SSE transport):

1. Client Tool Invocation

discover_competitors request.json
{
  "tool": "discover_competitors",
  "arguments": {
    "domain": "postman.com",
    "limit": 10
  }
}

2. Server Envelope Response

discover_competitors response.json
{
  "schema_version": "ofe/1.0",
  "domain": "seo",
  "data": {
    "domain": "postman.com"
  },
  "facts": [
    {
      "type": "seo.competitor",
      "subject": [
        "urn:domain:postman.com",
        "urn:domain:insomnia.rest"
      ],
      "data": {
        "competitor_domain": "insomnia.rest",
        "avg_position": 8.4,
        "shared_keyword_count": 4210
      },
      "provenance": {
        "source_class": "search_index",
        "method": "organic_competitors",
        "confidence": 0.75,
        "observed_at": "2026-09-24T00:00:00Z",
        "cache_hit": false
      }
    },
    {
      "type": "seo.competitor",
      "subject": [
        "urn:domain:postman.com",
        "urn:domain:hoppscotch.io"
      ],
      "data": {
        "competitor_domain": "hoppscotch.io",
        "avg_position": 12.1,
        "shared_keyword_count": 1840
      },
      "provenance": {
        "source_class": "search_index",
        "method": "organic_competitors",
        "confidence": 0.75,
        "observed_at": "2026-09-24T00:00:00Z",
        "cache_hit": false
      }
    }
  ],
  "entities": [
    {
      "id": "urn:domain:postman.com",
      "kind": "domain",
      "label": "postman.com"
    },
    {
      "id": "urn:domain:insomnia.rest",
      "kind": "domain",
      "label": "insomnia.rest"
    },
    {
      "id": "urn:domain:hoppscotch.io",
      "kind": "domain",
      "label": "hoppscotch.io"
    }
  ],
  "coverage": {
    "returned": 2,
    "total": null,
    "as_of": "2026-09-24T00:00:00Z",
    "scope_note": null
  },
  "deltas": [],
  "resources": [],
  "next_actions": [
    {
      "tool": "compare_keyword_coverage",
      "args": {
        "domain": "postman.com",
        "competitors": [
          "insomnia.rest",
          "hoppscotch.io"
        ]
      },
      "use_when": "find missing keyword opportunities"
    }
  ]
}

LLM Agent Workflow

Claude & Cursor Integration
Step 1

Prompt Trigger

"Who are postman.com's primary SEO competitors?"
Step 2

Agent Decision & Reasoning

The agent queries discover_competitors to extract high-overlap competitor domains, which are then passed directly into compare_keyword_coverage and compare_backlink_gap.

Provenance Guarantees & Error Handling

Reliability
Source Classsearch_index
Inspection Methodorganic_competitors
OFE Calibration Score0.75 (OFE 1.0 scale)
Cache DurationNone (Live)

Every fact emitted by Vouched includes source_class, method, observed_at ISO timestamp, and a published confidence score. LLM agents can inspect these citations to distinguish first-party verified facts (e.g. Search Console) from modeled competitor estimates.

Billing & API Keys

Paid market data, on Pro and Team. A call typically costs about $0.013 per call of market data, so Pro's included $4 covers roughly 307 calls. Self-hosted, it uses your own DataForSEO key and bills you directly, with nothing added. See pricing for what each tool costs.

More SEO Tools

6 sibling tools
Self-host on GitHub (MIT)Try on Cloud plan