
Llmscout
io.github.RudrenduPaul由 GitHub 帳號 RudrenduPaul 發布v0.3.7更新於 Oct 24, 2026
Zero-config SEO and GEO checker: 21 technical-SEO and generative-engine checks for a live site.
概覽
LLMScout 是本地 MCP 伺服器,對線上網站執行 21 項技術 SEO 與生成式引擎(GEO)檢查,回傳 PASS/WARN/FAIL 結果與修正建議。
- 可以做什麼
- 針對設定的網站網址執行完整 21 項 SEO/GEO 檢查,取得 PASS/WARN/FAIL 判定,未通過項目附修正建議,也可輸出結構化 JSON 供代理解析。透過修改設定中的 checks 區塊,只執行技術 SEO 類別或只執行 GEO 類別。在目標目錄產生專案設定與技能檔案,既有檔案維持不變。依 fleet 清單對多個網站批次執行整套檢查,並可為每個網站各寫一份報告檔案。檢視 robots.txt、sitemap.xml、結構化資料、AI 爬蟲指令、llms.txt 與 Markdown 內容協商等具體訊號。
- 適用情境
- 適合希望由助理稽核線上網站的技術 SEO 與 AI 搜尋就緒程度、而不必人工執行 CLI 的情境,也適合一次檢查多個客戶網站。對需要了解頁面如何針對搜尋引擎與生成式引擎設定的機構與網站擁有者有用。
- 執行需求
- 以本機程序透過 stdio 執行;README 說明從 PyPI 的 llmscout-cli 套件安裝 MCP 附加元件。需要連線目標網站的網路,因為檢查會抓取首頁、robots.txt、sitemap.xml 和 llms.txt。未宣告驗證、環境變數或標頭。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Llmscout,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
LLMScout
[CI] [npm version] [PyPI version] [License: MIT]
Install • Quickstart • CLI reference • Comparison • FAQ • Contributing
[LLMScout - Check if LLMs can cite your site. | Product Hunt]
Runs 21 technical-SEO and GEO (generative-engine-optimization) checks against your site, in pure TypeScript or pure Python, with zero Python interpreter, zero headless browser, and zero external toolchain either way.
Install
LLMScout ships as two independent, complementary distributions. Both run the same 21 checks with the same PASS/WARN/FAIL verdicts, so pick whichever fits your toolchain.
Node/TypeScript (npm):
The CLI targets Node 18+ (declared in package.json engines). The two runtime dependencies are cheerio (HTML parsing) and commander (argument parsing): there is no Python interpreter, no pip install, and no Playwright/Chromium download anywhere in the npm install.
[!NOTE] The npm install pulls in
undicias a transitive dependency ofcheerio.npm audithas flagged a high-severity advisory against it in the past;package.json'soverridesblock pinsundici(andjs-yaml/nanoid) to patched ranges to close it. Runnpm auditafter install to confirm your resolved tree is clean.
Python (PyPI):
Zero runtime dependencies -- HTML parsing and HTTP fetching both use only the Python standard library. See python/README.md for the full Python-specific guide.
Then, in any project you want to check:
That scaffolds a llmscout.json config and a small Claude Code skill file into the target directory. Set your site URL and run llmscout check ..
Quickstart
Scaffold a config and run a check against a live site:
Real output from llmscout check against https://example.com:
The same run with --json:
check exits 0 when no check FAILs, 1 when at least one check FAILs (WARN alone does not fail the run), and 2 on a usage error such as a missing or misconfigured llmscout.json.
Features
- 21 checks across two categories. 12 technical-SEO checks and 9 GEO checks, listed by name in The 21 checks.
- Zero external toolchain, either language.
child_processis never imported anywhere in the TypeScript source; the Python port has zero runtime dependencies. Checks run inside the process instead of shelling out to Python scripts or a headless browser. - Cross-platform by construction. No
python3-versus-py -3shelling and no relative-path script resolution, so the same install runs identically on Windows, macOS, and Linux. - Hardened fetch. The single fetch wrapper (
src/fetch-utils.ts) rejects any non-http(s)scheme, blocks loopback/private/link-local hosts, follows redirects manually one hop at a time, and bounds the chain at 5 hops and the response body at 10 MiB. - Fleet mode with per-site reports.
llmscout fleet manifest.jsonruns the full suite across many local client-repo paths in one invocation, and--out-dirwrites one auto-named report file per site -- built for agencies checking many client sites at once. - Structured output. Every command accepts a global
--jsonflag for machine-readable output, so an agent invoking the CLI can parse results programmatically. - A real, configurable User-Agent. Sends a genuine browser User-Agent by default (some SSR frameworks and CDNs reject bot-style strings outright) and a
--user-agentflag to override it. - Well tested. 248 TypeScript tests and 233 Python tests, both reproducible locally with
npm test/npm run test:coverageandpytest. The Python distribution has zero runtime dependencies, so there is nothing for a dependency audit to flag. On the npm side,package.json'soverridesblock pinsundici(a transitive dependency ofcheerio) to a patched range, andnpm auditcurrently reports zero vulnerabilities.
Why GEO checks matter right now
Search traffic is genuinely shifting toward AI-mediated answers, and the shift is recent and well measured, not a hypothetical:
- Google's own AI Overviews are already cutting click-through. Ahrefs measured position-1 CTR on AI-Overview-triggering keywords fall from 7.3% (December 2023) to 1.6% (December 2025) -- a 58% average CTR reduction across the study. (Ahrefs, December 2025) Semrush's independent 10-million-keyword analysis found organic CTR drops 61% and paid CTR drops 68% when an AI Overview appears on the results page. (Semrush)
- ChatGPT itself is now a real, measurable traffic source. Search Engine Land's analysis of 6.77 million sessions found ChatGPT accounts for 92% of all AI-assistant referral traffic, converting at 7.1% -- close to paid search's 7.8%. (Search Engine Land)
- AI crawlers are not one crawler anymore. Between May 2024 and May 2025, GPTBot's share of AI-crawler traffic rose from 5% to 30%. OpenAI and Anthropic have since split their bots into training crawlers (GPTBot, ClaudeBot) and separate, independently blockable search/retrieval crawlers (OAI-SearchBot, Claude-SearchBot). (Cloudflare Radar, "From Googlebot to GPTBot") LLMScout's
ai-crawler-directivescheck reports on all seven of the current major training and search bots (GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended) separately, since blocking a company's training bot has no effect on whether its assistant can still retrieve and cite your page live through its own search bot. - Markdown-native delivery is a real, emerging practice, not a fad. Cloudflare documents HTTP content negotiation (
Accept: text/markdown) as a standards-based way to serve agents a lighter, cleaner representation of a page -- their own benchmark saw an 80% token reduction on one blog post. (Cloudflare, "Markdown for Agents") Worth being honest about the current state: independent analysis across 300,000 domains found that in practice, no major AI crawler currently sends theAccept: text/markdownheader to actually negotiate it yet -- they discover Markdown only via direct links. (Dries Buytaert) LLMScout'smarkdown-negotiationcheck reports on this without pretending the ecosystem is further along than it is. - Not every signal in this space is settled, and LLMScout does not pretend otherwise.
llms.txtis a real, community-driven convention (created September 2024, adopted by roughly 8-10% of top sites as of mid-2026, including Anthropic, Stripe, Cloudflare, and Vercel) -- but Google's own Gary Illyes has stated publicly that Google does not support it and has no plans to, comparing it to the deprecatedkeywordsmeta tag. (Search Engine Journal) LLMScout'sllms-txtcheck reports its presence as informational, never as a required pass -- the tool's job is to report what is actually configured, not to prescribe a policy the evidence doesn't yet support. - Google removed FAQ rich results from Search entirely on May 7, 2026. (Search Engine Journal)
FAQPageschema itself is not deprecated -- it remains valid markup other engines and AI assistants can still parse for direct-answer extraction -- so LLMScout'sfaq-schemacheck still reports on it, just without implying it earns a Google SERP rich result anymore.
The 21 checks
Each check reports PASS, WARN, or FAIL, with a fix suggestion for anything that is not a clean PASS. A WARN is a missed optimization, not a broken page, and never fails the run on its own.
Technical SEO (12)
GEO / generative engine optimization (9)
You can run only one category by editing the checks block in llmscout.json ({ "checks": { "technical": true, "geo": false } }).
CLI reference
Transcribed from the tool's own --help output.
--json, --user-agent, -V/--version, and -h/--help are the only global options.
Exit codes
MCP Server
LLMScout ships a Model Context Protocol server so an AI agent (Claude, Cursor, or any MCP-compatible client) can run SEO/GEO checks against a live site directly, without a human invoking the CLI by hand.
Install the extra:
Add it to your MCP client's config (for Claude Desktop, claude_desktop_config.json):
The server exposes one tool, run, that shells out to the published llmscout npm binary with the
given subcommand and arguments plus --json, and returns the parsed JSON result:
Transport is stdio, so there is nothing to host: the MCP client spawns the server as a local
subprocess. Source: python/src/llmscout/mcp_server.py.
Fleet mode
fleet is aimed at agencies or teams that maintain several client sites side by side as local repos. You declare each site in one manifest and check them all in a single command:
Add --out-dir ./reports and each site's result is also written to its own auto-named file (client-a.txt, client-b.txt, or .json with --json) -- instead of one combined stdout dump, an agency running this across many client sites gets one distinguishable report per client. Each manifest entry's path resolves against the manifest file's own directory, not the process working directory, so the same manifest works no matter where you invoke it from. Everything is local filesystem access, with no SSH and no remote-execution surface.
Library API reference
Both distributions are also genuinely importable libraries, not just CLIs. The exports below are real (grepped from src/index.ts and python/src/llmscout/__init__.py), and the examples are tested against the published packages, not written from memory.
TypeScript (llmscout-cli on npm):
Types: Check, CheckContext, CheckResult, CheckStatus ("PASS" \| "FAIL" \| "WARN"), CheckCategory ("technical" \| "geo"), SiteResources, LLMScoutConfig, FleetManifest. No generated API docs site exists yet; this table and the source's own TSDoc comments are the reference.
Python (llmscout-cli on PyPI):
The Python package mirrors the TypeScript one function-for-function: load_site, run_checks, has_failure, ALL_CHECKS/TECHNICAL_CHECKS/GEO_CHECKS, init_project, load_fleet_manifest/run_fleet, safe_fetch/assert_http_url, load_config/default_config/select_checks, plus the Check, CheckContext, CheckResult, and SiteResources types. Full list in python/src/llmscout/__init__.py's __all__. No generated Sphinx docs exist yet; the module docstring (import llmscout; help(llmscout)) and this table are the reference.
Comparison
Every cell below is drawn from a verifiable source (a repo file, a package manifest, or an open issue), cited under the table. "Checker" means the tool audits an existing live site; "generator" means it emits SEO/GEO asset files for you to publish.
Sources: LLMScout, from this repo's package.json, src/fetch-utils.ts, src/checks/index.ts, and the absence of child_process in src/. claude-seo, from its README install section (Python 3.10+, install.sh/install.ps1, /plugin), its MIT license, and open issues #137/#138/#139. geo-seo-claude, from its README and its own issue tracker (Windows install pain issues #69, #21, #3, all cited above). geo-optimizer-skill, from its README (Python 3.9+, pip install geo-optimizer-skill / uvx, MIT, CLI with audit/fix commands).
Hosted analytics products such as Profound, Peec, and Evertune are a different category (paid, hosted GEO-tracking dashboards, not installable OSS checkers) and are intentionally not in this table.
What is LLMScout, and why does it exist
LLMScout is an independent, open-source command-line tool that checks a website for 21 technical-SEO and generative-engine-optimization issues. It ships as two genuinely independent, feature-equivalent distributions: a TypeScript/Node CLI with two runtime dependencies (cheerio, commander) and zero external interpreter or browser, and a Python CLI with zero runtime dependencies at all. Neither child_process (TypeScript) nor a subprocess call (Python) appears anywhere in either implementation's checks.
It exists to replace the install flow of an existing project, AgriciDaniel/claude-seo, for one specific class of problem. That project is a Claude Code SEO/GEO skill that carries out its checks by shelling out to Python scripts (Playwright-based rendering, pip-installed dependencies) from skill instructions. That external-toolchain-plus-path-resolution chain is the root cause behind a recurring pattern of install/Windows/path bugs filed against it, including three issues (since closed, but each documenting the architectural failure mode this project exists to avoid): #137 (a fresh /plugin install provisions neither the Python dependencies nor Playwright Chromium), #138 (skill instructions hardcode python3, which does not exist on a stock Windows install), and #139 (skills call scripts/*.py through a relative path that does not resolve when the scripts live under the plugin root). The same class of pain shows up independently in zubair-trabzada/geo-seo-claude, another actively used Claude Code GEO skill (issues #69, #21, #3) -- the failure mode is architectural, not specific to one project.
LLMScout is not a fork of either project. It shares no code with them, has a different name, and reimplements the equivalent checks from scratch. The design choice that matters is what it does not do: because the checks run inside the host process rather than by launching an external interpreter and a headless browser, the entire failure class behind those bugs does not exist here. There is no interpreter to provision, no pip install to run beyond the package itself, no browser binary to download, and no relative script path to resolve, so a fresh install behaves the same on every platform. The direct cost of that choice is that the content-extraction check is a static-HTML heuristic and cannot evaluate content that only appears after client-side JavaScript renders. The check documents this limitation in its own output.
Beyond the install-fix wedge, LLMScout's checks track the concrete, evidence-backed direction the GEO space has actually moved since mid-2025 -- see Why GEO checks matter right now for the cited sources behind that claim, including the training-versus-search AI crawler split, Markdown content negotiation, and Google's own documented FAQ-rich-result deprecation.
LLMScout was freshly renamed from its original name, SeoFleet. Both distributions are being republished under the new package name (llmscout-cli on both npm and PyPI) -- see Install for both paths, and the badges above for live version status.
FAQ
Does LLMScout require Python?
No. The npm distribution is pure TypeScript/Node with two dependencies (cheerio, commander). There is no pip install step and no Python interpreter involved at any point in that path.
Does it use Playwright or a headless browser?
No, in either distribution. Both fetch HTML over http(s) and parse it (cheerio in TypeScript, the standard library in Python). There is no Chromium download and no subprocess call anywhere in either implementation's checks. The trade-off is that the content-extraction check reads static HTML only and cannot see JavaScript-rendered content. It says so in its own result message.
What does "zero-config" mean here, concretely?
llmscout init <path> writes a working llmscout.json and a Claude Code skill file with no prompts. The one value you must supply is your live site URL (via --site-url or by editing the file), because the tool cannot infer a project's public URL from its local files. After that, llmscout check <path> runs with no further configuration; all 21 checks run by default.
Why does LLMScout track training crawlers and search crawlers separately? Because OpenAI and Anthropic actually run them as separate, independently blockable user agents now. Blocking GPTBot (training) has no effect on whether OAI-SearchBot can still retrieve and cite your page live in a ChatGPT answer, and the same split applies to ClaudeBot versus Claude-SearchBot. Reporting them together would hide a real, actionable distinction.
Does LLMScout tell me to add an llms.txt?
No, it only reports whether one exists. llms.txt is a real, growing convention, but Google has stated publicly it does not support it -- see Why GEO checks matter right now for the source. LLMScout reports facts a site owner can act on; it does not take a position on an unsettled question.
Why not just fix claude-seo or geo-seo-claude directly instead of building a separate tool? Their install/Windows bugs share a single root cause: checks are performed by shelling out to an external interpreter-plus-browser toolchain from skill instructions. Patching each symptom leaves that architecture in place. LLMScout removes the architecture instead: with no external toolchain, that class of install and path failure cannot recur. It is an independent reimplementation, not a patch.
Can I run it against many sites at once?
Yes. llmscout fleet manifest.json runs the full suite against every site in a local JSON manifest in one invocation, and --out-dir writes one auto-named report file per site instead of one combined stdout dump -- built for agencies checking many client sites.
Can an agent or script consume the output?
Yes. Pass the global --json flag to any command for structured JSON, including per-check id, status, message, and fix fields, plus a summary object. Exit codes are stable: 0 clean, 1 at least one FAIL, 2 a usage/config error.
Is there a Python version?
Yes -- pip install llmscout-cli installs a genuine, independent Python port (not a wrapper around the Node binary), with zero runtime dependencies. It runs the same 21 checks with the same PASS/WARN/FAIL verdicts as this npm package. See python/README.md.
Can I use LLMScout commercially, or in a closed-source project? Yes. Both distributions are MIT licensed (see LICENSE): you can use, modify, and redistribute LLMScout in commercial and closed-source work, with no royalty and no obligation to open-source anything it checks. The only requirement is keeping the copyright notice and license text if you redistribute the source itself.
Contributing
See CONTRIBUTING.md for the full guide, covering both the TypeScript and Python codebases. Useful commands for this package:
CI (.github/workflows/ci.yml) runs lint, typecheck, build, coverage, and npm audit --audit-level=high on every push and pull request to main. Issues and pull requests are welcome at https://github.com/RudrenduPaul/LLMScout/issues.
Adding a 22nd check is intentionally small: implement the Check interface (src/types.ts) in a new file under src/checks/, then register it in src/checks/index.ts (and the Python equivalent under python/src/llmscout/checks/, per CONTRIBUTING.md).
License
MIT. See LICENSE.
來源:README.md,提交 1065c55
工具
0版本歷史
1- v0.3.7最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
