概要
MCPについてちょっと理解してpythonで簡単なMCPサーバを作ってみましたが、どうも公式リファレンスを見る限りSpringを使っても作れそう。
既存のSpringプロジェクトに組み込みなどできないかな~と思い簡単なサンプルを作ってみました。
やること
- Springを使って四則演算のできるMCPサーバを作成
- VSCode経由でCopilot Chatから応答を試す
参考サイト
早速製造
公式サイトの手順にのっとって進めていきます。
新規Springプロジェクトの作成
VSCode上の拡張機能でサクサク進めていきます。
コマンドパレットを開き、Spring Initializr: Create a Maven Project
から新規Mavenプロジェクトを作成。
リファレンスによれば下記を満たしていればいいみたい。依存関係は後で追加するので、いったんなにも追加せずに作成しました。
依存関係の追加
リファレンスに書いているままだとバージョンがないと怒られてしまったので、MVN Repositoryをもとに変更。
以下を追加しました。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
プロパティファイルへの追記
ここはリファレンス通り、下記を追加しています。ただ試すだけなら不要です。
# Springが起動するときのターミナル上のバナーを無効にする
spring.main.bannerMode=off
# コンソールのログパターンの設定。ここでは無効に
logging.pattern.console=
四則演算部分の作成
四則演算ができるよう、簡単なサービスクラスを作成します。
@Service
public class CalculateService {
/**
* 足し算を行うメソッド
*
* @param a 加算する数値1
* @param b 加算する数値2
* @return a と b の合計
*/
@Tool(description = "足し算を行う")
public int add(int a, int b) {
return a + b;
}
/**
* 引き算を行うメソッド
*
* @param a 減算する数値1
* @param b 減算する数値2
* @return a から b を引いた結果
*/
@Tool(description = "引き算を行う")
public int subtract(int a, int b) {
return a - b;
}
/**
* 掛け算を行うメソッド
*
* @param a 乗算する数値1
* @param b 乗算する数値2
* @return a と b の積
*/
@Tool(description = "掛け算を行う")
public int multiply(int a, int b) {
return a * b;
}
/**
* 割り算を行うメソッド
*
* @param a 被除数
* @param b 除数
* @return a を b で割った結果
* @throws IllegalArgumentException b が 0 の場合に発生
*/
@Tool(description = "割り算を行う")
public double divide(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("Division by zero is not allowed.");
}
return (double) a / b;
}
}
MCPのToolとして振る舞わせるためには、@Tool
のアノテーションをつけるだけでいいそうです。
メインクラスの更新
作成したToolをMCPサーバの関数として認識させ使えるようにするために、メインクラスでビルダーを呼び出します。
@SpringBootApplication
public class SpringAiMcpApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAiMcpApplication.class, args);
}
// 以下追記
@Bean
ToolCallbackProvider weatherTools(CalculateService calculateService) {
return MethodToolCallbackProvider.builder().toolObjects(calculateService).build();
}
}
ビルド
以下コマンドで依存関係のインストール&jarファイルのビルドを行います。
これで、プロジェクトディレクトリ内/target
ディレクトリに、jarファイルが作成されているはずです。
.\mvnw clean install
VSCodeの設定
Copilot Chatで使えるよう、クライアント側も設定していきます。
- プロジェクトのルートで
.vscode
ディレクトリを作成 - ディレクトリ内で
setting.json
を作成 - 以下の設定を追加
{
"mcp": {
"servers": {
"spring-ai-mcp": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-jar",
"{jarファイルまでの絶対パス}"
]
}
}
}
}
サーバの起動
-
Ctrl + Shift + P
でコマンドパレットを呼び出し、MCPサーバリストを選択
- 先ほど作成した
spring-ai-mcp
を確認し、クリックしてサーバを起動
- 以下の形で起動できればOK
Discoverd 4 tools
というので、4関数分ちゃんとToolとして読み込まれていそうです。
実行
感想
java/python両方で作ってみましたが、やっぱりpythonのほうが楽ではあるな...というのが感想です。パッケージ周りがめちゃくちゃ楽ですもんね...jarの作成とかも不要ですし...
ただこれだけで組み込めるのであれば、既存のものをMCP化したいときにあっさり切り替えできそうです。
リポジトリ
Springバージョン
Pythonバージョン