🚀 IBM AS/400 ISeries MCP Server
このプロジェクトは、RTEプロトコルを実行するカスタマイズ可能なMCPサーバーを実装しています。
🚀 クイックスタート
開発環境の要件
実行方法
- プロジェクトをコンパイルします。
./mvnw clean package
- SSEモードでサーバーを起動します。
java -jar target/rte-mcp-server-0.0.1-SNAPSHOT.jar
- STDIOモードでサーバーを起動します。
java -jar -Dspring.ai.mcp.server.stdio=true rte-mcp-server-0.0.1-SNAPSHOT.jar
RteUtilsの使い方
このプロジェクトは拡張性が高く、RteUtils
クラスを使用することで独自のMCPツールを追加できます。また、RTE接続パラメータとRTEフローをyaml形式で定義する必要があります。
RteUtils
には以下のメソッドが実装されています。
static RteProtocolClient connect(RteConfig config)
: 提供されたyamlを使用してRTEサーバーに接続します。
static String executeSteps(RteProtocolClient client, List<RteStep> steps)
: 提供されたyamlを使用して、RTEサーバーで指定されたステップを実行し、画面結果を文字列として返します。
MCPツールとして公開するメソッドには@Tool
を、クラスには@Services
を注釈する必要があります。例を以下に示します。
@Service
public class RteServiceLoginTool implements RteTool {
private static final Logger logger = LoggerFactory.getLogger(RteServiceLoginTool.class);
@Tool(description = "Execute an RTE transaction in a given server", name = "TN5250 Login")
public String executeRteTransaction(String server, int port) {
try {
RteFlow flow = RteYamlLoader.load("/flow.yaml");
RteProtocolClient client = RteTool.connect(flow.getConfig(), server, port);
return RteTool.executeSteps(client, flow.getSteps());
} catch (IOException | RteIOException | InterruptedException | TimeoutException e) {
logger.error("Error executing RTE flow", e);
return "Error executing RTE flow: " + e.getMessage();
}
}
}
yamlファイルでは、接続パラメータとRTEサーバーで実行するステップを定義します。このyamlファイルの構造は以下の通りです。
config:
server: localhost
port: 2324
protocol: TN5250
terminalType: 'IBM-3477-FC: 27x132'
sslType: None
steps:
- actions:
- label: User
input: TESTUSR
- label: Password
input: TESTPSW
attentionKey: ENTER
yamlファイルでは任意の数のステップを定義できます。
- server: RTEサーバーに接続するサーバーアドレス。
- port: RTEサーバーに接続するポート。
- protocol: サポートされるプロトコルはTN5250、TN3270、VT420です。
- terminalType: 各プロトコルでサポートされる端末タイプは以下の通りです。
プロトコル |
端末タイプ |
TN5250 |
IBM-3477-FC: 27x132 |
|
IBM-3179-2: 24x80 |
TN3270 |
IBM-3278-M2: 24x80 |
|
IBM-3278-M2-E: 24x80 |
|
IBM-3278-M3: 32x80 |
|
IBM-3278-M3-E: 32x80 |
|
IBM-3278-M4: 43x80 |
|
IBM-3278-M4-E: 43x80 |
|
IBM-3278-M5: 27x132 |
|
IBM-3278-M5-E: 27x132 |
VT420 |
VT420-7: 24x80 |
- sslType: サポートされるSSLタイプはNone、TLS、SSLv3です。
- steps: RTEサーバーで実行するステップを表すアクションのリスト。
- actions: 現在の画面で実行するすべてのアクション。任意の数のlabel/inputペアを追加できます。
- label: RTE画面で入力するフィールドのラベル。
- input: フィールドに入力する値。
- attentionKey: フィールドに入力した後に押すキー。ENTER、F1、F2、F3、F4、F5、F6、F7、F8、F9、F10、F11、F12、F13、F14、F15、F16、F17、F18、F19、F20、F21、F22、F23、F24、ATTN、CLEAR、SYSRQ、RESET、ROLL_UP、ROLL_DN、PA1、PA2、PA3が使用できます。
✨ 主な機能
このサーバーの主な機能は、RTEプロトコルを実行することで、カスタマイズ可能なMCPサーバーを提供することです。また、RteUtils
を使用することで独自のMCPツールを追加できる拡張性も備えています。
💻 使用例
基本的な使用法
以下は、RTEトランザクションを実行する例です。
@Service
public class RteServiceLoginTool implements RteTool {
private static final Logger logger = LoggerFactory.getLogger(RteServiceLoginTool.class);
@Tool(description = "Execute an RTE transaction in a given server", name = "TN5250 Login")
public String executeRteTransaction(String server, int port) {
try {
RteFlow flow = RteYamlLoader.load("/flow.yaml");
RteProtocolClient client = RteTool.connect(flow.getConfig(), server, port);
return RteTool.executeSteps(client, flow.getSteps());
} catch (IOException | RteIOException | InterruptedException | TimeoutException e) {
logger.error("Error executing RTE flow", e);
return "Error executing RTE flow: " + e.getMessage();
}
}
}
高度な使用法
独自のMCPツールを追加する場合は、RteUtils
を使用して以下のように実装できます。
@Service
public class CustomRteTool implements RteTool {
private static final Logger logger = LoggerFactory.getLogger(CustomRteTool.class);
@Tool(description = "Custom RTE tool", name = "Custom RTE Tool")
public String executeCustomRteTransaction(String server, int port) {
try {
RteFlow flow = RteYamlLoader.load("/custom_flow.yaml");
RteProtocolClient client = RteTool.connect(flow.getConfig(), server, port);
return RteTool.executeSteps(client, flow.getSteps());
} catch (IOException | RteIOException | InterruptedException | TimeoutException e) {
logger.error("Error executing custom RTE flow", e);
return "Error executing custom RTE flow: " + e.getMessage();
}
}
}
📚 ドキュメント
開発環境の要件
実行方法
- プロジェクトをコンパイルします。
./mvnw clean package
- SSEモードでサーバーを起動します。
java -jar target/rte-mcp-server-0.0.1-SNAPSHOT.jar
- STDIOモードでサーバーを起動します。
java -jar -Dspring.ai.mcp.server.stdio=true rte-mcp-server-0.0.1-SNAPSHOT.jar
RteUtilsの使い方
RteUtils
には以下のメソッドが実装されています。
static RteProtocolClient connect(RteConfig config)
: 提供されたyamlを使用してRTEサーバーに接続します。
static String executeSteps(RteProtocolClient client, List<RteStep> steps)
: 提供されたyamlを使用して、RTEサーバーで指定されたステップを実行し、画面結果を文字列として返します。
yamlファイルの構造
yamlファイルでは、接続パラメータとRTEサーバーで実行するステップを定義します。構造は以下の通りです。
config:
server: localhost
port: 2324
protocol: TN5250
terminalType: 'IBM-3477-FC: 27x132'
sslType: None
steps:
- actions:
- label: User
input: TESTUSR
- label: Password
input: TESTPSW
attentionKey: ENTER
🔧 技術詳細
このプロジェクトはJava 21以降を使用して開発されており、Spring Bootをベースにしています。RTEプロトコルの実装には、独自のライブラリを使用しています。また、MCPツールの拡張性を高めるために、RteUtils
クラスを提供しています。
📄 ライセンス
ライセンス情報は提供されていません。
🔍 サンプル画像
🔨 テスト
RteServiceLoginToolTest
クラスには、統合テストの例が提供されています。このテストでは、MCPClient
を使用してツールのリストを検証し、実行します。
⚠️ 重要提示
ツールの動作をテストするには、実行するRTEフローのダンプを生成し、wireshamを使用してモックすることをお勧めします。
サーバーのテストとデバッグ方法の詳細については、こちらを参照してください。