本日はAWESOME-COPILOTの技術調査枠です。
AWESOME-COPILOTのドキュメントを読みながら実際に操作を試して記事に残します。
今回はカスタムインストラクションの一つC# MCP Server Developmentについてです。
C# MCP Server Development
C# MCP Server DevelopmentはC# SDKを使用してMCPサーバーを構築するための手順です。
MCP(Model Context Protocol)とはAI(Copilot など)が外部ツールやデータにアクセスするための標準プロトコルです。
以下のページからC# MCP Server Developmentのインストールボタンをクリックして取得します。
github.com
インストールボタンを押してC# MCP Server Developmentをダウンロードします。
すると.github/instructions配下にインストラクションがインストールされます。

インストールしたインストラクションはCopilotの動作に自動的に適用されます。
このインストラクションを読み込むと Copilot は単にC#コードを書くのではなくMCPサーバー開発の設計原則を守るコード提案を行うようになります。
具体的にはCopilotは以下のような行動をとります。
MCPサーバー構造を理解したコード生成
CopilotはMCPサーバーの以下のような基本構造を前提に提案します。
Server Tools Resources Prompts
| 要素 | 内容 |
|---|---|
| Server | MCPサーバー本体 |
| Tools | AIが呼び出す処理 |
| Resources | AIが参照するデータ |
| Prompts | AIのプロンプトテンプレート |
C# SDKを使ったMCPサーバー実装
CopilotはMCPのC# SDKを使う設計を前提にします。
例えば以下のコードを生成します。
- MCP serverクラス
- tool定義
- request/response
つまり普通のC# Web APIではなくMCPサーバー用の設計パターンを使う提案になります。
ツール(Tool)設計のベストプラクティス
MCPではAIが呼び出す処理をToolと呼びます。
CopilotはAI が理解しやすい粒度でツールを分割するため、次の設計を推奨します。
get_user search_documents calculate_total
入力・出力スキーマを明確化
MCPツールでは入力スキーマ/出力スキーマを定義する必要があります。
CopilotはJSON Schemaと型定義を明確にしたコードを提案します。
例えば以下のようなコードです。
public record SearchRequest(string Query);
これによりAIがツールを正しく使え、型安全になるというメリットがあります。
Tool/Resource/Promptの役割分離
MCPサーバーでは次の3つを分ける設計が重要です。
| 機能 | 役割 |
|---|---|
| Tool | AIが実行する処理 |
| Resource | AIが読むデータ |
| Prompt | AIの指示テンプレ |
Copilotはこれを混ぜない設計を提案します。
セキュリティと安全性
CopilotはMCPサーバーで以下の点を考慮します。
- 外部入力の検証
- APIキー管理
- 機密情報をログに出さない
- 最小権限
非同期処理(async / await)
MCPサーバーはAIからのリクエストを処理するため、非同期処理が重要です。
Copilotは async Task
テスト可能な設計
Copilot は以下を考慮した設計を提案します。
- DI
- インターフェース
- Mock可能
MCP サーバーは以下の要素と接続するためテストが重要です。
- AI
- 外部API
- データベース
ログとデバッグ
Copilotはデバッグのために以下を考慮した提案を行います。
- structured logging
- エラーログ
- request tracing