Tools Reference
Complete reference for all 9 GEO analysis tools available in Glippy MCP Server.
analyze_domain
CoreRun a comprehensive GEO readiness analysis on a domain. Checks robots.txt, llms.txt, homepage HTML (16 scoring categories), sitemap.xml, and security headers.
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain to analyze (e.g., "example.com"). No https:// prefix. |
max_pages | integer | No | Pages to crawl (1-10). Default: 10. |
render_mode | enum | No | "static" (default), "auto" (static with Chrome fallback on bot-block), or "chrome" (always Chrome). See Render Modes. |
output_format | enum | No | "text" (default) or "json". Use JSON to pass results to export_report. |
Analyze example.com for GEO readiness
- Overall GEO score (0-100) with letter grade
- Page type detection (article, product, homepage, etc.)
- 16 category scores with pass/fail/warn checks
- robots.txt analysis with AI crawler access
- llms.txt presence and content preview
- Sitemap discovery status
check_robots_txt
Check a domain's robots.txt specifically for AI crawler access rules. Reports which crawlers (GPTBot, ClaudeBot, etc.) are blocked or allowed.
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain to check. No https:// prefix. |
Which AI crawlers are blocked on example.com?
GPTBot, Google-Extended, CCBot, anthropic-ai, ClaudeBot, Bytespider, PerplexityBot, ChatGPT-User, AmazonBot, cohere-ai
Auditing your own site? Make sure GlippyBot itself is allow-listed — see the GlippyBot crawler info & allow-list guide for the User-Agent string and robots.txt snippets.
check_llms_txt
Check if a domain has an llms.txt file — the emerging standard for providing context to LLMs about a site's purpose and content.
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain to check. No https:// prefix. |
Does example.com have an llms.txt file?
get_geo_summary
Get a concise GEO readiness summary: overall score, grade, top 3 strengths, and top 3 issues. Use for quick assessments.
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain to check. No https:// prefix. |
render_mode | enum | No | "static" (default), "auto", or "chrome". See Render Modes. |
Give me a quick GEO summary of example.com
compare_domains
ProAnalyze multiple domains in parallel and compare their GEO scores side by side. Perfect for competitive analysis.
| Parameter | Type | Required | Description |
|---|---|---|---|
domains | array[string] | Yes | 2-50 domains to compare. No https:// prefix. For more than 50, run multiple times and merge the results. |
max_pages | integer | No | Pages per domain (1-10). Default: 10. |
render_mode | enum | No | "static" (default), "auto", or "chrome". Applied per domain. See Render Modes. |
output_format | enum | No | "text" (default) or "json". Use JSON to pass results to export_bulk_report. |
Compare GEO scores: example.com, competitor1.com, competitor2.com
analyze_sitemap
ProFetch a sitemap XML, extract URLs, and analyze each page. Supports regular sitemaps and sitemap index files.
| Parameter | Type | Required | Description |
|---|---|---|---|
sitemap_url | string | Yes | Full URL to sitemap (e.g., "https://example.com/sitemap.xml") |
max_urls | integer | No | Max URLs to analyze (1-50,000). Default: all found. |
rate_limit | number | No | Requests/second per domain (0.1-100). Default: 5. |
render_mode | enum | No | "static" (default), "auto", or "chrome". Applied per URL. See Render Modes. |
output_format | enum | No | "text" (default) or "json". Use JSON to pass results to export_bulk_report. |
Analyze all pages in https://example.com/sitemap.xml
analyze_urls
ProRun GEO analysis on a specific list of URLs. URLs can span multiple domains.
| Parameter | Type | Required | Description |
|---|---|---|---|
urls | array[string] | Yes | Full URLs to analyze (1-50,000). Include https://. |
rate_limit | number | No | Requests/second per domain (0.1-100). Default: 5. |
render_mode | enum | No | "static" (default), "auto", or "chrome". Applied per URL. See Render Modes. |
output_format | enum | No | "text" (default) or "json". Use JSON to pass results to export_bulk_report. |
Analyze these pages: https://example.com/about, https://example.com/pricing
export_report
Generate a styled, shareable report in Markdown or HTML format — matching the Glippy browser extension's export.
| Parameter | Type | Required | Description |
|---|---|---|---|
format | enum | Yes | "markdown", "markdown_full", or "html" |
domain | string | No* | Domain to analyze. No https:// prefix. |
max_pages | integer | No | Pages to crawl (1-10). Default: 10. Ignored if analysis_result provided. |
render_mode | enum | No | "static" (default), "auto", or "chrome". Ignored if analysis_result provided. See Render Modes. |
analysis_result | object | No* | Pre-computed result from analyze_domain (with output_format='json'). |
*Provide either domain or analysis_result
Generate an HTML report for example.com
export_bulk_report
ProGenerate a styled report for bulk analysis: domain comparison, URL list, or sitemap crawl.
| Parameter | Type | Required | Description |
|---|---|---|---|
format | enum | Yes | "markdown" or "html" |
domains | array[string] | No* | Compare 2-50 domains. No https:// prefix. |
urls | array[string] | No* | Analyze 1-50,000 URLs. Include https://. |
sitemap_url | string | No* | Full URL to sitemap to crawl. |
analysis_results | object | No* | Pre-computed results from compare_domains, analyze_urls, or analyze_sitemap (with output_format='json'). |
max_pages | integer | No | For domains: pages per domain (1-10). Default: 10. |
max_urls | integer | No | For sitemap: max URLs to analyze (1-50,000). |
rate_limit | number | No | Requests/second per domain (0.1-100). Default: 5. |
render_mode | enum | No | "static" (default), "auto", or "chrome". Ignored if analysis_results provided. See Render Modes. |
*Provide exactly one of: domains, urls, sitemap_url, or analysis_results
Generate an HTML comparison report for example.com and competitor.com
Render Modes
ReferenceEvery analysis tool accepts a render_mode parameter controlling how HTML is fetched for scoring. Some sites (Cloudflare, Akamai, DataDome, PerimeterX, Incapsula) block plain Node fetches; Chrome-backed modes drive a real browser to get past them. Auditing your own site? The cleaner fix is to allow-list the GlippyBot User-Agent — see the GlippyBot allow-list guide.
| Mode | Behavior | Use when |
|---|---|---|
static (default) | Plain Node fetch. Fast, no Chrome needed. | Targets don't block bots, or you want the static-crawler view. |
auto | Static first; retry via Chrome if the response looks bot-blocked (401/403/407/429/503 or empty 2xx). | Mixed workloads — most sites stay on the fast path, only blocked ones pay the Chrome cost. Recommended for competitive audits. |
chrome | Every URL fetched via Chrome. Slowest, most resilient. | Target aggressively detects headless, or you want uniform Chrome rendering. |
The returned analysis includes a renderMode field indicating which path ran:
| Value | Meaning |
|---|---|
static | Static fetch succeeded; Chrome not invoked. |
chrome | Launched directly via Chrome (explicit mode). |
chrome-fallback | Static fetch was blocked; Chrome recovered a 2xx. |
chrome-blocked-<code> | Chrome was tried but also got blocked with the given status. |
static-blocked | Static fetch failed and Chrome was unavailable or errored. |
Auto and chrome modes need a local Chrome/Chromium binary. The server auto-detects from CHROME_PATH, PUPPETEER_EXECUTABLE_PATH, or common install paths (Windows: C:\Program Files\Google\Chrome\Application\chrome.exe; macOS: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome; Linux: /usr/bin/google-chrome). If none is found, render_mode: "static" continues to work; other modes will record static-blocked.
Sites that fingerprint the headless build can still block the server-launched browser. Launch a separate Chrome with remote debugging and have the server attach to it by setting CHROME_REMOTE_URL in the MCP server env:
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 --user-data-dir=/tmp/glippy-chrome &
# Windows (PowerShell)
& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
--remote-debugging-port=9222 --user-data-dir=C:\Temp\glippy-chrome
# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/glippy-chrome &
# Then in your MCP config env:
# CHROME_REMOTE_URL=http://localhost:9222
Using a dedicated --user-data-dir keeps this session isolated from your normal browsing. When attached, the fetcher leaves UA/headers/stealth untouched so requests look identical to a human browsing from that profile.