MCP サーバー Boot スターター
Spring AI MCP (モデルコンテキストプロトコル) サーバー Boot スターターは、Spring Boot アプリケーションで MCP サーバーをセットアップするための自動構成を提供します。これにより、MCP サーバー機能と Spring Boot の自動構成システムをシームレスに統合できます。
MCP サーバー Boot スターターは以下を提供します。
MCP サーバーコンポーネントの自動構成
同期と非同期の両方の動作モードをサポート
複数のトランスポート層オプション
柔軟なツール、リソース、迅速な仕様
変更通知機能
スターター
Spring AI 自動構成、スターターモジュールのアーティファクト名に大きな変更がありました。詳細については、アップグレードノートを参照してください。 |
輸送要件に基づいて、次のいずれかのスターターを選択します。
標準 MCP サーバー
STDIO
サーバートランスポートによる完全な MCP サーバー機能のサポート。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
コマンドラインおよびデスクトップツールに適しています
追加の Web 依存関係は不要
スターターは、次の処理を行う McpServerAutoConfiguration
自動構成をアクティブにします。
基本的なサーバーコンポーネントの構成
取り扱いツール、リソース、プロンプトの仕様
サーバー機能と変更通知の管理
同期と非同期の両方のサーバー実装を提供する
WebMVC サーバートランスポート
Spring MVC に基づく SSE
(Server-Sent Events) サーバートランスポートとオプションの STDIO
トランスポートによる完全な MCP サーバー機能のサポート。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
スターターは、McpWebMvcServerAutoConfiguration
および McpServerAutoConfiguration
の自動構成をアクティブにして、次の機能を提供します。
Spring MVC を使用した HTTP ベースのトランスポート (
WebMvcSseServerTransportProvider
)自動的に構成された SSE エンドポイント
オプションの
STDIO
トランスポート (spring.ai.mcp.server.stdio=true
を設定することで有効になります)spring-boot-starter-web
およびmcp-spring-webmvc
の依存関係が含まれています
WebFlux サーバートランスポート
Spring、WebFlux に基づく SSE
(Server-Sent Events) サーバートランスポートとオプションの STDIO
トランスポートによる完全な MCP サーバー機能のサポート。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
スターターは、McpWebFluxServerAutoConfiguration
および McpServerAutoConfiguration
の自動構成をアクティブにして、次の機能を提供します。
Spring WebFlux を使用した反応輸送 (
WebFluxSseServerTransportProvider
)自動的に構成されたリアクティブ SSE エンドポイント
オプションの
STDIO
トランスポート (spring.ai.mcp.server.stdio=true
を設定することで有効になります)spring-boot-starter-webflux
およびmcp-spring-webflux
の依存関係が含まれています
プロパティの構成
すべてのプロパティには spring.ai.mcp.server
という接頭辞が付きます。
プロパティ | 説明 | デフォルト |
---|---|---|
| MCP サーバーを有効 / 無効にする |
|
| stdio トランスポートを有効 / 無効にする |
|
| 識別用のサーバー名 |
|
| サーバーバージョン |
|
| このサーバーと対話する方法についてクライアントにガイダンスを提供するためのオプションの指示 |
|
| サーバーの種類 (SYNC/ASYNC) |
|
| リソース機能を有効化 / 無効化 |
|
| ツール機能を有効化 / 無効化 |
|
| プロンプト機能を有効 / 無効にする |
|
| 補完機能を有効 / 無効にする |
|
| リソース変更通知を有効にする |
|
| 迅速な変更通知を有効にする |
|
| ツール変更通知を有効にする |
|
| (オプション) ツール名ごとのレスポンス MIME 型。たとえば、 |
|
| クライアントがメッセージを送信するために使用する Web トランスポートのカスタム SSE メッセージエンドポイントパス |
|
| Web トランスポートのカスタム SSE エンドポイントパス |
|
| オプションの URL プレフィックス。たとえば | - |
| リクエストがタイムアウトするまでにサーバーレスポンスを待機する時間。ツール呼び出し、リソースアクセス、プロンプト操作など、クライアントを通じて行われるすべてのリクエストに適用されます。 |
|
Sync/Async Server Types
-
Synchronous Server - The default server type implemented using
McpSyncServer
. It is designed for straightforward request-response patterns in your applications. To enable this server type, setspring.ai.mcp.server.type=SYNC
in your configuration. When activated, it automatically handles the configuration of synchronous tool specifications. -
Asynchronous Server - The asynchronous server implementation uses
McpAsyncServer
and is optimized for non-blocking operations. To enable this server type, configure your application withspring.ai.mcp.server.type=ASYNC
. This server type automatically sets up asynchronous tool specifications with built-in Project Reactor support.
Server Capabilities
The MCP Server supports four main capability types that can be individually enabled or disabled:
-
Tools - Enable/disable tool capabilities with
spring.ai.mcp.server.capabilities.tool=true|false
リソース -
spring.ai.mcp.server.capabilities.resource=true|false
でリソース機能を有効 / 無効にするプロンプト -
spring.ai.mcp.server.capabilities.prompt=true|false
でプロンプト機能を有効 / 無効にする補完 -
spring.ai.mcp.server.capabilities.completion=true|false
による補完機能を有効 / 無効にする
すべての機能はデフォルトで有効になっています。機能を無効にすると、サーバーは対応する機能を登録してクライアントに公開できなくなります。
交通手段
MCP サーバーは、それぞれ専用のスターターを備えた 3 つのトランスポートメカニズムをサポートします。
標準入出力 (STDIO) -
spring-ai-starter-mcp-server
Spring MVC (サーバー送信イベント) -
spring-ai-starter-mcp-server-webmvc
Spring WebFlux (リアクティブ SSE) -
spring-ai-starter-mcp-server-webflux
機能と性能
MCP サーバー Boot スターターを使用すると、サーバーはツール、リソース、プロンプトをクライアントに公開できます。Spring Bean として登録されたカスタム機能ハンドラーを、サーバーの種類に基づいて同期 / 非同期仕様に自動的に変換します。
ツール (英語)
サーバーが言語モデルによって呼び出すことができるツールを公開できるようにします。MCP サーバー Boot スターターは以下を提供します。
変更通知のサポート
Spring AI ツールは、サーバーの種類に基づいて同期 / 非同期仕様に自動的に変換されます。
Spring Bean による自動ツール仕様:
@Bean
public ToolCallbackProvider myTools(...) {
List<ToolCallback> tools = ...
return ToolCallbackProvider.from(tools);
}
または低レベル API を使用する:
@Bean
public List<McpServerFeatures.SyncToolSpecification> myTools(...) {
List<McpServerFeatures.SyncToolSpecification> tools = ...
return tools;
}
自動構成は、次のすべてのツールコールバックを自動的に検出して登録します: * 個々の ToolCallback
Bean * ToolCallback
Bean のリスト * ToolCallbackProvider
Bean
ツールは名前によって重複が排除され、各ツール名の最初のものが使用されます。
ツールコンテキストのサポート
ToolContext がサポートされており、ツール呼び出しにコンテキスト情報を渡すことができます。exchange
キーに McpSyncServerExchange
インスタンスが含まれており、McpToolUtils.getMcpExchange(toolContext)
を介してアクセスできます。exchange.loggingNotification(…)
と exchange.createMessage(…)
のデモはこちらの例 [GitHub] (英語) を参照してください。
リソース管理 (英語)
サーバーがクライアントにリソースを公開するための標準化された方法を提供します。
静的および動的リソース仕様
オプションの変更通知
リソーステンプレートのサポート
同期 / 非同期リソース仕様間の自動変換
Spring Bean による自動リソース指定:
@Bean
public List<McpServerFeatures.SyncResourceSpecification> myResources(...) {
var systemInfoResource = new McpSchema.Resource(...);
var resourceSpecification = new McpServerFeatures.SyncResourceSpecification(systemInfoResource, (exchange, request) -> {
try {
var systemInfo = Map.of(...);
String jsonContent = new ObjectMapper().writeValueAsString(systemInfo);
return new McpSchema.ReadResourceResult(
List.of(new McpSchema.TextResourceContents(request.uri(), "application/json", jsonContent)));
}
catch (Exception e) {
throw new RuntimeException("Failed to generate system info", e);
}
});
return List.of(resourceSpecification);
}
迅速な管理 (英語)
サーバーがプロンプトテンプレートをクライアントに公開するための標準化された方法を提供します。
変更通知のサポート
テンプレートのバージョン管理
同期 / 非同期プロンプト仕様間の自動変換
Spring Bean による自動プロンプト指定:
@Bean
public List<McpServerFeatures.SyncPromptSpecification> myPrompts() {
var prompt = new McpSchema.Prompt("greeting", "A friendly greeting prompt",
List.of(new McpSchema.PromptArgument("name", "The name to greet", true)));
var promptSpecification = new McpServerFeatures.SyncPromptSpecification(prompt, (exchange, getPromptRequest) -> {
String nameArgument = (String) getPromptRequest.arguments().get("name");
if (nameArgument == null) { nameArgument = "friend"; }
var userMessage = new PromptMessage(Role.USER, new TextContent("Hello " + nameArgument + "! How can I assist you today?"));
return new GetPromptResult("A personalized greeting message", List.of(userMessage));
});
return List.of(promptSpecification);
}
完了管理 (英語)
サーバーがクライアントに補完機能を公開するための標準化された方法を提供します。
同期と非同期の両方の完了仕様をサポート
Spring Bean による自動登録:
@Bean
public List<McpServerFeatures.SyncCompletionSpecification> myCompletions() {
var completion = new McpServerFeatures.SyncCompletionSpecification(
"code-completion",
"Provides code completion suggestions",
(exchange, request) -> {
// Implementation that returns completion suggestions
return new McpSchema.CompletionResult(List.of(
new McpSchema.Completion("suggestion1", "First suggestion"),
new McpSchema.Completion("suggestion2", "Second suggestion")
));
}
);
return List.of(completion);
}
ルート変更コンシューマー (英語)
ルートが変更されると、listChanged
をサポートするクライアントはルート変更通知を送信します。
ルート変更の監視のサポート
リアクティブアプリケーション用の非同期コンシューマーへの自動変換
Spring Bean によるオプション登録
@Bean
public BiConsumer<McpSyncServerExchange, List<McpSchema.Root>> rootsChangeHandler() {
return (exchange, roots) -> {
logger.info("Registering root resources: {}", roots);
};
}
使用例
標準 STDIO サーバー構成
# Using spring-ai-starter-mcp-server
spring:
ai:
mcp:
server:
name: stdio-mcp-server
version: 1.0.0
type: SYNC
WebMVC サーバー構成
# Using spring-ai-starter-mcp-server-webmvc
spring:
ai:
mcp:
server:
name: webmvc-mcp-server
version: 1.0.0
type: SYNC
instructions: "This server provides weather information tools and resources"
sse-message-endpoint: /mcp/messages
capabilities:
tool: true
resource: true
prompt: true
completion: true
WebFlux サーバー構成
# Using spring-ai-starter-mcp-server-webflux
spring:
ai:
mcp:
server:
name: webflux-mcp-server
version: 1.0.0
type: ASYNC # Recommended for reactive applications
instructions: "This reactive server provides weather information tools and resources"
sse-message-endpoint: /mcp/messages
capabilities:
tool: true
resource: true
prompt: true
completion: true
MCP サーバーを使用した Spring Boot アプリケーションの作成
@Service
public class WeatherService {
@Tool(description = "Get weather information by city name")
public String getWeather(String cityName) {
// Implementation
}
}
@SpringBootApplication
public class McpServerApplication {
private static final Logger logger = LoggerFactory.getLogger(McpServerApplication.class);
public static void main(String[] args) {
SpringApplication.run(McpServerApplication.class, args);
}
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
}
}
自動構成により、ツールコールバックが MCP ツールとして自動的に登録されます。ToolCallbacks を生成する複数の Bean を持つことができます。自動構成により、それらがマージされます。
アプリケーション例
天気サーバー (WebFlux) [GitHub] (英語) - WebFlux トランスポートを備えた Spring AI MCP サーバー Boot スターター。
天気サーバー (STDIO) [GitHub] (英語) - STDIO トランスポートを備えた Spring AI MCP サーバー Boot スターター。
天気サーバーの手動設定 [GitHub] (英語) - 自動構成を使用せず、Java SDK を使用してサーバーを手動で構成する Spring AI MCP サーバー Boot スターター。