mcpField
D
DotNetSearch

DotNetSearch

ローカル
github.com/puneethdc99開発ツール01 日前に更新

DotNetSearch について

DotNetSearchは、開発者やコーディングエージェント向けのMCPサーバーです。コード検索、.NETパッケージの逆コンパイル、PDFの詳細な確認を提供し、検索結果の絞り込みやコード圧縮でコンテキスト使用量を抑えます。

主な機能

  1. 01キーワードや自然文によるコード検索
  2. 02構造的に関連するコードの検索
  3. 03NuGetアセンブリ内の型の逆コンパイル
  4. 04C#コードの空白圧縮
  5. 05PDFのテキスト、メタデータ、画像、構造の読み取り

活用シーン

  1. 01リポジトリ内の定義や一致行の特定
  2. 02関連する実装や呼び出し元の追跡
  3. 03参照先NuGetパッケージの型の確認
  4. 04技術PDFから指定範囲のテキストや画像を抽出

MCP 対応

stdio経由でMCPクライアントに、コード検索、ファイル読み取り、NuGet逆コンパイル、コード圧縮、PDF確認のツールを提供します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetPuneethDC.DotNetSearch1.0.3

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

DotNetSearch — MCP 検索・PDF サーバー

MCP Registry NuGet GitHub Release CI Build

MCP サーバー識別子: mcp-name: io.github.puneethdc99/dotnetsearch
(GitHub MCP Registry への登録に必要なパッケージ所有権の証明)

DotNetSearch は、GitHub Copilot、Claude、Cursor、その他の AI エージェントに、高性能なコードベース検索、NuGet パッケージの逆コンパイル、空白文字によるトークン削減、そしてPDF ドキュメントの詳細な読み取りと分析を提供する、自己完結型の MCP(Model Context Protocol)サーバーです。

主なツールの概要
カテゴリーツール目的
コード検索searchキーワードまたは自然言語のクエリに一致するファイルや行を検索します。一致した行のみを返します(ファイル全体の読み取りで約2500トークンのところ、約110トークン)
コード検索search_related既知の場所と構造的に類似したコードチャンクを検索します。呼び出し元、実装、パターンの発見に最適です
逆コンパイルdecompile_type参照されている NuGet パッケージのアセンブリから、任意の .NET 型を逆コンパイルします。ソースコードがなくても、C# クラス定義全体を取得できます
最適化compress_codeC# コードのインデントを1段階あたり4スペースから1スペースに減らし、空行を削除します。意味を変えることなく、トークンを10~20%節約できます
ファイル読み取りread_fileディスク上のファイルを読み取り、必要に応じて特定の行範囲を返します。search の後にファイル全体のコンテキストが必要な場合に便利です
PDF 読み取りread_pdf_textPDF ドキュメントから、ページごと、または指定したページ範囲にわたって、整理されたテキストを抽出します
PDF 読み取りget_pdf_infoPDF のメタデータ、総ページ数、ページごとの寸法、作成者、件名、作成日、構造を確認します
PDF の画像render_pdf_page_as_image任意の PDF ページを、カスタム DPI の高解像度 PNG 画像にラスタライズします。グラフ、図、表、スキャン文書の確認に最適です
PDF の画像extract_pdf_imagesPDF ページに埋め込まれたラスター画像を抽出し、ピクセル座標とともにディスクに保存します
PDF の構造get_pdf_bookmarks階層型目次、ブックマーク、ドキュメントのアウトラインを、リンク先ページとともに抽出します
PDF フォームget_pdf_form_fieldsインタラクティブな AcroForm フォームフィールド(テキストボックス、チェックボックス、ラジオボタン、ドロップダウン)とその値を読み取ります
PDF 添付ファイルextract_pdf_attachmentsPDF ドキュメントに埋め込まれたファイル添付を抽出し、ディスクに保存します
PDF リンクget_pdf_hyperlinksクリック可能な Web URL、文書内のページジャンプ、外部文書へのリンクをすべて、バウンディングボックスとともに抽出します

ファイル全体(それぞれ約2500トークン)を読み取る代わりに、エージェントは一致した行のみ(約110トークン)を受け取るため、クエリごとにコンテキストウィンドウを最大98%節約できます。ファイル全体を読み取る必要がある場合は、まず compress_code を使って空白によるオーバーヘッドを取り除くと、トークンをさらに10~20%節約できます。PDF のドキュメント、技術マニュアル、仕様書については、専用ツールで対象を絞ったテキスト、画像、表を抽出できるため、モデルのコンテキストウィンドウを圧迫しません。


ステップ 1 — インストール

オプション A:.NET CLI(NuGet ツール)でインストールする

.NET SDK がインストールされている場合(.NET 開発者に推奨):

dotnet tool install -g PuneethDC.DotNetSearch

インストールすると、任意のターミナルから dotnetsearch コマンドをグローバルに利用できます。

今後、最新バージョンに更新するには:

dotnet tool update -g PuneethDC.DotNetSearch
オプション B:スタンドアロン実行ファイルをダウンロードする(.NET は不要)

最新リリースにアクセスし、お使いのプラットフォーム用の自己完結型実行ファイルをダウンロードします。

プラットフォームダウンロードするファイル
Windows x64DotNetSearch-win-x64.exe
Linux x64DotNetSearch-linux-x64
macOS ARM64DotNetSearch-osx-arm64

.NET のインストールは不要です。ランタイムは実行ファイルに同梱されています。

永続的に保存できる場所に保存します。例:

  • Windows: C:\Tools\DotNetSearch.exe
  • Linux/macOS: /usr/local/bin/DotNetSearch

Linux/macOS では、実行可能にします。

chmod +x /usr/local/bin/DotNetSearch

ステップ 2 — MCP 設定に追加する

グローバル MCP 設定ファイルを開きます(または作成します)。

クライアント設定ファイルの場所
Visual Studio%USERPROFILE%\.mcp.json
VS Code + Copilot%USERPROFILE%\.mcp.json
Claude Desktop%APPDATA%\Claude\claude_desktop_config.json
Cursor%USERPROFILE%\.cursor\mcp.json
NuGet(.NET Tool)経由でインストールした場合:

パスに違いはなく、Windows、Linux、macOS で同じように動作します。

{
  "servers": {
    "DotNetSearch": {
      "type": "stdio",
      "command": "dotnetsearch"
    }
  }
}
スタンドアロン実行ファイルを使用する場合:
Windows:
{
  "servers": {
    "DotNetSearch": {
      "type": "stdio",
      "command": "C:\\Tools\\DotNetSearch.exe"
    }
  }
}
Linux / macOS:
{
  "servers": {
    "DotNetSearch": {
      "type": "stdio",
      "command": "/usr/local/bin/DotNetSearch"
    }
  }
}
代替方法:dnx でオンデマンド実行する(インストール不要):
{
  "servers": {
    "DotNetSearch": {
      "type": "stdio",
      "command": "dnx",
      "args": ["PuneethDC.DotNetSearch"]
    }
  }
}

ファイルに他のサーバーがすでにある場合は、既存の "servers" オブジェクト内に "DotNetSearch" ブロックを追加するだけです。


ステップ 3 — 有効になっていることを確認する

Visual Studio / VS Code:

  1. GitHub Copilot Chat を開きます
  2. エージェントモードに切り替えます
  3. レンチ / ツールを選択アイコンをクリックします
  4. DotNetSearch のツールが一覧に表示され、有効になっていることを確認します。
    • コードとナビゲーション: search、search_related、decompile_type、compress_code、read_file
    • PDF ドキュメントの検査: read_pdf_text、get_pdf_info、render_pdf_page_as_image、extract_pdf_images、get_pdf_bookmarks、get_pdf_form_fields、extract_pdf_attachments、get_pdf_hyperlinks

ステップ 4 — Copilot の指示を更新する

Copilot が組み込みのファイル読み取りより DotNetSearch を自動的に優先するようにするには、以下の指示を Copilot の指示ファイルに追加します。追加先は 2 か所あります。リポジトリレベル(そのリポジトリだけに適用)またはグローバル(すべてのリポジトリに適用)です。


オプション A — リポジトリレベルの指示(推奨)

ファイルの場所:

<your-repo-root>\.github\copilot-instructions.md

このファイルは、そのリポジトリでのすべての会話において GitHub Copilot に読み込まれます。特定のプロジェクトだけで DotNetSearch を優先させたい場合におすすめです。

場所の確認または作成方法:

  • リポジトリのルートフォルダーに移動します
  • .github サブフォルダーを探します。存在しない場合は作成します
  • .github 内の copilot-instructions.md を探します。存在しない場合はファイルを作成します

オプション B — グローバルの指示(すべてのリポジトリに適用)

ファイルの場所:

クライアントグローバル指示ファイル
Visual Studio%APPDATA%\Microsoft\VisualStudio\Copilot\copilot-instructions.md
VS Code + Copilot%USERPROFILE%\.github\copilot-instructions.md

場所の確認または作成方法:

  • 上記のパスをエクスプローラーで開きます(アドレスバーに貼り付けます)
  • フォルダーが存在しない場合は作成します
  • フォルダー内に copilot-instructions.md が存在しない場合はファイルを作成します

注: 両方のファイルに指示を追加すると、Copilot はそれらを統合し、両方が同時に有効になります。


追加する指示

上記で選んだファイルに、以下を貼り付けます。

## Search Preference
When searching for code, symbols, or text in this repository, always prefer
the `DotNetSearch` MCP tool (`search` and `search_related`) over reading full
files or using built-in workspace search. DotNetSearch returns only matching
lines and is significantly more token-efficient (~98% fewer tokens per query).
Do not call DotNetSearch tools in parallel — run one search at a time.

## PDF Document Reading
When reading, analyzing, or searching PDF documents:
- Always prefer `read_pdf_text` and `get_pdf_info` over raw file operations.
- First call `get_pdf_info` to inspect total pages and document metadata.
- Call `read_pdf_text` with specific page ranges (`startPage`, `endPage`) to avoid token overflow.
- If the PDF contains visual charts, flowcharts, architectural diagrams, or scanned pages, use `render_pdf_page_as_image` to rasterize the page.
- For interactive PDF forms, use `get_pdf_form_fields` to extract user inputs.

## NuGet Type Inspection
When the user asks about a third-party or NuGet type and the source code is not
available in the workspace, use the `DotNetSearch` MCP tool `decompile_type` to
decompile the type from the project's referenced assemblies. Pass the short or
fully qualified type name and the absolute path to the .csproj file. The project
must have been built at least once before calling this tool.

## Code Compression
When reading source files to minimize context window usage, use the
`DotNetSearch` MCP tool `compress_code` — BUT ONLY for the following fully-safe
languages where indentation is cosmetic and braces/keywords define scope:

  C#, Java, JavaScript, TypeScript, C, C++, Kotlin, Swift, Rust, Scala,
  PHP, Ruby, CSS, SCSS, Less, JSON, XML

NEVER call `compress_code` on any other language. In particular, NEVER use it on
Python, YAML, CoffeeScript, Pug/Jade, HAML, or Makefile — these are
indentation-sensitive and compression WILL silently corrupt the file structure.

Before calling `compress_code`, check the file extension:
- Allowed:  .cs .java .js .ts .jsx .tsx .kt .swift .rs .scala .php .rb .css .scss .less .json .xml .c .cpp .h
- Blocked:  .py .yaml .yml .coffee .pug .jade .haml  (and Makefiles with no extension)

Pass the absolute file path. For JavaScript/TypeScript projects using 2-space
indentation, set `sourceIndentSize=2`.

ステップ 5 — 完了です

特別なコマンドやワークフローの変更は必要ありません。Copilot Agent Mode で通常のコーディングタスクを続けてください。Copilot がコードベースを検索したり、PDF ドキュメントを調べたりする必要がある場合は、DotNetSearch が自動的に使用されます。

時間が経つにつれて、会話ごとのトークン使用量が減少することに気付くでしょう。これは、DotNetSearch がファイル全体の内容(約 2500 トークン)ではなく、一致する行のみ(通常約 110 トークン)を返すためです。検索操作ごとに、コンテキストウィンドウを最大 98%節約できます。


ツールリファレンス

search

キーワードまたは自然言語のクエリに内容が一致するファイルをローカルディレクトリから検索します。CamelCase と snake_case のトークン展開を使用した BM25 ランキングを行います。

パラメーター型デフォルト説明
querystringrequiredキーワード、識別子、または自然言語のフレーズ
repostringrequired検索するディレクトリの絶対パスまたは相対パス
top_kint5返す結果の最大数(1~100)
context_linesint0各一致箇所の前後に表示するコンテキスト行数(0~5)

search_related

ファイル内の特定の場所と構造的に類似するコードチャンクを検索します。search の後に使用して、関連する実装、呼び出し元、パターンを調べます。

パラメーター型デフォルト説明
file_pathstringrequired以前の search の結果として返されたファイルのパス
lineintrequired以前の search の結果にある行番号(1 始まり)
repostringrequired検索するディレクトリの絶対パスまたは相対パス
top_kint5返す類似チャンクの数(1~100)

read_file

ディスクからテキストファイルを読み取り、その内容を返します。対象のファイルがすでに分かっており、全体のコンテキストが必要な場合に、search の後で使用します。絶対パスまたは相対パスに加えて、任意で start_line と end_line の範囲を指定できます。

パラメーター型デフォルト説明
pathstringrequired読み取るファイルの絶対パスまたは相対パス
start_lineint1読み取りを開始する行番号(1 始まり)
end_lineint0読み取りを終了する行番号(1 始まり。0 = ファイルの末尾まで読み取る)

read_pdf_text

ページマーカー付きの、整形済みで読みやすいテキストを PDF ファイルから抽出します。ドキュメント、技術仕様書、論文、アーキテクチャガイドに最適です。ドキュメント全体の抽出と、指定したページ範囲の抽出に対応しています。

パラメーター型デフォルト説明
pathstringrequiredPDF ファイルの絶対パスまたは相対パス
startPageint1テキストの抽出を開始するページ番号(1 始まり)
endPageint0テキストの抽出を終了するページ番号(1 始まり。0 = 最終ページまで読み取る)

get_pdf_info

PDF ファイルのテキスト全体を読み取らずに、包括的なメタデータと物理レイアウト情報を取得します。対象を絞った抽出を計画するために、最初に使用してください。

パラメーター型デフォルト説明
pathstringrequiredPDF ファイルの絶対パスまたは相対パス

返される情報: 総ページ数、各ページの寸法(widthPt、heightPt)、ドキュメントのタイトル、作成者、主題、キーワード、作成アプリケーション、生成ソフトウェア、作成日時、変更日時。


render_pdf_page_as_image

特定の PDF ページを高解像度 PNG 画像にラスタライズし、ディスクに保存します。生のテキスト抽出では不十分な、複雑な図、アーキテクチャフローチャート、回路図、表、スキャン文書があるページに不可欠です。

パラメーター型デフォルト説明
pathstringrequiredPDF ファイルの絶対パスまたは相対パス
pageNumberint1レンダリングするページのインデックス(1 始まり)
dpiint150レンダリング解像度(DPI)(例:72 = 下書き、150 = 標準、300 = 印刷/高解像度)

返される情報: レンダリングされた .png 画像のパスと、画像のピクセル寸法。


extract_pdf_images

PDF のページから埋め込まれたすべてのラスター画像(写真、図、埋め込み JPEG/PNG など)を抽出し、ディスクに直接保存します。

ParameterTypeDefaultDescription
pathstringrequiredPDF ファイルへの絶対パスまたは相対パス
pageNumberint01 始まりのページ番号(0 = すべてのページから埋め込み画像を抽出)
outputDirectorystringnull画像の保存先フォルダー(デフォルトは <pdf-folder>/<pdf-name>_images/)

get_pdf_bookmarks

PDF から階層構造のブックマークアウトライン(目次ツリー)を抽出します。特定の章やページを要求する前に、エージェントが文書全体の構造を把握するのに役立ちます。

ParameterTypeDefaultDescription
pathstringrequiredPDF ファイルへの絶対パスまたは相対パス

戻り値: タイトルとリンク先のページ番号を含む、再帰的なブックマークツリー。


get_pdf_form_fields

PDF 文書に埋め込まれたすべてのインタラクティブな AcroForm フォームフィールドを読み取ります。

ParameterTypeDefaultDescription
pathstringrequiredPDF ファイルへの絶対パスまたは相対パス

戻り値: フィールド名、フィールドの種類(テキストボックス、チェックボックス、コンボボックス、ラジオボタン)、現在の値を含むフォームフィールドのリスト。


extract_pdf_attachments

PDF カタログに直接埋め込まれたファイル(添付されたソースコード、サンプルデータ、スキーマ、関連ファイルなど)を抽出し、ディスクに書き込みます。

ParameterTypeDefaultDescription
pathstringrequiredPDF ファイルへの絶対パスまたは相対パス
outputDirectorystringnull抽出した添付ファイルの保存先ディレクトリ

get_pdf_hyperlinks

PDF のページにあるすべてのハイパーリンクとクリック可能な注釈を抽出します。

ParameterTypeDefaultDescription
pathstringrequiredPDF ファイルへの絶対パスまたは相対パス
pageNumberint01 始まりのページ番号(0 = すべてのページからリンクを抽出)

戻り値: 各ハイパーリンクの URL のリンク先、移動先ページ、境界座標。


decompile_type

.NET プロジェクトが参照する NuGet パッケージのアセンブリから、.NET の型(クラス、インターフェイス、列挙型、構造体、デリゲート)を逆コンパイルします。ソースコードがない場合に、サードパーティ API を理解するのに役立ちます。

ParameterTypeDefaultDescription
typeNamestringrequired短い名前(Session)または完全修飾名(Opc.Ua.Client.Session)
projectPathstringrequiredNuGet パッケージを参照する .csproj への絶対パス
maxResultsint1複数のアセンブリで名前が曖昧な場合に返す最大一致数

注: NuGet アセンブリが bin\ 出力フォルダーに配置されるよう、プロジェクトを少なくとも一度はビルドしておく必要があります。


compress_code

インデントを4スペース(または指定した値)からインデントレベルごとに1スペースへ縮小し、空行を削除します。意味を変えずにトークン数を10~20%削減します。波括弧スコープまたはキーワードスコープの言語ではインデントは見た目上のものとして扱われるため、安全です。絶対ファイルパスまたはコードの生文字列を受け付けます。圧縮されたコードに加え、originalLength、compressedLength、savingsPercent、行数のメトリクスを返します。

✅ 安全に使用できる言語(波括弧スコープ/キーワードスコープ): C#、Java、JavaScript、TypeScript、C、C++、Kotlin、Swift、Rust、Scala、PHP、Ruby、CSS、SCSS、Less、JSON、XML

❌ 使用しないでください(インデントに依存するため、コードが破損します): Python、YAML、CoffeeScript、Pug/Jade、HAML、Makefile

⚠️ 条件付き:

  • Go — LLM による読み取りには安全です。標準でタブを使用するため、sourceIndentSize=4(タブ幅)を設定してください。元の状態に戻してコンパイルするには、gofmt が必要です。
  • Markdown — 使用は避けてください。Markdown の仕様では、4スペースのインデントはコードブロックを意味します。
  • JavaScript/TypeScript — 2スペースを使うプロジェクトでは、sourceIndentSize=2 を設定してください。
  • 複数行文字列リテラル(C# の逐語的文字列、Java の """、JS のテンプレートリテラル) — 内部の空白も縮小されます。LLM による読み取りには問題ありませんが、文字列内の正確なインデントに依存する場合、元の状態に戻せることは保証されません。
パラメーター型デフォルト説明
filePathstringnull圧縮するソースファイルの絶対パスです。これまたはcodeのいずれかを指定します。
codestringnull圧縮するソースコードの生文字列です。filePathが指定されていない場合に使用されます。
sourceIndentSizeint4ソースで1つのインデントレベルを表すスペースの数です。JS/TS/Ruby/Scala プロジェクトでは2を設定します。
targetIndentSizeint1出力でインデントレベルごとに使用するスペースの数です。

サポートされているファイル形式

.pdf .cs .ts .js .jsx .tsx .json .md .txt .xml .yaml .yml .html .css .py .java .cpp .c .h .go .rs .sh .ps1 .psm1 .psd1 .toml .ini .env .config .csproj .props .targets .razor .vue .svelte


ライセンス

MIT — 詳細はLICENSEを参照してください。

コメント

MCP は初めてですか?

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

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