mcpField
P
Pure Java 21 MCP Server

Pure Java 21 MCP Server

ローカル
github.com/aliaksandr-haurylau-godel開発ツール073 週間前に更新

Pure Java 21 MCP Server について

Pure Java 21 MCP Serverは、プロトコル実装を調べるJava開発者向けの、独自実装によるMCPサーバーです。MCP専用SDKを使わず、STDIO通信とechoToolを備えています。

主な機能

  1. 01純粋なJava 21による実装
  2. 02JSON-RPC 2.0メッセージ処理
  3. 03STDIOによるメッセージ通信
  4. 04MCPの初期化と終了処理
  5. 05echoToolを搭載

活用シーン

  1. 01JavaでのMCPサーバー実装の学習
  2. 02STDIO経由のMCP通信のテスト
  3. 03ツール定義と呼び出し処理の確認

MCP 対応

MCPサーバーの基本的な処理を実装し、STDIOでクライアントのメッセージを受け取り、echoToolを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Pure Java 21 MCP サーバー

このプロジェクトは、純粋な Java 21 で Model Context Protocol(MCP)サーバーを実装したもので、(概念上の)2025-03-26 MCP 仕様に厳密に準拠しています。外部の MCP 専用 SDK を使用せず、一から構築されています。

前提条件

  • Java 21 SDK: Java 21 以降がインストールされ、設定されていることを確認してください。
  • Gson ライブラリ: このサーバーでは、JSON の解析とシリアライズに Gson ライブラリを使用します。Gson の JAR ファイルをダウンロードする必要があります。
    • 通常は Maven Central からダウンロードできます。「Gson」または com.google.code.gson:gson を検索してください。JAR(例:gson-2.10.1.jar またはそれ以降のバージョン)をダウンロードします。
    • ダウンロードした Gson JAR(例:gson-2.10.1.jar)を、プロジェクト内の lib ディレクトリ(lib/gson-2.10.1.jar)など、既知の場所に配置してください。以下のコンパイルおよび実行コマンドでは、この場所を前提としています。

プロジェクト構成

  • src/:Java ソースコードが含まれています。
    • main/java/io/modelcontextprotocol/server/:ルートパッケージ。
      • jsonrpc/:JSON-RPC メッセージの構造、解析、エラー処理を行うクラス。
      • messages/:MCP 固有のメッセージペイロード(初期化、ツール定義など)用のクラス。
      • tools/:ツールの実装(例:EchoTool)。
      • transport/:トランスポート層の処理(例:StdioTransport)。
      • McpServer.java:サーバーの中核ロジック。
      • Main.java:アプリケーションのエントリーポイント。
  • lib/:(推奨)Gson JAR を保存するために、このディレクトリを作成してください。
  • mcp-server.log:サーバーの動作中に生成されるログファイル。
  • .gitignore:Git が無視する、意図的に追跡対象外とするファイルを指定します。
  • README.md:このファイル。

コンパイル

  1. ディレクトリを作成します:

    • プロジェクトのルートに lib ディレクトリがあることを確認し、Gson JAR ファイル(例:gson-2.10.1.jar)を配置してください。
    • コンパイル済みクラスファイルを保存するため、プロジェクトのルートに bin ディレクトリを作成してください。
      mkdir lib
      mkdir bin
      # Gson JAR をダウンロードして lib/ に配置します
      # 例:wget https://repo1.maven.org/maven2/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar -P lib/
      
  2. サーバーをコンパイルします: プロジェクトのルートディレクトリでターミナルまたはコマンドプロンプトを開きます。 Gson のバージョンやパスが異なる場合は、lib/gson-2.10.1.jar を適宜変更してください。

    Nix(Linux/macOS):

    javac -d bin -cp "lib/gson-2.10.1.jar:src/main/java" $(find src/main/java -name "*.java")
    

    Windows(コマンドプロンプト):

    javac -d bin -cp "lib\gson-2.10.1.jar;src\main\java" $(powershell -Command "(Get-ChildItem -Recurse -Filter *.java src\main\java | Select-Object -ExpandProperty FullName) -join ';' ")
    

    $(powershell ...) コマンドが cmd.exe で直接動作しない場合は、ファイルを手動で列挙するか、別の方法を使用してください。

    javac -d bin -cp "lib\gson-2.10.1.jar;src\main\java" src\main\java\io\modelcontextprotocol\server\*.java src\main\java\io\modelcontextprotocol\server\jsonrpc\*.java src\main\java\io\modelcontextprotocol\server\messages\*.java src\main\java\io\modelcontextprotocol\server	ools\*.java src\main\java\io\modelcontextprotocol\server	ransport\*.java
    

    (ファイルを手動で列挙する場合は、すべてのパッケージパスが含まれていることを確認してください。)

サーバーの実行

コンパイルが成功したら、プロジェクトのルートディレクトリからサーバーを実行します。

Nix(Linux/macOS):

java -cp "bin:lib/gson-2.10.1.jar" io.modelcontextprotocol.server.Main

Windows(コマンドプロンプト):

java -cp "bin;lib\gson-2.10.1.jar" io.modelcontextprotocol.server.Main

サーバーが起動し、標準入力(STDIO)で JSON-RPC メッセージを待ち受けます。

実装済みの機能

  • トランスポート: STDIO(Content-Length ヘッダーでフレーム化されたメッセージ)。
  • JSON-RPC: バージョン 2.0 のメッセージの解析とシリアル化。
  • MCP コア:
    • initialize リクエスト:サーバーが自身の機能を応答します。
    • initialized 通知:クライアントが初期化を確認します。
    • shutdown リクエスト:サーバーが確認応答し、終了の準備をします。
    • exit 通知:サーバーが終了します。
  • ツール:
    • 基本的な「ツール」機能。
    • echoTool に対する tool/call リクエスト。
    • echoTool:メッセージをそのまま返すシンプルなツールです。
      • 入力スキーマ:{ "type": "object", "properties": { "message": { "type": "string" } } }
      • 出力スキーマ:{ "type": "object", "properties": { "response": { "type": "string" } } }
  • ログ記録: サーバーの動作は mcp-server.log(FINE レベル以上)とコンソール(INFO レベル以上)に記録されます。

インタラクション例(STDIO 経由)

メッセージは JSON 本文の前に Content-Length と \r\n\r\n を付けてフレーム化されます。

1. クライアント -> サーバー:initialize リクエスト

Content-Length: 123

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"processId":1234,"capabilities":{}}}

(注:processId や capabilities などの params の内容は initialize の例示用であり、現在このサーバーでは無視されます。)

2. サーバー -> クライアント:initialize レスポンス

Content-Length: 297

{"jsonrpc":"2.0","id":1,"result":{"capabilities":{"tools":[{"name":"echoTool","description":"A simple tool that takes a 'message' string and returns it prefixed with 'Echo: '.","inputSchema":{"type":"object","properties":{"message":"string"}},"outputSchema":{"type":"object","properties":{"response":"string"}}}]}}}

(実際の Content-Length は書式の詳細によって異なります。サーバーがこれを計算します。)

3. クライアント -> サーバー:initialized 通知

Content-Length: 40

{"jsonrpc":"2.0","method":"initialized"}

(通知には id がありません。サーバーは応答しません。)

4. クライアント -> サーバー:echoTool に対する tool/call

Content-Length: 107

{"jsonrpc":"2.0","id":2,"method":"tool/call","params":{"toolName":"echoTool","params":{"message":"Hello MCP!"}}}

5. サーバー -> クライアント:tool/result レスポンス

Content-Length: 74

{"jsonrpc":"2.0","id":2,"result":{"response":"Echo: Hello MCP!"}}

6. クライアント -> サーバー:shutdown リクエスト

Content-Length: 49

{"jsonrpc":"2.0","id":3,"method":"shutdown","params":{}}

7. サーバー -> クライアント:shutdown レスポンス

Content-Length: 34

{"jsonrpc":"2.0","id":3,"result":null}

8. クライアント -> サーバー:exit 通知

Content-Length: 36

{"jsonrpc":"2.0","method":"exit","params":{}}

(その後、サーバーは終了します。応答はありません。)

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

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