API ВЕГА
English

DotNetSearch — MCP-сервер для поиска и работы с PDF

Идентификатор MCP-сервера: mcp-name: io.github.puneethdc99/dotnetsearch (Подтверждение владения пакетом для включения в GitHub MCP Registry)

DotNetSearch — автономный MCP-сервер (Model Context Protocol), который предоставляет GitHub Copilot, Claude, Cursor и другим AI-агентам высокопроизводительный поиск по кодовой базе, декомпиляцию пакетов NuGet, сокращение объёма пробельных символов и глубокое чтение и анализ PDF-документов:

Обзор основных инструментов

КатегорияИнструментНазначение
Поиск по кодуsearchНаходит файлы и строки по ключевому слову или запросу на естественном языке. Возвращает только совпавшие строки (около 110 токенов вместо примерно 2500 при чтении полного файла)
Поиск по кодуsearch_relatedНаходит фрагменты кода, структурно похожие на указанный участок. Подходит для поиска вызывающего кода, реализаций и шаблонов
Декомпиляцияdecompile_typeДекомпилирует любой тип .NET из сборок подключённых пакетов NuGet. Возвращает полное определение класса C# без исходного кода
Оптимизацияcompress_codeСокращает отступы в коде C# с 4 до 1 пробела на каждый уровень вложенности и удаляет пустые строки. Экономит 10–20% токенов без изменения семантики
Чтение файловread_fileЧитает файл с диска и при необходимости возвращает заданный диапазон строк. Удобно использовать после search, если нужен полный контекст файла
Чтение PDFread_pdf_textИзвлекает чистый структурированный текст из PDF постранично или в заданном диапазоне страниц
Чтение PDFget_pdf_infoПолучает метаданные PDF, общее количество страниц, размеры отдельных страниц, автора, тему, дату создания и сведения о структуре
Визуальное содержимое PDFrender_pdf_page_as_imageПреобразует страницу PDF в изображение PNG высокого разрешения с заданным DPI. Подходит для просмотра диаграмм, схем, таблиц и отсканированных документов
Визуальное содержимое PDFextract_pdf_imagesИзвлекает встроенные растровые изображения со страниц PDF и сохраняет их на диск вместе с координатами в пикселях
Структура PDFget_pdf_bookmarksИзвлекает иерархическое оглавление, закладки и структуру документа со ссылками на целевые страницы
Формы PDFget_pdf_form_fieldsЧитает интерактивные поля форм AcroForm (текстовые поля, флажки, переключатели и раскрывающиеся списки) и их значения
Вложения PDFextract_pdf_attachmentsИзвлекает вложенные файлы из PDF-документов и сохраняет их на диск
Ссылки в PDFget_pdf_hyperlinksИзвлекает все кликабельные веб-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"]
    }
  }
}

Если в файле уже настроены другие серверы, просто добавьте блок "DotNetSearch" в существующий объект "servers".


Шаг 3 — Проверка работы сервера

Visual Studio / VS Code:

  • Откройте GitHub Copilot Chat

  • Переключитесь в режим Agent Mode

  • Нажмите значок гаечного ключа / Select Tools

  • Убедитесь, что инструменты 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. Их можно разместить в одном из двух мест: на уровне репозитория (действуют только для этого репозитория) или глобально (действуют для всех репозиториев).


Вариант A — инструкции на уровне репозитория (рекомендуется)

Расположение файла:

.github\copilot-instructions.md">

<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

Как найти или создать файл:

  • Откройте указанный выше путь в File Explorer (вставьте его в адресную строку)

  • Если папки нет, создайте её

  • Если в папке нет файла 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 — DotNetSearch будет автоматически использоваться, когда Copilot потребуется искать по кодовой базе или изучать PDF-документы.

Со временем вы заметите, что на каждый диалог расходуется меньше токенов. Это происходит потому, что DotNetSearch возвращает только совпадающие строки (обычно около 110 токенов), а не содержимое файлов целиком (около 2500 токенов). Это позволяет экономить до 98% контекстного окна при каждой операции поиска.


Справочник по инструментам

search

Ищет в локальном каталоге файлы, содержимое которых соответствует ключевому слову или запросу на естественном языке. Использует ранжирование BM25 и расширение токенов в CamelCase и snake_case.

ПараметрТипЗначение по умолчаниюОписание
querystringобязательныйКлючевое слово, идентификатор или фраза на естественном языке
repostringобязательныйАбсолютный или относительный путь к каталогу для поиска
top_kint5Максимальное количество результатов (1–100)
context_linesint0Количество строк контекста до и после каждого совпадения (0–5)

search_related

Находит фрагменты кода, структурно похожие на указанный участок файла. Используйте этот инструмент после search, чтобы изучить связанные реализации, вызывающий код или шаблоны.

ПараметрТипЗначение по умолчаниюОписание
file_pathstringобязательныйПуть к файлу, указанный в предыдущем результате search
lineintобязательныйНомер строки (индексация с 1) из предыдущего результата search
repostringобязательныйАбсолютный или относительный путь к каталогу для поиска
top_kint5Количество похожих фрагментов (1–100)

read_file

Читает текстовый файл с диска и возвращает его содержимое. Используйте этот инструмент после search, когда нужный файл уже найден и требуется получить контекст целиком. Поддерживает абсолютные и относительные пути, а также необязательные аргументы start_line и end_line, задающие диапазон строк.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к файлу для чтения
start_lineint1Номер первой строки для чтения (индексация с 1)
end_lineint0Номер последней строки для чтения (0 = до конца файла)

read_pdf_text

Извлекает из PDF чистый, отформатированный текст с указанием страниц. Подходит для документации, технических спецификаций, статей и руководств по архитектуре. Поддерживает извлечение всего документа или заданного диапазона страниц.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу
startPageint1Номер первой страницы для извлечения (индексация с 1)
endPageint0Номер последней страницы для извлечения (0 = до конца документа)

get_pdf_info

Получает подробные метаданные и сведения о физическом макете PDF-файла, не извлекая весь его текст. Используйте этот инструмент в первую очередь, чтобы спланировать извлечение нужных страниц.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу

Возвращает: общее количество страниц, размеры каждой страницы (widthPt, heightPt), название документа, автора, тему, ключевые слова, создателя, производителя, дату создания и дату изменения.


render_pdf_page_as_image

Преобразует указанную страницу PDF в изображение PNG высокого разрешения и сохраняет его на диск. Инструмент необходим для страниц со сложными графическими схемами, архитектурными диаграммами, чертежами, таблицами или отсканированными документами, текстового извлечения из которых недостаточно.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу
pageNumberint1Номер страницы для преобразования (индексация с 1)
dpiint150Разрешение преобразования в DPI (например, 72 — черновое, 150 — стандартное, 300 — для печати или высокого разрешения)

Возвращает: путь к созданному изображению .png и размеры изображения в пикселях.


extract_pdf_images

Извлекает все встроенные растровые изображения (например, фотографии, диаграммы, встроенные изображения JPEG/PNG) с указанной страницы PDF и сохраняет их непосредственно на диск.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу
pageNumberint0Номер страницы (индексация с 1; 0 = извлечь изображения со всех страниц)
outputDirectorystringnullКаталог для сохранения изображений (по умолчанию /_images/)

get_pdf_bookmarks

Извлекает иерархическую структуру закладок PDF (дерево содержания). Помогает агентам понять структуру всего документа, прежде чем запрашивать конкретные главы или страницы.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу

Возвращает: рекурсивное дерево закладок с названиями и номерами страниц, на которые они ведут.


get_pdf_form_fields

Читает все интерактивные поля форм AcroForm, встроенные в PDF-документ.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу

Возвращает: список полей формы с их именами, типами (текстовое поле, флажок, раскрывающийся список, переключатель) и текущими значениями.


extract_pdf_attachments

Извлекает файлы, непосредственно вложенные в каталог PDF (например, исходный код, примеры данных, схемы или сопутствующие файлы), и сохраняет их на диск.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу
outputDirectorystringnullКаталог для сохранения извлечённых вложений

get_pdf_hyperlinks

Извлекает все гиперссылки и кликабельные аннотации на страницах PDF.

ПараметрТипЗначение по умолчаниюОписание
pathstringобязательныйАбсолютный или относительный путь к PDF-файлу
pageNumberint0Номер страницы (индексация с 1; 0 = извлечь ссылки со всех страниц)

Возвращает: URL-адреса, переходы на страницы документа и координаты области каждой гиперссылки.


decompile_type

Декомпилирует тип .NET (класс, интерфейс, перечисление, структуру или делегат) из сборок NuGet-пакетов, на которые ссылается проект .NET. Инструмент полезен, когда нужно изучить сторонние API без исходного кода.

ПараметрТипЗначение по умолчаниюОписание
typeNamestringобязательноКороткое имя (Session) или полное имя с пространством имён (Opc.Ua.Client.Session)
projectPathstringобязательноАбсолютный путь к файлу .csproj, в котором указан NuGet-пакет
maxResultsint1Максимальное количество результатов, если такое имя встречается в нескольких сборках

Примечание: Проект необходимо хотя бы один раз собрать, чтобы в папке bin\ появились сборки NuGet.


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.

  • Многострочные строковые литералы (verbatim-строки C#, """ в Java, шаблонные литералы JS) — внутренние пробелы в них тоже будут сокращены. Код останется читаемым для LLM, но обратное преобразование не будет безопасным для строк, в которых важно точное форматирование отступов.

ПараметрТипЗначение по умолчаниюОписание
filePathstringnullАбсолютный путь к исходному файлу для сжатия. Укажите либо этот параметр, либо code.
codestringnullИсходный код для сжатия в виде строки. Используется, если не указан filePath.
sourceIndentSizeint4Количество пробелов, соответствующее одному уровню отступа в исходном коде. Для проектов на 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.