MCP サーバーによる VS Code の拡張
学習目標
Model Context Protocol (MCP) サーバーを使って、データベース接続、API 呼び出し、特殊なタスクの実行などの外部ツールを VS Code のチャット体験に統合する方法を学習します。
前提条件
- Visual Studio Code の最新版
- GitHub Copilot へのアクセス
- VS Code 1.99 以降
学習内容
1. MCP の基本概念
MCP とは何か
Model Context Protocol (MCP) は、AI モデルが外部ツールやサービスと統一されたインターフェースを通じて対話するためのオープンスタンダードです。
MCP の仕組み
graph LR
A[VS Code<br/>MCPクライアント] -->|リクエスト| B[MCPサーバー]
B -->|ツール提供| A
B --> C[ファイルシステム]
B --> D[データベース]
B --> E[API]
2. MCP サポートの有効化
演習1: MCP の設定
-
設定の有効化
-
利用可能な機能の確認
- ツール
- プロンプト
- リソース
- サンプリング
3. MCP サーバーの追加
演習2: ワークスペースへのサーバー追加
-
.vscode/mcp.json
の作成{ // 入力プロンプト - APIキーなどの機密情報用 "inputs": [ { "type": "promptString", "id": "github-token", "description": "GitHub Personal Access Token", "password": true } ], "servers": { // GitHubサーバーの例 "github": { "type": "stdio", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github-token}" } } } }
-
サーバーの起動確認
- コマンドパレット:
MCP: List Servers
- サーバーの状態を確認
4. データベース接続の実装
演習3: PostgreSQL サーバーの設定
-
PostgreSQL MCP サーバーの追加
-
データベースツールの使用
5. ファイルシステム操作
演習4: ファイルシステムサーバー
-
設定の追加
-
ファイル操作タスク
6. Web 検索とAPI 統合
演習5: 外部API の活用
-
Perplexity API サーバーの設定
{ "inputs": [ { "type": "promptString", "id": "perplexity-key", "description": "Perplexity API Key", "password": true } ], "servers": { "perplexity": { "type": "stdio", "command": "docker", "args": ["run", "-i", "--rm", "-e", "PERPLEXITY_API_KEY", "mcp/perplexity-ask"], "env": { "PERPLEXITY_API_KEY": "${input:perplexity-key}" } } } }
-
Web 検索の活用
7. カスタム MCP サーバーの作成
演習6: 独自サーバーの開発
-
TypeScript でのサーバー作成
// custom-mcp-server.ts import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; const server = new Server({ name: 'custom-calculator', version: '1.0.0' }); // ツールの定義 server.setRequestHandler('tools/list', () => ({ tools: [{ name: 'calculate', description: '数式を計算します', inputSchema: { type: 'object', properties: { expression: { type: 'string' } } } }] })); // ツールの実装 server.setRequestHandler('tools/call', async (request) => { if (request.params.name === 'calculate') { const expression = request.params.arguments.expression; const result = eval(expression); // 実際の実装では安全な評価方法を使用 return { content: `計算結果: ${result}` }; } }); // サーバーの起動 const transport = new StdioServerTransport(); await server.connect(transport);
-
カスタムサーバーの登録
実践プロジェクト
シナリオ: データ駆動型アプリケーションの構築
MCP サーバーを組み合わせて、完全なアプリケーションを構築します。
-
要件分析フェーズ
-
実装フェーズ
-
デプロイメント準備
ツールセットの活用
ツールセットの定義
-
開発用ツールセット
-
ツールセットの使用
トラブルシューティング
よくある問題と解決方法
- サーバーが起動しない
- コマンドパレット:
MCP: List Servers
→Show Output
-
ログを確認してエラーを特定
-
Docker を使用時の問題
-d
オプションを使用しない-
インタラクティブモード (
-i
) を確保 -
認証エラー
- 入力変数が正しく設定されているか確認
- 環境変数の読み込みを確認
デバッグモード
{
"servers": {
"myServer": {
"command": "node",
"args": ["server.js"],
"dev": {
"watch": "src/**/*.js",
"debug": { "type": "node" }
}
}
}
}
ベストプラクティス
セキュリティ
- 信頼できるソースのみ使用
- 公式リポジトリを優先
-
コードレビューを実施
-
機密情報の管理
- ハードコーディングを避ける
-
入力変数や環境ファイルを使用
-
権限の制限
- 必要最小限のアクセス権
- ディレクトリ制限の設定
パフォーマンス
- サーバーの管理
- 不要なサーバーは停止
-
リソース使用量を監視
-
ツールの選択
- タスクに適したツールのみ有効化
- ツールセットで効率化
まとめ
学習した内容: - MCP の基本概念と仕組み - サーバーの追加と設定方法 - 各種ツールの活用方法 - カスタムサーバーの作成 - セキュリティとパフォーマンスの考慮事項
次のステップ
次は「GitHub Copilot Chat チートシート」で、すべての機能のクイックリファレンスを確認しましょう。