mcpField
U
URLs-LE

URLs-LE

ローカル
letools.dev開発ツール11 日前に更新

URLs-LE について

URLs-LE は、文書、コード、設定から URL を集めたい開発者向けの抽出ツールです。プロトコルと位置を報告し、単一文書とワークスペースを走査できます。対応形式では特定のコメントやコード領域を除外します。

主な機能

  1. 01URL、プロトコル、行・列位置の抽出
  2. 02Markdown、HTML、コード、設定形式への対応
  3. 03形式に応じたコメントやコード領域の除外
  4. 04フォルダーやワークスペースの走査と重複集計
  5. 05重複除去と並べ替えのコマンド

活用シーン

  1. 01文書内のリンクの一覧化
  2. 02ソースコード内の URL の確認
  3. 03設定ファイル内のサービスアドレスの集約
  4. 04抽出したリンクを別の検査ツールに渡す

MCP 対応

MCP サーバーは `extract_urls` ツールを公開し、テキストを受け取って URL、プロトコル、位置を返します。結果は既定で 500 件に制限され、切り詰め情報も含みます。ファイル読み込みやネットワーク要求は行いません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nolindnaidoo-urls-le": {
"command": "npx",
"args": [
"-y",
"urls-le-mcp"
]
}
}
}
起動コマンドnpx -y urls-le-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmurls-le-mcp2.4.0

ツール

1

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
dedupebooleanいいえ重複する URL は最初の出現のみを残します。
formatenumいいえドキュメントの形式です。このパラメーターまたは `filename` を指定してください。一般的な拡張子と別名を受け付けます。それ以外は拒否せず、プレーンテキストとしてスキャンします。markdown | html | css | javascript | typescript | json | yaml | properties | toml | ini | xml | csv | plaintext
contentstringはいスキャンするドキュメントのテキスト。
filenamestringいいえ`format` が指定されていない場合に形式を推定するためのファイル名です(例:"README.md")。
maxResultsintegerいいえ返される URL の上限(デフォルトは 500)。meta.truncated は、破棄された URL があるかどうかを示します。

詳細

URLs-LE ロゴ

URLs-LE:手間なくURLを抽出

キーを1回押すだけで、現在のファイルからすべてのURLを抽出
あらゆるテキストファイルに対応 — Markdown、HTML、CSS、JavaScript、TypeScript、JSON、YAML、Properties、TOML、INI、XMLのそれぞれに応じて除外対象を判別します

VS Code Marketplaceからインストール Open VSXのダウンロード数 npmのurls-le-mcp npmのurl-le crates.ioのurls-le LE Tools


VS CodeでのURLs-LE

役に立ちましたか? 星や評価を付けると、ほかの開発者がこのツールを見つけやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace

機能

ファイルを開き、URLs-LE: Extract URLsを実行すると、ドキュメント内のすべてのURLが新しいエディターに表示されます。そこから重複を削除して並べ替えられます。VS Code、およびCursorやVSCodiumなどのVS Codeベースのエディターで動作します(Open VSXからインストール可能です)。

  • リンクの監査 — MarkdownとHTMLのリンク、オートリンク、通常のURLをすべて抽出します(Markdownではコードブロック、HTMLではコメントを除外)
  • ソースのレビュー — JS/TS全体の文字列リテラル、テンプレートリテラル、コメント内のURLを抽出します
  • 設定ファイルの一括確認 — JSON文字列、YAML値、Javaプロパティ、TOML/INI値、XML(Maven POM、フィード)内のURLを抽出します

インストール

場所利用できる機能インストール
VS Codeエディター内でキーを押すだけでURLを抽出Marketplace
Cursor、VSCodium、Windsurf同じ拡張機能Open VSX
ターミナルまたはCIステップディレクトリーツリー全体で同じ処理を実行し、終了コードを取得npx url-le · npm または cargo install urls-le · crates.io
Node経由で利用する任意のMCPエージェントstdio経由のextract_urlsnpx urls-le-mcp · npm

AI エージェントから使用する

同じ抽出エンジンがMCPサーバーとして動作するため、コマンドを実行する代わりに、エージェントから直接呼び出せます。

エディター方法
VS Code 1.101+インストール不要です。拡張機能がエージェントモードに extract_urls を登録します
Claude Codeclaude mcp add urls-le -- npx -y urls-le-mcp
Cursor、Windsurf、その他すべてnpx urls-le-mcp を指定してください

Claude Code のエージェントが urls-le MCP サーバーを呼び出している様子

extract_urls(content, format?, filename?, dedupe?, maxResults?)

すべての URL をプロトコルと1始まりの行番号・列番号とともに返します。デフォルトでは最大500件に制限され、大きなファイルでエージェントのコンテキストウィンドウがあふれないよう、meta.truncated も返します。

サーバーはコンテンツを受け取ってデータを返します。ファイルを読み込まず、独自にネットワークリクエストを行うこともありません。npm では urls-le-mcp として、MCP レジストリでは io.github.nolindnaidoo/urls-le として公開されています。

手動で設定する — MCP 設定ファイルがあるホストならどれでも使用できます

ほとんどのホストは JSON 設定ファイルを読み込みます。エントリーを1つ追加してください。

{
  "mcpServers": {
    "urls-le": {
      "command": "npx",
      "args": ["-y", "urls-le-mcp"]
    }
  }
}

初回実行時に -y を指定すると、インストールの確認を省略できます。リリースを追跡したくない場合は、[email protected] のようにバージョンを固定してください。

起動のたびに npx を使いたくない場合は、一度インストールして、代わりにバイナリを指定してください。

npm install -g urls-le-mcp
{
  "mcpServers": {
    "urls-le": { "command": "urls-le-mcp" }
  }
}

stdio 経由で MCP として通信し、環境変数、API キー、独自の設定は必要ありません。組み込む前に動作を確認するには、次のコマンドを実行してください。

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y urls-le-mcp

ツールの一覧が出力されて終了します。extract_urls が表示されれば、サーバーは動作しています。

## フォルダーまたはワークスペース全体

Extract は、現在開いているドキュメントを読み取ります。スキャンではディスク上の多くのファイルを読み取り、レポートを1つ作成します。

  • ワークスペース全体:コマンドパレットから URLs-LE: Extract URLs from Workspace を実行します。
  • 1つのフォルダー:エクスプローラーでフォルダーを右クリックして Extract URLs from Folder を選ぶか、URLs-LE: Extract URLs from Folder を実行してフォルダーを選択します。

プロジェクト内では同じ URL が何か所にも記載されるため、レポートには重複のない URL が使用頻度の高い順に表示され、それぞれの記載回数と記載場所も示されます。

# URLs-LE workspace report

`my-project` · 3 file(s) read · 2 distinct URL(s), 5 occurrence(s) in 3 file(s)

| URL | Occurrences | Files |
|---|---|---|
| `https://example.com/docs` | 3 | 2 |
| `https://api.example.com/v1` | 2 | 2 |

## `https://example.com/docs` (3)

- `config.json` · **2:12**
- `docs/a.md` · **1:5**, **1:34**

## `https://api.example.com/v1` (2)

- `docs/a.md` · **2:6**
- `src/b.ts` · **1:14**

これは urls-le.showPositions がオンの場合です。デフォルトではオフになっており、その場合、各行にはファイル名と、そのファイル内での URL の出現回数が表示されます:docs/a.md (2)。クリップボードへのコピー内容は、Extract と同様に urls-le.clipboardIncludesPositions に従います。

スキャンで読み取る内容。 ファイルはディスクから読み取られるため、保存されていない編集内容は反映されません。安全上のサイズ制限を超えるファイルや、UTF-8 テキストではないファイルは読み取られません。スキャンは5,000ファイルまたは一覧表示された10,000件の出現箇所で停止します。レポートの末尾には、読み取られなかった項目ごとに1行が追加されるため、短いレポートを、問題のないプロジェクトの結果と誤認することはありません。

スキップする対象と変更方法。 3つのスイッチはデフォルトでオンになっており、設定でそれぞれ個別にオフにできます。

スイッチスキップする対象
scanUseDefaultExcludes依存関係フォルダー、ビルド出力、ツールキャッシュ、ロックファイル。全リストは以下を参照してください
scanRespectGitignoreプロジェクトの .gitignore ファイルでスキップされるもの
scanSkipBinaryFiles画像、フォント、アーカイブなどのテキストではないファイル

スイッチをオフにせずに結果を調整できるリストが2つあります。さらにスキップするには、scanExcludes にパターンを追加します。スイッチによってスキップされるものを読み取るには、scanAlwaysInclude に追加します。

{
	// Also skip the test fixtures.
	"urls-le.workspace.scanExcludes": ["**/fixtures/**"],
	// Read the vendored code, though the built-in list skips it.
	"urls-le.workspace.scanAlwaysInclude": ["**/vendor/**"]
}

URLs-LE: Open Settings を実行すると、これらの設定がすべて設定エディターで開きます。

組み込みのリスト

場所を問わず対象となるフォルダー:

.git、.hg、.svn、node_modules、bower_components、jspm_packages、.pnpm-store、.yarn、vendor、site-packages、Pods、Carthage、dist、build、out、target、_build、_site、dist-newstyle、zig-out、storybook-static、cdk.out、DerivedData、CMakeFiles、.next、.nuxt、.output、.svelte-kit、.angular、.astro、.docusaurus、.vuepress、.expo、.turbo、.parcel-cache、.cache、.sass-cache、.jekyll-cache、.dart_tool、.pub-cache、.gradle、.kotlin、.cxx、.externalNativeBuild、captures、ephemeral、.symlinks、.swiftpm、.build、.bundle、.stack-work、.zig-cache、.godot、elm-stuff、.vercel、.netlify、.serverless、.aws-sam、.terraform、.venv、venv、__pycache__、.tox、.nox、.mypy_cache、.pytest_cache、.ruff_cache、.ipynb_checkpoints、.eggs、coverage、htmlcov、.nyc_output、.vscode-test、.idea、.vs、xcuserdata、*.egg-info

場所を問わず対象となるファイル:

*.min.js、*.min.css、*.map、*.snap、*.lock、package-lock.json、pnpm-lock.yaml、npm-shrinkwrap.json、go.sum、*.pbxproj、*.iml、local.properties、output-metadata.json、.flutter-plugins、.flutter-plugins-dependencies、.packages、Generated.xcconfig、flutter_export_environment.sh、GeneratedPluginRegistrant.*、fastlane/report.xml、fastlane/test_output/**、doc/api/**

多くのプロジェクトで通常のフォルダーとして使われているため、リストに含まれていないもの:bin、obj、tmp、logs、public、generated。これらのフォルダーを生成するプロジェクトでは、git で除外されるため、スキャンは .gitignore を読み取ります。

スキャンに影響する設定は、設定にあります。

CLI

同じ抽出処理を、ターミナルやシェルのパイプラインから実行できます。Rust 製の CLI は crate/ にあり、拡張機能と同じコーパス — crate/fixtures/ — を共有しているため、両者でドキュメントの読み取り方が異なることはありません。npm から npm install -g url-le でインストールするか(または npx url-le で実行)、crates.io から cargo install urls-le でインストールできます。どちらも同じ urls-le コマンドをインストールし、出力がバイト単位で一致することが保証されています。npm パッケージ名が url-le なのは、urls-le がすでに使われていたためです。

urls-le .                     # every URL in the tree; JSON on stdout when piped
urls-le --dedupe docs/        # one line per distinct URL
urls-le mcp                   # the same extraction over MCP on stdio

# the point of the whole thing:
urls-le . | jq -r '.urls[].value' | sort -u | lychee -

ターミナルでの urls-le

npm (url-le) または crates.io (urls-le) からインストールできます。どちらも同じ urls-le コマンドをインストールします。

npm の url-le crates.io の urls-le

npm install -g url-le   # or run it once: npx url-le
cargo install urls-le

終了コードは grep に準拠しています — URL が見つかった場合は 0、見つからない場合は 1、質問の形式が不正な場合は 2 — そのため if urls-le src/; then … のように使えます。何も見つからないこともエラーではなく結果として扱われます。

意図的に、特定の判断をしません。 リンクチェックも、安全でないスキームを示すフラグも、フィルタリングもありません。本番環境の設定で http:// の URL は誤りでも、テスト用フィクスチャでは正しい場合があります。代わりに判断するツールは、設定して、反論して、最後にはミュートすることになり、そのミュートと一緒に抽出処理まで止まってしまいます。lychee に渡して、そちらに判断を任せてください。

対応フォーマット

フォーマット言語 ID備考
Markdownmarkdownフェンス付きコードブロックとインラインコードを除外
HTMLhtml`` コメントを除外(複数行に対応)
CSScss引用符付きまたは引用符なしの url(...)、@import
JavaScript / TypeScriptjavascript、typescript文字列、テンプレートリテラル、コメント
JSONjsonjsonc-parser のトークンオフセットを使って文字列リテラルのみを抽出。コメントはトリビアとして扱います
YAMLyamlコメントを含むコンテンツ全体
Propertiesproperties#/! で始まるコメント行を除外
TOMLtoml解析された値のみ。コメントは除外
INIiniコンテンツ全体。ただし ;/# で始まるコメント行は除外
XMLxml属性とテキストコンテンツ
その他すべてanyドキュメント全体をスキャン。fileType は unknown を返します

ドキュメントを拒否することはありません。 上記の 11 種類では除外対象を把握しています。それ以外の言語 ID — python、go、shellscript、csv、plaintext、log など、エディターが何と呼んでいても — は全体をスキャンします。どのテキストでも URL は明確に判別でき、除外すべきものが含まれていないためです。

抽出されるプロトコル:http、https、ftp、file、mailto(@ が必要)、tel。出現箇所はすべて、実際の行番号と列番号とともに報告されます。TOML の位置はソース内で順方向に特定されるため、同じ値が繰り返される場合は概算になることがあります。URL は空白または引用符・括弧の区切り文字で終わるため、相対リンク(/docs)やベアドメイン(example.com)は抽出されません。また、URL に生の空白が含まれている場合は、空白までの部分文字列が抽出されます。末尾の ./, は有効な URL 文字のため保持されます。

コマンド

コマンド説明
URLs-LE: Extract URLsアクティブなドキュメントからすべての URL を抽出します
URLs-LE: Extract URLs from Workspaceワークスペース内のすべてのファイルにある重複のない URL と、それぞれの場所を表示します
URLs-LE: Extract URLs from Folder1 つのフォルダーを対象に同じ処理を行います。エクスプローラーでフォルダーを右クリックしても実行できます
URLs-LE: Deduplicate URLs結果から重複する行を削除します
URLs-LE: Sort URLs結果をアルファベット順、ドメイン順、または長さ順に並べ替えます
URLs-LE: Open SettingsURLs-LE の設定を開きます
URLs-LE: Help組み込みのドキュメントを表示します

既定では、どのコマンドにもキーは割り当てられていません。エディターの Keyboard Shortcuts で、任意のコマンドにキーを割り当ててください。

設定

設定既定値説明
urls-le.openResultsSideBySidetrue現在のエディターの横に結果を開きます
urls-le.postProcess.openInNewFiletrue結果を新しいファイルで開きます(横に並べて表示しない場合)
urls-le.showPositionsfalse各 URL の行と列を表示します
urls-le.copyToClipboardEnabledfalse結果をクリップボードにもコピーします
urls-le.clipboardIncludesPositionsfalseコピーに行と列を含めます
urls-le.dedupeEnabledfalse抽出結果の重複を自動的に除去します
urls-le.notificationsLevelsilentall = すべての通知、important = 警告とエラー、silent = エラーのみ
urls-le.workspace.scanPatterns["**/*"]フォルダーまたはワークスペースのスキャン対象となるファイル
urls-le.workspace.scanUseDefaultExcludestrue依存関係のフォルダー、ビルド出力、キャッシュ、ロックファイルをスキップします
urls-le.workspace.scanRespectGitignoretrueプロジェクトの .gitignore ファイルで除外されるものをスキップします
urls-le.workspace.scanSkipBinaryFilestrue画像、フォント、アーカイブなどのテキスト以外のファイルをスキップします
urls-le.workspace.scanExcludes[]グロブパターンで、スキップするファイルを追加します
urls-le.workspace.scanAlwaysInclude[]上記 3 つの設定でスキップされる場合でも読み込むファイル
urls-le.workspace.scanMaxFiles50001 回のスキャンで読み込むファイルの最大数
urls-le.workspace.scanMaxResults10000読み込みを停止するまでに 1 回のスキャンで一覧表示する出現箇所の最大数
urls-le.safety.enabledtrue非常に大きなファイルに対する安全対策を有効にします
urls-le.safety.fileSizeWarnBytes1000000このファイルサイズを超える場合は抽出を拒否します
urls-le.safety.largeOutputLinesThreshold50000この行数を超える場合は警告します
urls-le.statusBar.enabledtrueステータスバー項目を表示します
urls-le.telemetryEnabledfalseローカルのみのイベントログ(プライバシーを参照)

言語

英語以外に 12 言語に対応しています。

ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)

マニフェスト(コマンドのタイトル、設定名、説明)と、拡張機能の実行中に表示されるすべての項目(通知、ステータスバー、並べ替えのクイックピック)の両方が翻訳されています。拡張機能は VS Code の表示言語に従うため、エディターに設定されている言語がそのまま適用されます。独自の設定はありません。

プライバシーとセキュリティ

  • ネットワークアクセスはありません。 この拡張機能は、抽出した URL を取得、検証、または ping することはありません。アクティブなドキュメントのテキストを読み取るだけです。telemetryEnabled 設定はイベントをローカルの出力チャネルに書き込み、確認できます(URLs-LE Telemetry)。マシンの外部にデータが送信されることはありません。
  • MCP サーバーも同じ方針を守ります。 引数としてコンテンツを受け取り、データを返すだけで、ファイルシステムへのアクセス、ネットワーク呼び出し、テレメトリーはありません。エージェントにはすでにファイル読み取りツールがあるため、サーバー内でそれらを重複させても機能は増えず、パストラバーサルの攻撃対象領域が広がるだけです。サーバーがいずれかにアクセスできるものをインポートすると、check:mcp-bundle によってビルドが失敗します。
  • エラー通知では、ホームディレクトリと認証情報のような文字列が伏せられます。
  • 評価を促すメッセージは最大 2 回です。 3 回目の正常な使用時に、評価するかどうかを一度だけ尋ねます。Later を選択した場合、またはメッセージを閉じた場合は、20 回目にもう一度だけ尋ねます。Don't Ask Again を選択すると、以後表示されません。notificationsLevel を自分で important または silent に設定すると、この機能は無効になります。回数は VS Code の拡張機能ストレージに保存され、どこにも送信されません。Rate を選択すると、ブラウザーでインストール元のマーケットプレイス(VS Code Marketplace または Open VSX)が開きます。

ドキュメント

内容場所
ツールが出力できる内容 — 対象範囲、出力契約、拒否、対象外crate/SPEC.md
拡張機能の構築方法と構成 — アーキテクチャ、不変条件、ツールチェーン、リリースAGENTS.md
CLI の構築方法と構成crate/AGENTS.md
変更内容CHANGELOG.md · crate/CHANGELOG.md
このツールのページと、ほかの 15 個letools.dev/tools/urls-le

パフォーマンス

入力サイズ検出数時間速度スキャン速度
Markdown ドキュメント2.63 MB50,00061.14 ms817,802/sec43 MB/s
HTML ページ1.25 MB30,00021.88 ms1,370,972/sec57 MB/s
JSON 設定1.52 MB40,00039.01 ms1,025,358/sec38.8 MB/s

Apple M5 Pro、24 GB RAM、Node 24.3.0 で、ウォームアップ後に 7 回実行した中央値です。入力はチェックインされているのではなく、scripts/benchmark.ts によって生成されるため、上記のサイズは測定時のものと正確に一致します。bun run benchmark で再現できます。

これらの値はマシン固有であり、CI では保証されません。ビルドをブロックするベンチマークでわかるのは、ランナーの負荷だけです。

テスト

指標カバレッジ
ステートメント77.59%
分岐67.64%
関数84.73%
行79.13%

35 ファイルにわたる 475 件のテストケースに加え、実際の VS Code 拡張機能ホストで実行する統合テストスイートと、ビルド済みの .vsix をクリーンなプロファイルにインストールするエンドツーエンドテストがあります。

実際の実行結果である coverage/coverage-summary.json と coverage/test-results.json から scripts/coverage-readme.js が生成します。このセクションに差異があると CI は失敗します。bun run test:coverage で再現でき、ケース数は vitest の出力に表示される値です。

LE ファミリーのその他のツール

あらゆるモデルが直面する作業に対応する、単機能ツールが16個あります。それぞれに Rust CLI と MCP サーバーが付属します。詳細はこちら:letools.dev

取り出す

  • String-LE — コードベース内のすべての文字列を抽出し、人が読めるようにします
  • Numbers-LE — コードベース内のすべてのハードコードされた数値を抽出し、人が確認できるようにします
  • Units-LE — 単位付きの数量をすべて抽出して正規化し、曖昧なものは名前を示して対象外にします
  • Dates-LE — すべての日付とタイムスタンプ、およびそれぞれが解決される正確な時点を抽出します
  • IDs-LE — UUID、ULID、NanoID、ObjectId、Snowflakeをすべて抽出し、内部に含まれる時刻をデコードします
  • IPs-LE — IPアドレス、CIDRブロック、MACアドレスをすべて抽出し、正規化してスコープ別に分類します
  • URLs-LE — コードベース内のすべてのURLを、プロトコルと正確な位置情報とともに抽出します
  • Paths-LE — コードベース内のすべてのファイルパスを抽出し、現在も何かを指しているかどうかを示します
  • Colors-LE — コードベース内のすべての色を抽出し、パレットにない色を示します

チェックする

  • Regex-LE — コードベース内のすべての正規表現を検出し、壊滅的なバックトラッキングを引き起こす可能性があるものを報告します
  • Versions-LE — リポジトリ内のマニフェスト間で、同じ依存関係のバージョン制約が異なる箇所を検出します
  • i18n-LE — プロジェクトで使用している i18n ライブラリを特定し、そのライブラリのルールに基づいてカタログを監査します
  • Scrape-LE — スクレイパーを書く前にページをスクレイピングできるか確認し、判定できない場合はその旨を示します

保護する

  • Secrets-LE — コードベース内のハードコードされた認証情報を検出し、レポートに表示することはありません
  • EnvSync-LE — ディレクトリツリー内の dotenv ファイルを比較し、どのファイルにどのキーがないかを示します
  • Unicode-LE — 意味を隠す Unicode を検出します。双方向制御文字、不可視文字、ホモグリフ、混在スクリプトが対象です

それぞれが独立しています。共有クレートも、公開されたコアもありません。2つのツールが同じ答えにたどり着くとすれば、それはその答えが2度正しかったからです。

お問い合わせ — nolindnaidoo.com · GitHub · LinkedIn

nolindnaidoo によるその他のプロジェクト

Rust — pixelcoords と pixelactions は一連のループを構成します。pixelcoords が 場所 に答え、pixelactions がそこで 操作 します。それぞれ独自のツールと独自の方針を持ち、LE ファミリーには属しません。

ライセンス

MIT © nolindnaidoo

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。