mcpField
R
rpfd

rpfd

ローカル
github.com開発ツール13 週間前に更新

rpfd について

rpfd は、GTA V などの RAGE ゲームで使われる RPF7 アーカイブを読み書きする Rust ツールチェーンです。CLI、JSON-RPC デーモン、VS Code 拡張を備え、複数の暗号化 RPF7 形式に対応します。

主な機能

  1. 01RPF7 アーカイブの読み書きと再構築
  2. 02アーカイブの展開、梱包、検証
  3. 03エントリーの XML 表示と編集
  4. 04JSON-RPC による編集管理
  5. 05VS Code ワークスペースでの編集

活用シーン

  1. 01GTA V アーカイブ内容の確認
  2. 02サーバー用ファイルの編集と再梱包
  3. 03VS Code でのネストしたアーカイブ編集

MCP 対応

README では、エディターやエージェントへの MCP サーバー登録に触れています。記載された MCP エンドポイントは発見用で、アーカイブ操作は行いません。

設定

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

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

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

リポジトリ
パッケージ
mcpbrpf-v0.3.1.mcpb0.3.1

ツール

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

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

詳細

rpfd

release rust 1.98+ VS Code Open VSX

RPF7 アーカイブを読み取り、編集、再構築するための、依存関係を抑えた Rust ツールチェーンです。RAGE Multiplayer と FiveM のサーバーがクライアントに渡す dlc.rpf ファイルや、Grand Theft Auto V に含まれるアーカイブを扱います。実行時の前提条件がない単一のコマンドラインバイナリであり、同じコードを JSON-RPC デーモンと VS Code 拡張機能でも使用します。

エディター拡張機能はストアからインストールできるため、更新は自動で届きます。molchalih.rpfd は VS Code Marketplace および Open VSX からインストールできます。または、 code --install-extension molchalih.rpfd を実行してください。

これをインストールするよう依頼されましたか? エージェントは INSTALL.md に記載された手順に従います。 まずバイナリを PATH に配置し、次にそのマシンにあるすべてのクライアントに rpf を登録します。

フォーマット

バージョンバリアント使用先サポート
RPF7OPEN、暗号化なしRAGE MP および FiveM のサーバーパック読み取り、書き込み
RPF7AES-256、0x0FFFFFF9GTA V、des_* や script_* などのネストされたアーカイブ読み取り、書き込み — ゲームの実行ファイルからキーを取得
RPF7AES-256、0x0FFFFFF7Rockstar Games Launcher読み取り、書き込み — Launcher.exe からキーを取得
RPF7NG、0x0FEFFFFFGTA V Legacy および Enhanced、すべての最上位アーカイブ読み取り、書き込み — 両方ともメモリーイメージが必要
RPF8—Red Dead Redemption 2未対応
RPF6—Red Dead Redemption、2010 年および 2023 年未対応
RPF4—Max Payne 3未対応
RPF3—GTA IV のオーディオ、Midnight Club: LA未対応
RPF2—GTA IV、メインアーカイブ未対応
RPF0—Table Tennis未対応

RPF7 より前の形式に関する帰属情報は、ここで測定したものではなく、他の実装から読み取ったものです。相違点とともにフォーマットの注記に記録されています。RPF7 以外のすべてのバージョンはマジックワードで認識され、バージョン番号を示して拒否されます。

暗号化はアーカイブ単位だけでなく、エントリー単位でも適用されます。タグは目次と名前のデータを対象とし、各エントリーの行には、そのペイロードに変換処理が適用されているかどうかが記録されています。

インストール

この内容はINSTALL.mdに記載されています。そこでは、3つの別々の質問に答えています。VS Code MarketplaceまたはOpen VSXからエディター拡張機能をインストールする方法(代替手段として.vsixを使用できます)、エディターまたはエージェントにMCP サーバーを登録する方法、そしてバイナリだけが必要な場合にその配置先となる場所です。 最後に、1台のマシンですべてを行うためにエージェントが実行する手順を記載しています。 macOS、Windows、Linux向けのビルド済みバイナリは、各リリースに添付されています。

ソースからビルドする場合は、ツールチェーンがrust-toolchain.tomlで固定されています。 リポジトリをクローンし、クローンしたリポジトリのルートでビルドします。配置場所は問いません。

git clone https://github.com/molchalih/rpfd.git
cargo build --release          # target/release/rpf

暗号化されたアーカイブにはキー素材が必要です。これは、ご自身のインストール環境から抽出してください。

rpf keys extract GTA5.exe         # the AES key and the hash lookup table
rpf keys extract Launcher.exe     # the second AES key, carried by no game executable
rpf keys extract <memory image>   # the NG expanded keys and decrypt tables

ここにキー素材は同梱されておらず、今後も同梱されることはありません。各素材は、そのバイト列自体のハッシュを名前として、プラットフォーム固有の設定ディレクトリ内にあるrpfディレクトリのkeysにキャッシュされます。Linuxでは$XDG_CONFIG_HOMEまたは~/.config、macOSでは~/Library/Application Support、Windowsでは%APPDATA%です。すべてのコマンドはフラグなしでこのキャッシュを参照します。保存場所と内容の量を確認するにはrpf keys cacheを実行します。

$ rpf keys cache
cache   /Users/you/Library/Application Support/rpf/keys
entries 2

--cache-dirで別のキャッシュを選択できます。これは複数のインストール環境を分ける唯一の方法です。rpf keys invalidateを実行すると、キャッシュを空にできます。キーが出力されるコマンドはありません。表示されるのはオフセット、長さ、件数、パスのみです。NG素材が平文の状態で存在するのは、実行中のゲームのメモリーイメージ内だけです。そのため、NGアーカイブを入手するにはそれしか方法がありません。入手方法については、ここでは扱いません。素材が見つからないアーカイブは推測せずにエラーになります。

使い方

アーカイブの中身を一覧表示し、内部のアーカイブも再帰的に表示します。

$ rpf ls -R dlc.rpf
binary    xml          2199  content.xml
directory -               3  data
binary    xml          1445  data/carvariations.meta
binary    xml           191  data/dlctext.meta
binary    xml          5100  data/vehicles.meta
binary    xml           559  setup2.xml
directory -               2  x64
directory -               1  x64/vehiclemods
binary    -         2544128  x64/vehiclemods/meringls63amg24_mods.rpf
resource  -          262144  x64/vehiclemods/meringls63amg24_mods.rpf/meringls63amg24_brabus_diffuser_1.yft
... 20 more rows: the rest of the mods archive, and x64/vehicles.rpf

2列目はエントリーに格納されている内容を示します。pso、rbf、metaはXML表示に対応しています。

$ rpf cat --as xml des_hosp_ceil2.rpf des_hosp_ceil2.ytyp
<?xml version="1.0" encoding="UTF-8"?>
<hash_D98BB561 pso:struct="hash_D98BB561">
  <hash_F17E7F28 pso:array="atarray"/>
  <hash_018A3B1B pso:array="atarray">
    <pso:item pso:struct="hash_82D6FC83">
      <hash_BF74DFA7 pso:float="100.0"/>
      <hash_67D26872 pso:uint="0"/>
      <hash_6C1523E4 pso:uint="0"/>
      <hash_D9EF8236 pso:float3="-2.80584, -2.95097, 0.0"/>
      <hash_E78AA618 pso:float3="2.80584, 2.95097, 3.0961"/>
      <hash_D61872FF pso:float3="0.0, 0.0, 1.54805"/>
      <hash_82E8C5DE pso:float="4.356308"/>
      <hash_AD5D5B4C pso:float="5.0"/>
      <hash_E6E17F14 pso:string.counted="DES_Hosp_Ceil2"/>
      <hash_75D215A1 pso:string.counted="DES_Hosp_Ceil2_txd"/>
      <hash_19471791 pso:null="string.counted"/>
      <hash_FC1FB6FB pso:null="string.counted"/>
      <hash_D3C717FC pso:hashstring="hash_00000000"/>
      <hash_F17E7F28 pso:array="atarray"/>
    </pso:item>
  </hash_018A3B1B>
  <hash_E6E17F14 pso:hashstring="hash_334D5CB2"/>
  <hash_3C6F8844 pso:array="atarray"/>
  <hash_069ADF93 pso:array="atarray"/>
  <hash_65E9D4EB pso:array="atarray"/>
</hash_D98BB561>

rpf put --as xmlを実行すると、編集したドキュメントがエントリー独自のエンコーディングで書き戻されます。書き込みにかかる容量を確認してから実行してください。バイト数は固定値ではなく、edited.metaのサイズです。実際に書き込む前に確認するには--dry-runを使用します。

$ rpf put dlc.rpf data/vehicles.meta edited.meta --dry-run
would patch 1632 bytes in place at 2048 (room for 2048)

$ rpf put dlc.rpf data/vehicles.meta edited.meta
patched 1632 bytes in place at 2048 (room for 2048)

put --create、rm、mv、mkdirはヘッダー以降のすべてのオフセットを移動させるため、必ず再構築し、その旨を先に通知します。再構築はアトミックに行われます。アーカイブと同じ場所に作成した一時ファイルで、元のファイルを一度に置き換えます。

アーカイブを展開し、再構築して、結果を確認します。

$ rpf extract dlc.rpf tree/
7 files and 3 directories into tree/

$ rpf pack tree/ rebuilt.rpf
11 entries, 65160704 bytes

$ rpf verify rebuilt.rpf --against tree/
27 entries read back; 7 of 7 recorded checksums checked against tree/
20 entries carry no recorded checksum: an entry inside a nested archive is covered by the checksum of the entry that holds it

すべてのレポート出力コマンドは--jsonに対応しています。その他のコマンドはrpf --helpを参照してください。 プログラムからツールを操作する方法はclients/agent/README.mdに記載されています。JSONの形式、失敗時のオブジェクト、そして誰も読む予定のないペイロード向けのcat --outについて説明しています。

デーモン

rpf serve --stdioはJSON-RPCを使用し、1行につき1つのオブジェクトを処理します。バイナリでできるすべての操作に応答し、commitまで編集を保持します。また、時間のかかる再構築の進捗を、キャンセル可能な通知として報告します。

$ echo '{"jsonrpc":"2.0","id":1,"method":"open","params":{"path":"/tmp/dlc.rpf"}}' | rpf serve --stdio
{"id":1,"jsonrpc":"2.0","result":{"entries":11,"handle":1,"len":144504832,"path":"/private/tmp/dlc.rpf"}}

エディター拡張機能

clients/vscodeはアーカイブをワークスペースフォルダーとしてマウントします。ファイルはほかのファイルと同じように開き、編集して保存できます。入れ子になったアーカイブは、フォルダー内のフォルダーとして表示されます。アーカイブへの書き込みは、パッチまたは再構築としてプレビューしたうえで、明示的な操作によって行われます。clients/vscode/README.mdを参照してください。

終了コード

安定した終了コードを使っているため、メッセージを読まずに呼び出し側で失敗を分類できます。0は成功を示し、ゼロ以外の各コードは1つの失敗クラスを示します。デーモンは同じ番号をJSON-RPCのerror.codeとして報告し、error.data.reasonにシンボル名を含めます。

終了コードの一覧は、それを管理するclients/agent/README.mdに記載されています。また、各コードが呼び出し側に次の対応として何を示すかも説明しています。

ビルドとテスト

cargo build --release

継続的インテグレーションでは、最初の3つをmacOS、Linux、Windowsで実行します。ローカルでテストを通過させておくと、継続的インテグレーションも成功する可能性が高くなります。

cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all
cargo test -p rpf-core --test oracle -- --nocapture
RUSTDOCFLAGS='-D warnings' cargo doc --no-deps --workspace
cargo deny check
./tools/docgate/docgate.sh

すべてのコミットメッセージも検査します。git config core.hooksPath .githooksを実行すると、ローカルでも同じ検査が行われます。

テストスイートの実行にゲームデータは不要です。ゲームデータが必要なテストはスキップされます。RPF_CORPUS、RPF_GAME_EXE、RPF_GAME_IMAGE、RPF_METADATAを使って、アーカイブ、ゲーム実行ファイル、実行中のゲームのメモリーイメージ、抽出済みメタデータのペイロードを指定します。対応するRPF_REQUIRE_*を設定すると、スキップが失敗になります。

ライセンス

MIT OR Apache-2.0を任意で選択できます。LICENSE-MITおよびLICENSE-APACHEをご覧ください。

コメント

MCP は初めてですか?

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

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