Llmstxt Doc Search
概要
作者による説明(英語の原文)
BM25 search over llms.txt doc indexes (Strands, Kiro, AWS); sources addable at runtime.
PopNx MCPの3つの柱
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
- 利用者の声iレビューはまだありませんレビューは今後のステップで、アカウント機能と一緒に始まります
- 私たちの基本チェックi1項目中1項目に合格公開情報からチェック。コードはまだスキャンしていません
- 利用状況iとても新しい↓ 50/週 · ★ –
できること
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
- 接続方法: パソコンで動く
- トランスポート: stdio
- カテゴリ: 検索・AIの記憶
インストール
使っているAIアプリを選んで、設定をコピーしてください。
インストールの前に
- 基本チェック:1項目中1項目に合格
- あなたのパソコンで、あなたのユーザーと同じ権限(ファイル、ネットワーク、アプリ)で動きます。
- レジストリには、入力が必要なキーは載っていません。
必要なもの
- npmNode.jsのインストール(npxコマンドに必要)
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"llmstxt-doc-search": {
"command": "npx",
"args": [
"-y",
"@praveenc/llmstxt-doc-search"
]
}
}
}ターミナルでこれを実行します
claude mcp add llmstxt-doc-search -- npx -y @praveenc/llmstxt-doc-searchまたは、設定を自分でコピーする
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"llmstxt-doc-search": {
"command": "npx",
"args": [
"-y",
"@praveenc/llmstxt-doc-search"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
または、設定を自分でコピーする
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"llmstxt-doc-search": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@praveenc/llmstxt-doc-search"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
できること
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
基本チェックi
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月9日にチェック
- ✓ 合格
作者とリポジトリが一致
レジストリ名は、リポジトリを所有するGitHubアカウント praveenc で確認済みです
- … 未チェック
今もメンテナンスされている
このリポジトリはまだGitHubから読み取っていません
- … 未チェック
ライセンスがある
このリポジトリはまだGitHubから読み取っていません
- – 対象外
エンドポイントが応答する
これはパソコンで動くため、インターネット上のエンドポイントはありません
- – 対象外
OAuthでサインイン
パソコンで動き、代わりにローカルの設定を使います
- … 未チェック
ツールの説明に隠れた指示がない
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
検索・AIの記憶のほかのサーバーとの比較i
- このカテゴリのほかの5756件のうち0%よりスターが多い
- このカテゴリのほかの5756件のうち50%より最近レジストリに公開
- 基本チェックの結果が、このカテゴリのほかの5756件のうち100%と同じかそれ以上
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
よくある質問
Llmstxt Doc Searchは安全ですか?
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
どんなキーやコードが必要ですか?
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
パソコンで動きますか、それともクラウドですか?
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
今もメンテナンスされていますか?
GitHubリポジトリの最終更新は–、最新バージョン(1.0.0)がレジストリに届いたのは40 日前です。
どのアプリで使えますか?
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
代わりに使えるものは?
同じカテゴリには:Context7, Codebase Memory, Exa
代わりの候補
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Codebase Memory
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Exa
Connect AI agents to Exa for web search, content fetching, and multi-step research.
作者のREADME
READMEを開く
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
llmstxt-doc-search
Live, ranked search across any number of
llms.txtdocumentation sites - Strands, Kiro, the AWS guides, and whatever you add at runtime.
llmstxt-doc-search is a Model Context Protocol (MCP) server that turns the llms.txt index a documentation site publishes into a fast, ranked search tool your agent can call. It indexes titles at startup, ranks queries with BM25, and fetches the full document only when you open a result - so you get current docs with almost no local storage. Built on the search engine from @praveenc/mcp-docs-server, generalized to a runtime registry of sources.
It implements the MCP 2026-07-28 specification over stdio and still works with clients on the 2025 protocol, which open with an initialize handshake. Requires Node.js 20 or later.
Why
An llms.txt file is a curated index of a doc site's pages, published for tools like this one to consume. They can be large - AWS Bedrock's lists roughly a thousand documents - so downloading everything is wasteful and goes stale fast.
This server takes a leaner approach:
- Title-only index, built lazily. On first search of a source, only the page titles are indexed. That is fast to build and tiny to hold in memory.
- Ranked with BM25. Queries are scored with BM25 plus Porter stemming, bigrams, and markdown-aware weighting (headers, code, and links count for more). Technical terms like
mcp,json, andstdioare preserved rather than stemmed. - Content on demand. The full markdown or HTML of a result is fetched only when you call
fetch_doc.
The result is a good fit for broad, fast-moving reference material - the opposite tradeoff to snapshotting docs into a local vault.
Installation
Quick start (recommended)
Add the server to your MCP client configuration (Claude Desktop, Kiro, and others). It is downloaded and run on demand via npx - no manual build:
{
"mcpServers": { "llmstxt-doc-search": { "command": "npx", "args": ["-y", "@praveenc/llmstxt-doc-search"] } } }
Global install
npm install -g @praveenc/llmstxt-doc-search
Then point your MCP client at the installed binary:
{
"mcpServers": { "llmstxt-doc-search": { "command": "llmstxt-doc-search" } } }
Quick start
Once the server is connected, the typical flow is three calls:
- `docs_home()` - orient yourself: see the registered sources and how to search and fetch.
- `search_docs("prompt caching", "aws-bedrock-userguide")` - rank matching docs. Omit the source to search everything.
- `fetch_doc(url)` - read the full content of a result you like.
Add your own source at any time and it is indexed immediately and persisted for future runs:
add_doc_source("langgraph", "https://langchain-ai.github.io/langgraph/llms.txt")
Tools
| Tool | Purpose |
|---|---|
docs_home() | Orientation: registered sources plus how to search and fetch. Call this first. |
list_doc_sources() | List sources with their llms.txt URL and index status, including the last index error for a failing source. |
search_docs(query, source?, k?) | BM25 search. Omit source to search all, or scope to one. Returns ranked {source, url, title, score, snippet}, where score (0-1) is comparable across sources. k defaults to 5 (max 50). |
fetch_doc(url) | Fetch the full content of a result URL. The URL must be under the llms.txt directory of a registered source, or listed in the llms.txt of a source that has been indexed (by a search, add, or refresh). |
add_doc_source(name, llms_txt_url) | Register and index a new llms.txt source at runtime. Persisted. Rejected if that llms.txt is already registered or contains no links. |
remove_doc_source(name) | Remove a registered source. |
refresh_doc_source(name) | Re-index a source to pick up new or changed docs. A source whose llms.txt fails to index is skipped for 5 minutes; this retries it immediately. |
docs_home, list_doc_sources, search_docs, and fetch_doc are annotated read-only, so a client can approve them without prompting. add_doc_source, remove_doc_source, and refresh_doc_source change the persisted registry, and remove_doc_source is annotated destructive. The tool list is fixed, so it is advertised as cacheable for one hour.
Default sources
Seeded into the registry on first run:
strands, kiro, aws-bedrock-userguide, aws-agentic-ai-lens, aws-bedrock-agentcore-devguide, mcp.
The registry is persisted at ~/.config/llmstxt-doc-search/sources.json (override with LLMSTXT_REGISTRY_PATH). Anything you add, remove, or refresh at runtime is saved there.
Configuration
All configuration is via environment variables; none are required.
| Variable | Default | Meaning |
|---|---|---|
LLMSTXT_REGISTRY_PATH | ~/.config/llmstxt-doc-search/sources.json | Where the source registry is persisted. |
LLMSTXT_SNIPPET_HYDRATE_MAX | 5 | How many top hits to fetch when building result snippets. |
LLMSTXT_PAGE_CACHE_MAX | 50 | Max fetched pages kept in memory per source (LRU); least-recently-used pages are evicted past this. 0 disables the cap. |
LLMSTXT_LOG_LEVEL | info | Log verbosity: debug, info, warn, or error. Logs go to stderr only. |
Testing with MCP Inspector
npx @modelcontextprotocol/inspector npx -y @praveenc/llmstxt-doc-search
The Inspector can connect in either protocol era; see Protocol eras.
Development
Clone the repository for local work (Node.js 20 or later):
git clone https://github.com/praveenc/llmstxt-doc-search.git
cd llmstxt-doc-search npm install
Commands
npm run dev # run from source with tsx (no build)
npm test # offline unit and protocol tests npm run typecheck # type-check without emitting npm run build # compile to dist/ npm run inspect:dev # MCP Inspector against the source
Local MCP client config (development)
Point your client at a source checkout instead of the published package:
{
"mcpServers": { "llmstxt-doc-search": { "command": "npx", "args": ["tsx", "/ABS/PATH/llmstxt-doc-search/src/index.ts"] } } }
Or, after npm run build, at the compiled entry point:
{
"mcpServers": { "llmstxt-doc-search": { "command": "node", "args": ["/ABS/PATH/llmstxt-doc-search/dist/index.js"] } } }
Architecture
src/
├── index.ts # Tool registration and the stdio entry point (serves 2026-07-28 and 2025-era clients) ├── config.ts # Defaults and environment configuration ├── tools/ │ └── docs.ts # search_docs, fetch_doc, and source management └── utils/ ├── doc-fetcher.ts # HTTP fetching, redirect handling, HTML parsing ├── indexer.ts # BM25 search index ├── registry.ts # Persisted source registry ├── store.ts # In-memory document store ├── text-processor.ts # Tokenization and snippet helpers ├── url-validator.ts # SSRF guard and URL validation ├── stopwords.ts # Stop-word list └── logger.ts # Logging utilities
Search algorithm
Ranking uses BM25 (Best Matching 25) with several enhancements:
- Porter stemming matches word variants (for example,
runningandrun). - Bigrams capture phrase matches (for example,
prompt caching). - Weighted scoring boosts title matches (3-8x), headers (4x), code blocks (2x), and link text (2x).
- Domain-term preservation keeps technical terms like
mcp,json, andstdiounstemmed so they match exactly.
Security
This server fetches user-supplied URLs at runtime, so its SSRF surface is guarded in depth:
- Scoped fetches.
fetch_doconly retrieves URLs that a registered source'sllms.txtlists exactly, or that sit under that source's origin and path prefix (matched on a path boundary rather than a raw string prefix). There is no arbitrary fetch. - Scheme allow-list. Non-
http(s)schemes are rejected. - Range-based address blocking. Private and reserved destinations are blocked using IP range classification (
ipaddr.js), covering decimal, octal, and hex IPv4, IPv4-mapped IPv6, loopback, link-local, unique-local, carrier-grade NAT, and other reserved ranges - not just a hostname regex. - Connection-time validation. The resolved IP is checked at connection time via a custom DNS lookup, closing DNS-rebinding, and every redirect hop is re-validated.
- Bounded responses. Response bodies are capped at 10 MB to limit memory and regular-expression (ReDoS) exposure.
Runtime dependencies report zero known vulnerabilities.
License
MIT - Copyright (c) 2026 Praveen Chamarthi
Contributing
Contributions are welcome. If you find a bug or have an idea:
- Open an issue describing the problem or proposal.
- For code changes, fork the repo and create a feature branch.
- Keep changes focused, add or update tests, and make sure
npm test,npm run typecheck, andnpm run buildall pass. - Open a pull request against
mainwith a clear description of what changed and why.
Commit messages follow the Conventional Commits style.
Support
- Questions and ideas: open a GitHub issue.
- Bugs: please include your MCP client, the tool call you made, and any relevant logs (set
LLMSTXT_LOG_LEVEL=debugfor more detail). - Security issues: open an issue marked as security-sensitive, or contact the maintainer directly rather than posting exploit details publicly.
Built for the MCP community ❤️