AWS MCP ServerのGit Repo Research MCP Serverを試してみた

AWS MCP ServerのGit Repo Research MCP Serverを試してみた

Clock Icon2025.05.16

お疲れさまです。とーちです。

こちらの記事でも紹介されているように、AWS MCP Serverがいくつか追加されていました。今回はその中でも、Git Repo Research MCP Serverを実際に触って、どんなことができるのか試してみました。

Git Repo Research MCP Serverとは

まずは、このGit Repo Research MCP Serverの概要です。公式のReadmeはこちらにあります。

https://github.com/awslabs/mcp/blob/main/src/git-repo-research-mcp-server/README.md

このドキュメントによると、このツールはGitリポジトリをAmazon BedrockとFAISSを使って、意味的に検索したり調査したりできるようにするMCPサーバーのようです。

具体的には、以下のような機能を持っているとのことです。

主な機能

  • Gitリポジトリのインデックス化
    • ローカルまたはリモートのGitリポジトリを検索可能なFAISSインデックスに変換
    • インデックス化する際にファイルパターンの包含/除外を指定可能
  • 意味検索(セマンティック検索)
    • 自然言語でリポジトリ内のコードや内容を検索
    • 関連性の高いコードスニペットを取得
  • リポジトリ概要の取得
    • ディレクトリ構造の一覧表示
    • READMEなどの重要ファイルの特定
    • インデックス化されたリポジトリの一覧と詳細情報の取得
  • GitHubリポジトリ検索
    • キーワードに基づいてAWS関連組織内のリポジトリ(aws-samples, aws-solutions-library-samples, awslabsなど)を検索
  • ファイルアクセス
    • リポジトリ内のファイルやディレクトリの内容にアクセス
    • テキストファイルと画像ファイルの両方をサポート
  • インデックス管理
    • 不要になったインデックス化されたリポジトリの削除

一言でまとめると、GitHubリポジトリを検索し、検索したリポジトリの内容をインデックス化、インデックス化されたリポジトリに対して特定の実装パターン等を自然言語で検索・質問したり、内容を把握するのに役立つMCPサーバといえそうです。

FAISSとは

ちなみにFAISSとはなんなのか、気になったので少し調べてみました。
調べたところ、Facebook AI Similarity Searchの略称のようで、Facebookが開発した高速な類似検索ライブラリ(データ間の「似ている度合い」に基づいて検索を行うためのライブラリ)です。画像やテキストなどのデータを数値ベクトルとして表現し、それらの中から似ているものを効率的に見つけ出すことができます。

https://engineering.fb.com/2017/03/29/data-infrastructure/faiss-a-library-for-efficient-similarity-search/

上記の説明を見るとPinecone等のベクトルDBと何が違うの?と気になるところですが、FAISSが提供するのはベクトル検索のアルゴリズムとデータ構造で、データ永続化やトランザクション管理等のデータベース自体としての機能は持っていないようです。おそらく、ベクトルDBの内部で使用されるロジックといった感じなんでしょうか。以下の記事に詳しく書いてあったのでこちらもご参照ください。

最近話題のVector Searchを実現するFaissって何? #1|masuidrive

それでは実際に使ってみましょう

Git Repo Research MCP Serverの設定

Git Repo Research MCP Serverは必要なものがいくつかあり、私自身も設定する中で多少詰まる部分がありました。

まず前提条件は以下のようになっています

  • Python 3.12以上
  • Node.jsも必要
  • uvパッケージインストーラーがインストールされていること
  • Amazon Bedrock APIにアクセスできるIAMロール等の認証情報が ~/.aws/config に設定されていること
  • (オプション)GitHubトークンがあること

まず Amazon Bedrock APIにアクセスできるIAMロール等の認証情報 ですが、以下のような記載のみで具体的な権限については見つけられませんでした。

Ensure your AWS account has access to embedding models like Titan Embeddings

具体的な権限がわからなかったので、私が試した際には、us-west-2(オレゴン)で、利用可能なモデルを全て使えるようにした状態で実施しました。上記の説明を読む限りではEmbeddingsができるモデルへのアクセス権さえあれば問題なさそうです。
また、IAM権限としてはAdministratorAccess 権限を付けて実施しています。

python, Node.jsのバージョンについては以下の通りです。

> python --version
Python 3.13.2
> node --version
v22.14.0

GitHubトークンについてはGitHubのリポジトリ検索をする際にGithubのレート制限に引っかかりづらくするために使用するようなので必須ではありません。
この状態でお好みのMCPクライアントの設定ファイルに以下を追加します。

{
  "mcpServers": {
    "awslabs.git-repo-research-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.git-repo-research-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "<AWS認証プロファイル名を指定>",
        "AWS_REGION": "us-west-2",
        "FASTMCP_LOG_LEVEL": "ERROR",
        "HOME": "<ホームディレクトリを指定>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

今回、私はClineをMCPクライアントとして使ったのですが、create_research_repository ツール内でBedrockAPIを実行するためのAWS認証情報を使用する箇所でエラーが出ました。
Cline曰く、「$HOME is not defined」というエラーが出ているとのことだったので、上記のMCPサーバ設定ファイルのenvの箇所にHOME環境変数を追加しています。なお値は、echo $HOMEで確認できた値を入れました。

試してみる

GitHubリポジトリの検索

さて、それではいくつか実際にツールを実行してみます。
まずはGithubリポジトリの検索をしてみます。READMEには、デフォルトではAWS関連組織内のリポジトリ(aws-samples, aws-solutions-library-samples, awslabsなど)に限定した検索ができますとありますが、他の組織を追加する方法についてはドキュメントに書いておらず分かりませんでした。

MCPサーバに関するリポジトリを検索して と聞いてみました。

ツールとしては search_research_repository_suggestions を使用するようです。

alt text

すると、以下のような回答が返ってきました。

まず、MCPサーバー関連のリポジトリ検索結果を分析します。上位5件のリポジトリがAWSの各組織から見つかりました。各リポジトリの特徴を整理し、ユーザーが求める情報に合致するか確認します。

最もスター数の多いawslabs/run-model-context-protocol-servers-with-aws-lambdaは、AWS Lambda上でのMCPサーバー実行方法を提供しています。aws-samplesのデモ集やセキュリティガイドも含まれ、多様なユースケースをカバーしています。各リポジトリの更新日時、ライセンス、課題数などを比較し、信頼性と活発さを評価します。

結果を簡潔にまとめ、主要なリポジトリの特徴を日本語で説明します。ユーザーがさらに詳細な情報を必要とする場合に備え、追加アクションの可能性を考慮しつつ、現時点でタスクが完了したと判断します。
</think>

MCPサーバ関連のGitHubリポジトリ検索結果:

1. **awslabs/run-model-context-protocol-servers-with-aws-lambda** (スター156)
   - AWS LambdaでMCPサーバを実行する方法
   - Python製、Apache 2.0ライセンス
   - 最新更新:2025年5月16日

2. **aws-samples/Sample-Model-Context-Protocol-Demos** (スター48)
   - AWSとMCP連携のサンプル集
   - トピック:Bedrock、GenAI、MCPクライアント/サーバ
   - MIT No Attributionライセンス

3. **awslabs/Log-Analyzer-with-MCP** (スター44)
   - CloudWatchログ分析用MCPサーバ
   - AWS監視データへのAIアクセスを提供

4. **aws-samples/sample-agents-with-nova-act-and-mcp** (スター38)
   - Amazon Nova ActとMCPを組み合わせたエージェント開発例
   - Web操作可能なAIエージェント構築

5. **ガイダンス:AWSでのMCPサーバデプロイ** (スター6)
   - コンテナ化された安全なMCP環境構築
   - OAuth 2.0認証と多層防御を実装

詳細情報が必要なリポジトリがあれば、リポジトリURLを指定してドキュメント取得ツールを使用できます。

なるほどちゃんと検索出来ているようです。

リポジトリのインデックス化

次に、awslabs/Log-Analyzer-with-MCP のリポジトリをインデックス化できますか? と聞いてみました。create_research_repository ツールが動きました。

ちなみに、awslabs/Log-Analyzer-with-MCP のリポジトリURLはこちらです。

https://github.com/awslabs/Log-Analyzer-with-MCP

alt text

しばらくすると、インデックス化が正常に完了した旨のメッセージが表示されました。

alt text

いくつかのリポジトリで試したのですが、コードが多そうなリポジトリでは、以下のようにタイムアウトとなってインデックス化がうまくできませんでした。

alt text

インデックス化が完了した際に次の操作例として以下の3つが提示されていました

  • リポジトリ要約の取得
  • ファイル内容の閲覧(例:README.md)
  • セマンティック検索の実行

なお、セマンティック検索とは、従来のキーワード一致型の検索ではなく、検索クエリの意味や意図を理解し、関連性の高い結果を返す検索技術とのことで、例えば「一日中使えるバッテリー性能のビジネスPC」と検索するとその要件に応じたPCを結果として出してくれるといったことができるようです。
上記の3つを試してみます。

リポジトリ内容の要約

まずはリポジトリの内容を要約して教えて と聞いてみました。
以下のようにインデックス化されたデータはMCPサーバの リソース として格納されるようで、リソースを閲覧しています。

alt text

そして、返ってきた回答がこちらです。

README.mdの内容を分析し、主要なポイントを抽出します。プロジェクトの目的はAWS CloudWatchログの分析を支援するMCPサーバーの提供です。主な機能としてログ検索、要約生成、エラーパターン検出、他AWSサービスとのログ相関分析が挙げられています。

アーキテクチャ図(Log-Analyzer-with-MCP-arch.png)の存在を確認しましたが、現在のレスポンスには含まれていません。ユーザーが詳細なアーキテクチャを必要とする場合、access_fileツールで画像データを取得する必要があります。

ドキュメンテーションリンク(features.md, usage.mdなど)から詳細情報が得られますが、現時点でユーザーは要約を求めているため、READMEの内容を基に簡潔にまとめます。セキュリティ情報やライセンス(Apache-2.0)も重要なポイントとして含める必要があります。

Task Completed

awslabs/Log-Analyzer-with-MCPリポジトリの要約:

■ 概要

- AWS CloudWatch Logs分析用のMCPサーバー
- AIアシスタント(Claude等)と連携可能
- ログ分析・検索・相関関係解析を標準化

■ 主な機能 ✓ ロググループの閲覧/検索 ✓ CloudWatch Logs Insightsクエリ構文対応 ✓ ログ要約生成とエラーパターン検出 ✓ 複数AWSサービス間のログ相関分析 ✓ AI最適化ツール(Claude連携)

■ 技術構成

- Pythonベース(uvパッケージ管理)
- MCPプロトコル準拠
- モジュラーアーキテクチャ(詳細はarchitecture.md参照)

■ 必要条件

- AWSアカウント(CloudWatch Logsアクセス権)
- uvパッケージマネージャー
- AWS認証情報の設定

■ ドキュメンテーション

- 機能詳細:features.md
- 使用方法:usage.md
- AWS設定:aws-config.md
- トラブルシューティング:troubleshooting.md

■ ライセンス Apache-2.0 License

実は、この awslabs/Log-Analyzer-with-MCP というリポジトリの存在は今回初めて知ったのですが、なかなか便利そうなMCPサーバーですね。

ファイル内容の閲覧

次に、ファイル内容を閲覧してみます。なお、リポジトリをローカルにcloneしたりはしていません。

.gitignore ファイルの内容を確認し教えて と質問してみました。

ちゃんと内容を取得できているようです

alt text

以下のように回答してくれました。

awslabs/Log-Analyzer-with-MCPリポジトリの.gitignore内容:

■ 主な除外対象
1. Python関連:
   - キャッシュディレクトリ(__pycache__/, .pytest_cache/)
   - ビルド成果物(dist/, build/, *.egg-info)
   - 仮想環境(.venv/, venv/, env/)

2. 開発環境:
   - IDE設定(.vscode/, .idea/)
   - 一時ファイル(*.swp, *.swo, *~)

3. テスト関連:
   - カバレッジレポート(.coverage, htmlcov/)
   - テストキャッシュ(.tox/, .nox/)

4. ログファイル:
   - 各種ログ(*.log, logs/, log/)

5. OS固有ファイル:
   - macOSの.DS_Store
   - WindowsのThumbs.db

6. 環境変数ファイル:
   - .env, .env.localなど

7. その他:
   - Jupyter Notebookチェックポイント
   - 一時ファイル(*.tmp, *.bak)

■ 特徴
- Pythonプロジェクト向けの標準設定
- マルチプラットフォーム対応(OS固有ファイルの除外)
- クリーンなリポジトリ維持のための包括的設定

ローカルになくてもファイルの中身が確認できるのは、ちょっとした確認の際に便利そうです。

セマンティック検索

最後にセマンティック検索を試してみたのですが、これは中々うまくいかず、セマンティック検索が成功した例をお見せ出来ないのですが、試した過程は共有しようと思います。

awslabs_Log-Analyzer-with-MCPで、時間範囲を指定してCloudWatch Logsを検索する実装をしているのはどの部分ですか?」と聞いてみました。

alt text

セマンティック検索は試みたようですが、resultsが空になってますね。

この後、LLMが自動で英語に直したメッセージで再度セマンティック検索をやっていますが、これも失敗しています。

alt text

最終的には以下の通りセマンティック検索を諦め、直接ファイルの中身を取得していました。

まず、セマンティック検索で結果が得られなかったため、別のアプローチを検討します。リポジトリのファイル構造を直接調査するために、MCPサーバーの「access_file」ツールを使用します。具体的には、ログ処理に関連する可能性の高いファイルを探索します。

1. リポジトリのサマリー情報を取得するため、「repositories://awslabs_Log-Analyzer-with-MCP/summary」リソースにアクセスします。これにより、ディレクトリ構造や主要なファイルを把握します。

2. サマリー情報から、CloudWatch Logs関連の実装が含まれている可能性が高いファイル(例:`src/log_processor.py`や`handlers/cloudwatch_handler.py`)を特定します。

3. 特定したファイルに対して「access_file」ツールを使用し、直接ファイル内容を取得します。`filter_log_events`メソッドや`startTime`/`endTime`パラメータの使用箇所を検索します。

4. ファイル内容から該当するコードブロックを抽出し、ユーザーに提示します。例えば、AWS SDKの`boto3`クライアントを使用したCloudWatch Logsへの問い合わせ部分をハイライトします。

5. 時間範囲指定の実装が複数のファイルに分散している場合、関連する全てのコード部分をまとめて説明します。必要に応じて、タイムスタンプ変換処理や日時フォーマットの設定箇所も併せて提示します。

その結果、一応以下のように回答は返せていました。

loudWatch Logsの時間範囲指定機能は、`cloudwatch_logs_resource.py`の`get_recent_errors`メソッドに実装されています。主な実装箇所は以下の通りです:

1. 時間範囲計算部分:


end_time = int(datetime.now().timestamp() * 1000)
start_time = int((datetime.now() - timedelta(hours=hours)).timestamp() * 1000)


2. filter_log_events API呼び出し:


response = self.logs_client.filter_log_events(
    logGroupName=log_group_name,
    filterPattern=filter_pattern,
    startTime=start_time,  # 開始時刻(UNIXタイムスタンプ・ミリ秒)
    endTime=end_time,      # 終了時刻(UNIXタイムスタンプ・ミリ秒)
    limit=100,
)


この実装では:

- `hours`パラメータで検索時間幅を指定(デフォルト24時間)
- 現在時刻から逆算して開始/終了時刻をミリ秒単位で設定
- エラーパターン(ERROR/Exceptionなど)を含むログを検索
- 最大100件の結果を取得

時間範囲指定の核心部分は`startTime`と`endTime`パラメータへのUNIXタイムスタンプ(ミリ秒)の設定です。この値は`datetime`モジュールを使用して計算され、CloudWatch Logs APIに渡されます。

まとめ

ということで、今回はAWS MCP Serversに新しく追加されたGit Repo Research MCP Serverを試してみました。

上記の他にリポジトリを直接cloneし、ローカルに持ってきたリポジトリをインデックス化することもできるので、任意のリポジトリを調査させることが可能です。リポジトリ概要やコードを解説させたりできることから、新しくプロジェクトに参画したメンバーがプロダクトの全体感を知るのにも役立ちそうですね。

以上、とーちでした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.