rpfd
io.github.molchalihPublished by GitHub account molchalihv0.3.1Updated Oct 24, 2026
Read and write RAGE Package Format archives
Overview
Reads, edits and rebuilds RAGE Package Format (RPF7) archives such as GTA V and FiveM/RAGE MP dlc.rpf files, exposed as an MCP server.
- What you can do
- List archive contents recursively, including archives nested inside archives
- Read entries, with an XML view for pso, rbf and meta payloads
- Write edited entries back in place, or create, remove, move and make directories with a full rebuild
- Extract an archive to a folder, pack a folder back into an archive, and verify the result against recorded checksums
- Extract and cache decryption key material from game executables, and report where the key cache lives
- When to use it
- Useful when an assistant needs to inspect or modify GTA V or FiveM/RAGE MP RPF7 archives: browsing a dlc.rpf, editing metadata or XML-backed entries, or unpacking and repacking a mod archive. Not suitable for RPF8, RPF6 or older formats, which it refuses.
- Requirements
- Runs as a local process on the desktop; the manifest declares no environment variables or headers. Prebuilt binaries exist for macOS, Windows and Linux, or it can be built from source with the pinned Rust toolchain. Encrypted archives need key material extracted from the user's own game installation (GTA5.exe, Launcher.exe, or a memory image of a running game).
Installation
In SourceWeft
- Open rpfd in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
A dependency-light Rust toolchain for reading, editing and rebuilding RPF7
archives — the dlc.rpf files RAGE Multiplayer and FiveM servers hand to their
clients, and the archives Grand Theft Auto V ships. One command-line binary with
no runtime prerequisite, and the same code behind a JSON-RPC daemon and a VS
Code extension.
The editor extension installs from the store, so updates arrive by
themselves: molchalih.rpfd on the
VS Code Marketplace
and on Open VSX, or
code --install-extension molchalih.rpfd.
Asked to install this? An agent follows
the procedure in INSTALL.md:
the binary on PATH first, then rpf registered with every client the machine
has.
Formats
Pre-RPF7 attributions are read from other implementations, not measured here, and are recorded with their disagreements in the format notes. Every non-RPF7 version is recognised by its magic word and refused by number.
Encryption is per entry as well as per archive: the tag covers the table of contents and the names blob, and each entry's row says whether its payload is under the transform.
Installing
INSTALL.md is the page for this, and it answers three separate questions: how
to install the editor extension — from the VS Code Marketplace or Open VSX, with
a .vsix as the fallback — how to register the MCP server with an editor or an
agent, and where to put the binary if that is all you want.
It ends with the procedure an agent follows to do all three on one machine.
Prebuilt binaries for macOS, Windows and Linux are attached to each release.
To build from source instead — the toolchain is pinned in rust-toolchain.toml.
Clone the repository, then build from the root of the clone, wherever you put
it:
Encrypted archives need key material, extracted from your own installation:
No key material is bundled here, and none ever will be. Each source is cached
under the hash of its own bytes, under keys inside an rpf directory of the
platform's own configuration directory — $XDG_CONFIG_HOME or ~/.config on
Linux, ~/Library/Application Support on macOS, %APPDATA% on Windows. Every
command consults it without a flag, and rpf keys cache is what says where it
landed and how much is in it:
--cache-dir selects another cache, the one way to keep several installations
apart, and rpf keys invalidate empties one. No command prints a key — only
offsets, lengths, counts and paths. NG material stands in the clear only in a
memory image of a running game, so that is the sole route to an NG archive;
obtaining one is out of scope here. An archive whose material is absent fails
rather than guessing.
Usage
List an archive, descending into the archives inside it:
The second column says what an entry holds; pso, rbf and meta have an XML
view:
rpf put --as xml writes an edited document back in the entry's own encoding.
Ask what a write costs, then make it — the byte count is your edited.meta's,
not a constant, and --dry-run is how you learn it before anything is written:
put --create, rm, mv and mkdir move every offset after the header, so
they always rebuild and say so first. A rebuild is atomic: a scratch file beside
the archive replaces the original in one step.
Take an archive apart, build it back, check the result:
Every reporting command takes --json; rpf --help lists the rest.
clients/agent/README.md is the page for driving the tool from a program: the
JSON shapes, the failure object, and cat --out for a payload nobody is going
to read.
The daemon
rpf serve --stdio speaks JSON-RPC, one object per line. It answers everything
the binary does, holds edits until commit, and reports a long rebuild's
progress as cancellable notifications.
The editor extension
clients/vscode mounts an archive as a workspace folder: files open, edit and
save like any other, and a nested archive is a folder inside a folder. The
archive is written by one explicit act, previewed as patch or rebuild. See
clients/vscode/README.md.
Exit codes
Stable, so a caller can classify a failure without reading the message: 0 is
success, and every non-zero code names one class of failure. The daemon reports
the same numbers as a JSON-RPC error.code, with a symbolic
error.data.reason.
The table is in clients/agent/README.md, which owns it, along with what each
code tells a caller to do next.
Building and testing
Continuous integration runs these, on macOS, Linux and Windows for the first three; passing them locally is what makes a green run likely:
It also checks every commit message; git config core.hooksPath .githooks
runs the same check locally.
The suite needs no game data: what needs it is skipped. RPF_CORPUS,
RPF_GAME_EXE, RPF_GAME_IMAGE and RPF_METADATA point it at archives, game
executables, a memory image of the running game, and extracted metadata
payloads; the matching RPF_REQUIRE_* turns a skip into a failure.
Licence
MIT OR Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.
Source: README.md at commit f6e5673
Tools
0Version history
3- v0.3.1LatestOct 11, 2026
- v0.3.0Oct 10, 2026
- v0.2.2Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts