ClineでMCPサーバ爆速作成 – ClaudeでCloudWatch Logsを解析する
目次
本記事では、VS Code拡張のClineを使って、Claude Desktop等からAWSのCloudWatch Logsを解析できるMCPサーバを構築しました。やっていることは簡単で、Clineに最近追加されたMCPサーバの作成機能を使っているだけで、複雑なことはしていません。参考になれば幸いです。
この記事でやること
- Claude DesktopをAWSから情報を取得できるように拡張
- 拡張機能の作成には、AIコーディングツールClineを使用
- 自然言語だけで簡単に作成可能
MCP (Model Context Protocol)とは?
MCPは、Anthropicが策定したAIモデルの通信プロトコルです。以下、公式の機械翻訳。
MCPは、アプリケーションがLLMにコンテキストを提供する方法を標準化するオープンプロトコルです。
MCPはAIアプリケーション用のUSB-Cポートのようなものと考えてください。USB-Cがデバイスを様々な周辺機器やアクセサリーに接続する標準的な方法を提供するように、MCPはAIモデルを異なるデータソースやツールに接続する標準的な方法を提供します。
MCPはAnthropicが考案したプロトコルですが、標準として策定されていますので、Claude Desktop以外のAIツールからもMCPサーバを使うことができます。
MCPサーバとは?
MCPサーバは、MCPプロトコルを実装したサーバです。
このサーバを介することで、AIモデルと各種サービスを連携させることができます。今回の例では、AWS CloudWatch LogsとClaude Desktopを接続するためのMCPサーバを作成します。
Clineとは?
- VS Codeの拡張機能
- CLIとエディターを使用できる AI アシスタント
- ファイルの作成と編集、大規模なプロジェクトの調査、ブラウザーの使用、ターミナル コマンドの実行などを、AIが主体になってやってくれる(リスクのある操作は承認方式)
- これにより、複雑なソフトウェア開発タスクを段階的に処理できる
- チャット機能、補完機能はない。そのため、GitHub Copilotなどと併用されることが多い。
- MCPによる拡張が可能
- Clineは、MCPを使ってコンテキストにアクセスすることもできるし、そのためのMCPサーバを作ることもできる
世の中には、AIアシスタント機能を持つツールが他にもあります。(Cursorなど)
これらのツールは、裏では同じAIモデルを使っていたりするのですが、そのAIモデルに渡すプロンプトに、ツールごとに工夫が施されており、それにより微妙に得意分野が変わってくるようです。
Clineで、MCPサーバを作ろう
今回は例として、CloudWatch Logsからログを取得するMCPサーバを作ります。
このMCPサーバの利用ケース
- AWS上で何かしらのトラブルが発生
- ユーザはCloudWatch Logsのログを調べるようにAIチャット(ここではClaude Desktop)に指示する。
- AIがログを解析してトラブルシュートを行う
Clineに「add a tool」と指示する
始め方は簡単。Clineに「add a tool」と指示してください。(モデルはDeepSeek V3を使っています)
Clineが定型文の質問をしてきます。
以下、Clineでのやりとり。
`>`でインデントしている箇所は、ユーザプロンプト。
--
ユーザーが新しいツールを追加したいとのことです。まず、どのようなツールが必要かを明確にする必要があります。MCPサーバーを作成する必要があるかどうか、または既存のツールで対応できるかを判断するために、具体的な要件を確認します。
以下の情報が必要です:
1. 追加したいツールの具体的な機能
2. そのツールが使用するAPIや外部サービス(必要な場合)
3. ツールの使用例や想定される入力/出力
これらの情報を確認するために、ask_followup_questionツールを使用します。
どのようなツールを追加したいですか?具体的な機能や使用例を教えてください。例えば、天気情報を取得するツール、データベース操作ツール、API連携ツールなど、どのような種類のツールが必要か具体的に説明をお願いします。
--
> 1. 新しいツールの目的と機能
> AWSのCloudWatch Logsを解析して、エラーや問題を特定し、原因特定や解決のための、考察や助言を行う。
> そのために、ログの一覧、取得が行える必要がある。
>
> ログの一覧からロググループ群の名前を取得して、名前から目的のログを推測できるはずです。そのログの内容を取得して、調査に使えるはずです。
>
> 2. 必要な入力パラメータ
> 一覧機能については絞り込みのための条件
> 取得機能についてはロググループの一意識別子
>
> 3. 期待する出力形式
> JSON
--
ユーザーがAWS CloudWatch Logsを操作するための新しいツールを追加したいようです。
AWS CloudWatch Logsを操作するためには、新しいMCPサーバーを作成する必要があります。
新しいMCPサーバーを作成するために必要な手順:
新しいディレクトリを作成
TypeScriptプロジェクトを初期化
AWS SDKをインストール
必要な環境変数を設定
ツールの実装
MCP設定ファイルに追加
まず、新しいMCPサーバーのディレクトリを作成し、プロジェクトを初期化します。
```
mkdir -p /Users/hoge/Documents/Cline/MCP/cloudwatch-server && cd /Users/hoge/Documents/Cline/MCP/cloudwatch-server && npm init -y && npm install @modelcontextprotocol/sdk aws-sdk dotenv typescript @types/node --save && npx tsc --init
```
--
> /Users/hoge/mcp/ディレクトリ以下に、このMCPサーバのプロジェクトフォルダを作って作業を開始してください。
--
ユーザーが指定した通り、/Users/hoge/mcp/ディレクトリ以下に新しいMCPサーバーのプロジェクトを作成します。cloudwatch-serverという名前でディレクトリを作成し、プロジェクトを初期化します。
```
mkdir -p /Users/hoge/mcp/cloudwatch-server && cd /Users/hoge/mcp/cloudwatch-server && npm init -y && npm install @modelcontextprotocol/sdk aws-sdk dotenv typescript @types/node --save && npx tsc --init
```
--
... 以降、やりとりが続く ...
対話形式で、開発を進めることができます。
ユーザはAIの提案を鵜呑みにするのではなく、適宜チャットで指示を与え、誤った方向に行かないようにサポートしましょう。
上の例では、コードの置き場所が気に入らなかったので、指示を与えて修正させました。
このような、ユーザでないとわからないことや、ハルシネーションもありますので、全自動とはいきません。
... ビルドが成功する ...
--
ビルドが成功したようです。次に、MCPサーバーを設定ファイルに追加します。まず、現在のMCP設定ファイルを確認します。
(Clineの設定ファイルの読み取り:承認が必要)
MCP設定ファイルを確認しました。新しいcloudwatch-serverを追加するために、設定ファイルを更新します。
MCP設定ファイルが更新され、cloudwatch-serverが追加されました。これで新しいツールが利用可能になります。以下のツールが追加されました:
1. list_log_groups - ロググループの一覧を取得
2. list_log_streams - ログストリームの一覧を取得
3. get_log_events - ログイベントを取得
これらのツールを使用して、CloudWatch Logsの分析が可能になります。例えば、以下のようにツールを使用できます:
- ロググループ一覧取得
list_log_groups
List CloudWatch Log Groups
```Arguments
{
"prefix": "/aws/lambda/",
"limit": 10
}
```
(この後、一度失敗しますが、MCPサーバの再起動をCline自身で実施し、データ取得が正常に動作する)
```
[
{
"logGroupName": "/aws/lambda/aws-controltower-NotificationForwarder",
"creationTime": 1717254580705,
"retentionInDays": 14,
"metricFilterCount": 0,
"arn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/aws-controltower-NotificationForwarder:*",
"storedBytes": 0,
"logGroupClass": "STANDARD",
"logGroupArn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/aws-controltower-NotificationForwarder"
},
{
"logGroupName": "/aws/lambda/hello",
"creationTime": 1725115602576,
"metricFilterCount": 0,
"arn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/hello:*",
"storedBytes": 294589,
"logGroupClass": "STANDARD",
"logGroupArn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/hello"
},
{
"logGroupName": "/aws/lambda/uppercase",
"creationTime": 1725192317970,
"metricFilterCount": 0,
"arn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/uppercase:*",
"storedBytes": 54526,
"logGroupClass": "STANDARD",
"logGroupArn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/uppercase"
}
]
```
list_log_groupsツールが正常に動作し、ロググループの一覧を取得できました。これでCloudWatch Logsを操作するためのツールが利用可能になりました。
以下のツールが利用可能です:
1. list_log_groups - ロググループの一覧を取得
2. list_log_streams - ログストリームの一覧を取得
3. get_log_events - ログイベントを取得
これらのツールを使用して、CloudWatch Logsの分析が可能になります。
Clineが自分でMCPサーバの起動、トラブルシュートを行い、最終的に動作確認を完遂させました。
Clineがやってくれたこと
- Clineが、次の機能を持つMCPサーバを作ってくれました。
- list_log_groups – ロググループの一覧を取得
- list_log_streams – ログストリームの一覧を取得
- get_log_events – ログイベントを取得
- ClineがCline自身の設定を修正し、MCPサーバをClineから使えるようになった
AIが書いたコードはこちら。
Claude DesktopでMCPサーバを使えるようにしよう
Claude Desktopから、CloudWatch Logsにアクセスできるように、作成したMCPサーバをClaude Desktopでも有効にしましょう。
Claude Desktopの設定ファイル(JSON)を数行書き換えるだけで使えるようになります。(参考リンク)
もちろん手動で書き換えてもいいのですが、せっかくなのでこの作業もClineにやらせてしまいましょう。
Claude Desktopの設定ファイルは通常、`~/Library/Application Support/Claude/claude_desktop_config.json`にあります。まず、現在の設定ファイルを読み取り、cloudwatch-serverの設定を追加する必要があります。
必要な手順は以下の通りです:
1. 現在のClaude Desktop設定ファイルを読み取る
2. cloudwatch-serverの設定を追加
3. 更新された設定ファイルを書き戻す
まず、現在の設定ファイルを読み取るためにread_fileツールを使用します。
(ファイル読み取りが行われる:承認が必要)
Error
Error reading file:
File not found: /Users/hoge/procurement/~/Library/Application Support/Claude/claude_desktop_config.json
パスに~を使用したためエラーが発生しました。~はホームディレクトリを表しますが、ツール使用時には展開されません。絶対パスを使用する必要があります。
Claude Desktopの設定ファイルは通常、`/Users/hoge/Library/Application Support/Claude/claude_desktop_config.json`にあります。再度、絶対パスを使用してファイルを読み取ります。
(ファイル読み取りが行われる:承認が必要)
現在のClaude Desktop設定ファイルには、filesystemとconfluence-serverの2つのMCPサーバー設定が含まれています。cloudwatch-serverを追加する必要があります。
cloudwatch-serverの設定は以下のようになります:
- command: "/Users/hoge/.volta/bin/node"
- args: ["/Users/hoge/mcp/cloudwatch-server/build/index.js"]
新しい設定を追加し、ファイルを更新します。
(ファイル更新が行われる:承認が必要)
Claude Desktopの設定ファイルを更新し、cloudwatch-serverのMCPサーバー設定を追加しました。これでClaude Desktopでもcloudwatch-serverが利用可能になります。
設定が完了しました。
Claude Desktopで作成したMCPサーバを使ってみよう
Claude Desktopを再起動して、新規チャットを開始して、ログ解析を指示してみましょう。
- プロンプト:AWS環境のuppercaseというLambdaが失敗しました。 原因をログから特定できますか?
- 事前準備:あらかじめ、uppercaseというLambda関数を意図的に失敗させておきました。(必要な引数ががあるが、それを与えずに実行した)
ちなみにログはCloudWatch Logs上にこのようにJSON形式で出ております。ERRORログが一件出ていて、その以前のDEBUGログで入力値を確認したり、どのような処理が実行されたか確認したりできそうですね。
さて、Claudeはどう答えるでしょうか。(モデルはClaude 3.5 Sonnetを使用)
> AWS環境のuppercaseというLambdaが失敗しました。 原因をログから特定できますか?
AWSのCloudWatchログを確認して、uppercaseというLambda関数の失敗の原因を調査してみましょう。まずはログを順を追って確認していきます。
ロググループが見つかりましたので、次にログストリームを確認します。
最新のログストリームを確認しましょう。
ログを分析したところ、以下のような問題が発生していることがわかりました:
1. エラーの種類:`java.lang.IllegalArgumentException`
2. エラーメッセージ:`Required value was null.`
3. 発生場所:`Handler.kt`の10行目、`uppercaseFunction`内
このエラーは、必要な値がnullだったことを示しています。具体的には:
1. Lambda関数は正常に起動し、APIGatewayからのリクエストを受け取っています。
2. 入力として `{"key1":"value1","key2":"value2","key3":"value3"}` というJSONデータを受け取っています。
3. しかし、処理中に必須パラメータのどれかがnullだったためエラーが発生しています。
解決策として以下を提案します:
1. `Handler.kt`の10行目付近のコードを確認し、どのパラメータが必須とされているか確認
2. 入力JSONに必須パラメータが含まれているか確認
3. パラメータの型が期待通りか確認
実際のコードを確認できれば、より具体的な解決策を提案できます。コードをご共有いただけますでしょうか?
ちゃんとログを読み取って、入力パラメータが不足していることを言い当てていますね。
意図通り動作しています!
まとめ
- ClineでMCPサーバを作成。「add a tool」でタスクを開始すれば、数回のやり取りでMCPサーバを作成できる
- MCPは標準のプロトコル。そのため、Clineで作ったMCPサーバは、そのままClaude Desktopでも使える
- もちろんAWSにアクセスするMCPサーバも作成可能