mcpField
.
.NET MCP Server

.NET MCP Server

本地服务
github.com/jongalloway开发工具3716 周前更新

关于 .NET MCP Server

一个 MCP 服务,让 Claude、GitHub Copilot 等 AI 助手直接调用 .NET SDK,完成创建项目、管理 NuGet 包、构建和测试等操作。服务在本机运行,面向 .NET 开发者。

主要功能

  1. 01通过结构化工具调用 dotnet 命令
  2. 02读取已安装的模板及其参数
  3. 03查询 NuGet 包信息与版本
  4. 04提供 SDK、运行时、框架等只读资源
  5. 05对常见 CS、MSB、NU、NETSDK 错误提供诊断说明
  6. 06敏感信息在命令输出中自动脱敏

适用场景

  1. 01用自然语言创建 Web API 或控制台项目
  2. 02添加或更新 NuGet 包并完成还原
  3. 03运行测试并分析构建失败原因

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露 dotnet_project、dotnet_sdk 等工具,以及 dotnet:// 资源和若干提示词。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
nugetCommunity.Mcp.DotNet1.1.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

.NET MCP 服务

构建和测试 覆盖率 Dependabot NuGet 已发布到 MCP 注册表 CodeQL Advanced

为你的 AI 助手赋予 .NET 开发超能力!此 MCP 服务可将 GitHub Copilot、Claude 和其他 AI 助手直接连接到 .NET SDK,让它们能够通过自然语言创建项目、管理包、运行生成等。

快速安装

点击按钮,在你偏好的环境中安装: VS Code - 安装 .NET MCP VS Code Insiders - 安装 .NET MCP Visual Studio - 安装 .NET MCP

注意:快速安装需要 .NET 10 SDK。

这是什么?

.NET MCP 服务是一个模型上下文协议(MCP)服务,它使用模型上下文协议将 AI 助手连接到 .NET SDK。你可以把它想象成让 AI 助手直接调用 dotnet 命令,同时还能理解智能和上下文。

重要:此包专为用作 AI 助手的 MCP 服务而设计,不适用于作为库或在其他 .NET 应用程序中以编程方式调用。唯一受支持的用法是通过 dnx 或 dotnet run 将其作为 MCP 服务运行。

graph LR
    A[AI Assistant<br/>Copilot/Claude] -->|Natural Language| B[.NET MCP Server]
    B -->|dotnet commands| C[.NET SDK]
    C -->|Results| B
    B -->|Structured Response| A
    
    style A fill:#e1f5ff
    style B fill:#fff4e6
    style C fill:#e8f5e9

为什么使用它?

🚀 更快的开发

不用再记忆准确的 dotnet 命令和语法,只需提出需求:

  • “创建一个使用 Entity Framework 的新 Web API 项目”
  • “添加 Serilog 包并配置结构化日志记录”
  • “将我的所有 NuGet 包更新到最新版本”
🧠 更智能的 AI 辅助

你的 AI 助手可以直接访问:

  • 所有已安装的 .NET 模板及其参数
  • NuGet 包搜索和元数据
  • 框架版本信息(包括 LTS 状态)
  • 你的解决方案和项目结构
⚡ 从设计上实现高效使用 Token

服务器不依赖大模型通过反复读取控制台输出来推断状态,而是提供专为此设计的 .NET 工具,并采用结构化输入和输出。在实际使用中,这通常意味着每项任务消耗的 Token 更少,来回沟通也更少。

  • 确定性的工具架构可减少提示词/响应开销
  • machineReadable: true 会返回结构化 JSON(无需抓取日志)
  • MCP 资源提供轻量级元数据,无需运行命令
🎯 为什么不直接让 AI 调用 dotnet?

.NET MCP Server 提供了原始 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:系统会解析错误,并补充说明、文档链接和建议的修复方法
  • 不使用 MCP:AI 只能获取原始 stderr 输出,可能会误解错误

服务器针对 52 种常见错误代码提供增强错误诊断:

  • 用通俗易懂的语言解释出错原因
  • 提供指向 Microsoft 官方文档的直接链接
  • 提供具体的修复建议和用于解决问题的命令
  • 支持 CS####、MSB####、NU#### 和 NETSDK#### 错误代码

详情请参阅错误诊断文档。

7. MCP 资源

MCP 资源提供对 .NET 环境结构化元数据的只读访问:

  • dotnet://sdk-info - 已安装 .NET SDK 的信息(版本和路径)
  • dotnet://runtime-info - 已安装 .NET 运行时的信息(版本和类型)
  • dotnet://templates - 已安装 .NET 模板的完整目录及其元数据
  • dotnet://frameworks - 支持的 .NET 框架(TFM)信息,包括 LTS 状态
  • dotnet://workspace - 工作区快照,包含解决方案、项目、目标框架和包数量

这使 AI 助手能够:

  • 无需执行命令即可回答问题(“我安装了哪些 .NET 版本?”)
  • 根据你的实际环境提供有上下文的建议
  • 比解析 CLI 输出更高效地访问结构化 JSON 数据
  • 参考官方 .NET 元数据,提供准确的建议

示例:使用资源提供有上下文的协助

❌ Without Resources:
User: "What .NET versions do I have?"
AI: Executes dotnet --list-sdks and parses output
User: "Which is LTS?"
AI: Executes dotnet --info and tries to parse support info

✅ With Resources:
User: "What .NET versions do I have?"
AI: Reads dotnet://sdk-info resource (no execution needed)
    Returns: .NET 8.0 (LTS), .NET 9.0 (STS), .NET 10.0 (LTS)
User: "Which is LTS?"
AI: Already knows from resource metadata - .NET 8.0, .NET 10.0

示例:创建带身份验证的 Blazor 项目

❌ Without MCP:
AI: "I'll run: dotnet new blazor --auth Individual"
Result: Error - template 'blazor' doesn't support --auth parameter

✅ With MCP:
AI: Uses dotnet_sdk with action: "TemplateInfo" for 'blazor'
  Sees available parameters: --interactivity, --use-program-main, --empty
  Uses dotnet_sdk with action: "SearchTemplates" to find authentication templates
AI: "I'll create a Blazor Web App with authentication using the correct template..."
Result: Success - uses 'blazor' template with proper authentication configuration
✨ 结果一致

MCP 服务使用官方 .NET SDK API 和 CLI 命令,确保:

  • 从 Template Engine 获取准确的模板信息
  • 可靠地执行命令
  • 妥善处理错误并进行验证
🔒 安全设计
  • 在你的计算机上本地运行
  • 不会向外部服务器发送数据
  • 由你控制执行哪些命令
  • 适用标准 .NET 安全模型
  • 自动脱敏机密信息,保护 CLI 输出中的敏感信息
    • 自动脱敏连接字符串、密码和 API 密钥
    • 使用经过优化的正则表达式实现,性能开销低于 1%
    • 引用 Microsoft.Extensions.Compliance.Redaction,以便未来集成
    • 可通过 unsafeOutput=true 选择退出,便于高级调试
    • 覆盖的模式包括:数据库凭据、云服务提供商密钥、令牌、证书等
    • 性能影响极小,且已测试在 500ms 内处理完 10,000 行
  • 可选的 MCP 治理控制(预览版)
"McpGovernance": {
  "Enabled": true,
  "DefaultAgentId": "did:mcp:anonymous",
  "ServerName": "dotnet-mcp",
  "PolicyPaths": ["/path/to/your/policies/mcp.yaml"]
}

工作原理

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(action: "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 服务充当智能中间件,用于:

  1. 转换自然语言请求,将其转化为结构化的 .NET SDK 操作
  2. 验证参数,使用官方 SDK 元数据(模板、框架、包)
  3. 执行命令,并妥善处理错误
  4. 返回结构化结果,供 AI 助手理解和解释
🧩 使用的 MCP C# SDK 功能

dotnet-mcp 使用官方的 MCP C# SDK,并应用了许多 MCP 功能,不局限于基本的工具调用:

功能dotnet-mcp 的用法用途
资源将 dotnet://sdk-info、dotnet://runtime-info、dotnet://templates、dotnet://frameworks 和 dotnet://workspace 公开为只读 MCP 资源。让客户端无需调用 shell 即可快速回答有关环境和工作区拓扑的问题,并减少反复通过 CLI 发现信息造成的令牌消耗。
提示词发布可复用的提示词,例如 create_new_webapi、add_package_and_restore 和 run_tests_with_coverage。为 MCP 客户端提供引导式、可发现的工作流,无需从头重建常用的提示词框架。
根目录使用客户端工作区根目录,在用户未提供明确路径时自动检测单个项目或解决方案。改善 IDE 客户端的开箱即用体验,并减少用户需要提供的参数数量。
采样在客户端支持采样时,请求由客户端处理的大模型摘要,分析构建和测试失败。无需单独的服务端模型凭据,即可在 MCP 流程中完成智能诊断。
征询在执行 clean 和移除解决方案等破坏性操作前,请求明确确认。为删除构件或更改项目结构的操作增加人在环路中的安全检查。
进度通知报告耗时较长的还原、构建、测试、发布、打包、工具和工作负载操作的开始与完成进度。为客户端提供更好的慢速操作用户体验,并简化能够显示进度的 Agent 的编排。
任务注册 IMcpTaskStore,并为 dotnet_project 声明可选的任务支持,以处理耗时较长的操作。支持异步执行、轮询和取消模式,而不必让每个耗时较长的请求都阻塞会话。
工具和工具元数据使用整合后的工具,并提供丰富的元数据,例如标题、类别、优先级、操作列表和任务支持声明。提高可发现性、路由效率和客户端展示效果,尤其是在支持 MCP 的 IDE 集成中。
提示词和资源补全实现补全处理程序,让客户端可以自动补全提示词和资源的参数值。加快引导式工作流,并减少支持补全体验的客户端中的无效参数输入。
图标和服务元数据配置服务级图标,以及整合后的接口中每个工具的 IconSource、标题和描述性元数据。帮助客户端更清晰地展示服务和工具目录,尤其是在可视化 MCP 管理界面中。

安装

要求
  • 快速安装:.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):

  1. 点击本页顶部的 VS Code 安装徽章
  2. 或通过命令面板手动添加:按 Ctrl+Shift+P(macOS 上按 Cmd+Shift+P),运行 "GitHub Copilot: Add MCP Server",然后输入 名称 dotnet、类型 stdio、命令 dnx 和 参数 Community.Mcp.DotNet@1.* --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"]
    }
  }
}

📖 完整的 VS Code MCP 文档

Visual Studio 2022

要求:Visual Studio 2022 17.13 版或更高版本

使用快速安装(推荐——需要 .NET 10):

  1. 点击本页顶部的 Visual Studio 安装徽章
  2. 或通过选项手动添加:转到 工具 > 选项 > GitHub Copilot > MCP 服务,点击 添加,然后输入 名称 dotnet、类型 stdio、命令 dnx 和 参数 Community.Mcp.DotNet@1.* --yes。

手动配置(适用于从源码构建或自定义设置):

  1. 转到 工具 > 选项 > GitHub Copilot > MCP 服务
  2. 点击 添加
  3. 输入:
    • 名称:dotnet
    • 类型:stdio
    • 命令:dotnet
    • 参数:run --project C:\path\to\dotnet-mcp\DotNetMcp\DotNetMcp.csproj

📖 完整的 Visual Studio MCP 文档

Claude Desktop

使用 DNX(推荐——需要 .NET 10):

macOS:编辑 ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "dotnet": {
      "command": "dnx",
      "args": ["Community.Mcp.DotNet@1.*", "--yes"]
    }
  }
}

Windows:编辑 %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "dotnet": {
      "command": "dnx",
      "args": ["Community.Mcp.DotNet@1.*", "--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"]
    }
  }
}
GitHub Copilot 编码 Agent(仓库 MCP 配置)

你也可以在仓库级别为 GitHub Copilot 编码 Agent 配置此 MCP 服务。

  1. 在 GitHub 上打开你的仓库
  2. 转到 Settings > Copilot > Coding agent
  3. 将以下 JSON 粘贴到 MCP 配置框中
  4. 点击 Save

详情请参阅 GitHub 文档:使用模型上下文协议 (MCP) 扩展 GitHub Copilot 编码 Agent

{
  "mcpServers": {
    "dotnet": {
      "type": "local",
      "command": "dnx",
      "args": ["Community.Mcp.DotNet@1.*", "--yes"],
      "tools": [
        "dotnet_project",
        "dotnet_package",
        "dotnet_solution",
        "dotnet_sdk",
        "dotnet_help",
        "dotnet_server_capabilities",
        "dotnet_server_info"
      ]
    }
  }
}

此配置使用经过筛选的工具允许列表(而不是 "*"),让 Agent 能够安全且可预测地使用 .NET MCP 服务。

注意:Copilot 编码 Agent 在 GitHub Actions 运行器上运行。如果需要确保仓库中已安装 .NET 10,请添加一个设置工作流,例如 .github/workflows/copilot-setup-steps.yml。

使用示例

配置完成后,你可以使用自然语言与 AI 助手交互:

快速入门——单个项目

用户:“创建一个名为 WeatherService 的新 Web API 项目”

AI:我来为你创建一个新的 Web API 项目……

dotnet new webapi -n WeatherService

项目已在 WeatherService 目录中成功创建。

复杂应用——使用 Aspire 的微服务

用户:“创建一个服务端 Web 应用和最小 API,使用 .NET Aspire 进行编排,并使用 xunit 为 API 编写单元测试。解决方案使用 slnx 格式。”

AI:我来为你创建一个由 .NET Aspire 编排的完整微服务解决方案……

# Create solution with new XML format
dotnet new sln -n MyMicroservices --use-slnx

# Create .NET Aspire AppHost for orchestration
dotnet new aspire-apphost -n MyMicroservices.AppHost

# Create web app
dotnet new webapp -n MyMicroservices.Web

# Create minimal API
dotnet new webapi -n MyMicroservices.Api --use-minimal-apis

# Create test project
dotnet new xunit -n MyMicroservices.Api.Tests

# Add projects to solution
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

# Add project references for tests
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 工具,并创建初始迁移……

# Add Entity Framework packages
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design

# Install dotnet-ef tool globally
dotnet tool install dotnet-ef --global

# Create initial migration
dotnet ef migrations add InitialCreate

# Apply migration to create database
dotnet ef database update

已添加 Entity Framework Core 的 SQL Server 提供程序。已创建并应用初始迁移。数据库已准备就绪。

用户:“我在 DbContext 中添加了一个 Product 实体。更新数据库架构”

AI:我会为你的 Product 实体创建迁移并应用它……

# Create migration for new entity
dotnet ef migrations add AddProductEntity

# List migrations to see what's pending
dotnet ef migrations list

# Apply the migration
dotnet ef database update

已为 Product 实体创建迁移(新增表,包含 Id、Name、Price、CreatedDate 列)。数据库已成功更新。

用户:“为上一次迁移生成 SQL 脚本,以便我在生产环境部署前审查”

AI:我会根据你的迁移生成幂等 SQL 脚本……

# Generate idempotent SQL script (can be run multiple times safely)
dotnet ef migrations script --idempotent --output deploy.sql

SQL 脚本已生成至 deploy.sql。此脚本可以安全地多次运行,并且只会在需要时应用更改。

数据库优先开发

用户:“我有一个现有的 SQL Server 数据库。将它反向工程为 Entity Framework 类”

AI:我会将你的数据库架构生成 Entity Framework Core 实体……

# Reverse engineer (scaffold) database to EF Core entities
dotnet ef dbcontext scaffold "Server=localhost;Database=MyExistingDb;Trusted_Connection=true;" Microsoft.EntityFrameworkCore.SqlServer --output-dir Models

# List the generated DbContext classes
dotnet ef dbcontext list

# Get detailed info about the DbContext
dotnet ef dbcontext info

数据库架构生成成功。已在 Models 文件夹中生成 MyExistingDbContext.cs 和 15 个实体类(Customer、Order、Product 等)。

多目标测试策略

用户:“使用 NUnit 添加集成测试,目标框架同时设为 .NET 8 和 .NET 10,并配置代码覆盖率”

AI:我会设置多目标集成测试并启用覆盖率……

# Create NUnit test project
dotnet new nunit -n MyMicroservices.IntegrationTests

# Update project to multi-target (edit .csproj)
# <TargetFrameworks>net8.0;net10.0</TargetFrameworks>

# Add integration test packages
dotnet add MyMicroservices.IntegrationTests package Microsoft.AspNetCore.Mvc.Testing
dotnet add MyMicroservices.IntegrationTests package Microsoft.Testing.Extensions.CodeCoverage

# Run tests with coverage for both frameworks
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 和 Container Apps 模板

每个模板都旨在用于云原生微服务和分布式应用程序。

现代化工作流

用户:“将所有包更新到最新版本,按照 editorconfig 规则格式化所有代码,然后构建并运行测试”

AI:我会更新包、格式化代码、构建并运行测试……

# Update all packages to latest compatible versions
dotnet package update

# Format all code according to .editorconfig
dotnet format

# Clean and rebuild
dotnet clean
dotnet build -c Release

# Run all tests
dotnet test --verbosity detailed

所有包均已更新到最新版本。整个解决方案的代码格式已统一。构建成功,警告数为 0。全部 156 项测试均已通过。

HTTPS 开发环境配置

用户:“运行 Web 应用时遇到 HTTPS 证书错误”

AI:让我检查你的 HTTPS 开发证书……

# Check certificate status
dotnet dev-certs https --check --trust

你的证书尚未受信任。我来修复……

# Trust the certificate (may require elevation)
dotnet dev-certs https --trust

证书现已受信任。请再次尝试运行应用。如果你使用 Docker,可以导出证书:

# Export for Docker containers
dotnet dev-certs https --export-path ./certs/aspnetapp.pfx --password "SecurePassword123!"

证书已导出到 ./certs/aspnetapp.pfx。现在可以将它挂载到 Docker 容器中。

使用 User Secrets 安全配置

用户:“为我的 API 项目配置 user secrets,并添加数据库连接字符串”

AI:我会为你的项目初始化 user secrets……

# Initialize user secrets (adds UserSecretsId to project file)
dotnet user-secrets init --project MyApi/MyApi.csproj

现在我会安全地添加数据库连接字符串……

# Store connection string (not committed to Git)
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Server=localhost;Database=MyDb;User=dev;Password=secret123"

机密已存储!你也可以添加 API 密钥:

# Add Azure OpenAI API key
dotnet user-secrets set "Azure:OpenAI:ApiKey" "sk-..."

# Add SendGrid API key
dotnet user-secrets set "SendGrid:ApiKey" "SG...."

让我查看当前配置:

# List all secrets
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"];

注意:User secrets 仅用于开发环境。生产环境请使用 Azure Key Vault 或环境变量。

移动端和 MAUI 开发设置

用户:“我想为 Android 和 iOS 开发一个 .NET MAUI 应用”

AI:我来帮你设置 MAUI 开发所需的工作负载……

# First, let's see what MAUI workloads are available
dotnet workload search maui

找到的工作负载:

Workload ID       Description              
-------------------------------------------
maui-android      .NET MAUI SDK for Android
maui-ios          .NET MAUI SDK for iOS    
maui-windows      .NET MAUI SDK for Windows
maui-tizen        .NET MAUI SDK for Tizen  

现在安装所需的工作负载:

# Install MAUI workloads for Android and iOS
# Warning: This will download several GB of SDKs and tools
dotnet workload install maui-android maui-ios

注意:上面的命令展示的是原始的 dotnet CLI 语法,其中工作负载 ID 以空格分隔。调用 .NET MCP 工作负载安装工具时,请将工作负载 ID 作为单个逗号分隔的参数传入,例如:workloadIds: "maui-android,maui-ios"。MCP 服务会将其转换为等效的 CLI 命令。

工作负载已安装!现在来验证一下:

# List installed workloads
dotnet workload list

输出:

Installed Workload Id    Manifest Version      Installation Source
----------------------------------------------------------------------
maui-android            10.0.100/10.0.100     SDK 10.0.100        
maui-ios                10.0.100/10.0.100     SDK 10.0.100        

现在可以创建 MAUI 项目了:

# Create a new MAUI app
dotnet new maui -n MyMauiApp

MAUI 开发环境已准备就绪!有 SDK 更新时,请更新工作负载:

# Update all installed workloads
dotnet workload update

可用工具

所有工具都包含视觉图标,便于在 AI 助手界面中发现。图标使用 Microsoft Fluent UI Emoji,提供一致的视觉呈现(📁 项目、📦 包、⚙️ SDK、🛠️ 工具等)。

该服务通过整合型 MCP 工具提供全面的 .NET 开发功能。这些工具按领域对相关操作进行分组,便于 AI 助手选择合适的工具并编排工作流。

注意:.NET MCP Server 仅使用整合型工具。每个整合型工具都通过 action 参数提供多个相关操作。与每项操作都使用单独工具相比,这种设计能改善 AI 编排,并提供更清晰的语义组织。

MCP 资源(只读上下文)

该服务公开只读资源,以便高效访问 .NET 环境元数据:

  • dotnet://sdk-info - 已安装 .NET SDK 的信息(版本和路径)
  • dotnet://runtime-info - 已安装 .NET 运行时的信息(版本和类型)
  • dotnet://templates - 已安装 .NET 模板的完整目录及其元数据
  • dotnet://frameworks - 支持的 .NET 框架(TFM)信息,包括 LTS 状态
  • dotnet://workspace - 工作区快照,包含解决方案、项目、目标框架和包数量

资源提供结构化 JSON 数据。对于频繁访问的只读信息,使用资源比调用工具更高效。

整合型工具

这些工具使用操作枚举对相关操作进行分组,从而改善 AI 编排并提供更清晰的语义组织。

dotnet_project - 项目生命周期管理

所有项目操作的统一接口:新建、还原、构建、运行、测试、发布、清理、分析、依赖项、验证、打包、监视、格式化、停止、日志

此版本新增:

  • Logs 操作:从后台进程会话获取 stdout/stderr 日志
  • Run 的后台模式:使用 startMode: "Background" 在后台启动进程,并通过会话 ID 获取日志
  • Stop 操作:通过会话 ID 终止长时间运行的进程会话(例如 dotnet run)
  • noBuild 参数:运行前跳过构建(对应 dotnet run --no-build)

测试运行器兼容性:Test 操作会根据 global.json 配置自动检测测试运行器。如果 global.json 中包含 { "test": { "runner": "Microsoft.Testing.Platform" } },则使用 --project 标志(MTP 模式)。否则,为兼容旧版本,默认使用位置参数(VSTest 模式)。

你可以使用 testRunner 参数显式指定测试运行器:

  • Auto(默认)- 从 global.json 自动检测
  • MicrosoftTestingPlatform - 使用 --project 标志(需要支持 MTP 的 .NET SDK 8+ 或 SDK 10+)
  • VSTest - 使用位置参数(兼容所有 SDK 版本)

useLegacyProjectArgument 参数已弃用;请改用 testRunner: "VSTest"。

示例:

// Create a new web API project
await callTool("dotnet_project", { 
  action: "New", 
  template: "webapi", 
  name: "MyApi" 
});

// Build the project
await callTool("dotnet_project", { 
  action: "Build", 
  project: "MyApi/MyApi.csproj", 
  configuration: "Release" 
});

// Run in background mode to get session ID
const runResult = await callTool("dotnet_project", {
  action: "Run",
  project: "MyApi/MyApi.csproj",
  noBuild: true,
  startMode: "Background",
  machineReadable: true
});
const sessionId = runResult.metadata.sessionId;

// Wait a moment for the application to start...

// Retrieve logs from the background session
await callTool("dotnet_project", {
  action: "Logs",
  sessionId: sessionId,
  machineReadable: true
});

// Retrieve only the last 50 lines of logs
await callTool("dotnet_project", {
  action: "Logs",
  sessionId: sessionId,
  tailLines: 50,
  machineReadable: true
});

// Retrieve logs since a specific timestamp
await callTool("dotnet_project", {
  action: "Logs",
  sessionId: sessionId,
  since: "2024-01-01T12:00:00Z",
  machineReadable: true
});

// Stop the background process
await callTool("dotnet_project", {
  action: "Stop",
  sessionId: sessionId
});

// Run tests (auto-detects test runner from global.json)
await callTool("dotnet_project", { 
  action: "Test", 
  project: "MyApi.Tests/MyApi.Tests.csproj" 
});

// Run tests with explicit test runner (MTP)
await callTool("dotnet_project", { 
  action: "Test", 
  project: "MyApi.Tests/MyApi.Tests.csproj",
  testRunner: "MicrosoftTestingPlatform"
});

// Run tests with explicit test runner (VSTest)
await callTool("dotnet_project", { 
  action: "Test", 
  project: "MyApi.Tests/MyApi.Tests.csproj",
  testRunner: "VSTest"
});
dotnet_package - 包与引用管理

管理 NuGet 包和项目引用:Add、Remove、Search、Update、List、AddReference、RemoveReference、ListReferences、ClearCache

示例:

// Search for a package
await callTool("dotnet_package", { 
  action: "Search", 
  searchTerm: "serilog" 
});

// Add package to project
await callTool("dotnet_package", { 
  action: "Add", 
  packageId: "Serilog.AspNetCore", 
  project: "MyApi/MyApi.csproj" 
});
dotnet_solution - 解决方案文件管理

与 dotnet sln / dotnet solution CLI 命令完全对等。

管理解决方案文件和项目成员关系:Create、Add、List、Remove

示例:

// Create a solution (classic .sln format)
await callTool("dotnet_solution", { 
  action: "Create", 
  name: "MyApp"
});

// Create a solution (new .slnx XML format)
await callTool("dotnet_solution", { 
  action: "Create", 
  name: "MyApp", 
  format: "slnx" 
});

// Add projects to solution
await callTool("dotnet_solution", { 
  action: "Add", 
  solution: "MyApp.slnx", 
  projects: ["MyApi/MyApi.csproj", "MyWeb/MyWeb.csproj"] 
});

// List projects in solution
await callTool("dotnet_solution", { 
  action: "List", 
  solution: "MyApp.slnx"
});

// Remove projects from solution
await callTool("dotnet_solution", { 
  action: "Remove", 
  solution: "MyApp.slnx", 
  projects: ["MyWeb/MyWeb.csproj"] 
});
dotnet_ef - Entity Framework Core 操作

数据库迁移、DbContext 管理和脚手架生成:MigrationsAdd、MigrationsList、MigrationsRemove、MigrationsScript、DatabaseUpdate、DatabaseDrop、DbContextList、DbContextInfo、DbContextScaffold

示例:

// Create a migration
await callTool("dotnet_ef", { 
  action: "MigrationsAdd", 
  name: "InitialCreate", 
  project: "MyApi/MyApi.csproj" 
});

// Update database
await callTool("dotnet_ef", { 
  action: "DatabaseUpdate", 
  project: "MyApi/MyApi.csproj" 
});
dotnet_workload - 工作负载管理

安装和管理 .NET 工作负载(MAUI、WASM 等):List、Info、Search、Install、Update、Uninstall

示例:

// Search for workloads
await callTool("dotnet_workload", { 
  action: "Search", 
  searchTerm: "maui" 
});

// Install workloads
await callTool("dotnet_workload", { 
  action: "Install", 
  workloadIds: "maui-android,maui-ios" 
});
dotnet_tool - .NET 工具管理

管理全局和本地 .NET 工具:Install、List、Update、Uninstall、Restore、CreateManifest、Search、Run

示例:

// Install a tool globally
await callTool("dotnet_tool", { 
  action: "Install", 
  packageId: "dotnet-ef", 
  global: true 
});

// Search for tools
await callTool("dotnet_tool", { 
  action: "Search", 
  searchTerm: "format" 
});
dotnet_sdk - SDK 和模板信息

查询 SDK、运行时、模板和框架信息:Version、Info、ListSdks、ListRuntimes、ListTemplates、SearchTemplates、TemplateInfo、ListTemplatePacks、InstallTemplatePack、UninstallTemplatePack、ClearTemplateCache、FrameworkInfo、CacheMetrics

示例:

// Get SDK version
await callTool("dotnet_sdk", { 
  action: "Version" 
});

// List available templates
await callTool("dotnet_sdk", { 
  action: "ListTemplates" 
});

// Search for templates
await callTool("dotnet_sdk", { 
  action: "SearchTemplates", 
  searchTerm: "web" 
});

// List installed template packs
await callTool("dotnet_sdk", {
  action: "ListTemplatePacks"
});

// Install a template pack (NuGet package ID + version)
await callTool("dotnet_sdk", {
  action: "InstallTemplatePack",
  templatePackage: "Aspire.ProjectTemplates",
  templateVersion: "13.1.0"
});

// Uninstall a template pack
await callTool("dotnet_sdk", {
  action: "UninstallTemplatePack",
  templatePackage: "Aspire.ProjectTemplates"
});
dotnet_dev_certs - 开发人员证书和机密

管理 HTTPS 证书和用户机密:CertificateTrust、CertificateCheck、CertificateClean、CertificateExport、SecretsInit、SecretsSet、SecretsList、SecretsRemove、SecretsClear

示例:

// Trust development certificate
await callTool("dotnet_dev_certs", { 
  action: "CertificateTrust" 
});

// Set a user secret
await callTool("dotnet_dev_certs", { 
  action: "SecretsSet", 
  key: "ConnectionStrings:DefaultConnection", 
  value: "Server=localhost;Database=MyDb", 
  project: "MyApi/MyApi.csproj" 
});
实用工具
  • dotnet_help - 获取任何 dotnet 命令的帮助
  • dotnet_server_capabilities - 获取 MCP 服务能力和并发使用指导

从源代码构建

用于开发或贡献:

git clone https://github.com/jongalloway/dotnet-mcp.git
cd dotnet-mcp
dotnet build --project DotNetMcp/DotNetMcp.csproj

运行服务:

dotnet run --project DotNetMcp/DotNetMcp.csproj

服务通过 stdio 传输进行通信,设计为由 MCP 客户端调用。

项目结构

本项目已发展到逐文件列出完整结构不再实用的程度。 因此,本节将重点介绍关键入口点和仓库的主要部分。

dotnet-mcp/
├── DotNetMcp/                  # Main MCP server project (packed as a .NET tool)
│   ├── Program.cs              # Hosting + MCP server wiring
│   ├── DotNetMcp.csproj        # NuGet/package metadata (PackAsTool, server.json packing)
│   ├── .mcp/server.json        # MCP server metadata (packed into the NuGet package)
│   ├── Resources/              # MCP resources (SDK/runtime/templates/frameworks)
│   ├── DotNetCliTools.cs       # Tool surface area (split into partials in Tools/)
│   └── Tools/                  # Tool implementations grouped by domain (project, package, EF, etc.)
├── DotNetMcp.Tests/            # Unit + integration tests
├── doc/                        # Long-form documentation (architecture, concurrency, testing, etc.)
├── scripts/                    # Maintenance & validation scripts
├── artifacts*/                 # Build outputs (CI + local)
├── .github/                    # CI workflows and repo automation
├── DotNetMcp.slnx              # Solution file (.slnx)
├── global.json                 # SDK pinning for consistent builds
├── .config/dotnet-tools.json   # Local tool manifest (dotnet local tools)
└── LICENSE                     # MIT License

可供入手的关键文件:

  • DotNetMcp/Program.cs - 服务启动和注册
  • DotNetMcp/DotNetCliTools.cs 和 DotNetMcp/Tools/ - MCP 工具实现
  • DotNetMcp/Resources/DotNetResources.cs - 只读 MCP 资源
  • DotNetMcp/.mcp/server.json - 打包的 MCP 服务元数据
  • DotNetMcp.Tests/ - 测试(包括 server.json 验证和 XML 文档覆盖率)

技术栈

  • 协议:Model Context Protocol (MCP)
  • SDK:MCP SDK for .NET v1.0.0
  • 运行时:.NET 10.0(目标框架)
  • 传输:stdio(标准输入/输出)
  • NuGet 包:
    • Microsoft.TemplateEngine.Abstractions 和 Edge(v10.0.101)- 模板元数据
    • Microsoft.Build.Utilities.Core 和 Microsoft.Build(v18.0.2)- 项目验证

文档

互操作性

.NET MCP Server 遵循 Model Context Protocol 规范,并提供丰富的元数据,以支持工具发现和 AI 编排:

服务元数据

该服务包含一个 MCP Registry 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
  • 仓库信息:指向源代码仓库的链接

工具和资源元数据通过 MCP 协议(工具/资源列表)在运行时发现,来源于服务代码中的 XML 文档和 [McpMeta] 属性。

工具命名空间

所有工具的外部 ID 都使用 dotnet_ 前缀,以避免与其他 MCP 服务发生命名冲突。这符合 MCP 服务互操作性的最佳实践:

示例:

  • dotnet_project - 项目生命周期操作(创建/生成/测试/运行/发布)
  • dotnet_package - NuGet 包和项目引用
  • dotnet_solution - 解决方案操作
  • dotnet_sdk - SDK/运行时/模板/框架元数据
发现元数据

工具发现元数据(类别、标签、常用提示)通过 [McpMeta] 属性提供,并通过 MCP 工具列表呈现。

元数据访问

AI 编排器可以通过以下方式访问服务元数据:

  1. MCP 协议:通过 MCP SDK 获取标准工具/资源列表
  2. server.json:用于注册和发现的静态元数据文件
  3. 工具属性:通过代码中的 McpMeta 属性获取运行时元数据

如需了解详细的集成示例,请参阅 MCP 规范 和我们的 SDK 集成文档。

参与贡献

欢迎贡献!这是一个由社区维护的项目。

贡献方式:

  • 🐛 通过 GitHub Issues 报告错误或提出功能请求
  • 💡 提交拉取请求,添加新工具或改进现有功能
  • 📝 改进文档
  • ⭐ 为仓库点亮 Star,以示支持

开发环境设置:

  1. Fork 仓库
  2. 克隆你的 Fork
  3. 创建功能分支
  4. 进行修改
  5. 充分测试
  6. 提交拉取请求

开发指南请参阅 .github/copilot-instructions.md。

故障排查

“找不到 dnx”
  • 原因:未安装 .NET 10 SDK
  • 解决方案:安装 .NET 10 SDK,或使用 dotnet run 手动配置
“未找到模板”
  • 原因:未安装 .NET SDK 模板
  • 解决方案:运行 dotnet new --install 安装默认模板
“服务无响应”
  • 原因:服务崩溃或启动失败
  • 解决方案:检查 MCP 客户端中的日志,确保 .NET SDK 位于 PATH 中
运行测试时出现“无法识别选项 '--project'”或“未知开关”
  • 原因:测试运行器不匹配或 SDK 版本不兼容
  • 背景:--project 标志仅受 Microsoft Testing Platform (MTP) 支持。旧版 VSTest 运行器使用位置参数。
  • 解决方案:MCP 服务现在会根据 global.json 自动检测测试运行器:
    1. 自动模式(默认):如果使用 MTP,将 { "test": { "runner": "Microsoft.Testing.Platform" } } 添加到 global.json;否则默认使用 VSTest
    2. 显式模式:调用 dotnet_project Test 操作时,设置 testRunner: "MicrosoftTestingPlatform" 或 testRunner: "VSTest"
    3. 旧版参数:使用 useLegacyProjectArgument: true(已弃用,请改用 testRunner: "VSTest")
  • 验证支持情况:运行 dotnet test --help | grep -- --project,检查 SDK 是否支持 --project 标志
  • 更多信息:查看 doc/testing.md,了解测试运行器兼容性和故障排除的详细信息
  • 参考资料:dotnet test 概述 | MTP | VSTest
需要帮助?

相关 Microsoft MCP 服务

此 .NET MCP 服务专注于 .NET SDK 操作(构建、运行、测试、模板、SDK 管理)。对于特定场景,可考虑使用以下 Microsoft 官方 MCP 服务作为补充:

  • NuGet MCP Server - 高级 NuGet 包搜索、元数据查询,以及超出基本包管理范围的自动化场景
  • Aspire MCP Server - 为 .NET Aspire 应用提供运行时监控、遥测、分布式跟踪和资源管理

这些 MCP 服务与 .NET MCP 配合使用,可全面覆盖 .NET 开发生命周期:

功能.NET MCPNuGet MCPAspire MCP
主要用途.NET SDK 操作包元数据/发现运行时监控
范围CLI 命令(构建、运行、测试)NuGet 搜索与自动化Aspire 应用遥测
阶段开发时开发/发现时运行时/生产环境
操作示例dotnet build、dotnet new包搜索、README日志查看、跟踪

许可证

MIT 许可证 - 详情请参见 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。