.NET MCP Server について
Claude や GitHub Copilot などの AI アシスタントから .NET SDK を操作し、プロジェクト作成、NuGet パッケージ管理、ビルド、テストを行う MCP サーバーです。ローカルで動作し、.NET 開発者を対象としています。
主な機能
- 01dotnet コマンドを包む構造化ツール
- 02インストール済みテンプレートとパラメーターの取得
- 03NuGet パッケージの検索とメタデータの取得
- 04SDK、ランタイム、ワークスペースの読み取り専用リソース
- 05CS、MSB、NU、NETSDK の主要エラーの診断説明
- 06コマンド出力内の機密情報の自動マスキング
活用シーン
- 01自然言語による Web API やコンソールプロジェクトの作成
- 02NuGet パッケージの追加、更新、リストア
- 03テストの実行とビルドエラーの原因の説明
MCP 対応
MCP サーバーとして、dotnet_project や dotnet_sdk などのツール、dotnet:// リソース、複数のプロンプトを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
.NET MCP サーバー
AI アシスタントに .NET 開発の強力な機能を与えましょう!この MCP サーバーは、GitHub Copilot、Claude、その他の AI アシスタントを .NET SDK に直接接続し、自然言語を通じてプロジェクトの作成、パッケージ管理、ビルドの実行などを可能にします。
クイックインストール
注:クイックインストールには .NET 10 SDK が必要です。
これは何ですか?
.NET MCP サーバーは、Model Context Protocol を使用して AI アシスタントを .NET SDK に接続する Model Context Protocol(MCP)サーバー です。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 状況を含む)
- ソリューションとプロジェクトの構成
⚡ トークン効率を考慮した設計
コンソール出力を読み返して状態を推測する LLM に頼るのではなく、サーバーは専用の .NET ツールを公開し、構造化された入力と出力を提供します。実際には、通常、タスクごとのトークン数とやり取りの回数を減らせます。
- 決定論的なツールスキーマにより、プロンプトと応答のオーバーヘッドを削減します
machineReadable: trueを指定すると、構造化された JSON が返されます(ログの解析は不要です)- MCP リソースにより、コマンドを実行せずに軽量なメタデータを取得できます
🎯 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 を使用する場合:各ツールに、パラメーターの詳細な説明と制約(例:「configuration は 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 - LTS ステータスを含む、サポート対象の .NET フレームワーク(TFM)の情報
- 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を指定すると無効にできます - 対象のパターンには、データベースの認証情報、クラウドプロバイダーのキー、トークン、証明書などが含まれます
- パフォーマンスへの影響は最小限で、10,000 行を 500ms 以内に処理できることをテスト済みです
- オプションの MCP ガバナンス制御(プレビュー)
- 設定で有効にすると、
Microsoft.AgentGovernance.Extensions.ModelContextProtocolを使用します - 既存の動作と互換性を維持するため、デフォルトでは無効になっています
- デフォルトで適用されるポリシーは含まれていません。必要に応じて独自のポリシーファイルを指定してください
mcp.yamlポリシーテンプレートのサンプルについては、doc/mcp-governance.mdを参照してください- ソース:
- Agent Governance Toolkit リポジトリ:https://github.com/microsoft/agent-governance-toolkit
- Agent Governance Toolkit for .NET:https://github.com/microsoft/agent-governance-toolkit/tree/main/agent-governance-dotnet
- 発表:https://devblogs.microsoft.com/dotnet/announcing-agent-governance-toolkit-mcp-extensions-for-dotnet/
- 起動時のスキャン、ポリシーベースのツール認可、レスポンスのサニタイズは、次の設定で有効にできます。
- 設定で有効にすると、
"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 Server は、次の機能を備えたインテリジェントなミドルウェアとして動作します。
- 自然言語のリクエストを、構造化された .NET SDK の操作に変換します
- 公式 SDK のメタデータ(テンプレート、フレームワーク、パッケージ)を使用してパラメーターを検証します
- 適切なエラー処理を行いながら、コマンドを安全に実行します
- 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 リソースとして公開します。 | シェルコマンドを実行せずに、クライアントが環境やワークスペースの構成に関する質問へすばやく回答でき、CLI による情報取得を繰り返すことで発生するトークン消費も抑えられます。 |
| プロンプト | create_new_webapi、add_package_and_restore、run_tests_with_coverage など、再利用可能なプロンプトを公開します。 | MCP クライアントが一般的なプロンプトのひな形を一から作り直さずに、ガイド付きのワークフローを見つけて利用できるようにします。 |
| ルート | ユーザーが明示的なパスを指定しない場合、クライアントのワークスペースルートを使用して単一のプロジェクトまたはソリューションを自動検出します。 | IDE クライアントでの導入後すぐの使い勝手を向上させ、ユーザーが指定する必要のあるパラメーターを減らします。 |
| サンプリング | クライアントがサンプリングをサポートしている場合、ビルドやテストの失敗について、クライアントを介した LLM の要約をリクエストします。 | サーバー側に別途モデルの認証情報を用意することなく、インテリジェントな診断を MCP のフロー内で実行できます。 |
| エリシテーション | クリーンやソリューションの削除など、破壊的な操作の前に明示的な確認をリクエストします。 | 成果物の削除やプロジェクト構造の変更を伴う操作に、人間が介在する安全確認を追加します。 |
| 進捗通知 | 時間のかかる復元、ビルド、テスト、公開、パック、ツール、ワークロードの各操作について、開始と完了の進捗を報告します。 | 時間のかかる操作でクライアントの UX を向上させ、進捗を表示するエージェントによるオーケストレーションを容易にします。 |
| タスク | IMcpTaskStore を登録し、時間のかかる操作で任意のタスクサポートを有効にするため、dotnet_project を指定します。 | 時間のかかるリクエストのたびにセッションをブロックするのではなく、非同期実行、ポーリング、キャンセルのパターンを利用できるようにします。 |
| ツールとツールのメタデータ | タイトル、カテゴリ、優先度、アクションリスト、タスクサポートの宣言など、豊富なメタデータを持つ統合ツールを使用します。 | 特に MCP 対応 IDE との連携において、ツールの見つけやすさ、ルーティング、クライアント側での表示を向上させます。 |
| プロンプトとリソースの補完 | クライアントがプロンプトやリソースの引数値を自動補完できるよう、補完ハンドラーを実装します。 | ガイド付きワークフローをより迅速に進められるようにし、補完 UX をサポートするクライアントでの無効な引数の入力を減らします。 |
| アイコンとサーバーのメタデータ | サーバーレベルのアイコンに加え、統合された機能全体でツールごとの IconSource、タイトル、説明的なメタデータを設定します。 | 特に視覚的な MCP 管理 UI で、クライアントがサーバーとツールカタログをより分かりやすく表示できるようにします。 |
インストール
要件
- クイックインストールの場合:.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: Add MCP Server" を実行し、Name にdotnet、Type にstdio、Command にdnx、Arguments に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"]
}
}
}
Visual Studio 2022
要件:Visual Studio 2022 バージョン 17.13 以降
クイックインストールを使用する場合(推奨。.NET 10 が必要です):
- このページ上部の Visual Studio インストールバッジ をクリックします
- または、オプションから手動で追加します。Tools > Options > GitHub Copilot > MCP Servers に移動し、Add をクリックして、Name に
dotnet、Type にstdio、Command にdnx、Arguments にCommunity.Mcp.DotNet@1.* --yesを入力します。
手動構成(ソースからのビルドやカスタム設定の場合):
- Tools > Options > GitHub Copilot > MCP Servers に移動します
- Add をクリックします
- 以下を入力します。
- Name:
dotnet - Type:
stdio - Command:
dotnet - Arguments:
run --project C:\path\to\dotnet-mcp\DotNetMcp\DotNetMcp.csproj
- Name:
📖 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 コーディングエージェント(リポジトリの MCP 構成)
GitHub Copilot コーディングエージェント向けに、この MCP サーバーをリポジトリレベルで構成することもできます。
- GitHub でリポジトリを開きます
- Settings > Copilot > Coding agent に移動します
- 以下の JSON を MCP 構成ボックスに貼り付けます
- Save をクリックします
詳しくは、GitHub のドキュメントをご覧ください:Model Context Protocol(MCP)を使って GitHub Copilot コーディングエージェントを拡張する
{
"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"
]
}
}
}
この構成では "*" の代わりに、厳選されたツールの許可リストを使用するため、エージェントは .NET MCP サーバーを安全かつ予測どおりに使用できます。
注:Copilot コーディングエージェントは GitHub Actions ランナー上で実行されます。リポジトリに .NET 10 がインストールされていることを確認する必要がある場合は、.github/workflows/copilot-setup-steps.yml のようなセットアップワークフローを追加してください。
使用例
構成が完了すると、AI アシスタントに自然言語で指示できます。
クイックスタート — 単一プロジェクト
ユーザー:「WeatherService という名前の新しい Web API プロジェクトを作成して」
AI:「新しい Web API プロジェクトを作成します……」
dotnet new webapi -n WeatherService
WeatherService ディレクトリにプロジェクトが正常に作成されました。
複雑なアプリケーション — Aspire を使用したマイクロサービス
ユーザー:「.NET Aspire でオーケストレーションするサーバーサイド Web アプリと最小 API を作成して。API のユニットテストには xunit を使用して。ソリューションには 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 を使用したデータベース駆動型アプリケーション
User:「API 用に SQL Server と Entity Framework Core をセットアップして、初期データベースマイグレーションを作成してください」
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
SQL Server プロバイダーを使用した Entity Framework Core を追加しました。初期マイグレーションを作成して適用しました。データベースを使用する準備ができました。
User:「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 列を持つ新しいテーブル)。データベースを正常に更新しました。
User:「本番環境へのデプロイ前に確認できるよう、直近のマイグレーション用の SQL スクリプトを生成してください」
AI:マイグレーションから冪等性のある SQL スクリプトを生成します……
# Generate idempotent SQL script (can be run multiple times safely)
dotnet ef migrations script --idempotent --output deploy.sql
SQL スクリプトを deploy.sql に生成しました。このスクリプトは複数回安全に実行でき、必要な場合にのみ変更が適用されます。
データベースファースト開発
User:「既存の 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
データベースのスキャフォールディングが正常に完了しました。MyExistingDbContext.cs と 15 個のエンティティクラス(Customer、Order、Product など)が Models フォルダーに生成されました。
マルチターゲットテスト戦略
User:「.NET 8 と .NET 10 の両方を対象とする NUnit の統合テストを追加し、コードカバレッジを有効にして実行できるよう設定してください」
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 の両方でテストを実行できます。
テンプレートの調査と確認
User:「クラウドネイティブアプリケーションの作成に使用できるテンプレートを教えてください」
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 の各種テンプレート
各テンプレートは、クラウドネイティブなマイクロサービスや分散アプリケーション向けに設計されています。
モダナイゼーションのワークフロー
User:「すべてのパッケージを最新バージョンに更新し、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 開発環境のセットアップ
User:「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:「データベース接続文字列を使って API プロジェクトのユーザーシークレットをセットアップしてください」
AI:プロジェクトのユーザーシークレットを初期化します……
# 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"];
注:ユーザーシークレットは開発専用です。本番環境では 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
注:上記のコマンドは、ワークロード ID をスペースで区切る、
dotnetCLI の生の構文を示しています。.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 - LTS ステータスを含む、サポート対象の .NET フレームワーク(TFM)の情報
- dotnet://workspace - ソリューション、プロジェクト、ターゲットフレームワーク、パッケージ数を含むワークスペースのスナップショット
リソースは構造化された JSON データを提供します。頻繁に参照する読み取り専用情報には、ツール呼び出しよりも効率的です。
統合ツール
これらのツールは、アクションの列挙型を使って関連操作をまとめており、AI オーケストレーションを改善し、意味的な整理を明確にします。
dotnet_project - プロジェクトのライフサイクル管理
すべてのプロジェクト操作を統合したインターフェース:New、Restore、Build、Run、Test、Publish、Clean、Analyze、Dependencies、Validate、Pack、Watch、Format、Stop、Logs
このリリースの新機能:
- 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)- プロジェクトの検証
ドキュメント
- 📖 変更履歴 - バージョン履歴とリリースノート
- 📖 AI アシスタントのベストプラクティスガイド - ワークフロー、プロンプト、統合パターン、トラブルシューティング
- 📖 機械可読 JSON コントラクト - プログラムからツールを利用するための v1.0 安定コントラクト
- 📖 ツールサーフェスの統合 - 統合されたツール設計とアーキテクチャ
- 📖 テレメトリと可観測性 - リクエスト所要時間のログ記録、OpenTelemetry の統合、パフォーマンス監視
- 📖 SDK 統合の詳細 - 技術アーキテクチャと SDK の使用方法
- 📖 高度なトピック - パフォーマンス、ログ記録、セキュリティの詳細
- 📖 リリース - リリースの作成方法(チェックリスト+スクリプト)
- 📖 並行処理の安全性 - AI オーケストレーター向けの並列実行ガイダンス
- 📖 テスト - テストの実行方法(オプトイン方式の対話型テストを含む)
- 📖 Model Context Protocol - MCP の公式仕様
- 📖 MCP C# SDK ドキュメント - SDK ドキュメント
相互運用性
.NET MCP サーバーは Model Context Protocol の仕様に準拠し、ツールの検出と AI オーケストレーションのための豊富なメタデータを提供します。
サーバーメタデータ
サーバーには、以下を提供する MCP Registry server.json 構成ファイル(.mcp/server.json)が含まれています。
-
環境変数:MCP の利用に最適化された .NET CLI 設定
DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1- 初回セットアップをスキップしますDOTNET_NOLOGO=1- 起動メッセージを非表示にします
-
パッケージ情報:
dnx経由で簡単にインストールするための NuGet パッケージの詳細(.NET 10 が必要)- パッケージ:
Community.Mcp.DotNet - レジストリ:NuGet.org
- トランスポート:stdio
- パッケージ:
-
リポジトリ情報:ソースリポジトリへのリンク
ツールとリソースのメタデータは、サーバーコード内の XML ドキュメントと [McpMeta] 属性を使用し、MCP プロトコル経由で実行時に検出されます(ツール/リソースの一覧表示)。
ツールの名前空間
すべてのツールでは、他の MCP サーバーとの名前の衝突を防ぐため、外部 ID に dotnet_ プレフィックスを使用します。これは、MCP サーバーの相互運用性に関するベストプラクティスに沿ったものです。
例:
dotnet_project- プロジェクトのライフサイクル操作(作成/ビルド/テスト/実行/発行)dotnet_package- NuGet パッケージとプロジェクト参照dotnet_solution- ソリューション操作dotnet_sdk- SDK/ランタイム/テンプレート/フレームワークのメタデータ
検出メタデータ
ツール検出メタデータ(カテゴリ、タグ、よく使われる機能に関するヒント)は、[McpMeta] 属性を介して提供され、MCP のツール一覧で公開されます。
メタデータへのアクセス
AI オーケストレーターは、以下の方法でサーバーメタデータにアクセスできます。
- MCP プロトコル:MCP SDK を介した標準のツール/リソース一覧表示
- server.json:登録と検出に使用する静的メタデータファイル
- ツール属性:コード内の
McpMeta属性を介した実行時メタデータ
統合例の詳細については、MCP 仕様とSDK 統合ドキュメントを参照してください。
コントリビューション
コントリビューションを歓迎します!このプロジェクトはコミュニティによって保守されています。
コントリビューションの方法:
- 🐛 GitHub Issues からバグを報告したり、機能をリクエストしたりする
- 💡 新しいツールや改善のためのプルリクエストを送信する
- 📝 ドキュメントを改善する
- ⭐ リポジトリにスターを付けて応援する
開発環境のセットアップ:
- リポジトリをフォークする
- フォークをクローンする
- 機能ブランチを作成する
- 変更を加える
- 十分にテストする
- プルリクエストを送信する
開発ガイドラインについては、.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からテストランナーを自動検出するようになりました。- 自動モード(既定):MTP を使用する場合は
{ "test": { "runner": "Microsoft.Testing.Platform" } }をglobal.jsonに追加します。それ以外の場合は、既定で VSTest が使用されます - 明示モード:
dotnet_projectの Test アクションを呼び出すときに、testRunner: "MicrosoftTestingPlatform"またはtestRunner: "VSTest"を設定します - レガシーパラメーター:
useLegacyProjectArgument: trueを使用します(非推奨です。代わりにtestRunner: "VSTest"を使用してください)
- 自動モード(既定):MTP を使用する場合は
- サポートの確認:
dotnet test --help | grep -- --projectを実行して、お使いの SDK が--projectフラグをサポートしているか確認します - 詳細情報:テストランナーの互換性とトラブルシューティングの詳細については、doc/testing.md を参照してください
- 参考資料:dotnet test の概要 | MTP | VSTest
お困りですか?
- 📖 ドキュメントを確認してください
- 💬 GitHub Issueを作成してください
- 🔍 既存の 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 | パッケージ検索、README | ログの表示、トレーシング |
ライセンス
MIT ライセンス - 詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。