ClineでMCPサーバ爆速作成 – ClaudeでCloudWatch Logsを解析する

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サーバの利用ケース

  1. AWS上で何かしらのトラブルが発生
  2. ユーザはCloudWatch Logsのログを調べるようにAIチャット(ここではClaude Desktop)に指示する。
  3. 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サーバを作ってくれました。
    1. list_log_groups – ロググループの一覧を取得
    2. list_log_streams – ログストリームの一覧を取得
    3. 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サーバも作成可能
この記事をシェアする
著者:酒井亮太郎
シナモロール