SiteMCP(sitemcp)は、指定したWebサイトをクロールして本文をMarkdownに変換し、MCPサーバーとしてAIアシスタントに渡すコマンドラインツールです。作者はryoppippi氏で、2025年4月に公開されました。ただし2026年4月12日、作者はREADME冒頭に「This repository is archived.」と告知しており、npmの最新版は2025年8月11日公開の0.5.9のまま止まっています。この記事では、v0.5.9のソースと実行結果をもとに、使い方・全オプション・つまずきやすい挙動を整理し、いま使うべきか・何に置き換えるべきかまで判断材料を示します。
まとめ:SiteMCPの現状と使いどころ
- SiteMCPは「サイト全体を取得→本文抽出→Markdown化→MCPの2ツールで返す」だけのCLIで、ローカルのstdioで動きます。設定画面やサーバー常駐型の管理機能はありません。
- 使い方は
npx sitemcp <URL>を起動コマンドとしてClaude DesktopやClaude CodeのMCP設定に登録するだけです。オプションは7つで、よく使うのは-m(取得範囲の絞り込み)と-l(1回に返す文字数)です。 - v0.5.9には、キャッシュがURLだけで決まり
-mを変えても古い結果が返る、キャッシュ用ディレクトリが無い初回起動で落ちることがある、JavaScript描画のサイトとShift_JISのページは読めない、といった挙動があります。 - 2026年4月に作者がアーカイブを告知し、静的ドキュメントをMCPで渡すこと自体を「アンチパターン」と書いています。新規採用より、npm同梱のドキュメントやllms.txtなど静的に取れる手段を先に検討するのが妥当です。
以下、仕組み→使い方→オプション→注意点→アーカイブと代替手段の順に説明します。
SiteMCPの仕組み:取得したページを2つのMCPツールで返すCLI
SiteMCPはegoist氏のsitefetch(サイトを丸ごと取得して1つのテキストファイルに保存するツール)をフォークし、保存先をファイルからMCPサーバーに置き換えたものです。MCP自体の仕組みはMCP(Model Context Protocol)の定義と仕組みの解説にまとめています。
起動時の処理:クロールから本文抽出・Markdown化・キャッシュまで
起動するとまず指定URLを取得し、ページ内の<a>から同じホストへのリンクだけを拾って順に辿ります(既定の同時接続数は3)。各ページはJavaScriptを実行しない仮想DOM(happy-dom)に流し込み、MozillaのReadabilityで本文を抜き出し、turndownでMarkdownへ変換します。結果はページのパス名をキーにした一覧として ~/.cache/sitemcp/ にJSONで保存され、次回以降の起動はクロールせずこのファイルを読みます。
全ページの取得が終わってからMCPの通信を始める作りのため、ページ数の多いサイトではクライアント側の起動待ちが長くなります。READMEが「登録前に一度sitemcpを実行しておく」ことを勧めているのはこのためです。
公開される2つのツール:indexOf〜とgetDocumentOf〜
MCPクライアントから見えるツールは2つだけです。ツール名にはURLから作った名前が入り、https://vite.dev なら indexOfVite と getDocumentOfVite になります。
| ツール | 引数 | 返す内容 |
|---|---|---|
| indexOf〜 | max_length, start_index | パス名とタイトルの一覧 |
| getDocumentOf〜 | subpath, max_length, start_index | 1ページ分のMarkdown本文 |
AIはまず一覧を取り、読みたいページのパスを指定して本文を取ります。本文は既定で2,000文字ずつ返り、残りはremainingContentLengthで示されるので、長いページはstart_indexをずらして複数回呼ぶことになります。Viteの入門ページ(/guide/)では1回目に2,000文字が返り、残りは8,881文字でした。このページを読み切るには合計6回の呼び出しが要ります。
SiteMCPの使い方:起動コマンドとMCPクライアントへの登録
コマンドラインでの起動とキャッシュの作成
インストールは不要で、npx・bunx・pnpxのいずれかでその場で実行できます。常用するならnpm i -g sitemcpで入れても構いません。package.jsonにenginesの指定は無く、Node.jsの対応版は明記されていません。
npx sitemcp https://vite.dev -m "/guide/**" --concurrency 10
ターミナルで直接実行すると、取得したページが順に表示されたあと標準入出力で待ち受け状態になります。この時点でキャッシュが書き込まれるので、Ctrl+Cで止めてからクライアントに登録すれば、クライアント起動時はキャッシュの読み込みだけで済みます。
Claude DesktopとClaude Codeへの登録手順
Claude Desktopでは、READMEの例どおり設定ファイルのmcpServersに起動コマンドを書きます。
{
"mcpServers": {
"daisy-ui": {
"command": "npx",
"args": ["-y", "sitemcp", "https://daisyui.com", "-m", "/components/**"]
}
}
}
Claude Codeではclaude mcp addの--以降に同じコマンドを渡します。スコープは既定でlocal(そのプロジェクトの自分だけ)です。
claude mcp add vite-docs -- npx -y sitemcp https://vite.dev -m "/guide/**"
通信方式はstdioだけで、HTTPで待ち受けるモードはありません。リモートのMCPクライアントから共有サーバーとして使う用途には向きません。MCPサーバーをエージェントに接続するときの権限の考え方はAIエージェントにMCPで外部ツールを接続する実装手順で扱っています。
SiteMCP v0.5.9のオプション一覧と既定値
sitemcp --help に出るオプションは次の7つです(--cacheと--no-cacheは1組として数え、ヘルプ・バージョン表示は除く)。
| オプション | 既定値 | 役割 |
|---|---|---|
-c, --concurrency |
3 | 同時リクエスト数 |
-m, --match |
なし | 取得するパスをglobで限定(複数可) |
--content-selector |
なし | 本文を探すCSSセレクター |
--limit |
なし | 取得ページ数の上限 |
--no-cache |
キャッシュ有効 | キャッシュを読まず書かない |
-t, --tool-name-strategy |
domain | ツール名の元(subdomain/domain/pathname) |
-l, --max-length |
2000 | 1回に返す上限 |
-mはmicromatchのglobでパス名と照合します。-tは同じドメインで複数のドキュメントを登録するときに効き、https://react-tweet.vercel.app/をsubdomainにするとindexOfReactTweetになります。-lは本文では文字数の上限ですが、一覧(indexOf〜)では「返す件数」の上限として使われます。既定の2,000のままなら一覧は2,000ページ分まで一度に返ります。
v0.5.9の実装から分かる注意点
ここからは、2026年9月27日にmacOS(x86_64)・Node.js v26.5.0で[email protected]を実行し、v0.5.9タグのソースと突き合わせて確認した挙動です。READMEには書かれていません。
URL単位のキャッシュと取得範囲変更時の再利用
キャッシュファイル名はURLから作られ(https://vite.dev なら vite-dev.json)、-mや--limitはファイル名にも照合にも使われません。-m "/guide/**"で一度起動したあと-m "/blog/**"に変えて起動すると、一覧には/guide/配下のページがそのまま返り、/blog/配下は1件も入りませんでした。有効期限も無いため、ドキュメントが更新されても自動では取り直しません。
取得範囲を変えたとき、または元サイトが更新されたときは、~/.cache/sitemcp/の該当ファイルを削除してから、キャッシュを有効にした通常起動で再取得します。--no-cacheはキャッシュを読まず書きもしないため、既存ファイルの更新には使えません。
キャッシュ用ディレクトリ未作成時のENOENTエラー
キャッシュ用ディレクトリの作成(fs.promises.mkdir)の完了を待たずにファイル書き込みを始めるため、ディレクトリがまだ無い状態の初回起動でENOENT: no such file or directoryを出して終了することがあります。XDG_CACHE_HOMEを存在しない場所に向けて試すと5回中5回この終了になり、クライアント側には「Connection closed」とだけ表示されました。落ちた後にはディレクトリができているので、もう一度起動すれば動きます。登録直後に接続失敗が出たら、設定を疑う前に再起動を1回試してください。
JavaScript描画への非対応とShift_JISの文字化け
取得時はJavaScriptの実行を無効にしているため、本文をクライアント側で描画するSPA型のドキュメントサイトは空に近い内容になります(Issue #7「Support SPA」は未解決のまま)。また、HTMLを常にUTF-8として読むので、Shift_JISやEUC-JPで配信される日本語ページは文字化けします。Content-Typeに文字コードの指定が無くShift_JISで書かれた個人サイトを--limit 3で取得したところ、一覧のタイトルは全件が「�」の羅列でした。同じ不具合はIssue #24で報告され、これも未解決です。
limitの上限超過と、-m指定でも起点ページが入る点
--limitは保存済みページ数を見てから次を取りに行くため、同時取得中の分だけ上限を超えます。https://vite.dev -m "/guide/**" --limit 5で起動すると7ページ保存されました。また-mを指定しても起点URLのページはパターン照合を省略するため、本文の抽出に成功すれば取得対象に含まれます。起点がトップページとは限らず、一覧の先頭に並ぶ保証もありません。-mに一致しないページはリンクも辿らないため、起点URLから目的のページへ至る経路に、指定パターンに一致しない中間ページがあると取りこぼします。sitemap.xmlは読まない作りで(対応の提案はIssue #19・#20で未実装)、robots.txtの確認もありません。取得先のサイトの利用規約やクロールの負荷は、スクレイピングとクローリングの違いと実装・法務の判断と同じ観点で利用者が判断する必要があります。
2026年4月のアーカイブ告知と開発状況
作者は2026年4月12日のコミットで、GitHubリポジトリのREADME冒頭に「This repository is archived.」と告知しました。理由として、公開当時はコーディングエージェントの能力が低く、LLMのWeb検索も当てにならなかったためサイト丸ごとの取得に意味があったが、その後コミュニティは静的ドキュメントをMarkdownで配布する、npmパッケージで配る、最後の手段としてWeb検索を使う、という簡素な方法に収束したと書いています。そのうえで、静的ドキュメントをMCPで渡すことは「an anti-pattern」になったという見解を示しています。
2026年9月27日時点の配布状況は次のとおりです。
| 項目 | 値 |
|---|---|
| npm最新版 | 0.5.9(2025-08-11) |
| 最初の公開 | 0.1.0(2025-04-07 UTC) |
| 公開中の版数 | 27 |
| 直近30日のダウンロード | 1,482(2026-08-26〜09-24) |
| GitHubスター | 759 |
| ライセンス | MIT |
0.5.9以降、コードの変更はありません。前節の不具合(キャッシュ作成の競合・文字化け・SPA非対応)は修正されない前提で扱うべきです。
SiteMCPの代替手段と、いま使ってよい場面
作者が勧める代替:npm同梱ドキュメントとllms.txt
作者は2025年12月14日のブログ「ドキュメントをnpm packageとしてpublishしよう」で、MCPでドキュメントを渡す方法の問題を3点挙げています。コーディングエージェントに登録できるMCPサーバーの数には上限があること、多く登録すると定義だけでcontext windowを圧迫すること、一度に返せる量に限りがあるため何度もやり取りが必要になり「N+1問題」が起きることです。SiteMCPのページ送り(start_index)もその例だと作者自身が書いています。
代わりに勧めているのは、ドキュメントをnpmパッケージに同梱してnode_modulesから読ませる方法で、実例としてbun-types、@gunshi/docs、@praha/byethrow-docsを挙げています。本体への同梱、または対応版のドキュメント専用パッケージの選択によって、利用中のライブラリに対応する文書をローカルに置ける点が、SiteMCPのように最新のWebサイトを取得する方式との違いです。サイト側がMarkdownの要約を提供するllms.txtも、同じブログで取り上げられています。
手順や規約をエージェントに覚えさせたい場合は、ドキュメント取得ではなくAgent Skills(SKILL.md)の仕組みで渡す方法もあります。社内の大量文書を検索させるならMCPよりRAGの領域で、両者の役割分担はMCPとRAGの違いと使い分けで整理しています。GitHubのリポジトリを要約させたい場合はDeepWiki-OpenのようにコードからWikiを生成する方式が合います。
SiteMCPを今から使ってよい場面・避けるべき場面
使ってよいのは、llms.txtもnpm同梱ドキュメントも無い、サーバー側でHTMLを返すUTF-8のドキュメントサイトを、手元のClaude DesktopやClaude Codeで一時的に読ませたいときです。数十ページ程度に-mで絞り、キャッシュの扱いを理解していれば、v0.5.9でも十分動きます。
避けるべきなのは次の場面です。
- SPA型のドキュメントサイトや、Shift_JIS・EUC-JPの日本語サイト(本文が取れない・化ける)
- 数千ページ規模のサイト(全件取得まで待ち受けが始まらず、Issue #13ではメモリ不足で停止した報告がある)
- チームで共有する常設のドキュメント基盤(stdio専用・保守終了・キャッシュの自動更新なし)
保守の止まったツールを業務の前提に組み込むのは避け、個人の調べものに限って使うのが現実的な線引きです。
よくある質問
SiteMCPは無料で使えますか?
無料です。MITライセンスのOSSで、npmから誰でも実行できます。APIキーや利用登録もありません。
SiteMCPはログインが必要なページも取得できますか?
取得できません。リクエストに付けるのはuser-agentヘッダー(SiteMCPとリポジトリURL)だけで、Cookieや認証ヘッダーを渡すオプションはありません。公開ページのみが対象です。
取得したドキュメントを最新にするにはどうすればよいですか?
~/.cache/sitemcp/にあるURL名のJSONファイルを削除してから起動し直します。キャッシュに有効期限は無く、削除しない限り初回に取得した内容が返り続けます。
SiteMCPとMCPはどういう関係ですか?
MCPはAIアプリと外部のツール・データをつなぐ通信の規格で、SiteMCPはその規格に沿って動くサーバーの1つです。SiteMCPが提供するのは、取得済みページの一覧取得と本文取得の2つのツールだけです。
SiteMCPはアーカイブ後も使えますか?
npmの0.5.9は2026年9月27日時点でも実行できます。ただし2026年4月に作者がアーカイブを告知しており、不具合の修正や新しいMCP仕様への追随は見込めません。