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
| Item | Detail |
|---|---|
| Server | https://lookoutseo.app/mcp |
| Sign-in | An API key from Settings, API & MCP, sent as Authorization: Bearer lk_… or in an x-api-key header |
| Access | Read-only, every project on your account |
| Limits | 60 requests a minute for each key and 120 for your account. Over a limit, the server answers 429 with Retry-After. |
| Results | list_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
| Tool | What it does |
|---|---|
list_sites | List projects |
get_site_overview | Project overview |
list_findings | List findings |
get_finding | Finding detail |
list_opportunities | List growth opportunities |
get_search_totals | Search totals |
list_scans | List scans |
get_scan_digest | Scan digest |
get_url_inspection | Stored URL Inspection |
get_core_web_vitals | Field Core Web Vitals |
get_lab_performance | Lab 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project id from list_sites | |
status | open | fixed | excluded | retired | No | open | Which findings to list: fixed means a later scan passed the check or a complete scan no longer found the URL |
area | Links | Sitemaps | Crawling | Performance | Metadata | Indexing | Pages | Search | Uptime | Security | No | Only findings in this area | |
priority | urgent | fix | minor | grow | advisory | No | Only 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. | |
since | string | No | ISO date: only items first seen, reopened or passed on or after it | |
limit | integer, 1–200 | No | 50 | Items per page (max 200) |
cursor | string | No | next_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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project id from list_sites | |
finding_id | string | Yes | A 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project id from list_sites | |
kind | decay | ctr | quick-win | cannibalisation | internal-links | No | Only opportunities of this kind | |
status | active | ignored | not-observed | No | active | Which opportunities to list |
limit | integer, 1–200 | No | 50 | Items per page (max 200) |
cursor | string | No | next_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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project id from list_sites | |
limit | integer, 1–50 | No | 10 | Items 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
scan_id | string | Yes | A 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project id from list_sites | |
urls | list of URL, 1–10 | Yes | Page 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project id from list_sites | |
url | URL | No | URL or origin target; omit for all | |
device | mobile | desktop | No | Only 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.
| Input | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | string | Yes | Project id from list_sites | |
url | URL | Yes | The page URL the lab test ran on | |
device | mobile | desktop | No | Only 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]"
}
}
}