Model Context Protocol (MCP) は、Amazon Q CLIの最も強力な機能の一つです。この記事では、MCPの基本概念から実践的な活用方法まで、ハンズオン形式で詳しく解説します。
1. MCPの概要
MCPとは
Model Context Protocol (MCP) は、AI言語モデルが外部システムやツールと安全に連携するための標準化されたプロトコルです。Amazon Q CLIでは、MCPを通じて以下が可能になります:
- 外部データソースへの安全なアクセス
- カスタムツールの統合
- コンテキスト情報の動的な管理
- セキュアな実行環境での操作
MCP は、クライアント/サーバーアーキテクチャに従います。
- MCP ホスト: MCP を介してデータにアクセスする Amazon Q Developer CLI などのプログラム
- MCP クライアント: サーバーとの 1:1 接続を維持するプロトコルクライアント
- MCP サーバー: 標準化されたモデルコンテキストプロトコルを通じて、それぞれが特定の機能を公開する軽量プログラム
- ローカルデータソース: MCP サーバーが安全にアクセスできるコンピュータのファイル、データベース、サービス
- リモートサービス: MCP サーバーが接続できるインターネット (APIs など) 経由で利用可能な外部システム
MCP 通信フロー
User
|
v
+------------------+ +-----------------+ +------------------+
| | | | | |
| Amazon Q Dev CLI | --> | MCP Client API | --> | MCP Server |
| | | | | |
+------------------+ +-----------------+ +------------------+
|
v
+------------------+
| |
| External Service |
| |
+------------------+
MCP を介したユーザー、Amazon Q Developer CLI、外部サービス間の通信フロー
MCP アーキテクチャの概要
+-------------------+ +-------------------+
| | | |
| Amazon Q Dev CLI | | External Data |
| (MCP Host) | | & Services |
| | | |
+--------+----------+ +---------+---------+
| |
| |
v |
+--------+-----------------------------+--------+
| |
| MCP Servers |
| |
| +-------------+ +-------------+ |
| | | | | |
| | AWS Docs | | GitHub | ... |
| | MCP Server | | MCP Server | |
| | | | | |
| +-------------+ +-------------+ |
| |
+-----------------------------------------------+
Amazon Q Developer CLI が MCP サーバーを介して外部データソースに接続する方法を示す MCP アーキテクチャ
2. MCP使用の基本手順
ステップ1: MCP機能の有効化
# MCP機能にアクセス
q mcp --help
# MCP設定の初期化
q mcp init
# 現在のMCP状態確認
q mcp status
ステップ2: 基本的なMCP操作
# 利用可能なMCPサーバー一覧
q mcp list
# MCPサーバーの詳細情報
q mcp info [server-name]
# MCPサーバーの接続テスト
q mcp test [server-name]
3. MCPサーバーのロード
3.1 標準MCPサーバーのロード
データベースサーバーの例
# SQLiteサーバーのロード
q mcp load sqlite-server --config database.db
# PostgreSQLサーバーのロード
q mcp load postgres-server --config '{
"host": "localhost",
"port": 5432,
"database": "mydb",
"user": "username"
}'
ファイルシステムサーバーの例
# ファイルシステムサーバーのロード
q mcp load filesystem-server --path /project/root
# 制限付きファイルアクセス
q mcp load filesystem-server --path /project/root --readonly
3.2 カスタムMCPサーバーのロード
Node.js MCPサーバーの作成
# プロジェクトディレクトリの作成
mkdir my-mcp-server
cd my-mcp-server
# package.jsonの作成
npm init -y
npm install @modelcontextprotocol/sdk
# サーバーファイルの作成
cat > server.js << 'EOF'
#!/usr/bin/env node
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new Server({
name: 'my-custom-server',
version: '1.0.0',
});
// カスタムツールの実装
server.setRequestHandler('tools/list', async () => ({
tools: [{
name: 'get_weather',
description: '指定された都市の天気情報を取得',
inputSchema: {
type: 'object',
properties: {
city: { type: 'string', description: '都市名' }
},
required: ['city']
}
}]
}));
// ツール実行の実装
server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params;
if (name === 'get_weather') {
return {
content: [{
type: 'text',
text: `${args.city}の天気: 晴れ、気温25度`
}]
};
}
});
const transport = new StdioServerTransport();
server.connect(transport);
EOF
# 実行権限の付与
chmod +x server.js
カスタムサーバーのロード
# カスタムサーバーをAmazon Q CLIにロード
q mcp load custom-weather --command "node /path/to/my-mcp-server/server.js"
# ロード確認
q mcp list
4. MCP設定の詳細管理
4.1 設定ファイルの構造
基本設定ファイル (~/.config/amazon-q/mcp-config.json)
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "/project/path"],
"env": {
"NODE_ENV": "production"
}
},
"database": {
"command": "python",
"args": ["-m", "mcp_server_sqlite", "database.db"],
"timeout": 30000
},
"custom-api": {
"command": "node",
"args": ["./custom-server.js"],
"cwd": "/path/to/server",
"env": {
"API_KEY": "${API_KEY}",
"DEBUG": "true"
}
}
},
"defaultTimeout": 10000,
"maxConcurrentConnections": 5
}
4.2 環境変数の管理
# 環境変数の設定
export API_KEY="your-api-key"
export DATABASE_URL="postgresql://user:pass@localhost/db"
# 設定の再読み込み
q mcp reload
# 環境変数を使った設定テスト
q mcp test custom-api
4.3 高度な設定オプション
# タイムアウト設定
q mcp config set timeout 15000
# 同時接続数制限
q mcp config set max-connections 3
# ログレベル設定
q mcp config set log-level debug
# 設定の確認
q mcp config show
5. MCPツールとプロンプトの活用
5.1 利用可能ツールの確認
# 全MCPツールのリスト表示
q mcp tools list
# 特定サーバーのツール表示
q mcp tools list --server filesystem
# ツールの詳細情報
q mcp tools info get_weather
5.2 チャット内でのツール使用
# MCPツールを使ったチャット開始
q chat --enable-mcp
# チャット内での使用例:
# "ファイルシステムサーバーを使って、プロジェクトのPythonファイル一覧を取得してください"
# "データベースサーバーでユーザーテーブルの構造を確認してください"
# "天気サーバーで東京の天気を調べてください"
5.3 プロンプトテンプレートの活用
# プロンプトテンプレートの作成
cat > ~/.config/amazon-q/prompts/code-review.txt << 'EOF'
以下の手順でコードレビューを実行してください:
1. ファイルシステムサーバーを使用してプロジェクトファイルを取得
2. 各ファイルの構造と依存関係を分析
3. 潜在的な問題点を特定
4. 改善提案を提供
対象ディレクトリ: {directory}
フォーカス: {focus_area}
EOF
# プロンプトテンプレートの使用
q chat --prompt code-review --vars directory=/project/src,focus_area=security
6. MCPセキュリティ
6.1 権限管理
# サーバー権限の確認
q mcp permissions list
# 読み取り専用権限の設定
q mcp permissions set filesystem --readonly
# 特定ディレクトリへのアクセス制限
q mcp permissions set filesystem --allow-paths "/project,/docs" --deny-paths "/secrets"
6.2 セキュリティ設定
{
"security": {
"allowedCommands": ["node", "python", "npx"],
"restrictedPaths": ["/etc", "/var", "/root"],
"sandboxMode": true,
"networkAccess": "restricted",
"allowedHosts": ["api.example.com", "localhost"]
}
}
6.3 監査とログ
# MCP操作ログの確認
q mcp logs
# 特定期間のログ
q mcp logs --since "2024-01-01" --until "2024-01-31"
# セキュリティイベントのフィルタ
q mcp logs --level warn --category security
7. エディタコマンドの使用
7.1 エディタ統合の設定
# VS Code統合の有効化
q mcp editor enable vscode
# Vim統合の有効化
q mcp editor enable vim
# エディタ設定の確認
q mcp editor status
7.2 エディタ内でのMCP使用
VS Code拡張の設定
// settings.json
{
"amazonQ.mcp.enabled": true,
"amazonQ.mcp.servers": ["filesystem", "database"],
"amazonQ.mcp.autoComplete": true
}
Vimプラグインの設定
" .vimrc
let g:amazon_q_mcp_enabled = 1
let g:amazon_q_mcp_servers = ['filesystem', 'database']
" キーマッピング
nnoremap <leader>qm :AmazonQMCP<CR>
nnoremap <leader>qt :AmazonQMCPTools<CR>
7.3 エディタコマンドの実行例
# ファイル内容の分析
q mcp editor analyze current-file
# コード補完の取得
q mcp editor complete --line 45 --column 12
# リファクタリング提案
q mcp editor refactor --selection 10-20
8. Git対応ファイル選択の使用
8.1 Git統合の設定
# Git MCPサーバーの設定
q mcp load git-server --repository /path/to/repo
# Git統合の有効化
q mcp git enable
# 設定確認
q mcp git status
8.2 Gitベースのファイル操作
# 変更されたファイルの取得
q chat "最近変更されたファイルを分析してください"
# 特定ブランチのファイル比較
q mcp git diff --branch feature/new-feature --base main
# コミット履歴の分析
q chat "過去10コミットの変更パターンを分析してください"
8.3 プルリクエスト連携
# PR作成支援
q chat "現在の変更内容でプルリクエストを作成する準備をしてください"
# コードレビュー支援
q mcp git review --pr 123 --focus security
9. コンテキスト管理
9.1 コンテキストの保存と読み込み
# 現在のコンテキストを保存
q mcp context save project-analysis
# 保存されたコンテキストの一覧
q mcp context list
# コンテキストの読み込み
q mcp context load project-analysis
# コンテキストの削除
q mcp context delete project-analysis
9.2 自動コンテキスト管理
{
"contextManagement": {
"autoSave": true,
"maxContexts": 10,
"cleanupInterval": "24h",
"contextSources": ["filesystem", "git", "database"]
}
}
9.3 コンテキスト共有
# コンテキストのエクスポート
q mcp context export project-analysis --output project-context.json
# コンテキストのインポート
q mcp context import project-context.json
# チーム共有用コンテキスト
q mcp context share project-analysis --team development
10. コンテキストフック
10.1 フックの設定
# プロジェクト開始時のフック
q mcp hooks add project-start "mcp context load project-default"
# ファイル変更時のフック
q mcp hooks add file-change "mcp context update --source filesystem"
# Git操作時のフック
q mcp hooks add git-commit "mcp context save commit-$(date +%s)"
10.2 カスタムフックスクリプト
#!/bin/bash
# ~/.config/amazon-q/hooks/project-setup.sh
echo "プロジェクトセットアップフックを実行中..."
# 必要なMCPサーバーの起動
q mcp load filesystem-server --path $PWD
q mcp load git-server --repository $PWD
# プロジェクト固有のコンテキスト読み込み
if [ -f ".q-context.json" ]; then
q mcp context import .q-context.json
fi
echo "セットアップ完了"
10.3 フック管理
# フック一覧の表示
q mcp hooks list
# フックの編集
q mcp hooks edit project-start
# フックの無効化
q mcp hooks disable file-change
# フックの削除
q mcp hooks remove git-commit
11. 設定の最適化
11.1 パフォーマンス設定
{
"performance": {
"cacheSize": "100MB",
"connectionPoolSize": 5,
"requestTimeout": 30000,
"enableCompression": true
}
}
11.2 開発環境別設定
# 開発環境設定
q mcp config set-profile development
q mcp config set debug true
q mcp config set log-level debug
# 本番環境設定
q mcp config set-profile production
q mcp config set debug false
q mcp config set log-level error
11.3 設定のバックアップと復元
# 設定のバックアップ
q mcp config backup --output mcp-backup.json
# 設定の復元
q mcp config restore --input mcp-backup.json
# 設定のリセット
q mcp config reset --confirm
12. 自動入力機能
12.1 入力テンプレートの作成
# テンプレートディレクトリの作成
mkdir -p ~/.config/amazon-q/templates
# データベース接続テンプレート
cat > ~/.config/amazon-q/templates/db-connect.json << 'EOF'
{
"name": "database-connection",
"description": "データベース接続の設定",
"fields": [
{
"name": "host",
"type": "string",
"default": "localhost",
"required": true
},
{
"name": "port",
"type": "number",
"default": 5432
},
{
"name": "database",
"type": "string",
"required": true
}
]
}
EOF
12.2 自動入力の使用
# テンプレートベースの入力
q mcp input --template db-connect
# 対話式設定
q mcp setup --interactive
# 設定値の検証
q mcp validate --config database-config.json
12.3 動的入力生成
# 現在のプロジェクト構造に基づく入力生成
q mcp input generate --source filesystem --pattern "*.config.js"
# Git履歴に基づく設定提案
q mcp input suggest --based-on git-history
13. 貢献とカスタマイゼーション
13.1 カスタムMCPサーバーの開発
Python MCPサーバーの例
#!/usr/bin/env python3
import asyncio
import json
from mcp import ClientTransport, Server
class CustomMCPServer:
def __init__(self):
self.server = Server("custom-tool-server")
self.setup_handlers()
def setup_handlers(self):
@self.server.list_tools()
async def list_tools():
return [
{
"name": "analyze_code",
"description": "コードの品質分析",
"inputSchema": {
"type": "object",
"properties": {
"file_path": {"type": "string"},
"language": {"type": "string"}
}
}
}
]
@self.server.call_tool()
async def call_tool(name, arguments):
if name == "analyze_code":
return await self.analyze_code(arguments)
async def analyze_code(self, args):
# コード分析ロジックの実装
file_path = args.get("file_path")
language = args.get("language", "python")
# 実際の分析処理
result = f"{file_path}の{language}コード分析結果"
return {
"content": [{"type": "text", "text": result}]
}
if __name__ == "__main__":
server = CustomMCPServer()
asyncio.run(server.run())
13.2 MCPプラグインの作成
# プラグインプロジェクトの作成
mkdir amazon-q-mcp-plugin
cd amazon-q-mcp-plugin
# プラグイン構造の作成
mkdir -p {src,tests,docs}
# プラグイン設定ファイル
cat > plugin.json << 'EOF'
{
"name": "my-mcp-plugin",
"version": "1.0.0",
"description": "カスタムMCP機能プラグイン",
"main": "src/index.js",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0"
},
"amazonQ": {
"mcpVersion": "1.0",
"capabilities": ["tools", "resources", "prompts"]
}
}
EOF
13.3 コミュニティへの貢献
# 開発版のビルドとテスト
q mcp dev build
q mcp dev test
# プラグインの公開準備
q mcp publish --dry-run
# 公式リポジトリへの貢献
git clone https://github.com/amazon-q/mcp-extensions
cd mcp-extensions
# 貢献ガイドラインに従って開発
14. AWS MCP Serversの導入と活用
14.1 AWS MCP Serversの概要
AWS公式が提供するMCP Serversは、AWSの開発ワークフローに最適化された専用サーバー群です。これらは以下の機能を提供します:
- AWS Documentation MCP Server: AWS公式ドキュメントの検索・取得
- AWS CDK MCP Server: CDKベストプラクティスの実装支援
- AWS Cost Analysis MCP Server: コスト分析とコスト最適化
- AWS Image Generation MCP Server: BedrockでのAI画像生成
14.2 AWS Documentation MCP Serverのセットアップ
ステップ1: 前提条件の確認
# Node.js 18以上の確認
node --version
# npmの最新化
npm install -g npm@latest
# AWSクレデンシャルの確認
aws sts get-caller-identity
ステップ2: AWS Documentation MCP Serverのインストール
# npmでの直接インストール
npm install -g @aws/aws-documentation-mcp-server
# または、Gitリポジトリからのインストール
git clone https://github.com/awslabs/mcp.git
cd mcp/servers/aws-documentation
npm install
npm run build
ステップ3: Amazon Q CLIへの統合設定
# MCP設定ファイルの編集
mkdir -p ~/.config/amazon-q
cat > ~/.config/amazon-q/mcp-config.json << 'EOF'
{
"mcpServers": {
"aws-documentation": {
"command": "npx",
"args": ["@aws/aws-documentation-mcp-server"],
"env": {
"AWS_REGION": "us-east-1"
},
"timeout": 30000
}
}
}
EOF
ステップ4: サーバーの起動と確認
# AWS Documentation MCP Serverのロード
q mcp load aws-documentation
# サーバー状態の確認
q mcp status aws-documentation
# 利用可能なツールの確認
q mcp tools list --server aws-documentation
14.3 AWS Documentation MCP Serverの活用
基本的なドキュメント検索
# Amazon Q CLIでチャット開始(MCP有効)
q chat --enable-mcp
# チャット内での使用例:
# "EC2インスタンスの起動方法について最新のドキュメントを検索してください"
# "RDSのバックアップに関するベストプラクティスを調べてください"
# "Lambda関数のデプロイメント手順を確認してください"
高度な検索機能の活用
# 特定のサービスに絞った検索
q chat
> "aws-documentationサーバーを使って、Amazon S3のバケット暗号化に関する公式ドキュメントを詳細に検索してください"
# トラブルシューティング情報の検索
> "CloudFormationスタックの作成でエラーが発生した場合のトラブルシューティング手順を検索してください"
# セキュリティベストプラクティスの検索
> "IAMロールとポリシーのベストプラクティスに関する最新のAWSドキュメントを取得してください"
14.4 複数のAWS MCP Serversの連携設定
完全なAWS MCP環境の構築
{
"mcpServers": {
"aws-documentation": {
"command": "npx",
"args": ["@aws/aws-documentation-mcp-server"],
"env": {
"AWS_REGION": "us-east-1"
}
},
"aws-cdk": {
"command": "npx",
"args": ["@aws/aws-cdk-mcp-server"],
"env": {
"AWS_REGION": "us-east-1",
"CDK_DEFAULT_ACCOUNT": "${AWS_ACCOUNT_ID}"
}
},
"aws-cost-analysis": {
"command": "npx",
"args": ["@aws/aws-cost-analysis-mcp-server"],
"env": {
"AWS_REGION": "us-east-1"
}
}
},
"security": {
"allowedHosts": [
"docs.aws.amazon.com",
"*.amazonaws.com"
],
"networkAccess": "restricted"
}
}
統合ワークフローの実行
# 全AWS MCPサーバーの一括ロード
q mcp load aws-documentation aws-cdk aws-cost-analysis
# 統合開発ワークフローの開始
q chat --enable-mcp
> "新しいWebアプリケーションをAWSにデプロイしたいです。以下の手順で支援してください:
> 1. アーキテクチャのベストプラクティスをドキュメントから調査
> 2. CDKを使った実装方法の提案
> 3. コスト見積もりの計算"
14.5 AWS Documentation MCP Serverの高度な活用
カスタム検索クエリの作成
# 複合条件での検索
q chat
> "以下の条件でAWSドキュメントを検索:
> - サービス: EC2, RDS, Lambda
> - トピック: セキュリティ、パフォーマンス最適化
> - 最新性: 2024年以降の更新"
# 業界特化の検索
> "金融業界向けのAWSコンプライアンス要件について、
> SOC2、PCI DSS関連のドキュメントを包括的に検索してください"
ドキュメント解析と要約
# 長文ドキュメントの要約
q chat
> "AWS Well-Architected Frameworkの全体像を、
> aws-documentationサーバーから取得したドキュメントベースで
> 重要ポイントを3つに絞って要約してください"
# 比較分析
> "EC2とLambdaのコスト比較について、
> 公式ドキュメントから情報を収集して分析表を作成してください"
14.6 プロジェクト固有の設定
プロジェクト別AWS MCP設定
# プロジェクトディレクトリでの設定
cd /project/aws-webapp
cat > .q-mcp-config.json << 'EOF'
{
"project": "aws-webapp",
"awsServices": ["ec2", "rds", "lambda", "s3", "cloudfront"],
"focusAreas": ["security", "cost-optimization", "performance"],
"documentationPreferences": {
"format": "markdown",
"includeExamples": true,
"latestOnly": true
}
}
EOF
# プロジェクト固有設定の読み込み
q mcp context load-project-config
開発段階別の設定
{
"environments": {
"development": {
"services": ["lambda", "dynamodb", "s3"],
"focus": ["quick-start", "examples"]
},
"staging": {
"services": ["ec2", "rds", "cloudfront"],
"focus": ["testing", "monitoring"]
},
"production": {
"services": ["all"],
"focus": ["security", "compliance", "disaster-recovery"]
}
}
}
14.7 トラブルシューティングとメンテナンス
接続問題の診断
# AWS MCPサーバーの診断
q mcp doctor aws-documentation
# ネットワーク接続テスト
q mcp test aws-documentation --verbose
# APIレート制限の確認
q mcp status aws-documentation --show-limits
パフォーマンス最適化
# キャッシュ設定の最適化
q mcp config set aws-documentation cache-size 500MB
q mcp config set aws-documentation cache-ttl 3600
# 同時接続数の調整
q mcp config set aws-documentation max-concurrent 3
# タイムアウトの調整
q mcp config set aws-documentation timeout 45000
定期メンテナンス
# AWS MCPサーバーの更新
npm update -g @aws/aws-documentation-mcp-server
# 設定の検証
q mcp validate --config aws-documentation
# ログのクリーンアップ
q mcp logs clean --older-than 30d
14.8 実践的なAWSワークフロー例
インフラ設計フェーズ
q chat --enable-mcp
> "新しいマイクロサービスアーキテクチャの設計を開始します。
> 以下の要件に基づいて、AWSサービスの選定と設計を支援してください:
> - 月間100万リクエスト
> - 99.9%の可用性要件
> - コスト最適化重視
>
> aws-documentationサーバーから関連するベストプラクティスを
> 調査し、推奨アーキテクチャを提案してください"
開発フェーズ
> "Lambda関数の開発で以下の課題があります:
> - コールドスタート時間の最適化
> - メモリ使用量の効率化
> - ログ出力のベストプラクティス
>
> 公式ドキュメントから最新の解決策を調査してください"
運用フェーズ
> "本番環境の監視とアラート設定について:
> - CloudWatchでの効果的なメトリクス設定
> - SNSを使った通知体系
> - コスト異常検知の自動化
>
> これらの実装手順を公式ドキュメントベースで提供してください"
15. 実践的な活用例
14.1 プロジェクト管理ワークフロー
# プロジェクト開始
q mcp context save project-init
q mcp load filesystem-server --path $PWD
q mcp load git-server --repository $PWD
# 日常的な開発作業
q chat "今日の作業を開始します。変更されたファイルを確認してください"
# コードレビュー
q chat "プルリクエスト#123をレビューしてください"
# プロジェクト終了
q mcp context save project-end-$(date +%Y%m%d)
14.2 データ分析ワークフロー
# データソースの接続
q mcp load database-server --config production.db
q mcp load api-server --endpoint https://api.example.com
# 分析実行
q chat "売上データの月次トレンドを分析してください"
q chat "顧客セグメンテーション分析を実行してください"
14.3 DevOpsワークフロー
# インフラ監視
q mcp load monitoring-server --config k8s-cluster
q chat "クラスターの健全性を確認してください"
# デプロイメント支援
q chat "ステージング環境への自動デプロイを準備してください"
まとめ
Amazon Q CLIのMCP機能は、AI駆動の開発とシステム管理を実現する強力なツールです。この記事で紹介した手順を通じて:
- 基本的なMCP操作をマスターし
- カスタムサーバーの開発能力を身につけ
- セキュリティベストプラクティスを適用し
- 効率的なワークフローを構築する
ことができます。
まずは基本的なファイルシステムサーバーやGitサーバーから始めて、徐々にカスタムサーバーの開発に挑戦することをお勧めします。MCPの真の力は、あなたの特定のニーズに合わせてカスタマイズされたときに発揮されます。
コメント