# DotNetSearch (nuget · PuneethDC.DotNetSearch)

Token-efficient MCP server for codebase search, NuGet decompilation, and deep PDF reading.

- Trust score: 71/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-04

## Components

- nuget · `PuneethDC.DotNetSearch`: 71/100 (this document), [markdown](https://verifymcp.io/servers/puneethdc99-dotnetsearch/puneethdc-dotnetsearch.md), [page](https://verifymcp.io/servers/puneethdc99-dotnetsearch/puneethdc-dotnetsearch)

## Channel facts

- Registry: `nuget`
- Package: `PuneethDC.DotNetSearch`
- Version: `1.0.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-04.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Build provenance not yet verified.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 6 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1978 tokens (~152/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the DotNetSearch MCP server?

DotNetSearch runs locally as a NuGet package, launched with dnx PuneethDC.DotNetSearch@1.0.3 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add puneethdc99-dotnetsearch -- dnx PuneethDC.DotNetSearch@1.0.3 --yes
```

### Cursor

```json
{
  "mcpServers": {
    "puneethdc99-dotnetsearch": {
      "command": "dnx",
      "args": [
        "PuneethDC.DotNetSearch@1.0.3",
        "--yes"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "puneethdc99-dotnetsearch": {
      "command": "dnx",
      "args": [
        "PuneethDC.DotNetSearch@1.0.3",
        "--yes"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add puneethdc99-dotnetsearch -- dnx PuneethDC.DotNetSearch@1.0.3 --yes
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "puneethdc99-dotnetsearch": {
      "type": "local",
      "command": [
        "dnx",
        "PuneethDC.DotNetSearch@1.0.3",
        "--yes"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  puneethdc99-dotnetsearch:
    command: "dnx"
    args: ["PuneethDC.DotNetSearch@1.0.3", "--yes"]
```

### Netclaw

```json
{
  "McpServers": {
    "puneethdc99-dotnetsearch": {
      "Transport": "stdio",
      "Command": "dnx",
      "Arguments": [
        "PuneethDC.DotNetSearch@1.0.3",
        "--yes"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "puneethdc99-dotnetsearch": {
      "command": "dnx",
      "args": [
        "PuneethDC.DotNetSearch@1.0.3",
        "--yes"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-27 (score 71, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-26 (score 56)

First indexed and scored.

## MCP tools (13)

### `compress_code` (~309 tokens)

Reduces code indentation from 4-space (or configurable) to 1-space per indent level and removes blank lines. Saves 10-20% tokens with zero semantic change for brace-scoped languages. SAFE for: C#, Java, JavaScript, TypeScript, C, C++, Kotlin, Swift, Rust, Scala, PHP, Ruby, CSS, SCSS, JSON, XML. DO NOT USE on indentation-sensitive languages: Python, YAML, CoffeeScript, Pug/Jade, HAML, Makefile — compression WILL corrupt these. Accepts either an absolute file path or a raw code string. Returns compressed code plus metrics: originalLength, compressedLength, savingsPercent, line counts. Use when reading source files to minimize context window usage.

Input parameters:

- `code` (string|null): Raw C# code string to compress. Used when filePath is not provided.
- `filePath` (string|null): Absolute path to the C# source file to compress. Provide either this or 'code'.
- `removeBlankLines` (boolean): Remove blank/empty lines from the output. Default: true.
- `sourceIndentSize` (integer): Number of spaces that represent one indent level in the source. Default: 4. Set to 2 for 2-space projects.
- `targetIndentSize` (integer): Number of spaces to use per indent level in the output. Default: 1.
- `trimTrailingWhitespace` (boolean): Trim trailing whitespace from each line. Default: true.

### `get_pdf_hyperlinks` (~121 tokens)

Read hyperlinks and internal links from a PDF file, optionally limited to a page range. Returns each link's source page, on-page location, and target — an external URI, an internal destination page number, or a linked external file name.

Input parameters:

- `end_page` (integer): 1-based page number to stop scanning at (default: 0 means last page)
- `path` (string, required): Absolute or relative path to the PDF file
- `start_page` (integer): 1-based page number to start scanning from (default: 1)

### `search_related` (~166 tokens)

Find code chunks semantically similar to a specific location in a file. Use after `search` to explore related implementations, callers, or patterns. Pass file_path and line from a prior search result. Extracts a smart chunk around the given line and finds the most structurally similar code blocks across the entire repo using BM25 token scoring.

Input parameters:

- `file_path` (string, required): Path to the file as stored in the search result (relative or absolute)
- `line` (integer, required): Line number (1-indexed) within the file, from a prior search result
- `repo` (string, required): Local directory path to search (absolute or relative)
- `top_k` (integer): Number of similar chunks to return (default: 5, min: 1, max: 100)

### `search` (~182 tokens)

Search a local directory for files whose content matches a query keyword or phrase. Supports both exact keyword search and natural-language / semantic-style queries by tokenising the query, expanding CamelCase and snake_case identifiers, and ranking results with a BM25 relevance score. Returns the top matching lines with file path, line number, relevance score and content snippet. Pass 'repo' as an absolute or relative local directory path.

Input parameters:

- `context_lines` (integer): Number of surrounding context lines to include above and below each match (default: 0, max: 5)
- `query` (string, required): Keyword, identifier, or natural-language phrase to search for
- `repo` (string, required): Local directory path to search (absolute or relative)
- `top_k` (integer): Maximum number of results to return (default: 5, min: 1, max: 100)

### `get_pdf_form_fields` (~77 tokens)

Read all interactive AcroForm fields from a PDF file (text boxes, checkboxes, radio buttons, combo/list boxes, signature fields). Returns each field's name, type, and current value. Use this to extract data entered into fillable PDF forms.

Input parameters:

- `path` (string, required): Absolute or relative path to the PDF file

### `get_pdf_bookmarks` (~77 tokens)

Read the bookmark/outline tree (table of contents) of a PDF file. Returns each bookmark's title, target page number (1-based, when resolvable), and nested child bookmarks. Use this to understand a PDF's structure before reading specific pages.

Input parameters:

- `path` (string, required): Absolute or relative path to the PDF file

### `extract_pdf_images` (~193 tokens)

Extract embedded raster images from a PDF file (e.g. photos, diagrams) and save them as PNG files to an output directory. Optionally limited to a page range. Returns the list of saved file paths with their source page and size. Note: this extracts embedded image objects, not vector graphics/text — use RenderPdfPageAsImage to rasterize an entire page as a picture instead.

Input parameters:

- `end_page` (integer): 1-based page number to stop extracting at (default: 0 means last page)
- `max_images` (integer): Maximum number of images to extract in total (default: 0 means unlimited)
- `output_dir` (string, required): Directory to save extracted images into (created if it doesn't exist)
- `path` (string, required): Absolute or relative path to the PDF file
- `start_page` (integer): 1-based page number to start extracting from (default: 1)

### `render_pdf_page_as_image` (~131 tokens)

Render a single PDF page as a full picture (PNG) — a screenshot of the whole page including text, vector graphics and images. Useful for scanned documents or when embedded text/images aren't sufficient. Returns the saved image file path and pixel dimensions.

Input parameters:

- `dpi` (integer): Resolution in dots per inch for the rendered image (default: 150)
- `output_path` (string, required): Path (including file name) to save the rendered PNG image to
- `page` (integer, required): 1-based page number to render
- `path` (string, required): Absolute or relative path to the PDF file

### `decompile_type` (~312 tokens)

Decompiles a .NET type (class, interface, enum, struct, delegate) from the NuGet package assemblies referenced by a .NET project. Pass the short class name (e.g. 'Session') or the fully qualified name (e.g. 'Opc.Ua.Client.Session'). The tool scans the project's obj output folder — which contains all referenced NuGet DLLs after a build — so no assembly path is needed. Use this when the user or LLM needs to understand the API surface of a third-party or NuGet type without access to its source code. IMPORTANT: The target project must have been built at least once so the bin and obj folders are populated. If typeName is ambiguous (found in multiple assemblies), all matches are returned up to maxResults.

Input parameters:

- `maxResults` (integer): Maximum number of matching types to return when the name is ambiguous across multiple assemblies. Defaults to 1. Increase if you want to compare the same type name across multiple packages.
- `projectPath` (string, required): Absolute path to the .csproj file of the project that references the NuGet package containing the type. Example: 'C:\repos\MyApp\MyApp.csproj'. The tool resolves the obj output folder automatically f…
- `typeName` (string, required): Short class name (e.g. 'Session') or fully qualified name (e.g. 'Opc.Ua.Client.Session'). Matching is case-insensitive on the short name. Namespace prefix narrows the match.

### `read_file` (~114 tokens)

Read a text file from disk and return its contents. Useful when you need the full contents of a specific file after a search. Supports both absolute and relative paths, and can optionally read a specific line range.

Input parameters:

- `end_line` (integer): 1-based line number to stop reading at (default: 0 means read to end)
- `path` (string, required): Absolute or relative path to the file to read
- `start_line` (integer): 1-based line number to start reading from (default: 1)

### `get_pdf_info` (~73 tokens)

Read the metadata of a PDF file: page count, per-page size, and document info (title, author, subject, keywords, creator, producer, creation/modification date). Use this first to plan which pages to read text/images from.

Input parameters:

- `path` (string, required): Absolute or relative path to the PDF file

### `extract_pdf_attachments` (~96 tokens)

Extract embedded file attachments from a PDF file and save them to an output directory. PDFs can carry arbitrary embedded files (documents, spreadsheets, etc.) as attachments, distinct from the PDF's own embedded images. Returns the list of saved file paths and metadata.

Input parameters:

- `output_dir` (string, required): Directory to save extracted attachments into (created if it doesn't exist)
- `path` (string, required): Absolute or relative path to the PDF file

### `read_pdf_text` (~127 tokens)

Extract the text content of a PDF file, optionally limited to a page range. Returns text per page along with the overall extracted text. Note: scanned/image-only PDFs will return little or no text — use ExtractPdfImages or RenderPdfPageAsImage instead for those.

Input parameters:

- `end_page` (integer): 1-based page number to stop reading at (default: 0 means read to last page)
- `path` (string, required): Absolute or relative path to the PDF file
- `start_page` (integer): 1-based page number to start reading from (default: 1)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/puneethdc99-dotnetsearch/puneethdc-dotnetsearch#diagnostics

## Score history

- 2026-11-04: 71
- 2026-11-03: 71
- 2026-11-02: 71
- 2026-11-01: 71
- 2026-10-31: 71
- 2026-10-30: 71
- 2026-10-29: 71
- 2026-10-28: 71
- 2026-10-27: 71
- 2026-10-26: 56

## Common questions

### What is the DotNetSearch MCP server?

DotNetSearch is an MCP server listed in the public MCP registry as io.github.puneethdc99/dotnetsearch. Token-efficient MCP server for codebase search, NuGet decompilation, and deep PDF reading. This page covers its NuGet package (PuneethDC.DotNetSearch).

### Is the DotNetSearch MCP server safe to use?

DotNetSearch scores 71 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the DotNetSearch MCP server expose?

DotNetSearch exposes 13 tools: compress_code, get_pdf_hyperlinks, search_related, search, get_pdf_form_fields, and 8 more. Their descriptions and schemas cost roughly 1,978 tokens of context every time the server is loaded.

### Is the DotNetSearch MCP server still maintained?

DotNetSearch is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the DotNetSearch MCP server under?

DotNetSearch declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- NuGet package: https://www.nuget.org/packages/PuneethDC.DotNetSearch
- Socket report: https://socket.dev/nuget/package/PuneethDC.DotNetSearch
- Repository: https://github.com/puneethdc99/DotNetSearch
- Changelog RSS feed: https://verifymcp.io/servers/puneethdc99-dotnetsearch/puneethdc-dotnetsearch.xml
- Changelog JSON feed: https://verifymcp.io/servers/puneethdc99-dotnetsearch/puneethdc-dotnetsearch.json
- HTML version of this page: https://verifymcp.io/servers/puneethdc99-dotnetsearch/puneethdc-dotnetsearch
