Product Documentation

Desktop App, CLI & MCP Server Guide

How to run local full-site crawls on macOS, Windows, and Linux, automate CI/CD quality gates in GitHub Actions, and connect Cursor or Claude Code to your crawl database via MCP.

1. Desktop Application

CiteScope Desktop (Windows, macOS, Linux)

The desktop application runs crawls directly from your machine without cloud URL limits. Every crawl is saved locally in an embedded SQLite WAL database so you can compare crawls over time, query them from the CLI, or inspect them in Cursor and Claude Code.

Installation & Local Database Location

Platform Package First-Launch Notes
Windows 10 / 11 (x64) CiteScope-Windows-amd64.zip Extract and run CiteScope-Windows-amd64.exe. Uses native Windows WebView2.
macOS (Apple Silicon & Intel) CiteScope-macOS-universal.zip Unzip and move to Applications. If macOS Gatekeeper prompts on first launch, run xattr -cr /Applications/CiteScope.app.
Linux (x64) CiteScope-Linux-amd64 Run chmod +x CiteScope-Linux-amd64 && ./CiteScope-Linux-amd64.
Shared Local Storage: Desktop crawls, CLI runs, and the local MCP server all share the same SQLite database at ~/.gocrawl/gocrawl.db (or %USERPROFILE%\.gocrawl\gocrawl.db on Windows).

Configuring Crawl Scope & JavaScript Rendering

  • Polite Rate Limiting: By default, CiteScope crawls at 10–15 requests/sec per host with automatic robots.txt compliance and Retry-After backoff so production servers and CDNs are not overloaded.
  • Raw Server HTML Mode (Default): Parses the exact initial HTTP response that non-JavaScript crawlers (such as GPTBot, ClaudeBot, and PerplexityBot) receive.
  • Smart Hybrid JS Rendering (Headless Chromium): Renders client-side React, Next.js, Vue, or Angular pages in headless Chromium and diffs the hydrated DOM against raw HTML to flag client-only links, missing SSR text, and canonical tag mutations.
  • Staging Basic Auth: Supply optional HTTP Basic Auth credentials to audit password-protected staging environments before launch.

Exports & Deliverables

  • 3-File AI Grounding Pack: Generates /llms.txt (concise Markdown directory), /llms-full.txt (complete page digest), and product-overview.html (plain HTML with JSON-LD schema) ranked by internal PageRank.
  • Clean XML Sitemap: Exports a spec-compliant sitemap.xml containing only 200 OK, self-canonical, indexable pages.
  • 301 Migration Redirect Mapper: Matches an old crawl against a staging/redesign crawl using path similarity, content hash, and 64-bit SimHash to generate ready-to-deploy nginx.conf, vercel.json, or Cloudflare _redirects rules.
2. Command-Line Interface & CI/CD

Automated Audits with citescope ci

The same binary runs headless in your terminal or CI/CD pipeline. It crawls a target URL, prints a structured Markdown scorecard to standard output, and optionally exits with code 1 if critical SEO or AI search regressions are found.

Basic CLI Usage

Terminal
./CiteScope-Linux-amd64 ci https://staging.example.com --max-urls 1000 --rps 15 --workers 10 --fail-on-critical

CLI Subcommands & Flags

Flag / Command Default Description
ci <url> Required Crawls the target URL, runs PageRank and all audit rules, and outputs a Markdown report to stdout.
--max-urls 1000 Maximum number of internal URLs to crawl before stopping.
--rps 15.0 Maximum requests per second per host.
--workers 10 Number of concurrent crawler worker goroutines.
--fail-on-critical false Returns exit code 1 if one or more critical issues (4xx/5xx broken links, noindex on canonical pages, redirect loops) are detected.
mcp — Starts the local JSON-RPC 2.0 Model Context Protocol server over stdin/stdout.
serve-grader --port 8090 8090 Runs a standalone self-hosted HTTP grader and lead-capture widget server.

GitHub Actions Workflow Example

Add .github/workflows/citescope-audit.yml to your repository to audit staging deployments on every pull request:

.github/workflows/citescope-audit.yml
name: Technical SEO & AI Search Gate
on:
  pull_request:
    branches: [main]

jobs:
  citescope-audit:
    runs-on: ubuntu-latest
    steps:
      - name: Download CiteScope CLI
        run: |
          curl -fsSL https://citescope.app/downloads/CiteScope-Linux-amd64 -o citescope
          chmod +x citescope

      - name: Run Crawl & Fail on Critical Regressions
        run: |
          ./citescope ci https://staging.example.com --max-urls 500 --rps 15 --fail-on-critical > audit-report.md
          cat audit-report.md >> $GITHUB_STEP_SUMMARY
3. Model Context Protocol (MCP)

Connecting Cursor, Claude Code & Windsurf

CiteScope includes a native Model Context Protocol (MCP) server exposing 15 tools. Your AI coding assistant can start crawls, inspect page metadata, check AI bot firewall parity, generate /llms.txt files, and verify fixes directly from your editor.

Option A: Local Stdio MCP Server (citescope mcp)

Add the following block to .cursor/mcp.json in your project root or ~/Library/Application Support/Claude/claude_desktop_config.json:

.cursor/mcp.json
{
  "mcpServers": {
    "citescope": {
      "command": "/usr/local/bin/citescope",
      "args": ["mcp"]
    }
  }
}

Option B: Zero-Install Cloud HTTP Endpoint (/api/mcp)

You can also query the hosted JSON-RPC 2.0 MCP endpoint at https://citescope.app/api/mcp (or inspect the tool manifest at https://citescope.app/api/mcp/tools):

JSON-RPC 2.0 over HTTP
curl -X POST https://citescope.app/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_llm_bot_parity","arguments":{"url":"https://vercel.com"}}}'

All 15 Available MCP Tools

Tool Name Required Arguments What It Returns
start_crawl seed_url (optional: max_urls, concurrency) Runs a crawl, computes PageRank and audit rules, and returns crawl_id + summary KPIs.
list_crawls None (optional: limit) Lists saved crawl sessions in SQLite with crawl_id, seed URL, total URLs, and timestamp.
get_site_scorecard crawl_id Returns the 6-dimension health scorecard (0–100, Grade A+ to F), top deductions, and ranked quick wins.
get_site_graph_summary crawl_id Returns status code distribution, indexable count, PageRank summary, and orphan page count.
query_crawl_issues crawl_id (optional: severity, category, min_impact) Queries detected audit issues sorted by ImpactScore.
get_url_audit_details crawl_id, url Returns full extracted metadata, status, canonical, inlink/outlink counts, PageRank, and issues for one URL.
check_llm_bot_parity url Probes the URL as Googlebot, GPTBot, OAI-SearchBot, ClaudeBot, and PerplexityBot to detect WAF or robots.txt blocks.
audit_llms_txt base_url Fetches and validates /llms.txt structure and checks cited links for 200 OK reachability.
generate_ai_grounding_pack crawl_id Generates /llms.txt, /llms-full.txt, and semantic entity HTML from the crawl's top indexable pages.
run_ai_visibility_probe crawl_id (optional: brand_name, competitor) Evaluates AI citation readiness and entity grounding across 5 buyer-intent prompts.
get_keyword_alignment crawl_id, url Computes 1-, 2-, and 3-word N-gram frequency and checks alignment with Title, H1, H2, and Meta Description.
audit_js_hydration url Compares raw server HTML against headless Chromium DOM to detect client-only links or canonical changes.
get_llm_fix_pack crawl_id Generates a developer remediation pack with grep hints and route patterns for autonomous code fixes.
compare_crawls baseline_crawl_id, current_crawl_id Diffs two crawls to spot status regressions, indexability drops, title/H1 edits, and PageRank shifts.
verify_fixes_loop / map_migration_redirects baseline_crawl_id, current_crawl_id Verifies resolved vs. open issues after code changes, or maps 301 redirects between old and new URLs.

Example Prompts in Cursor or Claude Code

  • "Use CiteScope to crawl https://staging.example.com (up to 100 URLs), list all pages missing og:image or meta descriptions, and update the corresponding route metadata files in this repo."
  • "Run check_llm_bot_parity and audit_llms_txt on our production domain, then generate a clean /public/llms.txt file using generate_ai_grounding_pack."
4. Data Model & CSV Schema

36 Extracted Per-Page Telemetry Fields

Every crawled page is parsed in a single streaming pass and stored in crawl_nodes (available in the Page Analytics Dashboard and 36-column CSV export):

Category Field Names Description
Identity & HTTP url, normalized_url, url_hash, status_code, content_type, response_time_ms, size_bytes, depth Full URL, 64-bit xxHash key, HTTP status code, MIME type, TTFB latency in ms, raw HTML byte size, and BFS click depth from seed.
SERP & Headings title, title_count, title_pixel_width, meta_description, meta_desc_count, desc_pixel_width, h1, h1_count, h2, h2_count, h3, h3_count, heading_order_skipped Extracted tags, duplicate tag counts, Google SERP Arial pixel widths (580px title / 960px description limits), and whether heading levels jump non-sequentially (e.g., H1 to H3).
OpenGraph & Social og_title, og_description, og_image, twitter_card Social preview card metadata used by Slack, LinkedIn, X, Discord, and iMessage.
Content & Readability visible_word_count, readability_score, text_to_html_ratio, content_hash, simhash Main-content word count (excluding nav/footer boilerplate), Flesch Reading Ease score (0–100), visible text bytes divided by raw HTML bytes, SHA-256 exact hash, and 64-bit SimHash for near-duplicate detection.
Media & Links image_count, image_alt_missing, image_alt_too_long, generic_anchors, inlinks_count, outlinks_count, link_score Total <img> tags, images missing alt text, alt attributes over 100 chars, generic anchor links ("click here", "read more"), internal link counts, and iterative PageRank score (0–100).
Indexability & Schema is_indexable, indexability_reason, canonical, canonical_count, robots_directives, html_lang, has_viewport, has_meta_refresh, schema_types Indexability verdict, canonical URL and tag count, combined meta robots + X-Robots-Tag directives, <html lang>, mobile viewport tag, meta refresh, and flattened JSON-LD @type entities.
5. Diagnostic Rules Reference

Core Audit Rules & How to Fix Them

Rule ID Severity Trigger Condition & Remediation
STATUS_4XX / STATUS_5XX Critical Page returns HTTP 400–599. Update internal links pointing to the dead URL or restore the route.
REDIRECT_CHAIN / REDIRECT_LOOP Warning / Critical URL requires 2+ redirect hops or loops infinitely. Point internal links and initial 301 rules directly to the final 200 OK destination.
BROKEN_INTERNAL_LINK Critical An internal <a href> points to a 4xx/5xx URL. Fix the anchor href in your template or navigation.
CANONICAL_MISSING / CANONICAL_MULTIPLE Warning / Critical Indexable 200 OK page lacks a <link rel="canonical"> tag or defines conflicting canonical tags.
TITLE_MISSING / TITLE_PIXEL_OVERFLOW Critical / Warning Missing <title> tag or title exceeds 580px in 20px Arial (truncated in Google SERPs).
DESCRIPTION_MISSING / DESCRIPTION_MULTIPLE Warning Page lacks a <meta name="description"> tag or includes multiple conflicting description tags.
H1_MISSING / H1_MULTIPLE / H1_TOO_LONG Warning Page has no visible <h1>, multiple <h1> tags, or an <h1> over 70 characters.
HEADING_ORDER_SKIPPED Info / Warning Document outline jumps heading levels (for example, <h1> directly to <h3> without an <h2>).
LOW_TEXT_HTML_RATIO / LOW_READABILITY Info / Warning Visible text is under 10% of raw HTML byte size, or Flesch Reading Ease is below 50 on a content page.
IMAGE_ALT_MISSING Warning One or more <img> tags lack an alt attribute.
EXACT_DUPLICATE_CONTENT / NEAR_DUPLICATE_CONTENT Warning Two or more indexable URLs share identical primary content (SHA-256) or near-identical content (SimHash Hamming distance ≤ 3). Consolidate with a 301 redirect or canonical tag.
LLMS_TXT_NOT_FOUND / LLMS_TXT_INVALID_FORMAT Warning Root /llms.txt returns 404 or lacks a valid Markdown H1 title and link sections.