MCP Host Project について
MCP Host Project は、Spring Boot アプリケーションで Spring AI を使う MCP サーバーとクライアントの実装例です。ジオコーディングとタイムゾーンサービスを組み合わせ、コンソールから LLM が都市の座標とタイムゾーンを調べられます。
主な機能
- 01MCP サーバーとクライアントの実装例
- 02座標を返すジオコーディングサービス
- 03座標からタイムゾーンを検索
- 04LLM とコンソールで対話
活用シーン
- 01都市の緯度と経度を検索
- 02位置の座標からタイムゾーンを取得
MCP 対応
Spring AI で MCP サーバーを構築し、MCP クライアントを介してジオコーディングおよびタイムゾーンサービスに接続します。MCP Host はこれらの機能を LLM に提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP ホストプロジェクト
説明
このプロジェクトでは、Spring Boot アプリケーションにおける MCP(Model Context Protocol)対応の Spring AI の統合方法を、サーバー側とクライアント側の両方の実装を通じて紹介します。
MCP
MCP は、AI モデルにおけるコンテキストを介したやり取りの管理を効率化し、外部データソースやツールとの一貫した統合を可能にする標準規格です。
Spring AI MCP は MCP Java SDK を拡張し、クライアントとサーバーの両方に専用の Spring Boot スターターを提供します。
MCP クライアントは、MCP サーバーとの通信と接続管理を担います。
このプロジェクトでは、Spring AI を活用して MCP サーバーを構築し、その機能を LLM から利用できるようにします。TOOLS に対応したモデルが必要です。このプロジェクトでは、Ollama 経由で Llama3.2 を使用します。
モジュール
このプロジェクトは、次の 3 つの主要なモジュールで構成されています。
ジオコーダーサービス
- ポート:8081
- 説明:指定された都市の緯度と経度を提供します。
- 設定
public interface Geocoder {
GeoCodeResult geocode(String city) throws Exception;
}
public record GeoCodeResult(double latitude, double longitude) {}
タイムゾーンサービス
- ポート:8082
- 説明:指定された緯度と経度のタイムゾーン情報を提供します。
- 設定
public interface TimeZoneService {
Optional<TimeZone> getTimeZoneFromLocation(double latitude, double longitude) throws Exception;
}
public record TimeZone(
String id,
String name,
int rawOffset,
int dstSavings
) {}
MCP ホスト
- 説明:MCP クライアント経由でジオコーダーサービスとタイムゾーンサービスを利用し、LLM とやり取りするためのコンソールインターフェースを提供します。
- 設定
@Bean
CommandLineRunner runner(final ChatClient.Builder chatClientBuilder, List<ToolCallback> toolCallbacks) {
final ChatClient agent = chatClientBuilder.build();
return args -> {
try (Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.print("\n\nEnter city (or type 'exit' to quit): ");
String city = scanner.nextLine();
if ("exit".equalsIgnoreCase(city)) {
break;
}
String queryTemplate = """
Please use the available tools to find the latitude and longitude for the city `{city}`. Once you have this information,
use the tools to determine and provide all the timezone details for that location in the same language.
""";
String systemTemplate = """
You are an AI assistant specialized in providing geographical information. Your task is to use the provided tools to gather and deliver accurate data.
""";
String llmResponse = agent
.prompt()
.advisors(new SimpleLoggerAdvisor())
.system(systemSpec -> systemSpec.text(systemTemplate))
.user(userSpec -> userSpec.text(queryTemplate).param("city", city))
.tools(toolCallbacks)
.call()
.content();
log.info("\n\n{}", llmResponse);
}
}
};
}
プロジェクトの実行
-
ジオコーダーサービスを起動:
cd geocoder mvn spring-boot:run -
タイムゾーンサービスを起動:
cd timezone mvn spring-boot:run -
MCP ホストを起動:
cd mcp-host mvn spring-boot:run
使用方法
- MCP ホストを操作:
- MCP ホストアプリケーションを実行します。
- コンソールに都市名を入力します。
- 入力した都市の緯度、経度、タイムゾーン情報が表示されます。
画像を挿入

コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。