MCPサーバーを構築してみた

Understand

はじめに

最近は利用している各種ツールをAIと連携し、一元化を目指す動きが活発になっています。なかでも、MCPサーバーを使用した連携が注目されています。今回はこのMCPサーバーを構築し、AIチャットからUnderstandを動作させる方法を試してみました。

MCPとは

MCP(Model Context Protocol)とは、AIと外部アプリケーションを接続できるように設定されている標準化されたプロトコルです。外部アプリケーション側がMCPサーバーという形でAPIを公開することで、AIエージェントは問い合わせ内容に応じて外部アプリケーションを実行し、結果を得ることができるようになります。

MCPサーバーの作成

今回は、UnderstandのAPIを利用して、AIからの解析、メトリクスの取得指示に対応できるようなMCPサーバーのサンプルを作成しました。AIエージェントはGitHub Copilotを使用しました。
作成したサンプルはこちらです。
※提供するスクリプトに関しては保守サポート外となりますため、動作に関しては保証いたしません。

Understandとの連携イメージ

簡単に記載するとこのようなイメージとなります。ユーザーがAIチャットにて質問したことに関し、GitHub Copilot(Agentモード)が回答します。回答の際、AIは必要に応じてMCPサーバーに公開されているツールを使用してデータを取得します。

MCPサーバーモジュール

MCPサーバーを構築するためのPythonモジュールを使用します。今回はFastMCPを使用して作成しました。FastMCP:jlowin/fastmcp: 🚀 The fast, Pythonic way to build MCP servers and clients
Pythonパッケージとして公開されていますので、インストールはpipから可能です。

pip install fastmcp

スクリプトの作成

MCPサーバーはPythonスクリプト1つで完結可能です。サンプルからget_version関数について確認します。

@mcp.toolデコレーター

こちらがAIエージェントに公開する関数名とその説明文を指定するデコレーターです。name引数に実際に動作させたい関数名を、description引数にAIに理解させたい文章を記載します。

ここで重要なことは、descriptionに関数の使いどころ、どんなデータが入力として必要か、どんなデータを返すかを正しく記載することです。ここの記載によってAIエージェントが適切なタイミングで関数を使用してくれます。

get_version関数

こちらは実際の関数です。Understand API機能を用いて値を返す関数を定義します。

メイン

実行時にmcp.runをすることで、サーバーとして動作します。
詳細はFastMCPのReadmeなどを確認してください。

MCPサーバーの登録

GitHub Copilotに対しMCPサーバーを登録する必要があります。簡単な構成ファイルをsettings.jsonへ追記することで登録可能です。

  1. VSCodeの設定画面より、mcpと入力します。
  2. settings.jsonで編集を選択します。
  3. 以下のように設定します。
    ・command:python.exe、またはupython.exeを指定します。
     PythonのバージョンはUnderstandのpythonバージョンに合わせてください。(7.0ではPython3.13)
    ・args: 作成したPythonファイルの場所を指定します。
  4. 「起動」ボタンを押します。実行中と表示されれば完了です。

MCPサーバーを使ってみる

実際に使ってみたいと思います。今回のサンプルでは、「解析の実行」、「バージョンの確認」、「メトリクスの取得」「関数コードの取得」を用意しています。

使用する際は、GitHub CopilotのChat画面から、Agentモードに変更してください。

・解析の実行

入力プロンプト:現在開いているUnderstandプロジェクトを解析してデータを最新にしてください。

バージョンの確認

プロンプト:プロジェクトのバージョンを確認してください。

・メトリクスの取得

プロンプト:chimaeraのサイクロマティック複雑度はいくつですか?

・関数コードの取得

プロンプト:関数regsubの中にある「register」の単語の数を数えてください。

まとめ

ここでは簡単なプロンプトの実行を試しましたが、実務レベルではスクリプトを拡張してUnderstandプロジェクトの作成から解析、影響分析、レポートやドキュメントの出力などを一貫してAIに実行させることも可能です。
UnderstandをAIで利用する強みはそのデータの正確性です。解析データの出力をUnderstandがおこなうことで、AIの弱みである曖昧さを回避し、より高度で素早い開発を実現することができると考えています。