MCPサーバーとは?(前提知識)
MCP(Model Context Protocol)の概要
MCP(Model Context Protocol) は、AIアシスタント(LLM:大規模言語モデル)に対して外部のデータソースやツールを標準化された方法で接続するためのオープンプロトコルです。
なぜMCPが必要なのか?
従来、AIアシスタントは学習時のデータに依存しており、以下のような問題がありました:
- 情報の古さ: 学習データが古く、最新のAPIやライブラリに対応できない
- ハルシネーション: 存在しないAPIやメソッドを「でっち上げ」てしまう
- コンテキストの制限: 外部ツールやドキュメントにアクセスできない
MCPは、AIアシスタントと外部システムをUSBポートのような標準インターフェースで接続することで、これらの問題を解決します。
MCPの仕組み
┌─────────────────┐ MCP Protocol ┌─────────────────┐
│ AIアシスタント │ ◄───────────────────► │ MCPサーバー │
│ (VS Code等) │ │ (ツール・データ) │
└─────────────────┘ └─────────────────┘
クライアント サーバー
- MCPクライアント: AIアシスタント側(VS Code、Claude Desktop等)
- MCPサーバー: ツールやデータを提供する側(ドキュメント検索、コード解析等)
MCPサーバーは主に以下の機能を提供します:
- Tools(ツール): LLMがアクション(計算、API呼び出し等)を実行できる機能
- Resources(リソース): 読み取り専用のデータやドキュメント
- Prompts(プロンプト): 再利用可能なテンプレート
VS CodeでのMCPサーバーの動作
自動起動・停止の仕組み
VS Code(GitHub Copilot Chat)では、MCPサーバーはチャットセッションに合わせて自動的に管理されます。手動で起動・停止する必要はありません。
起動タイミング
- チャットパネルを開いた時
- チャットで最初のメッセージを送信した時
設定されているMCPサーバーがバックグラウンドプロセスとして自動起動します。
停止タイミング
- チャットパネルを閉じた時
- VS Codeを終了した時
- ワークスペースを切り替えた時
MCPサーバーは自動的に停止されます。
stdioタイプとhttpタイプの違い
| タイプ | 動作 | 例 |
|---|---|---|
| stdio | VS Codeがローカルプロセスとして起動・停止を管理 | Serena、AWS Documentation、Fetch |
| http | リモートサーバーへの接続を開閉するのみ(サーバー自体は常時稼働) | Context7、AWS Knowledge MCP |
手動での再起動方法
MCPサーバーの調子がおかしい場合は、コマンドパレット(Ctrl+Shift+P / Cmd+Shift+P)から以下を実行:
MCP: List Servers
サーバー一覧が表示され、個別に再起動や停止ができます。
前提条件・環境セットアップ
MCPサーバーを利用するには、いくつかのツールを事前にインストールする必要があります。
1. uv(Pythonパッケージマネージャー)のインストール
stdioタイプのMCPサーバー(Serena、AWS Documentation MCP等)はuvxコマンドを使用します。uvxはuvに含まれるツールです。
インストール手順(WSL Ubuntu)
curl -LsSf https://astral.sh/uv/install.sh | sh
インストール後、シェルを再起動するか以下を実行:
source $HOME/.local/bin/env
確認
uv --version
uvx --version
参考: uv公式ドキュメント
2. Node.js のインストール(Volta推奨)
一部のMCPサーバーはNode.jsを必要とします。バージョン管理の容易さからVoltaの使用を推奨します。
Voltaのインストール(WSL Ubuntu)
curl https://get.volta.sh | bash
シェルを再起動後、Node.jsをインストール:
volta install node
確認
node --version
npm --version
参考: Volta公式ドキュメント
3. VS Code拡張機能
GitHub Copilot ChatでMCPサーバーを利用するには、以下の拡張機能が必要です:
- GitHub Copilot
- GitHub Copilot Chat
VS CodeでのMCPサーバー設定方法
設定ファイルの場所
VS CodeでMCPサーバーを設定するには、プロジェクトのルートディレクトリに .vscode/mcp.json ファイルを作成します。
your-project/
├── .vscode/
│ └── mcp.json ← ここに配置
├── src/
├── package.json
└── ...
⚠️ 重要:
mcp.jsonは必ず.vscodeディレクトリ内に配置してください。プロジェクトルート直下に置いても認識されません。
基本的な設定構造
{
"servers": {
"サーバー名": {
"type": "stdio または http",
// サーバー固有の設定
}
},
"inputs": [
// APIキーなどの入力設定(任意)
]
}
接続タイプ
- stdio(標準入出力): ローカルでプロセスを起動して通信
- http: リモートサーバーにHTTP経由で接続
ワークスペース設定とユーザー設定
| 設定ファイル | パス | 適用範囲 |
|---|---|---|
| ワークスペース設定 | <プロジェクト>/.vscode/mcp.json |
該当プロジェクトのみ |
| ユーザー設定 | ~/.vscode-server/data/User/mcp.json |
全ワークスペース共通 |
プロジェクト固有のMCPサーバー(Serenaの--project指定など)はワークスペース設定に、共通で使うサーバー(Context7、AWS Knowledge MCP等)はユーザー設定に置くと便利です。
現在設定しているMCPサーバー一覧
1. Context7
⚠️ 重要: Context7を利用するにはアカウント登録とAPIキーの発行が必須です。
APIキーがないとMCPサーバーに接続できません。
概要: Context7は、AIコーディングアシスタントに最新のライブラリドキュメントとコード例を直接提供するMCPサーバーです。
なぜContext7が必要?
LLMは学習時点のデータに基づいて回答するため:
- 古いバージョンのAPIを提案してしまう
- 存在しないメソッドを「ハルシネーション」で生成する
- 最新のライブラリ更新に対応できない
Context7を使うと、プロンプトに use context7 と書くだけで、リアルタイムで最新のドキュメントをLLMのコンテキストに注入できます。
使い方(チャットでのプロンプト例)
Context7を利用するには、プロンプトに use context7 を追加するだけです:
Reactでカスタムフックを作成する方法を教えて use context7
Next.js 14のApp Routerの使い方を説明して use context7
特定のライブラリIDを指定することで、より正確なドキュメントを取得できます:
Supabaseで認証を実装したい use library /supabase/supabase
プライバシー配慮
Context7はプライバシーを重視した設計になっており、ユーザーのクエリはローカルで解析され、抽出されたトピックのみがサーバーに送信されます。オリジナルのプロンプトやコードがサーバーに送られることはありません。
設定
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "${input:CONTEXT7_API_KEY}"
}
}
⚠️ APIキー取得方法(必須)
Context7を利用するには、以下の手順でAPIキーを取得する必要があります:
- https://context7.com でアカウント登録(必須)
- ダッシュボードにログイン
- API Keyを発行
- 発行したKeyは安全に保管(⚠️ 再表示できないため注意)
💡 ヒント: APIキーは初回接続時にVS Codeが入力を求めます。一度入力するとVS Codeが安全に保存してくれるため、毎回入力する必要はありません。
2. Serena(oraios/serena)
概要: Serenaは、言語サーバー(LSP)を活用した高度なコーディングエージェントツールキットです。30以上のプログラミング言語に対応し、シンボルレベルのナビゲーションや精密なコード編集が可能です。
Serenaの特徴
- セマンティックコード理解: 言語サーバープロトコル(LSP)を活用し、コードの意味を理解
- シンボルレベル操作: 関数やクラスなどのシンボル単位での検索・編集
- 大規模コードベース対応: 複雑で大きなコードベースでも高精度に動作
-
メモリ機能: プロジェクトの知識を
.serena/memories/に保存し、セッション間で活用 - オープンソース・無料: サブスクリプション不要で利用可能
💡 便利な使い方:自動アクティベート設定
毎回「プロジェクトをアクティベートして」と言うのは面倒ですよね。
--projectオプションを使えば、MCPサーバー起動時に自動的にプロジェクトがアクティベートされます:
"oraios/serena": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant",
"--project",
"${workspaceFolder}"
]
}
ポイント:
--project ${workspaceFolder}を使用すると、VS Codeが自動的に現在のワークスペースパスを挿入します。
Serenaのデータ構造
Serenaは以下のディレクトリにデータを保存します:
~/.serena/
├── serena_config.yml # グローバル設定ファイル
└── (その他の設定)
プロジェクト/.serena/
├── project.yml # プロジェクト固有の設定
├── cache/ # インデックスキャッシュ
└── memories/ # プロジェクトの知識・メモ
├── architecture.md
├── conventions.md
└── ...
メモリ機能について
Serenaにはメモリ機能があり、プロジェクトの知識を保存・活用できます。
🎯 メモリでAIの回答品質が向上する理由
メモリを活用することで、AIがプロジェクト固有の文脈を理解し、より適切な回答ができるようになります:
| シナリオ | メモリなし | メモリあり |
|---|---|---|
| 「認証機能を追加して」 | 一般的な実装を提案 | プロジェクトの認証パターン・使用ライブラリに沿った実装 |
| 「テストを書いて」 | 汎用的なテストコード | プロジェクトのテスト規約・フレームワークに準拠 |
| 「APIエンドポイントを追加」 | 標準的なREST設計 | 既存のAPI設計パターン・命名規則に統一 |
メモリに保存すると効果的な情報
| メモリ名 | 内容例 |
|---|---|
architecture |
アーキテクチャ構成、レイヤー構造、ディレクトリ設計 |
conventions |
命名規約、コーディングスタイル、フォーマッタ設定 |
dependencies |
使用ライブラリ、バージョン制約、選定理由 |
testing_strategy |
テスト方針、カバレッジ目標、使用フレームワーク |
deployment |
デプロイ手順、環境変数、インフラ構成 |
decisions |
技術選定の理由、過去の決定事項とその背景 |
メモリの特徴
- 自動オンボーディング: 初回起動時にプロジェクトを分析し、構造や規約をメモリに保存
-
永続的な知識:
.serena/memories/に保存されたファイルは次回以降のセッションでも利用可能 - 手動追加可能: 自分でメモリファイルを追加・編集することも可能
- セッション間で継続: 新しいチャットでも過去のメモリを活用できる
使い方(チャットでのプロンプト例)
初回セットアップ(自動アクティベート未設定の場合)
serena、プロジェクトをアクティベートして
serena、このプロジェクトのオンボーディングを実行して
シンボル検索・参照
UserServiceクラスの構造を見せて
calculateTotal関数がどこから呼ばれているか調べて
src/models/user.pyのシンボル一覧を表示して
コード編集
AuthMiddlewareクラスに新しいメソッドを追加して
validateInput関数の実装を修正して
メモリ操作
このプロジェクトのメモリ一覧を見せて
アーキテクチャの決定事項をメモリに保存して
architecture_decisionsメモリの内容を読んで
ディレクトリ・ファイル操作
srcディレクトリの構造を見せて
config.pyの内容を読んで
主なツール一覧
| ツール | 説明 |
|---|---|
activate_project |
プロジェクトをアクティベート |
get_symbols_overview |
ファイル内のシンボル一覧を取得 |
find_symbol |
シンボルを検索 |
find_referencing_symbols |
シンボルの参照箇所を検索 |
read_file |
ファイルの内容を読み取り |
list_dir |
ディレクトリの内容を一覧表示 |
write_memory |
メモリにデータを書き込み |
read_memory |
メモリからデータを読み取り |
list_memories |
メモリ一覧を表示 |
いつSerenaが役立つか
- ✅ 大規模で複雑なコードベースを扱う場合
- ✅ 精密なリファクタリングが必要な場合
- ✅ 型付き言語でシンボルベースの操作をしたい場合
- ✅ プロジェクトの知識を永続化したい場合
注意: 小さなファイルや新規プロジェクトをゼロから作成する場合は、Serenaの恩恵は限定的です。既存の構造化されたコードベースで最も効果を発揮します。
設定
基本設定(手動アクティベート):
"oraios/serena": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant"
]
}
推奨設定(自動アクティベート):
"oraios/serena": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant",
"--project",
"${workspaceFolder}"
]
}
自動アクティベートの設定をしていれば、「serena起動して」とチャットで伝えるだけで必要なデータをSerenaが読み込みます。
起動時の動作
--project ${workspaceFolder} を設定すると、Serena起動時に以下が自動で行われます:
- ✅
project.ymlを読み込み(プロジェクト設定) - ✅
memories/内のメモリ一覧を認識 - ✅
cache/のインデックスキャッシュを利用(存在すれば)
💡 注意: メモリの内容自体は自動で全部読み込むわけではありません。
メモリの読み込みタイミング
| 動作 | タイミング |
|---|---|
| メモリ一覧の認識 | 起動時に自動 |
| メモリ内容の読み込み | AIが「このメモリが必要」と判断した時 |
これはトークン節約のための設計です。全メモリを毎回読むと、大きなプロジェクトではコンテキストが溢れてしまいます。
メモリの確認・読み込み方法
現在のメモリ一覧を確認:
このプロジェクトのメモリ一覧を見せて
特定のメモリを読み込み:
architecture_decisionsメモリの内容を読んで
設定のポイント
-
--context ide-assistant: VS Code等のIDE向けに最適化されたコンテキストを使用 -
--project ${workspaceFolder}: VS Codeの変数を使用して現在のワークスペースを自動指定(推奨) - 大規模プロジェクトでは事前にインデックスを作成すると初回起動が高速化
3. AWS Knowledge MCP Server
概要: AWSが提供するリモートMCPサーバーで、最新のAWSドキュメント、APIリファレンス、What's New情報などにアクセスできます。
提供される情報
- AWSドキュメント
- APIリファレンス
- What's New(新機能情報)
- Getting Startedガイド
- Builder Libraryのベストプラクティス
- ブログ記事
- アーキテクチャリファレンス
- Well-Architectedガイダンス
使い方(チャットでのプロンプト例)
AWSサービスについて質問するだけで、自動的に最新ドキュメントを参照します:
Lambda関数のコールドスタートを減らす方法を教えて
DynamoDBのベストプラクティスを説明して
AppSyncの最新機能について教えて
S3のセキュリティ設定のベストプラクティスは?
なぜ必要か
LLMの学習データは古い場合があり、AWSの最新サービスや機能について正確な情報を持っていない可能性があります。このMCPサーバーを使うことで、常に最新のAWS情報に基づいた回答が得られます。
設定
"aws-knowledge-mcp": {
"type": "http",
"url": "https://knowledge-mcp.global.api.aws"
}
💡 メリット: HTTPタイプのリモートサーバーなので、ローカル環境への追加インストールは不要です。
4. AWS Documentation MCP Server
概要: ローカルで動作するAWSドキュメント検索用MCPサーバーです。
AWS Knowledge MCPとの違い
| 項目 | AWS Knowledge MCP | AWS Documentation MCP |
|---|---|---|
| 接続方式 | リモート(HTTP) | ローカル(stdio) |
| データソース | 複数(ドキュメント、ブログ、What's New等) | ドキュメントのみ |
| インストール | 不要 | uvxでローカル実行 |
| APIキー | 不要 | 不要 |
使い方(チャットでのプロンプト例)
AWS Knowledge MCPと同様に、AWSサービスについて質問できます:
EC2インスタンスタイプの選び方を教えて
CloudFormationテンプレートの書き方を説明して
IAMポリシーのベストプラクティスは?
設定
"aws-documentation-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"awslabs.aws-documentation-mcp-server@latest"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR",
"AWS_DOCUMENTATION_PARTITION": "aws"
}
}
前提条件
-
uvx(uv パッケージマネージャー)がインストールされていること(インストール手順を参照)
環境変数オプション
-
AWS_DOCUMENTATION_PARTITION:aws-cnに設定するとAWS中国リージョンのドキュメントを参照 -
MCP_USER_AGENT: 企業プロキシ環境でブロックされる場合に設定
完全な設定例
以下は、本ドキュメントで紹介した全MCPサーバーを含む.vscode/mcp.jsonの完全な設定例です:
{
"servers": {
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "${input:CONTEXT7_API_KEY}"
}
},
"serena": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant",
"--project",
"${workspaceFolder}"
]
},
"aws-knowledge-mcp": {
"type": "http",
"url": "https://knowledge-mcp.global.api.aws"
},
"aws-documentation-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"awslabs.aws-documentation-mcp-server@latest"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR",
"AWS_DOCUMENTATION_PARTITION": "aws"
}
}
},
"inputs": [
{
"id": "CONTEXT7_API_KEY",
"type": "promptString",
"description": "API key for authentication",
"password": true
}
]
}
トラブルシューティング
MCPサーバーに接続できない場合
- 設定ファイルの構文確認: JSONの文法エラーがないか確認
- コマンドパスの確認: stdio型の場合、指定したコマンドが存在するか確認
- ネットワーク確認: HTTP型の場合、URLにアクセスできるか確認
- VS Codeの再起動: 設定変更後はVS Codeを再起動
※mcp.jsonのinputsセクションにバグの報告あり
https://github.com/microsoft/vscode/issues/256546
uvxコマンドが見つからない場合
# uvがインストールされているか確認
uv --version
# パスが通っているか確認
which uvx
# パスが通っていない場合は以下を実行
source $HOME/.local/bin/env
APIキーが求められる場合
初回接続時にAPIキーの入力を求められた場合:
- 該当サービスでAPIキーを発行
- プロンプトに入力
- VS Codeが自動的に保存(以降は入力不要)
ユーザー固有のMCP設定ファイル(Ubuntu/WSL/リモート)
- パス:
/home/ユーザー名/.vscode-server/data/User/mcp.json - このファイルに記載すると、全ワークスペース共通でMCPサーバー設定が有効になる
- ワークスペースごとの設定は
.vscode/mcp.jsonを利用
例: WSLで
yasutakaユーザーの場合
/home/yasutaka/.vscode-server/data/User/mcp.json