概述
安装
内容详情
替代品
什么是.NET MCP Server?
.NET MCP Server是一个桥梁,使用模型上下文协议(MCP)将AI助手连接到.NET SDK。你可以把它想象成给你的AI助手一条直接访问`dotnet`命令的线路,但带有智能和上下文理解。 它允许AI助手: - 理解你已安装的.NET模板和参数 - 搜索NuGet包并获取元数据 - 了解框架版本信息(包括LTS状态) - 访问你的解决方案和项目结构 - 执行构建、测试、发布等操作如何使用.NET MCP Server?
使用.NET MCP Server非常简单: 1. 在你的开发环境(VS Code、Visual Studio或Claude Desktop)中安装服务器 2. 配置服务器连接到你的AI助手 3. 开始使用自然语言与AI助手交流,让它帮你执行.NET开发任务 服务器在本地运行,不发送数据到外部服务器,完全在你的控制之下。适用场景
.NET MCP Server最适合以下场景: - 快速创建新的.NET项目(Web API、控制台应用、Blazor等) - 管理NuGet包依赖和版本 - 执行构建、测试和发布流程 - 设置数据库迁移和Entity Framework配置 - 管理解决方案和项目结构 - 配置开发证书和安全设置 - 探索可用的.NET模板和工具主要功能
如何使用
使用案例
常见问题
相关资源
安装
{
"mcpServers": {
"dotnet": {
"command": "dnx",
"args": ["Community.Mcp.DotNet@1.0.0", "--yes"]
}
}
}
{
"mcpServers": {
"dotnet": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/dotnet-mcp/DotNetMcp/DotNetMcp.csproj"]
}
}
}
{
"mcpServers": {
"dotnet": {
"command": "dotnet",
"args": ["run", "--project", "C:\\path\\to\\dotnet-mcp\\DotNetMcp\\DotNetMcp.csproj"]
}
}
}🚀 .NET MCP Server
.NET MCP Server 赋予 AI 助手在 .NET 开发方面的强大能力!该 MCP 服务器可将 GitHub Copilot、Claude 等 AI 助手直接连接到 .NET SDK,使它们能够通过自然语言创建项目、管理包、运行构建等。
🚀 快速开始
点击以下按钮,在您首选的环境中安装:
⚠️ 重要提示
快速安装需要 .NET 10 SDK。
✨ 主要特性
🚀 加速开发
无需记忆精确的 dotnet 命令和语法,只需提出自然语言请求,例如:
- “创建一个使用 Entity Framework 的新 Web API 项目”
- “添加 Serilog 包并配置结构化日志记录”
- “将所有 NuGet 包更新到最新版本”
🧠 智能 AI 辅助
AI 助手可直接访问以下信息:
- 所有已安装的 .NET 模板及其参数
- NuGet 包搜索和元数据
- 框架版本信息(包括 LTS 状态)
- 解决方案和项目结构
🎯 提供上下文和智能
与直接让 AI 调用 dotnet 命令相比,.NET MCP 服务器提供了原始 CLI 执行所没有的 上下文和智能:
1. 模板发现与验证
- 使用 MCP:AI 确切知道已安装的模板(如
console、webapi、blazor等)及其参数。 - 不使用 MCP:AI 猜测模板名称和参数,经常出错。
2. 框架智能
- 使用 MCP:AI 知道已安装的 .NET 版本、哪些是 LTS 版本,并能给出合适的建议。
- 不使用 MCP:当你只安装了
net10.0时,AI 可能会建议使用net8.0,导致错误。
3. 丰富的工具描述
- 使用 MCP:每个工具都有详细的参数描述和约束(例如,“配置必须是 Debug 或 Release”)。
- 不使用 MCP:AI 根据一般知识构造命令,可能会遗漏特定版本的更改。
4. 参数信息
- 使用 MCP:AI 可以看到模板参数,如
--use-controllers、--auth和框架选项。 - 不使用 MCP:AI 不知道每个模板有哪些可选参数。
5. 包搜索集成
- 使用 MCP:AI 可以在 NuGet.org 上搜索确切的包名称和版本。
- 不使用 MCP:AI 猜测包名称,经常建议过时或不正确的包。
6. 结构化错误处理
- 使用 MCP:错误会被解析并以 AI 可以理解的结构化格式返回。
- 不使用 MCP:AI 得到原始的 stderr 输出,可能会误解错误信息。
7. MCP 资源
MCP 资源提供对 .NET 环境结构化元数据的只读访问:
- dotnet://sdk-info - 已安装的 .NET SDK 信息(版本和路径)
- dotnet://runtime-info - 已安装的 .NET 运行时信息(版本和类型)
- dotnet://templates - 已安装的 .NET 模板的完整目录及其元数据
- dotnet://frameworks - 支持的 .NET 框架信息(TFMs),包括 LTS 状态
这使 AI 助手能够:
- 无需执行命令即可回答问题(例如,“我安装了哪些 .NET 版本?”)
- 根据实际环境提供上下文感知的建议
- 比解析 CLI 输出更高效地访问结构化 JSON 数据
- 参考官方 .NET 元数据以提供准确的建议
✨ 结果一致性
MCP 服务器使用官方 .NET SDK API 和 CLI 命令,确保:
- 从模板引擎获取准确的模板信息
- 可靠的命令执行
- 正确的错误处理和验证
🔒 设计安全
- 在本地机器上运行
- 不向外部服务器发送数据
- 你可以控制执行哪些命令
- 应用标准的 .NET 安全模型
- 自动隐藏敏感信息,以保护 CLI 输出中的敏感信息:
- 连接字符串、密码和 API 密钥会自动隐藏
- 使用优化的正则表达式实现,性能开销小于 1%
- 参考 Microsoft.Extensions.Compliance.Redaction 以便未来集成
- 可以通过
unsafeOutput=true选项禁用此功能,用于高级调试 - 隐藏模式包括:数据库凭据、云提供商密钥、令牌、证书等
- 性能影响极小,经测试,处理 10,000 行数据的时间在 500ms 以内
📦 安装指南
要求
- 快速安装:需要 .NET 10 SDK
- 手动安装:需要 .NET 10 SDK 需要安装 Visual Studio Code、Visual Studio 2022(v17.13+)或 Claude Desktop
选项 1:快速安装(推荐)
使用本页面顶部的安装徽章,可在你的环境中自动配置 MCP 服务器。服务器将在首次使用时从 NuGet.org 下载。
选项 2:手动配置
根据你的具体开发环境,按照以下说明操作:
Visual Studio Code
使用快速安装(推荐 - 需要 .NET 10):
- 点击本页面顶部的 VS Code 安装徽章
- 或者通过命令面板手动添加:
- 按下
Ctrl+Shift+P(在 macOS 上为Cmd+Shift+P) - 运行 “GitHub Copilot: 添加 MCP 服务器”
- 输入:
- 名称:
dotnet - 类型:
stdio - 命令:
dnx - 参数:
Community.Mcp.DotNet@0.1.0-* --yes
- 名称:
- 按下
手动配置(用于源代码构建或自定义设置):
编辑你的 VS Code 设置(Ctrl+, 或 Cmd+,,搜索 “mcp”):
{
"github.copilot.chat.mcp.servers": {
"dotnet": {
"type": "stdio",
"command": "dotnet",
"args": ["run", "--project", "/path/to/dotnet-mcp/DotNetMcp/DotNetMcp.csproj"]
}
}
}
Visual Studio 2022
要求:Visual Studio 2022 版本 17.13 或更高版本
使用快速安装(推荐 - 需要 .NET 10):
- 点击本页面顶部的 Visual Studio 安装徽章
- 或者通过选项手动添加:
- 转到 工具 > 选项 > GitHub Copilot > MCP 服务器
- 点击 添加
- 输入:
- 名称:
dotnet - 类型:
stdio - 命令:
dnx - 参数:
Community.Mcp.DotNet@0.1.0-* --yes
- 名称:
手动配置(用于源代码构建或自定义设置):
- 转到 工具 > 选项 > GitHub Copilot > MCP 服务器
- 点击 添加
- 输入:
- 名称:
dotnet - 类型:
stdio - 命令:
dotnet - 参数:
run --project C:\path\to\dotnet-mcp\DotNetMcp\DotNetMcp.csproj
- 名称:
Claude Desktop
使用 DNX(推荐 - 需要 .NET 10):
macOS:编辑 ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"dotnet": {
"command": "dnx",
"args": ["Community.Mcp.DotNet@1.0.0", "--yes"]
}
}
}
Windows:编辑 %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"dotnet": {
"command": "dnx",
"args": ["Community.Mcp.DotNet@1.0.0", "--yes"]
}
}
}
手动配置(用于源代码构建或自定义设置): macOS:
{
"mcpServers": {
"dotnet": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/dotnet-mcp/DotNetMcp/DotNetMcp.csproj"]
}
}
}
Windows:
{
"mcpServers": {
"dotnet": {
"command": "dotnet",
"args": ["run", "--project", "C:\\path\\to\\dotnet-mcp\\DotNetMcp\\DotNetMcp.csproj"]
}
}
}
💻 使用示例
基础用法
配置完成后,你可以使用自然语言与 AI 助手交互:
快速开始 - 单个项目
用户:“创建一个名为 WeatherService 的新 Web API 项目” AI:我将为你创建一个新的 Web API 项目...
dotnet new webapi -n WeatherService
项目已成功创建在 WeatherService 目录中。
高级用法
复杂应用 - 使用 Aspire 的微服务
用户:“创建一个由 .NET Aspire 编排的服务器端 Web 应用和最小 API,并使用 xunit 为 API 创建单元测试。使用 slnx 格式的解决方案。” AI:我将创建一个完整的微服务解决方案,使用 .NET Aspire 进行编排...
# 使用新的 XML 格式创建解决方案
dotnet new sln -n MyMicroservices --use-slnx
# 创建 .NET Aspire AppHost 用于编排
dotnet new aspire-apphost -n MyMicroservices.AppHost
# 创建 Web 应用
dotnet new webapp -n MyMicroservices.Web
# 创建最小 API
dotnet new webapi -n MyMicroservices.Api --use-minimal-apis
# 创建测试项目
dotnet new xunit -n MyMicroservices.Api.Tests
# 将项目添加到解决方案中
dotnet sln add MyMicroservices.AppHost/MyMicroservices.AppHost.csproj
dotnet sln add MyMicroservices.Web/MyMicroservices.Web.csproj
dotnet sln add MyMicroservices.Api/MyMicroservices.Api.csproj
dotnet sln add MyMicroservices.Api.Tests/MyMicroservices.Api.Tests.csproj
# 添加项目引用以进行测试
dotnet add MyMicroservices.Api.Tests/MyMicroservices.Api.Tests.csproj reference MyMicroservices.Api/MyMicroservices.Api.csproj
解决方案已创建,包含 4 个项目:用于编排的 AppHost、Web 应用、API 和单元测试。可以使用 dotnet run --project MyMicroservices.AppHost 运行。
数据库驱动的应用程序 - 使用 Entity Framework
用户:“为我的 API 设置 Entity Framework Core 和 SQL Server,并创建初始数据库迁移” AI:我将添加 EF Core 包,安装 dotnet-ef 工具,并创建初始迁移...
# 添加 Entity Framework 包
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
# 全局安装 dotnet-ef 工具
dotnet tool install dotnet-ef --global
# 创建初始迁移
dotnet ef migrations add InitialCreate
# 应用迁移以创建数据库
dotnet ef database update
已添加 Entity Framework Core 与 SQL Server 提供程序。初始迁移已创建并应用。数据库已准备好使用。
用户:“我在 DbContext 中添加了一个 Product 实体。更新数据库架构” AI:我将为你的 Product 实体创建迁移并应用它...
# 为新实体创建迁移
dotnet ef migrations add AddProductEntity
# 列出迁移以查看待处理的迁移
dotnet ef migrations list
# 应用迁移
dotnet ef database update
已为 Product 实体创建迁移(包含 Id、Name、Price、CreatedDate 列的新表)。数据库已成功更新。
用户:“生成最后一次迁移的 SQL 脚本,以便我在生产部署前进行审核” AI:我将从你的迁移中生成一个幂等 SQL 脚本...
# 生成幂等 SQL 脚本(可以安全地多次运行)
dotnet ef migrations script --idempotent --output deploy.sql
已将 SQL 脚本生成到 deploy.sql。此脚本可以安全地多次运行,并且只会在需要时应用更改。
数据库优先开发
用户:“我有一个现有的 SQL Server 数据库。将其逆向工程为 Entity Framework 类” AI:我将把你的数据库脚手架化为 Entity Framework Core 实体...
# 将数据库逆向工程(脚手架化)为 EF Core 实体
dotnet ef dbcontext scaffold "Server=localhost;Database=MyExistingDb;Trusted_Connection=true;" Microsoft.EntityFrameworkCore.SqlServer --output-dir Models
# 列出生成的 DbContext 类
dotnet ef dbcontext list
# 获取 DbContext 的详细信息
dotnet ef dbcontext info
数据库已成功脚手架化。在 Models 文件夹中生成了 MyExistingDbContext.cs 和 15 个实体类(如 Customer、Order、Product 等)。
多目标测试策略
用户:“添加使用 NUnit 的集成测试,目标为 .NET 8 和 .NET 10,并配置它们以运行代码覆盖率” AI:我将设置具有覆盖率的多目标集成测试...
# 创建 NUnit 测试项目
dotnet new nunit -n MyMicroservices.IntegrationTests
# 更新项目以支持多目标(编辑 .csproj)
# <TargetFrameworks>net8.0;net10.0</TargetFrameworks>
# 添加集成测试包
dotnet add MyMicroservices.IntegrationTests package Microsoft.AspNetCore.Mvc.Testing
dotnet add MyMicroservices.IntegrationTests package Microsoft.Testing.Extensions.CodeCoverage
# 为两个框架运行带有覆盖率的测试
dotnet test -- --coverage --coverage-output-format cobertura
已创建支持多目标的集成测试项目。测试将在 .NET 8 和 .NET 10 上运行,并启用代码覆盖率。
探索和发现
用户:“有哪些可用于创建云原生应用程序的模板?” AI:让我搜索与云原生相关的模板...
dotnet new search aspire
dotnet new search dapr
dotnet new search azure
找到的模板:
aspire- .NET Aspire 应用程序aspire-apphost- .NET Aspire 应用主机aspire-servicedefaults- .NET Aspire 服务默认值dapr- Dapr 应用程序模板- 各种 Azure Functions 和容器应用模板
每个模板都专为云原生微服务和分布式应用程序设计。
现代化工作流程
用户:“将所有包更新到最新版本,根据我们的 editorconfig 规则格式化所有代码,然后构建并运行测试” AI:我将更新包、格式化代码、构建并测试...
# 将所有包更新到最新兼容版本
dotnet package update
# 根据 .editorconfig 格式化所有代码
dotnet format
# 清理并重新构建
dotnet clean
dotnet build -c Release
# 运行所有测试
dotnet test --verbosity detailed
所有包已更新到最新版本。解决方案中的代码已一致格式化。构建成功,无警告。所有 156 个测试均通过。
HTTPS 开发设置
用户:“运行我的 Web 应用时遇到 HTTPS 证书错误” AI:让我检查你的 HTTPS 开发证书...
# 检查证书状态
dotnet dev-certs https --check --trust
你的证书不受信任。让我修复这个问题...
# 信任证书(可能需要提升权限)
dotnet dev-certs https --trust
证书现在受信任。再次尝试运行你的应用。如果你使用 Docker,可以导出证书:
# 为 Docker 容器导出证书
dotnet dev-certs https --export-path ./certs/aspnetapp.pfx --password "SecurePassword123!"
证书已导出到 ./certs/aspnetapp.pfx。你现在可以将其挂载到 Docker 容器中。
安全配置 - 使用用户机密
用户:“为我的 API 项目设置用户机密,并添加数据库连接字符串” AI:我将为你的项目初始化用户机密...
# 初始化用户机密(在项目文件中添加 UserSecretsId)
dotnet user-secrets init --project MyApi/MyApi.csproj
现在我将安全地添加你的数据库连接字符串...
# 存储连接字符串(不会提交到 Git)
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Server=localhost;Database=MyDb;User=dev;Password=secret123"
机密已存储!你还可以添加 API 密钥:
# 添加 Azure OpenAI API 密钥
dotnet user-secrets set "Azure:OpenAI:ApiKey" "sk-..."
# 添加 SendGrid API 密钥
dotnet user-secrets set "SendGrid:ApiKey" "SG...."
让我展示已配置的内容:
# 列出所有机密
dotnet user-secrets list
输出:
ConnectionStrings:DefaultConnection = Server=localhost;Database=MyDb;User=dev;Password=secret123
Azure:OpenAI:ApiKey = sk-...
SendGrid:ApiKey = SG....
这些机密存储在你的用户配置文件中(不在项目中),不会提交到 Git。在代码中,你可以像这样访问它们:
var connectionString = builder.Configuration["ConnectionStrings:DefaultConnection"];
var apiKey = builder.Configuration["Azure:OpenAI:ApiKey"];
💡 使用建议
用户机密仅用于开发环境。在生产环境中,请使用 Azure Key Vault 或环境变量。
📚 详细文档
可用工具
服务器通过 MCP 工具和资源提供全面的 .NET 开发功能:
MCP 资源(只读上下文)
服务器公开了只读资源,可高效访问 .NET 环境元数据:
- dotnet://sdk-info - 已安装的 .NET SDK 信息(版本和路径)
- dotnet://runtime-info - 已安装的 .NET 运行时信息(版本和类型)
- dotnet://templates - 已安装的 .NET 模板的完整目录及其元数据
- dotnet://frameworks - 支持的 .NET 框架信息(TFMs),包括 LTS 状态
资源提供结构化的 JSON 数据,对于频繁访问的只读信息,比工具调用更高效。
工具 - 模板与框架
- dotnet_template_list - 列出所有已安装的 .NET 模板及其元数据
- dotnet_template_search - 按名称或描述搜索模板
- dotnet_template_info - 获取详细的模板信息和参数
- dotnet_template_clear_cache - 清除模板缓存,强制从磁盘重新加载
- dotnet_framework_info - 获取 .NET 框架版本信息和 LTS 状态
工具 - 项目管理
- dotnet_project_new - 根据模板创建新的 .NET 项目
- dotnet_project_restore - 恢复项目依赖项
- dotnet_project_build - 构建 .NET 项目
- dotnet_project_run - 构建并运行 .NET 项目
- dotnet_project_test - 运行单元测试
- dotnet_project_publish - 发布项目以进行部署
- dotnet_project_clean - 清理构建输出
- dotnet_pack_create - 从项目创建 NuGet 包
- dotnet_watch_run - 运行并监视文件更改,支持热重载
- dotnet_watch_test - 运行测试,文件更改时自动重启
- dotnet_watch_build - 文件更改时自动重新构建
工具 - 包管理
- dotnet_package_add - 添加 NuGet 包引用
- dotnet_package_remove - 移除 NuGet 包引用
- dotnet_package_search - 在 nuget.org 上搜索 NuGet 包
- dotnet_package_update - 将 NuGet 包更新到较新版本
- dotnet_package_list - 列出包引用(包括过时/已弃用的包)
- dotnet_reference_add - 添加项目到项目的引用
- dotnet_reference_remove - 移除项目到项目的引用
- dotnet_reference_list - 列出项目引用
工具 - 工具管理
- dotnet_tool_install - 全局或本地安装 .NET 工具到工具清单
- dotnet_tool_list - 列出已安装的 .NET 工具(全局或从清单中本地安装的)
- dotnet_tool_update - 将 .NET 工具更新到较新版本
- dotnet_tool_uninstall - 卸载 .NET 工具
- dotnet_tool_restore - 从工具清单(.config/dotnet-tools.json)恢复工具
- dotnet_tool_manifest_create - 创建 .NET 工具清单文件(.config/dotnet-tools.json)
- dotnet_tool_search - 在 NuGet.org 上搜索 .NET 工具
- dotnet_tool_run - 通过命令名称运行 .NET 工具
工具 - Entity Framework Core
Entity Framework Core 工具需要安装 dotnet-ef 工具(dotnet tool install dotnet-ef --global),并且项目中需要包含 Microsoft.EntityFrameworkCore.Design 包。
迁移管理:
- dotnet_ef_migrations_add - 为数据库架构更改创建新的迁移
- dotnet_ef_migrations_list - 列出所有迁移(已应用和待处理的)
- dotnet_ef_migrations_remove - 移除最后一个未应用的迁移
- dotnet_ef_migrations_script - 从迁移生成 SQL 脚本以进行部署
数据库管理:
- dotnet_ef_database_update - 应用迁移以更新数据库架构
- dotnet_ef_database_drop - 删除数据库(仅用于开发环境,需要强制标志)
DbContext 工具:
- dotnet_ef_dbcontext_list - 列出项目中的所有 DbContext 类
- dotnet_ef_dbcontext_info - 获取 DbContext 信息(连接字符串、提供程序)
- dotnet_ef_dbcontext_scaffold - 将数据库逆向工程为实体类(数据库优先)
工具 - 解决方案管理
- dotnet_solution_create - 创建新的解决方案文件(.sln 或 .slnx 格式)
- dotnet_solution_add - 将项目添加到解决方案中
- dotnet_solution_list - 列出解决方案中的项目
- dotnet_solution_remove - 从解决方案中移除项目
工具 - 代码质量
- dotnet_format - 根据 .editorconfig 和样式规则格式化代码
工具 - 安全与证书
- dotnet_certificate_trust - 信任 HTTPS 开发证书(可能需要提升权限)
- dotnet_certificate_check - 检查 HTTPS 证书是否存在且受信任
- dotnet_certificate_clean - 移除所有 HTTPS 开发证书
- dotnet_certificate_export - 将 HTTPS 证书导出到文件(支持 PFX 和 PEM 格式)
- dotnet_secrets_init - 为项目初始化用户机密(创建 UserSecretsId)
- dotnet_secrets_set - 设置用户机密值(将敏感配置存储在项目外部)
- dotnet_secrets_list - 列出项目的所有用户机密
- dotnet_secrets_remove - 按密钥移除特定的用户机密
- dotnet_secrets_clear - 清除项目的所有用户机密
工具 - 实用工具
- dotnet_nuget_locals - 管理 NuGet 本地缓存(列出、清除)
工具 - SDK 信息
- dotnet_sdk_version - 获取 .NET SDK 版本
- dotnet_sdk_info - 获取详细的 SDK 和运行时信息
- dotnet_sdk_list - 列出已安装的 SDK
- dotnet_runtime_list - 列出已安装的运行时
工具 - 帮助
- dotnet_help - 获取任何 dotnet 命令的帮助
- dotnet_server_capabilities - 获取 MCP 服务器功能和并发指导
从源代码构建
如果你需要进行开发或贡献代码,可以按照以下步骤操作:
git clone https://github.com/jongalloway/dotnet-mcp.git
cd dotnet-mcp/DotNetMcp
dotnet build
运行服务器:
dotnet run
服务器通过 stdio 传输进行通信,设计为由 MCP 客户端调用。
项目结构
dotnet-mcp/
├── DotNetMcp/ # 主 MCP 服务器项目
│ ├── DotNetMcp.csproj # 包含 NuGet 依赖项的项目文件
│ ├── Program.cs # MCP 服务器设置和托管
│ ├── DotNetCliTools.cs # MCP 工具实现(44 个工具)
│ ├── DotNetResources.cs # MCP 资源实现(SDK、运行时、模板、框架)
│ ├── DotNetCommandExecutor.cs # 带日志记录的命令执行帮助程序
│ ├── DotNetSdkConstants.cs # 强类型的 SDK 常量(TFMs、配置、运行时)
│ ├── TemplateEngineHelper.cs # 带有缓存的模板引擎集成
│ └── FrameworkHelper.cs # 框架验证和元数据帮助程序
├── DotNetMcp.Tests/ # 单元测试项目
│ ├── DotNetMcp.Tests.csproj # 测试项目文件(xUnit、FluentAssertions、Moq)
│ ├── FrameworkHelperTests.cs # 框架验证和元数据测试
│ └── DotNetSdkConstantsTests.cs # SDK 常量验证测试
├── doc/
│ ├── sdk-integration.md # SDK 集成架构文档
│ ├── advanced-topics.md # 性能、日志记录和安全细节
│ ├── concurrency.md # 并发安全和编排指导
│ └── testing.md # 如何运行测试(包括可选的交互式测试)
├── .github/
│ ├── copilot-instructions.md # GitHub Copilot 开发指南
│ ├── dependabot.yml # 自动依赖项更新
│ └── workflows/
│ └── build.yml # CI/CD 构建和测试工作流
├── DotNetMcp.slnx # 解决方案文件(基于 XML 的 .slnx 格式)
├── LICENSE # MIT 许可证
└── README.md # 本文件
技术栈
| 属性 | 详情 |
|---|---|
| 协议 | Model Context Protocol (MCP) |
| SDK | MCP SDK for .NET v0.5.0-preview.1 |
| 运行时 | .NET 10.0(目标框架) |
| 传输方式 | stdio(标准输入/输出) |
| NuGet 包 | Microsoft.TemplateEngine.Abstractions & Edge - 模板元数据;Microsoft.Build.Utilities.Core & Microsoft.Build - 项目验证 |
文档链接
- 📖 SDK 集成详情 - 技术架构和 SDK 使用方法
- 📖 高级主题 - 性能、日志记录和安全细节
- 📖 并发安全 - AI 编排器的并行执行指导
- 📖 测试 - 如何运行测试(包括可选的交互式测试)
- 📖 Model Context Protocol - 官方 MCP 规范
- 📖 MCP C# SDK 文档 - SDK 文档
互操作性
.NET MCP 服务器遵循 Model Context Protocol 规范,并为工具发现和 AI 编排提供丰富的元数据:
服务器元数据
服务器包含一个全面的 server.json 配置文件(.mcp/server.json),提供以下信息:
-
环境变量:为 MCP 使用优化的 .NET CLI 设置
DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1- 跳过首次设置DOTNET_NOLOGO=1- 抑制启动消息
-
包信息:NuGet 包详细信息,便于通过
dnx轻松安装(需要 .NET 10)- 包:
Community.Mcp.DotNet - 注册表:NuGet.org
- 传输方式:stdio
- 包:
-
工具描述符:全面的工具元数据,包括:
- 使用
dotnet_前缀的工具 ID,以避免命名冲突 - 类别标签(模板、项目、包、解决方案等)
- 用于语义搜索的发现标签(例如,“build”、“compile”、“test”)
commonlyUsed标志,标记前 10 个最常用的工具
- 使用
-
资源描述符:用于高效元数据访问的只读资源
dotnet://sdk-info- SDK 版本和路径信息dotnet://runtime-info- 运行时安装详细信息dotnet://templates- 带有参数的模板目录dotnet://frameworks- 带有 LTS 状态的框架版本
工具命名空间
所有工具在其外部 ID 中使用 dotnet_ 前缀,以防止与其他 MCP 服务器发生命名冲突。这遵循了 MCP 服务器互操作性的最佳实践:
示例:
dotnet_project_new- 创建新项目dotnet_project_build- 构建项目dotnet_package_add- 添加 NuGet 包dotnet_solution_create- 创建解决方案文件
发现标签
前 10 个常用工具包含语义标签,以提高可发现性:
- dotnet_template_list -
["template", "list", "discovery", "project-creation"] - dotnet_project_new -
["project", "create", "new", "template", "initialization"] - dotnet_project_restore -
["project", "restore", "dependencies", "packages", "setup"] - dotnet_project_build -
["project", "build", "compile", "compilation"] - dotnet_project_run -
["project", "run", "execute", "launch", "development"] - dotnet_project_test -
["project", "test", "testing", "unit-test", "validation"] - dotnet_package_add -
["package", "add", "nuget", "dependency", "install"] - dotnet_package_search -
["package", "search", "nuget", "discovery", "find"] - dotnet_solution_create -
["solution", "create", "new", "organization", "multi-project"] - dotnet_tool_install -
["tool", "install", "global", "local", "cli"]
这些标签使 AI 助手能够:
- 根据语义意图查找相关工具
- 对相关操作进行分组,以提供工作流建议
- 在推荐中优先考虑常用工具
元数据访问
AI 编排器可以通过以下方式访问服务器元数据:
- MCP 协议:通过 MCP SDK 进行标准的工具/资源列表操作
- server.json:用于注册和发现的静态元数据文件
- 工具属性:通过代码中的
McpMeta属性获取运行时元数据
有关详细的集成示例,请参阅 MCP 规范 和我们的 SDK 集成文档。
🔧 技术细节
工作原理
sequenceDiagram
participant User
participant AI as AI Assistant
participant MCP as .NET MCP Server
participant SDK as .NET SDK
User->>AI: "Create a console app called MyApp"
AI->>MCP: dotnet_project_new(template: "console", name: "MyApp")
MCP->>SDK: dotnet new console -n MyApp
SDK-->>MCP: Project created successfully
MCP-->>AI: Structured result with output
AI-->>User: "I've created a new console app called MyApp"
.NET MCP 服务器作为智能中间件,执行以下操作:
- 翻译:将自然语言请求转换为结构化的 .NET SDK 操作
- 验证:使用官方 SDK 元数据(模板、框架、包)验证参数
- 执行:安全地执行命令,并进行正确的错误处理
- 返回:返回 AI 助手可以理解和解释的结构化结果
📄 许可证
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
贡献说明
欢迎为该项目做出贡献!这是一个由社区维护的项目。
贡献方式:
- 🐛 通过 GitHub Issues 报告错误或请求新功能
- 💡 提交拉取请求,添加新工具或进行改进
- 📝 改进文档
- ⭐ 给仓库加星以表示支持
开发设置:
- 分叉仓库
- 克隆你的分叉
- 创建功能分支
- 进行更改
- 彻底测试
- 提交拉取请求
请参阅 .github/copilot-instructions.md 了解开发指南。
故障排除
"dnx 未找到"
- 原因:未安装 .NET 10 SDK
- 解决方案:安装 .NET 10 SDK 或使用
dotnet run进行手动配置
"未找到模板"
- 原因:未安装 .NET SDK 模板
- 解决方案:运行
dotnet new --install安装默认模板
"服务器无响应"
- 原因:服务器崩溃或未能启动
- 解决方案:检查 MCP 客户端中的日志,确保 .NET SDK 在 PATH 中
需要帮助?
- 📖 查看 文档
- 💬 打开 GitHub Issue
- 🔍 搜索 现有问题
相关的 Microsoft MCP
此 .NET MCP 服务器专注于 .NET SDK 操作(构建、运行、测试、模板、SDK 管理)。对于特定场景,可考虑以下互补的官方 Microsoft MCP 服务器:
- NuGet MCP Server - 高级 NuGet 包搜索、元数据和自动化场景,超越基本的包管理
- Aspire MCP Server - 用于 .NET Aspire 应用程序的运行时监控、遥测、分布式跟踪和资源管理
这些 MCP 与 .NET MCP 协同工作,全面覆盖 .NET 开发生命周期:
| 功能 | .NET MCP | NuGet MCP | Aspire MCP |
|---|---|---|---|
| 主要关注点 | .NET SDK 操作 | 包元数据/发现 | 运行时监控 |
| 范围 | CLI 命令(构建、运行、测试) | NuGet 搜索和自动化 | Aspire 应用程序遥测 |
| 阶段 | 开发阶段 | 开发/发现阶段 | 运行时/生产阶段 |
| 示例操作 | dotnet build、dotnet new |
包搜索、READMEs | 日志查看、跟踪 |
替代品








