All docs pages

AI tools

MCP tool reference

Every tool the Lookout MCP server offers. Each one only reads what Lookout has already stored: none changes your site, starts a scan or calls Google. This list is built from the server’s own tool definitions, so it matches what your AI tool sees.

Server and sign-in

ItemDetail
Serverhttps://lookoutseo.app/mcp
Sign-inAn API key from Settings, API & MCP, sent as Authorization: Bearer lk_… or in an x-api-key header
AccessRead-only, every project on your account
Limits60 requests a minute for each key and 120 for your account. Over a limit, the server answers 429 with Retry-After.
Resultslist_findings and list_opportunities return a page at a time: pass their next_cursor as cursor for the next. A result over 512 KiB is refused, so ask for fewer items.

Setting up a key and your tool is on Connect an AI tool. A project id, finding id or scan id from another account answers as not found.

Tools

ToolWhat it does
list_sitesList projects
get_site_overviewProject overview
list_findingsList findings
get_findingFinding detail
list_opportunitiesList growth opportunities
get_search_totalsSearch totals
list_scansList scans
get_scan_digestScan digest
get_url_inspectionStored URL Inspection
get_core_web_vitalsField Core Web Vitals
get_lab_performanceLab performance

list_sites

List projects. Every project (monitored site) on the account with its health, schedule, latest scan, open counts and connections. Start here to find project ids.

It takes no inputs.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_sites",
    "arguments": {}
  }
}

get_site_overview

Project overview. Plain-English status, open fix and grow counts by priority, latest scan and how fresh each evidence source is, for one project.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_site_overview",
    "arguments": {
      "site_id": "[SITE_ID]"
    }
  }
}

list_findings

List findings. Website and provider findings for one project, grouped by shared check (a shared check is not a proven shared cause). Use get_finding with a finding_id for evidence and guidance.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
statusopen | fixed | excluded | retiredNoopenWhich findings to list: fixed means a later scan passed the check or a complete scan no longer found the URL
areaLinks | Sitemaps | Crawling | Performance | Metadata | Indexing | Pages | Search | Uptime | SecurityNoOnly findings in this area
priorityurgent | fix | minor | grow | advisoryNoOnly items of this priority. Open listings leave advisory suggestions out unless priority is advisory, so counts match list_sites and get_site_overview. Grow items are search opportunities: use list_opportunities for them, as list_findings holds website and provider findings only.
sincestringNoISO date: only items first seen, reopened or passed on or after it
limitinteger, 1–200No50Items per page (max 200)
cursorstringNonext_cursor from the previous page
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_findings",
    "arguments": {
      "site_id": "[SITE_ID]"
    }
  }
}

get_finding

Finding detail. Evidence, guidance (what to do, why it matters, how it clears), a copyable developer brief and a derived timeline for one finding and the group that shares its check.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
finding_idstringYesA finding_id from list_findings
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_finding",
    "arguments": {
      "site_id": "[SITE_ID]",
      "finding_id": "[FINDING_ID]"
    }
  }
}

list_opportunities

List growth opportunities. Search Console growth ideas for one project: query, URL, clicks, impressions, position and estimated upside. Metrics are from the data Lookout received, not complete site traffic; estimates are scenarios, not forecasts.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
kinddecay | ctr | quick-win | cannibalisation | internal-linksNoOnly opportunities of this kind
statusactive | ignored | not-observedNoactiveWhich opportunities to list
limitinteger, 1–200No50Items per page (max 200)
cursorstringNonext_cursor from the previous page
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_opportunities",
    "arguments": {
      "site_id": "[SITE_ID]"
    }
  }
}

get_search_totals

Search totals. Current and previous 28-day clicks, impressions, CTR and position plus eight weekly click totals from the latest Search Console sync or import.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_search_totals",
    "arguments": {
      "site_id": "[SITE_ID]"
    }
  }
}

list_scans

List scans. Recent website scans for one project, newest first. Scans that did not finish never mark anything as passed. explanation says why a scan stopped or skipped pages; reasons lists each reason with its URL count and up to 10 example URLs. Scans recorded before reasons have neither; an unfinished one keeps only detail.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
limitinteger, 1–50No10Items per page (max 50)
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_scans",
    "arguments": {
      "site_id": "[SITE_ID]"
    }
  }
}

get_scan_digest

Scan digest. What changed in one complete scan compared with the previous complete scan: new, reopened (came back), still open (persistent), passed, excluded and unobserved (not checked again: still open, never passed) findings, plus page changes, with examples capped per category: up to 2,000 for new, reopened, passed, addedPages and unobservedPages, and 20 for the rest. Digests with version 2 also carry health and coverage; checks_passing is a percentage (0–100, rounded down to one decimal) of passing / (passing + failing + unverified) over website check keys, with excluded checks and advisory suggestions left out, and is null for older digests and for a scan that counted no checks. It is not a search ranking or traffic measure. capped, when present, counts pages per check that failed beyond the limit of 1,000 findings per check, so no finding records them; page evidence keeps each URL’s latest scan only, so it shows their results until a later scan records those pages again. cappedLabels names each of those checks as page evidence does. explanation and reasons, when present, say why the scan stopped or skipped pages, as list_scans does.

InputTypeRequiredDefaultDescription
scan_idstringYesA scan id from list_scans
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_scan_digest",
    "arguments": {
      "scan_id": "[SCAN_ID]"
    }
  }
}

get_url_inspection

Stored URL Inspection. The latest stored Google URL Inspection report for up to 10 URLs. Reads Lookout’s stored reports only; it never calls Google or requests indexing.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
urlslist of URL, 1–10YesPage URLs on the project to read stored reports for
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_url_inspection",
    "arguments": {
      "site_id": "[SITE_ID]",
      "urls": "[URLS]"
    }
  }
}

get_core_web_vitals

Field Core Web Vitals. Stored Chrome UX Report (real-user) p75 LCP, INP and CLS by URL or origin scope and device, with collection window. Separate from lab measurements.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
urlURLNoURL or origin target; omit for all
devicemobile | desktopNoOnly this device; omit for both
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_core_web_vitals",
    "arguments": {
      "site_id": "[SITE_ID]"
    }
  }
}

get_lab_performance

Lab performance. The latest stored PageSpeed lab run and up to 10 recent attempts for one URL, per device. Reads stored results only; it never runs PageSpeed.

InputTypeRequiredDefaultDescription
site_idstringYesProject id from list_sites
urlURLYesThe page URL the lab test ran on
devicemobile | desktopNoOnly this device; omit for both
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_lab_performance",
    "arguments": {
      "site_id": "[SITE_ID]",
      "url": "[URL]"
    }
  }
}