create_project
CREATE new project for SEO tracking and audits. USE WHEN: starting new project, setting up monitoring.
Run Serpstat's domain, keyword, backlink, rank-tracking and site-audit calls from an agent session, with each call's credit cost stated in its own description before you spend anything.
LABSCO SUMMARY
get_url_keywords, get_url_missing_keywords and get_url_competitors bill 1 credit per row, get_domain_urls 1 credit per URL, start_site_audit 1 credit per page and 10 per page with JS rendering, page_audit_start_scan and page_audit_rescan 10 credits a scan, and get_url_summary_traff is marked HIGH-COST at 1000 credits per output type with an instruction to confirm before executing — while the audit reporting calls are marked Free, which is why get_credits_stats and get_credits_for_audit_stats belong in the loop rather than at the end of it. The ordering is prescriptive too: get_domain_regions_count is marked the required first step because it settles the se regional database, get_market_categories has to run before get_category_top_domains for the category_id, and audit analysis descends get_site_audits_list to get_site_audit_deteailed_report to get_site_audit_pages_spec_errors to get_site_audit_elements_with_issues, where the last step applies to hierarchical errors such as images, scripts and links and returns a message rather than rows for page-level errors like no_desc. get_keyword_top is marked deprecated in favour of get_keyword_full_top and is still in the list, and delete_project carries its own instruction to confirm with the user because it cannot be undone.
A client for the Serpstat API, exposing 65 tools across domain and keyword research, SERP inspection, backlink and outlink audits, rank tracking, whole-site crawls and single-page audits.
A Serpstat account and its API token, supplied as SERPSTAT_API_TOKEN, plus a process locale in LANG and LC_ALL.
One command plus a key — npm install -g @serpstat/serpstat-mcp-server, then supply credentials
USE CASES
Settle which regional database to query first, then read the domain's metrics, who it competes with, and what it already ranks for.
Read what the URL already holds, then the keywords competitors hold in the top-20 that it does not, weighted so the ones more competitors rank for come first.
Expand the seed by ranking overlap and by meaning, pull the autocomplete tail, then price the whole list in one bulk call.
Find the project and the region it tracks, confirm the latest positions have finished parsing, then read your own domain's history over a date range.
Take the profile overview, isolate the links flagged as threats, check what has already dropped off, and read the anchor distribution behind it all.
Find the report, open the error breakdown by key and priority, then descend from an error key to the affected pages and to the elements causing it.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
create_projectCREATE new project for SEO tracking and audits. USE WHEN: starting new project, setting up monitoring.
delete_projectDELETE project permanently. CRITICAL: Request user confirmation. Cannot be undone. USE WHEN: removing project.
get_active_backlinksLIST active backlinks pointing to domain/URL. USE WHEN: backlink audit, finding link sources. Returns: linking page, target page, anchor, link type, attributes, discovery date.
get_active_outlink_domainsGET domains that receive outlinks from target. USE WHEN: outlink domain analysis, finding partnerships. Returns: target domains with link counts and patterns.
get_active_outlinksGET outbound links from domain/URL. USE WHEN: outlink audit, partnership analysis, checking external links. Returns: target URLs, anchors, link attributes (follow/nofollow), dates.
get_anchorsGET anchor text distribution for backlinks. USE WHEN: anchor text audit, link diversity check. Returns: anchor texts with referring domains, backlinks count, nofollow ratio.
get_backlinks_intersectionFIND shared referring domains across multiple sites. USE WHEN: competitor backlink gap analysis, finding link opportunities. Returns: domains linking to multiple targets with link metrics and authority scores.
get_backlinks_summaryGET backlink profile overview. USE WHEN: backlink audit, link building assessment. Returns: referring domains count, backlinks count, link types, quality metrics, recent changes.
get_category_top_domainsGET top domains in market category. Requires category_id from get_market_categories. USE WHEN: market research, industry leaders. Returns: ranked domains with traffic, visibility, keywords, backlinks, SDR.
get_credits_for_audit_statsCHECK audit credits. USE WHEN: before running audits, checking limits. Returns: one-page audit credits, JS scanning credits, page crawl limits.
get_credits_statsCHECK API credits and usage stats. USE WHEN: monitoring usage, before expensive operations. Returns: credits balance, usage stats, account info.
get_domain_competitorsFIND competitor domains. USE WHEN: competitive analysis, finding rivals. Returns: domains with visibility, traffic, relevance.
get_domain_keywordsGET keywords a domain ranks for in Google top-100. USE WHEN: domain keyword research, SEO audit. Returns: position, traffic, difficulty, CPC.
get_domain_regions_countREQUIRED FIRST STEP for domain analysis. Determines best regional database (se parameter) by checking keyword presence across all Google regions. USE WHEN: starting any domain analysis, choosing se parameter. Returns: keyword count by country, primary market identification.
get_domain_uniq_keywordsCOMPARE two domains' unique keywords excluding a third domain. USE WHEN: domain vs domain analysis, finding keyword gaps between competitors.
get_domain_urlsGET domain URLs with keyword counts. USE WHEN: finding top pages, URL structure analysis. Returns: URLs ranked by keyword count. Cost: 1 credit per URL.
get_domains_infoGET SEO metrics for multiple domains. USE WHEN: comparing domains, bulk analysis. Returns: visibility, keywords, traffic, dynamics.
get_keyword_competitorsFIND domains ranking for keyword in Google top-20. USE WHEN: keyword competition analysis, finding who ranks. Returns: visibility, traffic, keyword dynamics, relevance.
get_keyword_full_topGET Google top-100 SERP with domain metrics for a keyword. USE WHEN: SERP analysis, checking who ranks. Returns: position, domain visibility, organic/PPC keyword counts, SDR, backlinks.
get_keyword_suggestionsGET autocomplete-style keyword suggestions. USE WHEN: finding long-tail keywords, expanding seed keyword. Returns: keyword suggestions with geo-name flags.
get_keyword_topDEPRECATED - use get_keyword_full_top instead. GET Google top-100 positions for keyword. Returns: position, URL, domain, subdomain, SERP features.
get_keyword_top_urlsGET top URLs ranking for keyword variations by traffic. USE WHEN: finding best content for keyword, competitor page analysis. Returns: URLs with keyword count, traffic, shares.
get_keywordsFIND organic keywords related to a keyword (by shared ranking domains). USE WHEN: keyword research, expanding keyword list. Returns: search volume, CPC, competition per keyword.
get_keywords_infoGET metrics for multiple keywords at once. USE WHEN: bulk keyword analysis, checking volume/difficulty for keyword list. Returns: volume, CPC, competition, difficulty, SERP features, intents per keyword.
get_lost_backlinksLIST recently lost backlinks. USE WHEN: monitoring link losses, detecting problems. Returns: lost links with source, target, attributes, deletion date. TIP: sort by check desc for most recent.
get_market_categoriesLIST all market categories (1000+). Call first before get_category_top_domains. USE WHEN: market research, industry analysis. Returns: hierarchical category names with category_id (required for get_category_top_domains).
get_referring_domainsLIST domains linking to target site. USE WHEN: referring domain audit, link diversity analysis. Returns: domains with domain rank, referring pages count.
get_related_keywordsFIND semantically related keywords (by meaning, not just ranking overlap). USE WHEN: topic clustering, semantic SEO, content planning. Returns: volume, CPC, competition, difficulty, weight, intents.
get_rt_project_keyword_serp_historyGET full top-100 SERP history for tracked keywords. USE WHEN: competitor tracking, SERP changes analysis. Returns: positions, URLs, domains, volumes per date. WARNING: large datasets. Use pageSize 20-50, date/keyword filters to reduce. Supports keyword tagging.
get_rt_project_regions_listLIST regions configured for project. USE WHEN: finding regionId, checking tracked regions. Returns: regionId, status, SERP type, device type, search engine, location.
get_rt_project_statusCHECK position update status for project/region. USE WHEN: before requesting rank data, checking if data ready. Returns: parsing status.
get_rt_project_url_serp_historyGET YOUR domain's ranking history only (not full top-100). Unlike get_rt_project_keyword_serp_history, shows only where your URL ranks. USE WHEN: tracking own rankings, performance monitoring. Returns: positions, volumes, keyword tags.
get_rt_projects_listLIST rank tracking projects. USE WHEN: finding projects, starting rank analysis. Returns: projectId, name, domain, creation date, status.
get_site_audit_bref_infoGET quick audit summary (lightweight). USE WHEN: dashboard display, quick status check. Returns: SDO score (0-100), error counts by priority, pages scanned, progress, stopped/captcha flags. For details use get_site_audit_results_by_categories or get_site_audit_deteailed_report. Free.
get_site_audit_deteailed_reportGET complete error breakdown by categories. Main method for detailed analysis. USE WHEN: full audit review, error analysis. Returns: categories with errors (key, priority, countAll, countNew, countFixed). Use compareReportId for diff between audits. Use error.key with get_site_audit_history or get_site_audit_pages_spec_errors for drill-down. Free.
get_site_audit_elements_with_issuesDRILL-DOWN STEP 2: Shows WHERE problematic element is used. USE WHEN: tracing error to pages. Use crc from get_site_audit_pages_spec_errors. ONLY for hierarchical errors (images, scripts, links). Returns 'Error don't have sub elements' for page-level errors (no_desc, h1_missing). Free.
get_site_audit_historyTRACK specific error type trend over time. USE WHEN: verifying fixes, monitoring error growth. Returns: reportId, date, count per audit. errorName must match error.key from get_site_audit_deteailed_report (e.g., 'no_desc'). Free.
get_site_audit_pages_spec_errorsDRILL-DOWN STEP 1: GET pages/elements with specific error. USE WHEN: finding affected pages for an error. Returns: url, urlCrc/imageCrc (for step 2), count. Use CRC with get_site_audit_elements_with_issues for deeper analysis. Mode: 'all'|'new'|'solved' (vs compareReportId). Free.
get_site_audit_project_default_settingsGET default template for NEW audit projects (not existing project settings). USE WHEN: creating new project, populating defaults. Workflow: 1) Call this, 2) Modify (set domain, name, limits), 3) Save with set_site_audit_settings. Defaults: pagesLimit=5000, scheduleRepeatOption=3 (weekly). No projectId required. Free.
get_site_audit_results_by_categoriesGET aggregated error stats by category. USE WHEN: quick audit overview, identifying problem areas. Returns: error counts per category (highCount, mediumCount, lowCount, informationCount). Categories: pages_status, meta_tags, headings, content, multimedia, indexation, redirects, links, server_params, https, hreflang, amp, markup, pagespeed. For error details use get_site_audit_deteailed_report. Free.
get_site_audit_scanned_urls_listGET configured URL list for scanning (input config, not scan results). ONLY works when scanSetting.type is 2 (URL list) or 3 (sitemap list). Returns error for type=1 (scan all site). USE WHEN: checking scan URL configuration. For actual scanned page count use get_site_audits_list. Free.
get_site_audit_settingsGET current settings of EXISTING audit project. USE WHEN: reviewing project config, before modifying settings. Returns: mainSettings, scan filters, auth, notifications, scheduling, error thresholds. Compare with get_site_audit_project_default_settings (template for NEW projects). Free.
get_site_audits_listSTARTING POINT for audit analysis. LIST all audit reports for project. USE WHEN: finding reportId, checking audit status. Returns: reportId (for other methods), date, SDO score (0-100), pages scanned, issue counts, progress (0-100), hasDetailData flag. TIP: sort by date for most recent. Free.
get_threat_backlinksGET toxic/malicious backlinks. USE WHEN: disavow audit, threat detection, link cleanup. Returns: links from flagged sites (malware, social engineering, unwanted software) with threat type, source/target URLs, dates.
get_top_pages_by_backlinksGET pages with most backlinks on a domain. USE WHEN: finding most linked pages, content analysis. Returns: pages ranked by referring pages, domains, IPs.
get_top10_anchorsGET top-10 anchor texts (quick overview). USE WHEN: fast anchor check, backlink snapshot. Returns: top 10 anchors with backlink and referring domain counts.
get_url_competitorsFIND competitor URLs ranking for same keywords in Google top-10. USE WHEN: page-level competition analysis, finding similar pages. URL must include https:// protocol. Requires 10+ keywords in top-10 (returns 'Data not found' for low-traffic pages). Cost: 1 credit/row.
get_url_keywordsGET keywords a URL ranks for in Google top-100. USE WHEN: page keyword analysis, content audit. Returns: position, traffic, difficulty, volume, SERP features per keyword. Cost: 1 credit/row.
get_url_missing_keywordsFIND content gap keywords (competitors rank in top-20, your URL does not). USE WHEN: content gap analysis, finding quick wins, keyword opportunities. Returns: missing keywords with weight (higher = more competitors rank for it). Cost: 1 credit/row.
get_url_summary_traffGET traffic and keyword stats for URLs matching a pattern. USE WHEN: section traffic analysis, URL mask analysis. HIGH-COST: 1000 credits per output type (traffic|keywords). Confirm with user before executing. Returns: organic traffic, keyword count for matching URLs.
list_projectsLIST account projects. USE WHEN: viewing projects, finding project ID. Supports pagination.
page_audit_deleteDELETE page audit project. USE WHEN: removing audit project. Returns: success boolean.
page_audit_get_last_scansSTARTING POINT for page audits. LIST all page audit projects. USE WHEN: finding pageId, listing audited pages. Returns: pageId (for other methods), url, name, status, lastActiveReport with SDO and counts. Free.
page_audit_get_report_by_categoriesGET audit results by categories for report. USE WHEN: category-level analysis, comparing reports. Returns: categories with errors by type, page data. Use compareReportId for countNew/countFixed vs previous report. Free.
page_audit_get_reports_for_pageGET audit report history for page. USE WHEN: tracking scan completion, viewing past results. Returns: reportId, date, status (1=in progress, 3=finalizing, 4=completed), SDO, error counts, progress. TIP: sort by date for most recent. Free.
page_audit_get_results_reportGET detailed page audit results. USE WHEN: analyzing page issues, reviewing errors after scan. Returns: categories (errors by type: meta_tags, headings, content, multimedia, pagespeed), page data, report (SDO, counts). Each error has: key, priority, counts, hasAdditionRows (if true, drill down with page_audit_report_drill_down). Free.
page_audit_get_scan_namesLIST page audit project names. USE WHEN: discovering projects. Returns: pageId, name, url, finishedReportCount. Free.
page_audit_report_drill_downGET problematic elements for specific error. ONLY works if hasAdditionRows=true from page_audit_get_results_report. USE WHEN: drilling into error details. Returns error for hasAdditionRows=false. Response varies: multimedia errors -> image URL array; page-level errors -> page URL array. Check hasAdditionRows flag first. Free.
page_audit_rescanRESCAN existing page audit. USE WHEN: re-checking after fixes. Returns: reportId. Track with page_audit_get_reports_for_page. Cost: 10 credits.
page_audit_scan_logsGET scan event logs. USE WHEN: debugging scan issues, tracking progress. Returns: log items with message (audit_finish, crawl_start, etc), type (info/warning/error), params, timestamp. Supports pagination. Free.
page_audit_start_scanSCAN single webpage with JS rendering. USE WHEN: page audit, on-page SEO check. Returns: pageId, reportId. Track with page_audit_get_reports_for_page. Cost: 10 credits. Wait for progress=100 before results.
page_audit_stopSTOP active page audit scan. USE WHEN: canceling scan. Returns: success boolean.
set_site_audit_settingsUPDATE audit project configuration. USE WHEN: creating or modifying audit project. Get template from get_site_audit_project_default_settings first, modify, save with this method. Required: mainSettings, scanSetting (1=all site, 2=URL list, 3=sitemap), scheduleSettings, mailTriggerSettings, baseAuthBlock, keyword filters. Free.
start_site_auditSTART audit scan for project. USE WHEN: launching site crawl. Returns: reportId. Check progress with get_site_audits_list (progress field). Cost: 1 credit/page (10 credits/page with JS rendering). Wait for progress=100 before analyzing.
stop_site_auditSTOP active audit scan. USE WHEN: canceling crawl. Partial results may be available. Check get_site_audits_list for stopped status.
BEFORE YOU INSTALL
65 tools when we connected. SERPSTAT_ENABLED_CATEGORIES limits tools to chosen categories and defaults to all. Many tools consume Serpstat credits; start_site_audit costs 1 credit per page, or 10 with JS rendering.
Both documented clients run the server on your machine.
CONTEXT COST
Rated by the size of the 65 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npm install -g @serpstat/serpstat-mcp-server{
"mcpServers": {
"serpstat": {
"command": "npx",
"args": [
"-y",
"@serpstat/serpstat-mcp-server"
],
"env": {
"SERPSTAT_API_TOKEN": "<YOUR_SERPSTAT_API_TOKEN>",
"LANG": "en_US.UTF-8",
"LC_ALL": "en_US.UTF-8"
}
}
}
}