lockdocs について
lockdocsは、プロジェクトのロックファイルを読み、導入済みライブラリの正確なバージョンに対応するドキュメントを調べる、コーディングエージェント向けのMCPサーバー兼CLIです。ローカルの文書やAPI宣言を検索し、オフラインで使えて、回答には出典が付きます。
主な機能
- 01ロックファイルから固定バージョンを読み取り
- 02ローカル文書とAPI宣言を検索
- 03バージョン別のAPIシグネチャを確認
- 04キャッシュによるオフライン検索
- 05ファイル名と行番号を引用
活用シーン
- 01依存ライブラリのAPIをバージョン別に確認
- 02関数シグネチャや使用文書を検索
- 03オフラインで依存文書を調査
MCP 対応
resolve、docs、apiツールをMCPクライアントに公開し、依存バージョン、文書、API情報の検索に使えます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| root | string | いいえ | プロジェクトの絶対パス(既定ではクライアントのワークスペースルート、またはサーバーの作業ディレクトリ)。 |
| filter | string | いいえ | パッケージ名の部分文字列。推移的依存関係も検索します。 |
詳細
lockdocs
ロックファイルから、ライブラリの正確なバージョンのドキュメントを取得します — ローカルで、オフラインで、レート制限なし。
ロックファイルを読み込みます。インストールしたバージョンのドキュメントと型宣言に基づいて回答します。
npm · PyPI · crates.io · Go。MCP サーバーと CLI を1つの Rust バイナリに搭載。アカウントも API キーも不要。MIT。
npx -y @sylphx/lockdocs setup
ドキュメント · クイックスタート · ツール · ベンチマーク · 比較 · 仕組み
実際のターミナルでの様子:1つの質問、2つのインストール。pydantic 1.10.18 は BaseModel.dict()(pydantic/main.py:427)、pydantic 2.9.2 は model_dump()(pydantic/main.py:352)と回答します。冒頭では Next.js 14 と 15 の cookies() を比較します。
動作を確認する
pydantic 2.9.2 を固定しているプロジェクトで、BaseModel.model_dump の正確なシグネチャを尋ねます(上のデモで実行しているものです)。
$ lockdocs api BaseModel.model_dump --tokens 300
[email protected] · pypi · .venv/lib/python3.12/site-packages · pinned in uv.lock
### pydantic.main.BaseModel.model_dump (method) — [email protected] pydantic/main.py:352
def model_dump(self, *, mode: Literal['json', 'python'] | str = 'python', include: IncEx | None = None, …) -> dict[str, Any]
Usage docs: https://docs.pydantic.dev/2.9/concepts/serialization/#modelmodel_dump
Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
pydantic 1 のプロジェクトで同じ呼び出しをすると、pydantic 1.10.18 には model_dump がないことを回答し、代わりに最も近いドキュメントを示します。
クイックスタート
npx -y @sylphx/lockdocs setup # add lockdocs to Claude Code, Codex, Cursor, VS Code, Claude Desktop, Windsurf, Gemini CLI
これで完了です。Claude Code だけを使っていますか? claude mcp add lockdocs -- npx -y @sylphx/lockdocs mcp。setup は利用中のクライアントを検出し、それぞれの MCP 設定を書き込み、変更内容をすべて表示します。もう一度実行しても、何も変更されません。次に、エージェントに 「lockdocs を使って、使用している zod で未知のキーを拒否する方法を教えて」 のように尋ねてください。
ターミナルで、任意のプロジェクト内から実行します。
npx -y @sylphx/lockdocs zod "reject unknown keys" # docs for the zod version in your lockfile
npx -y @sylphx/lockdocs api axum::Router::route # exact signature + doc comment
npx -y @sylphx/lockdocs resolve # every pinned version, and whether its docs are here
npx -y @sylphx/lockdocs fetch # once: add upstream docs at each version's git tag
Cursor と VS Code にワンクリックで追加
Node 18 以降が必要です。エディターでインストールを確認し、プロジェクトを開いてサーバーを有効にしてください。どちらのリンクもローカルで npx -y @sylphx/lockdocs mcp を実行します。API キーは必要ありません。
ターミナルから VS Code を使う場合:
code --add-mcp '{"name":"lockdocs","command":"npx","args":["-y","@sylphx/lockdocs","mcp"]}'
または、サーバーを .cursor/mcp.json に追加します:
{
"mcpServers": {
"lockdocs": {
"command": "npx",
"args": [
"-y",
"@sylphx/lockdocs",
"mcp"
]
}
}
}
.vscode/mcp.json では、VS Code の servers 形式を使用します:
{
"servers": {
"lockdocs": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@sylphx/lockdocs",
"mcp"
]
}
}
}
MCP の手動設定
{
"mcpServers": {
"lockdocs": { "command": "npx", "args": ["-y", "@sylphx/lockdocs", "mcp"] }
}
}
Claude Code:claude mcp add lockdocs -- npx -y @sylphx/lockdocs mcp
Claude Code プラグイン:/plugin marketplace add SylphxAI/lockdocs を実行し、続けて /plugin install lockdocs@lockdocs を実行します
Codex(~/.codex/config.toml):
[mcp_servers.lockdocs]
command = "npx"
args = ["-y", "@sylphx/lockdocs", "mcp"]
サーバーは、クライアントのワークスペースルート(または作業ディレクトリ、あるいは LOCKDOCS_ROOT)を対象に応答します。すべてのツールで root も指定できます。
理由
エージェントは、インストールしたバージョンではなく、覚えているライブラリのバージョンに基づいてコードを書きます。そのため、pydantic 2 のモデルに .dict() を呼び出したり、Next.js 15 で await なしに cookies() を呼び出したり、axum 0.8 で /:id ルートを使ったりします。ホスト型のドキュメントサーバーは役立ちますが、プロンプトからバージョンを推測し、無料利用に上限を設け、プライベートパッケージを参照できません。
lockdocs は、バージョンに関する問題を解消します:
- 正確なバージョンを、設定なしで特定。
package-lock.json、pnpm-lock.yaml、yarn.lock、bun.lock、Cargo.lock、uv.lock、poetry.lock、Pipfile.lock、requirements*.txt、go.modを読み取ります。ライブラリ ID も、プロンプトで「v14 を使う」と指定する必要もありません。 - コードに同梱されたドキュメント。 README、変更履歴、
docs/フォルダーに加え、パッケージ自体に含まれる API リファレンスも対象です。これには、JSDoc 付きの.d.ts宣言、Python の docstring とスタブ、rustdoc コメント、Go のドキュメントコメントが含まれます。インストールされていればドキュメントも参照でき、プライベートパッケージや社内パッケージも対象です。 - キャッシュ後はオフラインで無制限に利用可能。 パッケージファイルは
node_modules、仮想環境、~/.cargo/registry、Go モジュールキャッシュから読み取られます。オプションのモデルは一度だけダウンロードされ(129 MB、保存時は 32 MB)、--offline(またはLOCKDOCS_OFFLINE=1)であらゆるダウンロードを禁止できます。LOCKDOCS_EMBED=0はモデルのみを無効にします。アカウントも、ホスト型のクエリ利用上限もありません。初回利用時に送信される上流へのリクエストからわかるのは、取得対象の公開リポジトリとバージョンであり、質問やプロジェクトファイルではありません。 - 初回利用時に上流のドキュメントを取得。 Next.js、Django、FastAPI などのパッケージにはドキュメントが含まれていません。クエリに応じて、固定されたリリースタグから解決した不変のコミットを参照し、公開 GitHub ドキュメントを匿名で、ダウンロード量を制限して追加します。
--no-fetchまたはLOCKDOCS_FETCH=0で取得を無効にできます。キャッシュ済みのドキュメントは引き続きオフラインで利用できます。取得に失敗した場合はローカルの回答と併せて報告し、最新バージョンのドキュメントで置き換えることはありません。 - 単語だけでなく意味を検索。 BM25 と、小型のローカル埋め込みモデル(1 回だけダウンロードされ、ディスク上で 32 MB)を組み合わせたハイブリッド検索に加え、非推奨に関する注記(「代わりに
model_validateを使用してください」など)から API のリダイレクトを行います。 - 簡潔で出典付きの回答。 トークン予算(デフォルトは 1,200)に収まるようにまとめ、すべてのセクションに
package@version path:line形式の出典を付けます。
エージェントが得られる情報
使い慣れていない API を使う前に毎回呼び出せるほど、低コストな 3 つのツールです。
| ツール | 質問例 | 戻り値 |
|---|---|---|
resolve | 「どの zod を使っていますか?」 | すべてのロックファイルに記載された固定バージョン、直接依存か間接依存か、ドキュメントの場所(またはインストール方法) |
docs | 「不明なキーを拒否するにはどうすればよいですか?」(必要に応じて package: "zod") | インストール済みバージョンのうち、最も関連性の高い README、変更履歴、API セクションを予算内で提示します。それぞれ [email protected] v4/classic/schemas.d.ts:453 のように出典を示します |
api | z.object、tokio::spawn、BaseModel.model_dump、gin.Context.JSON | 正確なシグネチャとドキュメントコメント、オーバーロード、クラス/インターフェース/構造体/トレイトのメンバー、その他の一致項目 |
エコシステム
| エコシステム | バージョンの取得元 | ドキュメントの参照元 | API リファレンス |
|---|---|---|---|
| npm | package-lock.json、npm-shrinkwrap.json、pnpm-lock.yaml(v5-v9)、yarn.lock(v1 および Berry)、bun.lock。それ以外の場合は package.json と node_modules | node_modules(pnpm の .pnpm ストアやモノレポのルートを含む)、Yarn PnP の zip キャッシュ(.yarn/cache、Berry のグローバルキャッシュ) | JSDoc を含む .d.ts/.d.mts/.d.cts。パッケージに含まれていない場合は @types/*、それ以外の場合は JSDoc が付いた JS |
| PyPI | uv.lock、poetry.lock、pdm.lock、Pipfile.lock、requirements*.txt。それ以外の場合は仮想環境 | .venv、venv、$VIRTUAL_ENV、$CONDA_PREFIX、その後にシステムインタープリター | .py および .pyi スタブの docstring とシグネチャ。wheel の METADATA に含まれる README |
| crates.io | Cargo.lock | ~/.cargo/registry/src(または $CARGO_HOME)、~/.cargo/git/checkouts の Git 依存関係、vendor/ | rustdoc(///、//!)が付いた公開項目。tokio の cfg_rt! など、マクロ内で宣言された項目も含みます |
| Go | go.mod(replace を含む) | $GOMODCACHE/~/go/pkg/mod、vendor/ | ドキュメントコメントが付いたエクスポート済み関数、メソッド、型、インターフェースメソッド。パッケージドキュメント |
パッケージ内に同梱された古いコピー(zod 4 内の zod/v3、pydantic 2 内の pydantic/v1)は、現行 API よりも下位に位置付けられます。
初回利用時の上流ドキュメント
最初の docs または api クエリでは、選択した依存関係の公開リリースタグのドキュメントが一度だけ追加されます。パッケージ自体のメタデータから GitHub リポジトリを特定し、固定バージョンの Git タグを見つけ、そのタグを不変のコミットに解決して、ドキュメントフォルダーのみ(Markdown、MDX、reStructuredText、ドキュメントの例)をダウンロードします。環境にある GitHub 認証情報は使用せず、メジャーバージョンのウェブサイトのドキュメントもデフォルトではダウンロードしません。以前にオプトインしたドキュメントサイトのキャッシュは保持され、その出所も引き続き表示されます。ドキュメントを事前にキャッシュし、メジャーバージョンのドキュメントサイトを明示的に追加するには、引き続き lockdocs fetch を利用できます。回答では [email protected] upstream:docs/01-app/.../cookies.mdx:12 のように出典を示します。上流ドキュメントと取得を参照してください。
インストールされていない場合は、正確なバージョンを取得(オプトイン)
レジストリからのパッケージのダウンロードは引き続きオプトインです。デフォルトの上流情報補完では、インストール済みパッケージのメタデータを使用します(埋め込みモデルの初回ダウンロードを除く)。固定されたパッケージがインストールされていない場合(新規クローン、CI、確認中のロックファイルなど)は、その旨とインストール方法を知らせます。--fetch を渡す(または LOCKDOCS_FETCH=1 を設定する、あるいは lockdocs setup --fetch を実行する)と、そのバージョンをレジストリから正確に取得し、キャッシュに保存できます(npm tarball、PyPI wheel または sdist、crates.io の .crate、Go module proxy の zip)。取得した回答には fetched from registry.npmjs.org と表示されます。使用していないバージョンを尋ねることもできます。例:lockdocs npm:[email protected] "strict object" --fetch。
ベンチマーク
バージョンによって正解が異なる105問を、15のライブラリ(zod、Next.js、React Router、pydantic、axum、tokio、Tailwind CSS、ESLint、Prisma、React、Vite、Express、SQLAlchemy、Django、FastAPI)について出題します。各問は、そのバージョンがインストールされた実際のプロジェクトで尋ねます。正解と判定されるには、回答にバージョンに合った API が含まれ、他のバージョンの API が含まれていない必要があります。同じ質問と採点基準を、GitHub がホストするランナー上で Context7 の匿名 API に対しても実行しています(実行):
| 正解数 | 古いメジャーバージョン | 新しいメジャーバージョン | tokio | 保留問題 | トークン中央値 | レイテンシ中央値 | |
|---|---|---|---|---|---|---|---|
| lockdocs、初回のデフォルト利用 | 70/105 | 28/45 | 38/55 | 4/5 | 10/18 | 894 | 185 ms |
lockdocs + lockdocs fetch | 96/105 | 38/45 | 53/55 | 5/5 | 16/18 | 880 | 58 ms |
| Context7(匿名) | 77/105 | 19/45 | 53/55 | 5/5 | 15/18 | 908 | 2,583 ms |
- バージョンが最も重要な場面では、lockdocs が2倍の成績です(古いメジャーバージョンで38/45対19/45)。Context7 は最新の API で回答することがよくあります(pydantic 1に関する質問に、pydantic 2の回答を返します)。
- 新しいメジャーバージョンでは同点(どちらも53/55)、tokioでも同点(どちらも5/5)で、保留問題では上回っています(16/18対15/18)。保留問題は、測定対象のランキング変更より前に作成され、チューニングには使用されていません。
- 高速で、トークン数が少なく、利用枠もありません。
lockdocs fetchの後は、質問ごとのレイテンシ中央値が58 msです(初回利用時は185 ms)。毎回、新しい CLI プロセスを起動しています。Context7 のホスト型 API は、再利用された回答の取得元となった以前の実行では、レイテンシ中央値が2,583 msでした。
手法、質問、質問ごとの結果、スクリプトについては、ベンチマークページとbench/をご覧ください。
同じ105問を、Sylphx Search(当プラットフォームのウェブ検索。技術ドキュメント分野では、パッケージ内に含まれないドキュメントをホスト型インデックスで提供します)でも、bench/cloud.py を使って出題しています。ローカルとクラウドは、1つのコーパスを1つの採点基準で評価するため、lockdocs と Sylphx Search は別々の製品ではなく、1つのインデックス形式と1つのランキングを共有しています。
比較
| lockdocs | Context7 | docs-mcp-server | Ref | |
|---|---|---|---|---|
| ドキュメントの取得元 | インストール済みのパッケージ | 公開リポジトリやサイトのホスト型インデックス | スクレイピングしてローカルインデックスに取り込んだサイトやリポジトリ | ホスト型インデックス |
| 対象バージョン | ロックファイルに基づく正確なバージョン | ライブラリ ID またはプロンプトで選択。ライブラリごとにインデックス化されているバージョンは少数 | スクレイピングしたバージョン | ほとんどは最新版 |
| ライブラリごとの設定 | 不要 | 不要 | ライブラリごと(およびバージョンごと)にスクレイピング | 不要 |
| プライベート/内部パッケージ | はい。インストールされている場合 | 有料プラン | はい。スクレイピングした場合 | 接続したプライベート GitHub リポジトリと PDF(プランによる制限あり) |
| 型とドキュメントコメントからの API リファレンス | .d.ts、docstring、rustdoc、Go doc | ドキュメントのスニペット | ドキュメントページ | ドキュメントページ |
| オフラインでの動作 | はい | いいえ | スクレイピング後は可能 | いいえ |
| 制限 | なし | 匿名利用は ratelimit-limit: 200(観測値)。無料キーは月1,000回 | なし | 無料クレジット200回分を一度だけ利用可能。その後は月額$19から |
| アカウント/API キー | 不要 | 任意 | 任意(エンベディング用) | 必要 |
| ライセンス | MIT | クライアントはMIT、ホスト型サービスは独自ライセンス | MIT | プロプライエタリ |
Context7 は、パッケージ内には含まれない多くのサイトやガイドを把握しているため、回答がドキュメントサイトにしかない質問では、より優れた結果を出せます。lockdocs はそれ以外のケース、つまりバージョンが重要なとき、オフラインやレート制限下にあるとき、そしてパッケージが自分たちのものであるときに役立ちます。両者は併用できます。
仕組み
- 解決。 プロジェクト内のすべてのロックファイル(およびその上位にあるモノレポのルート)を解析し、正確な
(ecosystem, name, version)の組に変換して、直接依存関係に印を付けます。 - 特定。 各パッケージのファイルをディスク上で見つけ、インストール済みのバージョンとロックファイルを照合します。バージョンの不一致は隠さず報告します。
- 抽出。 README、変更履歴、ドキュメントフォルダーを見出し単位のセクションに分割します。
.d.ts、Python、Rust、Go のソースは tree-sitter で解析し、シグネチャ、ドキュメントコメント、修飾パス(z.object、tokio::task::spawn、pydantic.main.BaseModel.model_dump)を含むシンボルに変換します。 - インデックス化とキャッシュ。 BM25(識別子を考慮したトークナイザー、軽量なステミング、小規模なプログラミング用同義語テーブル)に加え、エントリーごとに静的な model2vec モデルで埋め込みを1つ生成します。パッケージ、バージョン、ソースごとにディスク上へキャッシュするため、各バージョンのインデックス化は一度だけです。
- 回答。 キーワードと埋め込みのスコアを統合し、ドキュメントのシグナルと非推奨リダイレクトを適用したうえで、引用を添えてトークン予算内に結果を収めます。
GitHub ホストランナーでの一般的な処理時間:Next.js 15 のすべての宣言(7,700シンボル)のインデックス化に約0.4秒、zod 4 では約0.05秒かかります。いずれもバージョンごとに一度だけです。クエリの処理時間はその後、5~20ミリ秒です。
CLI
lockdocs <package> [question] Docs for the version this project pins (no question: overview)
lockdocs resolve [filter] Pinned versions and where their docs are
lockdocs docs <question> Search all direct dependencies (--pkg to focus)
lockdocs api <symbol> Exact signature + doc comment
lockdocs fetch [package...] Once: upstream docs at each version's tag, missing packages, the model
lockdocs index [package] Build indexes ahead of time
lockdocs cache [clean] Show or delete the cache
lockdocs upgrade <pkg> <ver> Pro: API changes from the pinned version to <ver>, with your call sites
lockdocs licence status|activate <token> Show or activate a Pro licence (free to run)
lockdocs setup Configure MCP clients (--client a,b --dry-run --remove --fetch)
lockdocs mcp MCP server on stdio
Options: -C/--root <dir>, --pkg <package>, --tokens <n>, --fetch, --no-fetch, --offline, --json
macOS(arm64、x64)、Linux glibc(x64、arm64)、Windows x64 用のビルド済みバイナリは npm 経由で提供され、各 GitHub リリースにも含まれています。ソースからインストールするには、cargo install --git https://github.com/SylphxAI/lockdocs lockdocs を実行します。
Pro
上記の機能はすべて MIT ライセンスのもとで無料です。Pro では、チーム向けに2つの機能が追加されます。プライベートソースでは、lockdocs が社内パッケージとドキュメントを、プライベート npm、PyPI、Cargo、Go レジストリ、および普段使用している GitHub Enterprise、GitLab、Bitbucket ホストから読み込みます。.npmrc、uv、pip、Cargo、Go、git がすでに保持している認証情報を使用し、それぞれのホストにのみ送信します。これらは同じ resolve、docs、api ツールと lockdocs fetch から利用できます。もう1つはアップグレードレポートです(lockdocs upgrade next 15.0.0、または docs ツールの upgrade_to)。固定したバージョンから対象バージョンまでの間に、使用している API のどれが削除、名称変更、非推奨になったかを、呼び出し箇所とともに確認できます。lockdocs Pro の現在のライセンス料金をご覧ください。ライセンスはオフラインで確認されます。lockdocs licence activate <token> を実行するか(lockdocs licence status で状態を確認できます。期限の最後の30日間は警告が表示されます)、CI で LOCKDOCS_LICENCE_TOKEN を設定してください。詳細:lockdocs Pro。
プライバシー
lockdocs はマシン上のファイルを読み込み、stdio 経由で回答します。ネットワークの使用先は、huggingface.co からの埋め込みモデルの一度限りのダウンロード(リビジョンを固定し、SHA-256 を検証します。LOCKDOCS_EMBED=0 または --offline でスキップできます)と、匿名の GitHub リクエスト(git タグの検索と codeload.github.com からの tarball のダウンロードを1回。レート制限のある REST API は使用しません。アーカイブが大きすぎる、またはダウンロードに失敗したリポジトリは、代わりに REST API を通じてファイルごとに読み込みます)です。後者は、初回のクエリ時に、解決したリリースコミットの公開ドキュメントを取得するために使用します。--fetch / lockdocs fetch も公開レジストリと主要バージョンのドキュメントサイトリポジトリにアクセスします。GITHUB_TOKEN / GH_TOKEN を使用できるのは、こうした明示的なフェッチに限られ、api.github.com でのみ使用されます(git、codeload、raw ダウンロードでは使用されません。プライベートリポジトリはサポートされません)。上流へのリクエストで開示されるのはリポジトリ、バージョン、ファイルパスであり、質問、ロックファイル、プロジェクトファイルは開示されません。--no-fetch / LOCKDOCS_FETCH=0 はクエリに伴うパッケージやドキュメントのダウンロードを無効にし、--offline / LOCKDOCS_OFFLINE=1 はすべてのダウンロードを禁止します。キャッシュは OS のキャッシュディレクトリに保存されます(LOCKDOCS_CACHE で変更できます)。
オープンソースの README ビジュアル
上記のAI フレンドリー度バッジは、ローカルで
repomap のエージェント対応スコアによって生成されます。
リポジトリで npx -y @sylphx/repomap score を実行すると、チェック項目、推奨される修正、バッジのスニペットを取得できます。スコアはヒューリスティックであり、セキュリティ監査や認証ではありません。スコアの算出時にソースがアップロードされることはありません。非公開リポジトリのスコアは、そのスコアを公開する意図がある場合にのみ公開してください。
GitHub データカードは、オープンソースの Mark サービスによって提供されます。こちらは、この公開リポジトリのカードです。
[](https://github.com/SylphxAI/lockdocs)
username と repo を、ご自身の公開リポジトリの値に置き換えてください。ユーザートークンは不要です。Mark のカードのオプションとセルフホストの手順をご覧ください。
Sylphx のその他のプロジェクト
- anymd:あらゆるファイル(PDF、Word、PowerPoint、Excel、EPUB、HTML、画像)を、AI エージェント向けのクリーンな Markdown に変換します。
- repomap:コードグラフ、検索、呼び出しパス、変更による影響を備えた、AI エージェント向けのコードベースマップです。
- skills:Claude Code と Codex 向けの、実戦で検証済みのエージェントスキルを、1つのコマンドでインストールできます。
- readme-mark:1つの URL から美しい README 画像を生成します。バナー、バッジ、アイコン、統計カードに対応しています。
Sylphx のその他のプロジェクト:https://sylphx.com/open-source
- Sylphx apps:Sylphx のアプリとツールです。
スター履歴
サポート
ご質問、バグの報告、チームでの導入については、[email protected] までメールするか、issue を作成してください。
MIT ライセンス。© Sylphx Limited。イングランドおよびウェールズで登記、会社番号 16438428。登記上の所在地:128 City Road, London EC1V 2NX, United Kingdom。メール:[email protected]。プライバシー · 利用規約 · sylphx.com
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。