dotnet-template-mcp について
dotnet-template-mcpは、`dotnet new`テンプレートを検索、確認、プレビューし、プロジェクトを作成するMCPサーバーです。テンプレート検証とソリューション分析にも対応し、作成時には不足パラメーターの入力やNuGetからのテンプレート解決ができます。
主な機能
- 01インストール済みテンプレートとNuGet.orgの検索
- 02パラメーターの確認と生成ファイルのプレビュー
- 03パラメーター検証と入力補完を伴うプロジェクト作成
- 04ローカルテンプレートの検証とテンプレート比較
- 05テンプレートのワークフロー合成とソリューション分析
- 06プロジェクト内の古いNuGetパッケージの調査
活用シーン
- 01プロジェクトの説明に合うテンプレートの検索
- 02作成前のプロジェクトファイルのプレビュー
- 03カスタムテンプレートの作成上の問題の確認
- 04ソリューション構成と古いパッケージバージョンの確認
MCP 対応
テンプレートと.NETプロジェクトの操作をMCPツールとして公開します。stdioとStreamable HTTPに対応し、HTTPでは匿名アクセスを明示的に許可しない限りトークンが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
DotnetTemplateMCP
AI エージェントが dotnet new テンプレートを使って作業できる MCP サーバーです。CLI フラグを暗記しなくても、自然な会話を通じてテンプレートの検索、確認、プレビュー、プロジェクトの作成ができます。
たとえば、次のように入力する代わりに:
dotnet new list --language C#
dotnet new webapi --help
dotnet new webapi --auth Individual --use-controllers --name MyApi --output ./MyApi
AI エージェントに「認証とコントローラーを備えた 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."
]
}
検出できる問題: 必須フィールドの欠落、無効な ID 形式、CLI コマンドとの短い名前の競合、パラメーターの問題(既定値の欠落、選択肢が空、プレフィックスの競合、型の不一致)、計算シンボルの破損、制約の設定ミス、タグの欠落。
公式ツールとの関係。 Microsoft はすでにテンプレート作成の検証ツールを提供しています。ぜひ知っておいてください。
| 公式ツール | 提供される機能 |
|---|---|
Microsoft.TemplateEngine.Authoring.CLI | dotnet template-authoring validate — リファレンス検証ツール |
Microsoft.TemplateEngine.Authoring.Tasks | MSBuild タスクとして、ビルド時に検証 |
Microsoft.TemplateEngine.Authoring.TemplateVerifier | テンプレート出力のスナップショットテスト |
template_validate が追加するのは、検証そのものではなく、その提供方法です。errors/warnings/suggestions に分けられ、修正方法を示すメッセージを含む、単一の構造化 JSON ペイロードを返します。テンプレートをすでに編集しているエージェントに対して、インバンドで結果を返すため、インストールも出力の解析も、ワークフロー内での別ツールも必要ありません。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 — LLM は不要です |
template_create_from_existing | .csproj を分析し、リポジトリの規約に合った再利用可能なテンプレートを生成します |
template_compose | 一連のテンプレート(プロジェクト+項目)を 1 つのワークフローで実行します |
template_suggest_parameters | パラメーター間の関係に基づき、理由を添えてパラメーター値を提案します |
template_validate | 公開前に、ローカルのテンプレートディレクトリに作成上の問題がないか検証します |
template_compare | 2 つ以上のテンプレートを、パラメーター、機能、フレームワークごとに並べて比較します |
solution_analyze | ソリューション/ワークスペースを分析し、プロジェクト構成、フレームワーク、CPM の状態を確認します |
packages_upgrade | プロジェクト/ソリューション/フォルダー内をスキャンして古い NuGet バージョンを検出し、アップグレードを報告または適用します(CPM を考慮) |
ホスト型デプロイ
Frontier 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のプロセス全体で共有されるシングルトンであるため、インストール済みテンプレートのセットはすべての呼び出し元で共有され、ワークスペースのルートもプロセス全体で共有されます。信頼できるチームまたはテナントごとにインスタンスを 1 つ実行してください。互いに信頼関係のないユーザーに単一のインスタンスを公開しないでください。
template-engine-mcp --transport http
# or via environment variable:
MCP_TEMPLATE_TRANSPORT=http template-engine-mcp
HTTP サーバーが公開するエンドポイント:
/mcp— MCP ストリーマブル HTTP エンドポイント(ベアラートークン必須)/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 を有効のまま維持)、ファイル書き込み前のパラメーター検証、制約チェック(OS、SDK、ワークロード)、不足している必須パラメーターの対話型エリシテーションを行い、インストールされていないテンプレートは NuGet から自動解決します。
CPM と最新のパッケージバージョン
Central Package Management を使用しているソリューション内でプロジェクトを作成すると、サーバーは自動的に次の処理を行います:
- ディレクトリツリーを上方向にたどって
Directory.Packages.propsを検出します - 生成された
.csprojの PackageReference から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 を使うと、1 回の呼び出しで複数のテンプレートを連結できます:
[
{"templateName": "webapi", "name": "MyApi", "parametersJson": "{\"auth\": \"Individual\"}"},
{"templateName": "gitignore", "target": "."}
]
ツールプロファイル(Lite と Full)
デフォルトでは、15 個すべてのツールが利用できます。エージェントが少ないツールのほうが適切に動作する場合は、MCP_TEMPLATE_TOOL_PROFILE 環境変数を設定してください:
| プロファイル | ツール | 使用する場面 |
|---|---|---|
full(デフォルト) | 15 個すべてのツール | 高度なワークフロー、合成、カスタムテンプレートなど、すべてを制御する場合 |
lite | 5 個のコアツール | プロジェクトの検索と作成だけが必要な、よりシンプルなエージェント向け |
Lite プロファイルのツール: 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"
}
}
}
}
Lite プロファイルに含まれないツールを呼び出すと、そのツールが無効であることと、有効にする方法を説明するメッセージが返されます。
ドキュメント
| ドキュメント | 内容 |
|---|---|
| 設定 | VS Code、Claude Desktop、Cursor のセットアップとトラブルシューティング |
| ツールリファレンス | 各ツールのパラメーター、型、使用例 |
| アーキテクチャ | テンプレートキャッシュ、スマートな動作、テレメトリー、プロジェクト構成 |
| MCP と Skills | Copilot Skills ではなく MCP を選ぶ理由 — メリットとデメリット |
| 通常の LLM と MCP | 通常の LLM と MCP ツールの動作を比較 — 4 つのシナリオ |
| Skills での代替方法 | Skills で代替する場合に必要なこと |
ビルドとテスト
dotnet build
dotnet test # 185+ tests — unit, integration, and E2E
CI は GitHub Actions を通じてプッシュ時/PR 時に実行されます(Ubuntu + Windows)。
コントリビューション
コントリビューションを歓迎します!変更案を提出する前に、まず issue を開いて内容をご相談ください。
# Setup
dotnet restore
dotnet build
# Run tests
dotnet test
# Pack locally
dotnet pack src/DotnetTemplateMcp -o nupkg/
変更履歴
リリース履歴については CHANGELOG.md をご覧ください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。