Skip to content
Himeshi edited this page Jun 6, 2026 · 5 revisions

MCPサーバ機能

SimutransのゲームループにMCP(Model Context Protocol)サーバが組み込まれており、Claude CodeなどのAIツールからゲームの情報を取得したり操作を行ったりすることができます。

概要

  • AIツール(Claude Codeなど)からSquirrelスクリプトをゲーム内で実行できます
    • ゲーム内で操作を行うには、AIツールがSimutrans用のSquirrelスクリプトを生成する必要があります。Squirrelスクリプト生成のための補助として、simutrans-agent-skills などをご利用ください。
  • Squirrelスクリプトには、SimutransのスクリプトAPI(路線・停留所・車両・都市・工場など)がすべて利用可能です
  • -mcp-port オプションつきで起動した時のみ利用できます。デフォルトでは無効です
  • 操作はローカルホストのみに公開されます(外部からはアクセスできません)

前提条件

  • OTRP v54以降

起動方法

SimutransをMCPサーバ付きで起動するには、-mcp-port オプションを指定します。

./sim -mcp-port 13354
オプション 説明
-mcp-port PORT MCPサーバをPORTで起動(デフォルト: 13354)

起動後、ポートがLISTEN状態になるまで数秒かかります。

Claude Codeへの設定

ゲームデータディレクトリ(simバイナリと同じ場所)に .mcp.json を作成します。

{
  "mcpServers": {
    "simutrans": {
      "type": "stdio",
      "command": "nc",
      "args": ["localhost", "13354"]
    }
  }
}

注意: Simutransを先に起動してからAIエージェントを開いてください。Simutransが起動していない状態では接続に失敗します。

利用可能なツール

run_squirrel

Squirrelスクリプトを受け取り、ゲーム内で実行します。

パラメータ:

パラメータ 必須 説明
code string 実行するSquirrelコード
player_nr integer プレイヤー番号(0〜15、デフォルト: 1)

戻り値: スクリプトが return した値を文字列として返します。

Squirrel API

利用可能なAPIの完全なリストはSimutransのソースコード(script/api/ ディレクトリ以下)を参照してください。Simutransのスクリプト機能(AIスクリプト・シナリオスクリプト)と同じAPIが利用できます。

スクリプト例

ゲーム内時刻の取得

local t = world.get_time()
return t.year + "" + t.month + ""

路線一覧の取得

local player = player_x(0)  // プレイヤー番号は起動時の player_nr と合わせる
local lines = player.get_line_list()
local result = "路線数: " + lines.get_count() + "\n"
foreach(line in lines) {
    result += line.get_name() + "\n"
}
return result

プレイヤー一覧の取得

local result = ""
for(local p = 0; p < 16; p++) {
    local player = player_x(p)
    if(player.is_valid()) {
        result += "Player " + p + ": " + player.get_name() + "\n"
    }
}
return result

制限事項

  • ファイル操作・システムコマンドは無効: ファイルの読み書き(file, loadfile など)やシステム関数(system, getenv など)はセキュリティのため使用できません。
  • VM は呼び出しごとに初期化: グローバル変数や定義した関数は、呼び出し間で引き継がれません。状態を保持したい場合はゲームオブジェクト(路線名など)に書き込む必要があります。
  • ローカルホストのみ: MCPサーバはループバックアドレス(127.0.0.1 / ::1)にbindしています。ファイアウォールのポートを開放しても、OSのTCP/IPスタックがループバック以外からの接続を拒否するため、外部ネットワークからはアクセスできません。

デバッグ

スクリプト実行時のエラーはゲームデータディレクトリの script-mcp.log に記録されます。スクリプトがエラーになった場合はこのファイルを確認してください。

Clone this wiki locally