0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

MCPについてちょっと理解してpythonで簡単なMCPサーバを作ってみましたが、どうも公式リファレンスを見る限りSpringを使っても作れそう。
既存のSpringプロジェクトに組み込みなどできないかな~と思い簡単なサンプルを作ってみました。

やること

  • Springを使って四則演算のできるMCPサーバを作成
  • VSCode経由でCopilot Chatから応答を試す

参考サイト

早速製造

公式サイトの手順にのっとって進めていきます。

新規Springプロジェクトの作成

VSCode上の拡張機能でサクサク進めていきます。
コマンドパレットを開き、Spring Initializr: Create a Maven Projectから新規Mavenプロジェクトを作成。
リファレンスによれば下記を満たしていればいいみたい。依存関係は後で追加するので、いったんなにも追加せずに作成しました。

image.png

依存関係の追加

リファレンスに書いているままだとバージョンがないと怒られてしまったので、MVN Repositoryをもとに変更。
以下を追加しました。

pom.xml
    <dependency>
        <groupId>org.springframework.ai</groupId>
    	<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
    	<version>1.0.0-M6</version>
	</dependency>

プロパティファイルへの追記

ここはリファレンス通り、下記を追加しています。ただ試すだけなら不要です。

application.properties
# Springが起動するときのターミナル上のバナーを無効にする
spring.main.bannerMode=off
# コンソールのログパターンの設定。ここでは無効に
logging.pattern.console=

四則演算部分の作成

四則演算ができるよう、簡単なサービスクラスを作成します。

CalculatorService.java
@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サーバの関数として認識させ使えるようにするために、メインクラスでビルダーを呼び出します。

SpringAiMcpApplication.java
@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で使えるよう、クライアント側も設定していきます。

  1. プロジェクトのルートで.vscodeディレクトリを作成
  2. ディレクトリ内でsetting.jsonを作成
  3. 以下の設定を追加
setting.json
{
  "mcp": {
    "servers": {
      "spring-ai-mcp": {
        "command": "java",
        "args": [
          "-Dspring.ai.mcp.server.stdio=true",
          "-jar",
          "{jarファイルまでの絶対パス}"
        ]
      }
    }
  }
}

サーバの起動

  1. Ctrl + Shift + Pでコマンドパレットを呼び出し、MCPサーバリストを選択
    image.png
  2. 先ほど作成したspring-ai-mcpを確認し、クリックしてサーバを起動
    image.png
  3. 以下の形で起動できればOK
    image.png
    Discoverd 4 toolsというので、4関数分ちゃんとToolとして読み込まれていそうです。

実行

image.png
ばっちり用意された関数を使えていますね!

感想

java/python両方で作ってみましたが、やっぱりpythonのほうが楽ではあるな...というのが感想です。パッケージ周りがめちゃくちゃ楽ですもんね...jarの作成とかも不要ですし...
ただこれだけで組み込めるのであれば、既存のものをMCP化したいときにあっさり切り替えできそうです。

リポジトリ

Springバージョン

Pythonバージョン

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?