1
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?

Java × Spring AI で MCP サーバーを構築する手順まとめ(stdio 接続版)

1
Last updated at Posted at 2026-02-09

Spring AI には MCP(Model Context Protocol)サーバー機能が用意されており、AI クライアントから外部ツールを呼び出す仕組みを簡単に構築できます。

本記事では、以下のリポジトリをベースにして、

👉 Java で stdio 接続型 MCP サーバーを構築する手順

を整理して解説します。

このサーバーは、

  • MCP JSON-RPC でツールを公開
  • cotogoto の SSE API へ会話リクエストを中継
  • MCP クライアントから標準入出力(stdio)で接続

という構成になっています。

なお今回利用する cotogoto は以下の公式サイトです👇
👉 https://cotogoto.ai/

MCP とは

MCP(Model Context Protocol)は、

👉 AI クライアントが外部ツールを呼び出すための標準プロトコル

です。

例えば次の用途で利用されます。

  • AI が外部 API を呼び出す
  • AI がデータベースを検索する
  • AI が別の AI サービスへメッセージを送る

MCP を利用することで、AI と外部システムの連携を JSON-RPC 形式で統一できます。

1. システム構成

[MCP Client]
      ↓ stdio(JSON-RPC)
[MCP Server (Spring AI)]
      ↓ SSE
[cotogoto API]

このプロジェクトは stdio 接続前提で動作します。

2. Maven 依存関係(必須)

Spring AI MCP サーバーを構築するために、以下の 2 つの依存関係を追加します。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>

spring-boot-starter-web の役割

この依存関係は、Spring Boot に以下の機能を追加します。

  • Spring MVC(Web アプリケーション基盤)
  • JSON シリアライズ
  • DispatcherServlet

MCP Server WebMVC は Spring MVC を前提として動作するため、
👉 必須の基盤ライブラリ になります。

spring-ai-starter-mcp-server-webmvc の役割

このスターターを追加すると、Spring AI が次を自動構築します。

  • MCP JSON-RPC サーバー
  • Tool アノテーション解析
  • MCP エンドポイント公開
  • JSON-RPC メッセージ処理

つまり、

👉 Java で MCP サーバーを実装するための コアライブラリ です。

WebMVC 版を採用する理由

Spring AI MCP には複数の実装があります。

Starter 特徴
webmvc 同期処理に強い
webflux Reactive 処理

本プロジェクトでは、

  • Spring Boot 標準構成との相性が良い
  • SYNC モードとの親和性が高い

ため WebMVC 版を採用しています。

stdio 接続との関係

WebMVC を利用しても、次の設定により通信方式を stdio に切り替えられます。

spring.ai.mcp.server.stdio: true

3. 前提条件

Java

Java 17 以上

cotogoto API トークン

環境変数で渡します。

4. 設定ファイル

application.yaml

spring:
  ai:
    mcp:
      server:
        type: SYNC
        stdio: true

cotogoto:
  upstream:
    conversations-url: https://app.cotogoto.ai/webapi/api/mcp/conversations
    api-token: ${COTOGOTO_API_KEY}

MCP 動作モード

SYNC

同期型ツール実行モードです。

stdio

MCP クライアントと標準入出力で通信します。

5. Tool 実装

Spring AI MCP では、以下のアノテーションでツールを公開できます。

@Tool(
    name = "conversation",
    description = "cotogoto へメッセージを送信"
)
public String conversation(String message) {
    return relayService.send(message);
}

Spring AI が自動で行うこと

  • Tool メソッドの公開
  • JSON-RPC の callTool との紐付け
  • 引数の自動変換

6. ビルド

./mvnw package

7. MCP サーバー起動(stdio)

stdio 接続では、

👉 MCP クライアントが Java プロセスを起動します。

手動起動例:

java -jar target/cotogoto-mcp-server.jar

8. MCP クライアント設定

stdio 接続では、mcp.json にプロセス起動を定義します。
環境によっては JVM のデフォルト文字コードが UTF-8 以外になり、ログやレスポンスが文字化けすることがあります。
その場合は mcp.json の起動コマンドに -Dfile.encoding=UTF-8 を追加して、
JVM の文字コードを明示的に UTF-8 に固定してください。

{
  "mcpServers": {
    "cotogoto": {
      "command": "java",
      "args": [
        "-Dfile.encoding=UTF-8",
        "-jar",
        "cotogoto-mcp-server.jar"
      ],
      "env": {
        "COTOGOTO_API_KEY": "your-api-token"
      }
    }
  }
}

注意点

ツール引数は mcp.json に書かない

ツール引数は 実行時に送信されます

API トークンは環境変数で渡す

セキュリティ確保のためです。

9. MCP 通信フロー

① MCP クライアントがサーバープロセスを起動
② listTools を送信
③ ツール一覧を取得
④ callTool を送信
⑤ cotogoto SSE API へ転送
⑥ レスポンスを返却

10. HTTP 接続との違い(補足)

stdio 接続(本記事)

  • プロセス直結通信
  • MCP 標準方式

HTTP 接続

  • /mcp エンドポイント経由
  • curl などで検証可能

よくあるミス

👉 stdio 設定なのに HTTP で疎通確認してしまう
→ 接続は成立しません。

まとめ

本プロジェクトは、

👉 Spring Boot + Spring AI MCP Server WebMVC
👉 stdio 接続型 MCP サーバー

の最小構成です。

特徴:

  • Maven 依存を追加するだけで MCP サーバー構築可能
  • Tool アノテーションで簡単に公開
  • stdio 通信で MCP クライアントと連携
  • SSE で cotogoto API と接続

Java で MCP を実装する際のベースとして非常に参考になります。

参考リンク

1
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
1
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?