返回市场
本地Mcp服务器

本地Mcp服务器

作者:DimonSmart8 星标更新:2025-10-10

项目介绍

NugetMcpServer

在VS Code中安装 在VS Code Insiders中安装

一个强大的MCP服务器,可以从NuGet包中获取精确的接口、类、枚举、记录和结构定义。它通过提供关于真实包API的精确信息来减少LLM幻觉。 认证来源:MCPHub

概述

此应用程序不仅仅是一个演示。它是一个实用的MCP服务器,提供了关于特定NuGet包版本的方法和类型的准确、最新的信息。语言模型可以向NuGet直接请求真实的包元数据和类型定义,而不是使用旧的训练数据。

该服务器使用模型上下文协议(MCP)。这使得与AI助手和开发工具连接变得容易。它提供了对包信息的实时访问,帮助开发者和AI系统更好地决定如何使用API。

你可以使用此服务器与OllamaChat,VS Code中的Copilot,以及其他兼容MCP的客户端。

快速开始

  1. 点击“在VS Code中安装”(上方按钮)
  2. 在VS Code中:打开命令面板 → MCP: 列出服务器NugetMcpServer启动
  3. 在Copilot Chat中(代理模式):“使用NugetMcpServer获取Newtonsoft.Json包的信息”

功能

  • 实时NuGet包分析 - 从任何NuGet包中提取接口、类、记录、结构和枚举
  • AI增强智能搜索 - 两阶段搜索,带有AI回退和关键词生成,以实现更好的包发现
  • 基于流行度排序 - 结果按下载次数排序,以找到最值得信赖的包
  • 元包检测 - 对于元包,显示清晰警告和依赖指导
  • 特定版本查询 - 支持特定包版本或最新版本
  • 减少LLM幻觉 - 提供准确、最新的API信息,而不是过时的训练数据
  • 通用兼容性 - 适用于VS Code、OllamaChat和其他兼容MCP的客户端

手动安装

.NET 工具(全局)

dotnet tool install -g DimonSmart.NugetMcpServer

VS Code 工作区配置

在你的工作区创建.vscode/mcp.json

{
  "servers": {
    "NugetMcpServer": {
      "type": "stdio",
      "command": "dnx",
      "args": ["DimonSmart.NugetMcpServer"]
    }
  }
}

WinGet 安装

winget install DimonSmart.NugetMcpServer

可用工具

TimeTool

  • get_current_time() - 返回服务器当前时间,格式为ISO 8601(YYYY-MM-DDThh:mm:ssZ)

接口工具

  • get_interface_definition(packageId, interfaceName?, version?) - 从NuGet包中获取C#接口定义。参数:packageId(NuGet包ID),interfaceName(可选,不带命名空间的短名称),version(可选,默认为最新)
  • list_interfaces(packageId, version?) - 列出NuGet包中的所有公共接口。返回包ID、版本和接口列表

枚举工具

  • get_enum_definition(packageId, enumName, version?) - 从NuGet包中获取C#枚举定义。参数:packageId(NuGet包ID),enumName(不带命名空间的短名称),version(可选,默认为最新)

类工具

  • get_class_or_record_or_struct_definition(packageId, typeName, version?) - 从NuGet包中获取C#类、记录或结构定义。参数:packageId(NuGet包ID),typeName(短名称或全名),version(可选,默认为最新)
  • list_classes_records_structs(packageId, version?) - 列出NuGet包中的所有公共类、记录和结构。返回包ID、版本和类型列表

包文件工具

  • list_package_files(packageId, version?) - 列出NuGet包中的所有文件。
  • get_package_file(packageId, filePath, version?, offset?, bytes?) - 读取NuGet包中的文件。返回文本或二进制文件的base64编码。最大块大小为1MB。

包搜索工具

  • search_packages(query, maxResults?, fuzzySearch?) - 根据描述或功能搜索NuGet包。
    • 标准搜索模式(fuzzySearch=false,默认):执行整个查询的直接搜索,并且如果提供的话,搜索每个逗号分隔的关键词
    • 模糊搜索模式(fuzzySearch=true):首先进行标准搜索,然后尝试每个单独的词和AI生成的包名替代方案
    • AI分析用户的功能需求并生成三个最可能的包名(例如,“迷宫生成”→“MazeGenerator MazeBuilder MazeCreator”)
    • 返回最多50个最受欢迎的包及其详情,包括下载次数、描述和项目网址
    • 结果按受欢迎程度(下载次数)排序,以提高相关性

包信息工具

  • get_package_info(packageId, version?) - 获取NuGet包的综合信息,包括元数据、依赖项和元包状态。对于元包,显示清晰警告并指导实际实现的位置。

包依赖项工具

  • 注意:包依赖项现在包含在get_package_info工具响应中,提供单次调用的完整包信息。
<details> <summary>📄 MCP服务器响应示例</summary>

这里是一些使用DimonSmart.MazeGenerator作为示例包的MCP工具服务器响应示例:

GetInterfaceDefinition 示例

用户查询示例

用户可能会问:

“我想在我的.NET应用中生成迷宫。有相关的包吗?你能给我展示一下DimonSmart.MazeGenerator的接口,让我看看怎么使用吗?”

代理会使用MCP服务器获取接口定义:

请求:

{
  "name": "f1e_GetInterfaceDefinition",
  "parameters": {
    "packageId": "DimonSmart.MazeGenerator",
    "interfaceName": "IMazeGenerator",
    "version": ""
  }
}

响应(实际MCP服务器输出):

{
  "result": "namespace DimonSmart.MazeGenerator\n{\n    /// <summary>\n    /// 迷宫生成算法的接口\n    /// </summary>\n    public interface IMazeGenerator\n    {\n        /// <summary>\n        /// 创建具有指定尺寸的新迷宫\n        /// </summary>\n        /// <param name=\"width\">迷宫的宽度</param>\n        /// <param name=\"height\">迷宫的高度</param>\n        /// <returns>表示迷宫的二维数组</returns>\n        bool[,] Generate(int width, int height);\n        \n        /// <summary>\n        /// 获取用于迷宫生成的算法名称\n        /// </summary>\n        string AlgorithmName { get; }\n    }\n}"
}

结果是MCP服务器的实际JSON响应:

  • 接口定义是一个单一字符串值
  • 所有换行符都转义为\n
  • 所有双引号都转义为\"
  • 内容位于result属性中的JSON字符串内

这就是代理如何从MCP服务器接收接口定义。代理然后解析并以可读格式显示给用户。

SearchPackages 示例

用户查询示例

用户可能会问:

“我需要一个库来处理我的.NET应用中的JSON。你能帮我找到处理JSON的最流行的包吗?”

代理会使用MCP服务器搜索包:

请求:

{
  "name": "SearchPackages",
  "parameters": {
    "query": "JSON序列化库",
    "maxResults": 5,
    "fuzzySearch": false
  }
}

模糊搜索示例

为了获得描述性查询的更好结果,启用模糊搜索:

请求:

{
  "name": "SearchPackages",
  "parameters": {
    "query": "我需要一个生成迷宫的库",
    "maxResults":  10,
    "fuzzySearch": true
  }
}

俄语支持示例

AI也可以处理俄语查询:

请求:

{
  "name": "SearchPackages",
  "parameters": {
    "query": "用户需要生成迷宫",
    "maxResults": 10,
    "fuzzySearch": true
  }
}

响应(格式化结果显示合并的结果):

/* NUGET 包搜索结果:用户需要生成迷宫 */
/* AI生成的包名:MazeGenerator MazeBuilder MazeCreator */
/* 发现了8个包(显示前8个)*/

## DimonSmart.MazeGenerator v1.0.0
**下载量**:12,543
**描述**:具有多种算法的高级迷宫生成库
**项目网址**:https://github.com/DimonSmart/MazeGenerator

## MazeBuilder v2.1.0
**下载量**:8,234
**描述**:简单的迷宫构建工具包

模糊搜索的工作原理

搜索算法如下:

  • 标准搜索模式(fuzzySearch=false):整个查询的直接搜索,加上搜索每个逗号分隔的关键词
  • 模糊搜索模式(fuzzySearch=true)
    1. 运行标准搜索
    2. 搜索查询中的每个单独单词
    3. 使用AI建议额外的包名(例如,“迷宫生成”→“MazeGenerator MazeBuilder MazeCreator”)
    4. 搜索AI生成的名字
    5. 合并并去重所有结果,按受欢迎程度排序
</details>

与开发工具集成

你可以使用这个MCP服务器与不同的开发工具和AI助手:

  • VS Code:通过MCP服务器配置集成
  • OllamaChat:与OllamaChat配合使用,进行本地AI对话
  • GitHub Copilot:作为MCP服务器使用,以获取准确的包信息
  • 其他MCP客户端:任何支持模型上下文协议的工具

通过使用此服务器,开发者和AI系统可以获得关于NuGet包接口、枚举、结构和记录的实时、准确信息。这减少了过时或错误API建议的可能性。

对AI开发的好处

减少LLM幻觉

这个MCP服务器有助于解决AI辅助开发中的一个重要问题:LLM关于包API的幻觉。常见问题是:

  • 过时信息:基于旧数据训练的LLMs可能会建议已删除的方法或接口
  • 不存在的API:模型可能会生成不存在的方法签名
  • 版本不匹配:建议可能是针对使用的不同包版本
  • 信息不完整:缺少重要的参数、返回类型或约束

NugetMcpServer如何帮助

  • 实时数据:直接从NuGet包获取当前接口定义
  • 特定版本信息:允许查询特定包版本以确保准确性
  • 完整的接口定义:提供完整的方法签名、属性和泛型约束
  • 准确的类型信息:确保正确的参数类型、返回类型和命名空间信息

使用案例

  • 包发现:根据功能描述搜索包并查看流行度指标
  • API发现:在使用之前查看包中的接口
  • 版本迁移:升级时比较包版本之间的接口
  • 代码生成:从真实的包接口生成准确的代码
  • 文档:获取最新的接口文档以供开发使用
  • 技术研究:查找特定技术和模式的最流行包

关于MCP协议

模型上下文协议(MCP)是一种标准化语言模型与外部工具之间通信的协议。它允许模型通过一个接口调用函数、获取信息并与外部系统交互。

许可证

无许可证 - 这是自由且无负担的软件,发布到公共领域。

版权

© 2025 DimonSmart

元包支持

所有分析包内容的工具(类定义、接口定义、枚举定义和列出工具)现在自动检测元包并显示清晰警告。元包是NuGet包,它们将其他包组合在一起而不包含实际实现代码。当检测到元包时,工具会:

  • 显示一个显眼的警告,表明这是一个元包
  • 列出包含实际实现的依赖项
  • 提供指导,说明应分析哪些包

元包检测由MetaPackageDetector服务驱动,该服务分析包结构和依赖关系模式,以确定何时一个包仅作为一个组合机制。

<details> <summary>📁 项目结构</summary>
  • Program.cs - 主入口点,配置并运行具有版本支持的MCP服务器
  • TimeTool.cs - 时间相关功能的实用工具(命名空间NugetMcpServer
  • Tools/GetInterfaceDefinitionTool.cs - 从NuGet包中提取接口定义
  • Tools/GetClassDefinitionTool.cs - 从NuGet包中提取类、记录和结构定义
  • Tools/ListInterfacesTool.cs - 列出NuGet包中的所有接口
  • Tools/ListTypesTool.cs - 列出NuGet包中的所有类型(类、记录、结构)
  • Tools/GetEnumDefinitionTool.cs - 从NuGet包中提取枚举定义
  • Tools/GetPackageInfoTool.cs - 获取综合包信息和元数据
  • Tools/SearchPackagesTool.cs - 标准包搜索功能
  • Tools/SearchPackagesFuzzyTool.cs - 增强的模糊包搜索
  • Tools/PackageFileTool.cs - 列出并读取NuGet包中的文件
  • Services/NuGetPackageService.cs - 处理NuGet包的核心服务
  • Services/InterfaceFormattingService.cs - 格式化接口定义
  • Services/ClassFormattingService.cs - 格式化类、记录和结构定义
  • Services/EnumFormattingService.cs - 格式化枚举定义
  • Services/ArchiveProcessingService.cs - 处理NuGet包存档
  • Services/MetaPackageDetector.cs - 检测并处理元包
  • Services/Formatters/ - 不同输出类型的专用结果格式器
  • Common/McpToolBase.cs - 具有通用功能的MCP工具基类
  • Extensions/ - 字符串格式化、异常处理和进度通知的扩展方法
</details> <details> <summary>⚙️ 实现细节</summary>

服务器使用.NET通用主机,包括:

  • 设置为跟踪级别的控制台日志
  • 注册具有STDIO传输的MCP服务器
  • 使用反射自动发现和注册工具
  • 使用HttpClient服务下载NuGet包
  • 使用内存缓存以提高性能
  • 使用NuGetPackageService进行包操作
  • 多种格式化服务,用于不同的C#构造(接口、类、枚举)
  • 存档处理服务,用于高效的包分析
  • 元包检测和依赖项解析
  • 长运行操作的通知系统
  • 命令行参数--version-v支持版本信息
  • 覆盖所有工具和服务的全面测试套件
  • Windows优化的单文件部署,具有CET兼容性处理

关键依赖项:

  • ModelContextProtocol: 0.3.0-preview.2 - MCP协议实现
  • Microsoft.Extensions.Hosting: 9.0.7 - 应用程序托管框架
  • Microsoft.Extensions.Caching.Memory: 9.0.7 - 内存缓存
  • NuGet.Packaging: 6.14.0 - NuGet包处理
  • System.Reflection.MetadataLoadContext: 10.0.0-preview.6 - 程序集元数据分析
  • System.Text.Json: 9.0.5 - JSON序列化

项目命名空间:

  • NugetMcpServer - 主命名空间(用于TimeTool.cs)
  • NuGetMcpServer.Tools - 工具组件(所有分析和搜索工具)
  • NuGetMcpServer.Services - 服务组件(包处理、格式化、存档处理)
  • NuGetMcpServer.Common - 共享组件和基类
  • NuGetMcpServer.Extensions - 字符串、异常和进度的扩展方法
  • NuGetMcpServer.Models - 数据模型和结果类型
</details>

版本信息

当前版本:1.0.11

你可以使用以下命令检查安装版本:

NugetMcpServer --version
# 或
NugetMcpServer -v