用途
DotNetMetadataMcpServer 是一个 Model Context Protocol(MCP)服务器,旨在为 AI 编码代理提供 .NET 项目中的详细类型信息,帮助 AI 代理理解并处理 .NET 代码库,从而生成更准确、更具上下文感知的代码建议。
主要能力
- 程序集探索:检索 .NET 项目引用的所有程序集列表。
- 命名空间探索:发现指定程序集中的所有命名空间。
- 类型探索:获取指定命名空间中类型的详细信息,包括完整类型名及泛型参数、实现的接口、带参数的构造函数、带返回类型和参数的方法、带类型和访问器的属性、带类型和修饰符的字段、带处理程序类型的事件。
- NuGet 包搜索:在 nuget.org 上搜索 NuGet 包,支持过滤和分页。
- NuGet 包版本信息:获取特定 NuGet 包的版本历史和依赖信息。
- 可配置的程序集解析:可从构建输出、NuGet 全局包缓存(仅需还原,无需构建)解析程序集,或自动尝试两者。
- 过滤与分页:应用通配符过滤器缩小结果范围,内置分页处理大型结果集。
使用方式
服务器提供五个主要工具供 AI 代理使用:
ReferencedAssembliesExplorer:从 .NET 项目中检索引用的程序集。NamespacesExplorer:从指定程序集中检索命名空间。NamespaceTypes:从指定命名空间中检索类型。NuGetPackageSearch:在 nuget.org 上搜索 NuGet 包,支持过滤和分页。NuGetPackageVersions:检索特定 NuGet 包的版本历史和依赖信息。
使用前需满足以下条件:
- .NET 10.0 SDK 或更高版本。
- 一个想要探索的 .NET 项目。
安装方式:
- 原生安装:克隆仓库,构建项目(
dotnet build -c Release),发布项目(dotnet publish -c Release -r <runtime-identifier> --self-contained false,将<runtime-identifier>替换为目标平台,如 win-x64、linux-x64、osx-x64)。 - Docker:从 Docker Hub 拉取镜像(
docker pull vrogozhin/dotnet-types-explorer-mcp:latest)或本地构建(git clone https://github.com/V0v1kkk/DotNetMetadataMcpServer.git,cd DotNetMetadataMcpServer,docker build -t dotnet-types-explorer-mcp .),然后运行容器(docker run --rm -i -v /path/to/your/dotnet/projects:/workspace vrogozhin/dotnet-types-explorer-mcp:latest)。Docker 部署优势包括无需安装 .NET SDK、环境隔离、跨操作系统一致行为、包含 MSBuild 和所有必需依赖、易于更新。
配置:需要在 MCP 设置文件中配置。原生配置需替换发布可执行文件的实际路径和用户主目录;Docker 配置需替换包含 .NET 项目的目录。支持在 appsettings.json 中配置多个 NuGet 包源(名称、URL(须以 /v3/index.json 结尾)、是否启用),所有启用的源并行查询,结果按包 ID 和版本自动去重;若未配置任何源,则仅添加 nuget.org。源优先级按配置顺序确定,重复包以第一个源为准,元数据来自最高优先级源。还支持配置程序集解析模式(BuildOutput 或 NuGetCache),NuGetCache 模式适用于主要探索第三方包 API 而无需完整构建的场景,全局包文件夹路径从 project.assets.json 自动读取。
适用场景
- 当处理具有 NuGet 包引用的 .NET 项目,需要使用这些包编写代码时,系统化探索包的 API。
- 当不熟悉包的 API 或文档有限时。
- 探索 UI 框架 API 等第三方库。
- 推荐的自上而下方法:先检索项目引用的程序集,再发现命名空间,最后获取类型详细信息。重点放在第三方库和 NuGet 包,而非 BCL 类型(如 System.* 或 Microsoft.*)。仅在数据量过大或明确知道查找目标时使用过滤。
限制
- 构建要求取决于解析模式:在 BuildOutput 模式(默认)下,扫描前必须构建项目;在 NuGetCache 模式下,仅需
dotnet restore,服务器直接从 NuGet 全局包缓存解析包程序集。项目特定类型仅在项目已构建时可用。 - 不跟踪项目间引用:仅检查指定项目及其 NuGet 依赖项。如需分析多个项目,需分别扫描每个项目。
- 项目输出定位:服务器通过 MsBuildHelper 评估项目并尝试定位输出程序集,按顺序探测配置:请求的配置(默认 Debug)、Release,若仍未找到则回退检查 Debug。第一个存在的输出获胜。若未找到输出,则假定合理默认路径并记录警告。
(注:官网资料还提及未来计划包括添加 NuGet 集成以提供实际包版本信息、迁移到官方 Model Context Protocol C# SDK、支持多个 NuGet 包源(自定义/私有源)、添加依赖图构建能力、改进多项目场景。该工具已与 Roo Code Visual Studio 扩展测试。)