关于 dotnet-template-mcp
dotnet-template-mcp 是一个 MCP 服务,用于发现、检查、预览并通过 `dotnet new` 模板创建项目。它还支持模板验证和解决方案分析,创建项目时可收集缺失参数并从 NuGet 解析模板。
主要功能
- 01搜索已安装模板和 NuGet.org
- 02检查参数并预览生成文件
- 03通过参数验证和交互收集创建项目
- 04验证本地模板并比较模板
- 05组合模板工作流并分析解决方案
- 06扫描项目中的过期 NuGet 包
适用场景
- 01根据项目描述查找合适模板
- 02创建前预览项目文件
- 03检查自定义模板的编写问题
- 04检查解决方案结构和过期包版本
MCP 相关
它将模板和 .NET 项目操作作为 MCP 工具提供。支持 stdio 和 Streamable HTTP 传输;HTTP 访问必须使用令牌,除非明确启用匿名访问。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
DotnetTemplateMCP
一个 MCP 服务,让 AI Agent 可以通过自然对话使用 dotnet new 模板来搜索、检查、预览和创建项目,无需记住 CLI 标志。
而不是这样:
dotnet new list --language C#
dotnet new webapi --help
dotnet new webapi --auth Individual --use-controllers --name MyApi --output ./MyApi
你的 AI Agent 只需说:“我需要一个带身份验证和控制器的 Web API”,MCP 服务就会处理其余事项。
面向作者的模板验证
正在构建自定义 dotnet new 模板?template_validate 可以在你发布之前发现问题,不必再猜测 template.json 是否正确:
Agent calls: template_validate("./my-template")
← Returns:
{
"valid": false,
"summary": "2 error(s), 1 warning(s), 3 suggestion(s)",
"errors": [
"Missing required field 'shortName'.",
"Parameter 'Framework': default value 'net7.0' is not in the choices list."
],
"warnings": [
"Missing 'sourceName'. Without it, the generated project name won't be customizable via --name."
],
"suggestions": [
"Consider adding a 'description' field to help users understand what this template creates.",
"Consider adding 'language' tag (e.g., 'C#') for better discoverability.",
"Consider adding 'type' tag (e.g., 'project', 'item') for filtering."
]
}
它可以发现: 缺少必需字段、标识格式无效、短名称与 CLI 命令冲突、参数问题(缺少默认值、选项为空、前缀冲突、类型不匹配)、计算符号错误、约束配置不当,以及缺少标签。
与官方工具的关系。 Microsoft 已提供模板创作验证工具,你应该了解它们:
| 官方工具 | 提供的功能 |
|---|---|
Microsoft.TemplateEngine.Authoring.CLI | dotnet template-authoring validate — 参考验证器 |
Microsoft.TemplateEngine.Authoring.Tasks | 在构建时通过 MSBuild 任务进行验证 |
Microsoft.TemplateEngine.Authoring.TemplateVerifier | 对模板输出进行快照测试 |
template_validate 增加的不是验证本身,而是交付方式:它将结果整理成一个结构化 JSON 负载,分为 errors/warnings/suggestions,并提供以修复为导向的消息,直接返回给正在编辑模板的 Agent。无需安装、解析输出,也无需在工作流中调用第二个工具。如果你是在 CI 中手动创作模板,请优先使用上述官方工具;它们是参考实现,并且覆盖了本工具不支持的情况。
工具
| 工具 | 功能 |
|---|---|
template_search | 在本地和 NuGet.org 上搜索 — 一次调用即可获取排序后的结果 |
template_list | 列出已安装的模板,并按语言/类型/分类筛选 |
template_inspect | 一次查看参数、约束和后续操作 |
template_instantiate | 创建项目。如果模板尚未安装,则自动从 NuGet 解析。交互式提示缺失的参数 |
template_dry_run | 预览文件,不触碰磁盘 |
template_install | 安装包(幂等 — 如果已安装则跳过) |
template_uninstall | 移除模板包 |
templates_installed | 查看所有已安装项目的清单 |
template_from_intent | “带身份验证的 Web API” → webapi + auth=Individual — 无需大模型 |
template_create_from_existing | 分析一个 .csproj → 生成符合仓库约定的可复用模板 |
template_compose | 在一个工作流中按顺序执行多个模板(项目 + 项) |
template_suggest_parameters | 根据参数间关系提出参数值建议,并说明理由 |
template_validate | 在发布前检查本地模板目录中的创作问题 |
template_compare | 并排比较 2 个或更多模板 — 参数、功能和框架 |
solution_analyze | 分析解决方案/工作区 — 项目结构、框架、CPM 状态 |
packages_upgrade | 扫描项目/解决方案/文件夹中的过时 NuGet 版本,并报告或应用升级(支持 CPM) |
📖 完整工具参考 →
托管部署
可通过 Fronteir AI 使用托管部署。
快速开始
全局工具(.NET 8+)
dotnet tool install --global DotnetTemplateMCP --version 2.0.0
使用 dnx 零安装(.NET 10+)
dnx -y DotnetTemplateMCP --version 2.0.0
VS Code / GitHub Copilot
添加到 mcp.json:
{
"servers": {
"dotnet-templates": {
"type": "stdio",
"command": "dnx",
"args": ["-y", "DotnetTemplateMCP", "--version", "2.0.0"]
}
}
}
传输模式
Stdio(默认)
用于本地 CLI 和工具的标准 I/O 传输:
template-engine-mcp # stdio is the default
template-engine-mcp --transport stdio # explicit
HTTP(远程 / 团队共享)
用于远程或 CI/CD 部署的流式 HTTP 传输。
必须进行身份验证。 此服务中的每个工具都会写入文件并安装 NuGet 包,因此开放端点会带来远程代码执行风险。除非你设置令牌或明确选择允许匿名访问,否则服务会拒绝启动 HTTP 传输:
# Recommended
MCP_TEMPLATE_HTTP_TOKEN=<shared-secret> template-engine-mcp --transport http
# Only for a trusted, isolated network
MCP_TEMPLATE_HTTP_ALLOW_ANONYMOUS=true template-engine-mcp --transport http
客户端使用 Authorization: Bearer <shared-secret> 进行身份验证。对 /mcp 的请求会按客户端进行速率限制(默认每分钟 120 次,MCP_TEMPLATE_HTTP_RATE_LIMIT=0 可禁用)。探测请求仍可匿名访问 /health。
不支持多租户。
TemplateEngineService是进程级单例,且virtualizeSettings: false,因此所有调用者共享已安装模板的集合,工作区根目录也由整个进程共享。请为每个可信团队或租户运行一个实例,不要将单个实例暴露给互不信任的用户。
template-engine-mcp --transport http
# or via environment variable:
MCP_TEMPLATE_TRANSPORT=http template-engine-mcp
HTTP 服务公开以下端点:
/mcp— MCP 流式 HTTP 端点(需要 Bearer 令牌)/health— 健康检查端点(允许匿名访问)
配置监听 URL:
MCP_TEMPLATE_HTTP_URL=http://0.0.0.0:8080 template-engine-mcp --transport http
连接 MCP 客户端:
{
"servers": {
"dotnet-templates": {
"type": "http",
"url": "http://localhost:5005/mcp"
}
}
}
交互式参数收集
如果模板有未提供的必需参数,服务会通过 MCP 参数收集功能交互式询问用户,而不是报错。模板参数类型会映射到表单字段:
| 模板参数 | 参数收集字段 |
|---|---|
string | 文本输入 |
bool / boolean | 复选框 |
int / number | 数字输入 |
| 选项参数 | 单选下拉菜单 |
使用 MCP_TEMPLATE_ELICITATION=false 禁用。
工作原理
You: "I need a web API with authentication, controllers, and Docker support"
→ template_from_intent extracts keywords: web api, authentication, controllers, docker
→ Matches: webapi (confidence: 0.85)
→ Resolves: auth=Individual, UseControllers=true, EnableDocker=true
→ template_instantiate creates the project
服务还会提供智能默认值(AOT → 最新框架版本,身份验证 → 保持启用 HTTPS)、写入文件前的参数验证、约束检查(操作系统、SDK、工作负载)、对缺失必需参数进行交互式收集,并在模板尚未安装时从 NuGet 自动解析模板。
CPM 和最新包版本
在使用中央包管理的解决方案中创建项目时,服务会自动:
- 检测目录树中的
Directory.Packages.props - 从生成的
.csprojPackageReference 中移除Version属性 - 将缺少的
<PackageVersion>条目添加到Directory.Packages.props - 解析最新的稳定版 NuGet,避免使用模板中的过时硬编码版本
Before (what dotnet new generates):
<PackageReference Include="Serilog" Version="3.1.0" /> ← stale, breaks CPM
After (what template_instantiate produces):
.csproj: <PackageReference Include="Serilog" />
Directory.Packages.props: <PackageVersion Include="Serilog" Version="4.2.0" />
独立项目也适用——版本会直接在 .csproj 中更新。
多模板组合
通过一次 template_compose 调用串联多个模板:
[
{"templateName": "webapi", "name": "MyApi", "parametersJson": "{\"auth\": \"Individual\"}"},
{"templateName": "gitignore", "target": "."}
]
工具配置(精简版与完整版)
默认情况下,全部 15 个工具均可用。如果你的 Agent 使用较少工具时效果更好,请设置 MCP_TEMPLATE_TOOL_PROFILE 环境变量:
| 配置 | 工具 | 适用场景 |
|---|---|---|
full(默认) | 全部 15 个工具 | 全面控制——高级工作流、组合、自定义模板 |
lite | 5 个核心工具 | 只需查找和创建项目的简易 Agent |
精简版配置中的工具: template_from_intent、template_instantiate、template_inspect、template_search、template_dry_run
{
"servers": {
"dotnet-template-mcp": {
"command": "dotnet-template-mcp",
"env": {
"MCP_TEMPLATE_TOOL_PROFILE": "lite"
}
}
}
}
非精简版工具会返回提示信息,说明这些工具已禁用以及如何启用。
文档
| 文档 | 内容 |
|---|---|
| 配置 | VS Code、Claude Desktop、Cursor 的设置和故障排除 |
| 工具参考 | 每个工具的参数、类型和示例 |
| 架构 | 模板缓存、智能行为、遥测、项目结构 |
| MCP 与 Skills | 为什么选择 MCP 而不是 Copilot Skills——优势和不足 |
| 普通 LLM 与 MCP | 对比:普通 LLM 与 MCP 工具的表现(4 种场景) |
| Skills 的等效方案 | 要用 Skills 实现相同功能需要做些什么 |
构建与测试
dotnet build
dotnet test # 185+ tests — unit, integration, and E2E
CI 通过 GitHub Actions 在推送和 PR 时运行(Ubuntu + Windows)。
贡献
欢迎贡献!提交 PR 前,请先创建 issue 讨论拟议的更改。
# Setup
dotnet restore
dotnet build
# Run tests
dotnet test
# Pack locally
dotnet pack src/DotnetTemplateMcp -o nupkg/
更新日志
查看 CHANGELOG.md 了解发布历史。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。