FiveM MCP

io.github.ziyacivan由 GitHub 账号 ziyacivan 发布v0.6.0更新于 Oct 24, 2026

Build, run and live-test FiveM servers with AI agents: RCON, DevCon, window control, mcpb bridge.

已验证STDIO仅桌面浏览器自动化开发者工具

概览

AI 生成的概览

让 AI 助手通过 RCON 驱动服务器控制台、通过 devcon 驱动运行中的 FiveM 客户端 F8 控制台,从而构建、运行并实时测试 FiveM 服务器。

可以做什么
该服务器提供覆盖 FiveM 测试全流程的工具:server_command 通过 UDP RCON 发送任意服务器控制台命令并返回捕获的输出,client_command 通过 devcon 向运行中的 Legacy 客户端 F8 控制台输入命令。read_console 和 wait_for_console 可读取最近的控制台行,或阻塞等待匹配正则的行,作为断言原语。此外还包含窗口控制(启动、聚焦、截图、键盘与鼠标输入)、读取最新的 CitizenFX 客户端日志,以及用于 natives、exports、NUI 回调、位置和传送的 bridge 资源。内置 test_resource 和 smoke_check 两个提示词,把上述能力组织成现成的工作流。
适用场景
适用于开发和测试 FiveM 资源的场景:希望由助手重启资源、同时观察服务器端与客户端控制台输出、驱动游戏内场景并给出通过或失败的结论,而无需自己操作键盘。它面向开发服务器,而非生产环境。
运行要求
通过 npx fivem-mcp-server 以 stdio 在本地运行,需要 Node 22+。需要一台你管理的、正在运行的 FXServer,并设置 FIVEM_RCON_PASSWORD 与 server.cfg 中的 rcon_password 一致,server_command 才能使用。客户端控制台工具需要同一台机器上运行 Legacy FiveM 客户端,因为 devcon 默认绑定 localhost。键盘、鼠标和截图工具仅支持 Windows。可选配置包括 FIVEM_SERVER_LOG、FIVEM_HOST、FIVEM_RCON_ADDRESS、FIVEM_EXECUTABLE 和 FIVEM_MCPB_TOKEN。
安装前请注意
客户端 devcon 套接字没有身份验证,任何能访问它的人都可以在该游戏客户端中执行本地控制台命令,不要将其隧道转发。RCON 是服务器的管理员权限入口,一旦 server_command 能执行任意命令,就等于把机器的 root 权限交给助手,因此只应对开发服务器使用。FIVEM_RCON_PASSWORD 和 FIVEM_MCPB_TOKEN 保存在你的 MCP 配置文件中,需要妥善保护。bridge 资源仅限开发服务器使用,并应设置 native、export 和事件白名单。

安装

在 SourceWeft 中

  1. 打开 控制台中的 FiveM MCP,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

fivem-mcp

[npm version] [license: MIT] [CI]

An MCP (Model Context Protocol) server that lets AI agents — Claude, Qwen, or anything that speaks MCP — build, run and live-test FiveM servers from the same machine.

It is the missing test layer for the "did it actually work in-game?" question: the agent can run real console commands, watch both the server log and the live F8 console of a running FiveM client, wait for specific output, and react — without you touching the keyboard.

agent (Claude / Qwen / …)   │  MCP over stdio   ▼fivem-mcp-server ──► UDP RCON / getinfo ──► FXServer (game port, e.g. 30120)                   ──► TCP devcon (29200/29300) ──► FiveM Legacy client F8 console                   ──► tail ─────────────────────► FXServer's redirected stdout log

Status

v0.5 drives the whole loop: server console (RCON), client F8 console (devcon), the game window (launch, focus, screenshot, keyboard/mouse) and an in-game bridge (mcpb) for natives, exports and NUI callbacks — plus ready-made test prompts. Tools answer with structured content, carry MCP annotations, and stop as soon as the client cancels. All of it live-verified against a real FXServer + FiveM Legacy client (see docs/plan.md and scripts/live-*.mjs).

Where it is published

ChannelAddress
npmfivem-mcp-server — npx -y fivem-mcp-server
MCP Registryio.github.ziyacivan/fivem-mcp (registry.modelcontextprotocol.io)
Source releasesGitHub Releases, tagged vX.Y.Z

The repository's GitHub Packages sidebar is deliberately empty: the artifact lives on npmjs.com, not GitHub Packages — the latter would force a scoped @ziyacivan/ package name and a second registry for no benefit.

Requirements

  • Node 22+ (Windows, macOS or Linux for the server side; the client devcon works wherever the FiveM client runs — this tool must run on that machine for the client_* tools since devcon binds to localhost by default).
  • A running FXServer you administer (rcon_password set for server_command).
  • The Legacy FiveM client for the client-console tools (Enhanced removed the client devcon ports; see docs/protocol.md).
  • The keyboard/mouse/screenshot tools are Windows-only and run on the machine with the game. On other platforms every tool except those is served normally.

Install

Published on npm — no clone needed. Add it to Claude Code in one line:

sh
claude mcp add fivem -s user \  -e FIVEM_RCON_PASSWORD=your-rcon-password \  -e FIVEM_SERVER_LOG=C:\FXServer\my-data\server.log \  -- npx -y fivem-mcp-server

(-s user = available in every project; drop it for a per-project entry. Verify with claude mcp get fivem — status should read ✓ Connected. Remove with claude mcp remove fivem -s user.)

For a shared project config, put .mcp.json in the repo root and commit it — Claude Code asks to approve it on first open, and env values can be interpolated from your local .env-less shell via ${VAR} expansion:

json
{  "mcpServers": {    "fivem": {      "command": "npx",      "args": ["-y", "fivem-mcp-server"],      "env": {        "FIVEM_RCON_PASSWORD": "${FIVEM_RCON_PASSWORD}",        "FIVEM_SERVER_LOG": "${FIVEM_SERVER_LOG}"      }    }  }}

For Claude Desktop (or any client with JSON config), add to claude_desktop_config.json:

json
{  "mcpServers": {    "fivem": {      "command": "npx",      "args": ["-y", "fivem-mcp-server"],      "env": { "FIVEM_RCON_PASSWORD": "your-rcon-password" }    }  }}

The server is also listed in the MCP Registry as io.github.ziyacivan/fivem-mcp. Building from source (development):

sh
git clone https://github.com/ziyacivan/fivem-mcpcd fivem-mcp && pnpm install && pnpm buildclaude mcp add fivem -- node ./dist/index.js        # points at your working copy

Configuration (environment)

VariableDefaultMeaning
FIVEM_HOST127.0.0.1Machine running the FiveM client (devcon host)
FIVEM_EXECUTABLE%LOCALAPPDATA%\FiveM\FiveM.exeFiveM.exe for the launch tool
FIVEM_CLIENT_DEVCON_PORT29200 then 29300Override the client devcon port
FIVEM_RCON_ADDRESSFIVEM_HOST:30120FXServer game port (UDP RCON + getinfo)
FIVEM_RCON_PASSWORD—Matches rcon_password in server.cfg; needed by server_command
FIVEM_SERVER_LOG—Path to FXServer's redirected stdout; enables server-side read_console / wait_for_console. Not needed by the bridge since v0.5 (results poll in-band) — it is the pre-0.5 fallback transport
FIVEM_MCPB_TOKEN—Matches mcpb_token on the server; sent with every bridge request
FIVEM_CONSOLE_CAPACITY5000Client console lines kept in the ring buffer
FIVEM_QUIET_MS400Consider command output done after this quiet period
FIVEM_COMMAND_TIMEOUT_MS5000Default max wait for client_command output
FIVEM_MCP_DEBUG—1 traces devcon frames and RCON round-trips on stderr

Tools

ToolWhat it does
statusConnection state: RCON, log file, client devcon. Call first.
server_infogetinfo over UDP — hostname, players, max clients, protocol, game build. No credentials needed.
server_commandAny server console command over UDP RCON; returns the captured output.
client_commandTypes into the F8 console of a running Legacy client over devcon (nothing steals focus). This is the local console command layer — connect, quit, tooling; RegisterCommand chat commands are a different system (use server_command, which runs with console privileges, or the input/bridge tools). Returns the console lines it printed.
read_consoleRecent lines: client = live devcon stream (with afterSeq paging), server = tail of FIVEM_SERVER_LOG. Filter by channel/contains/pattern.
wait_for_consoleBlock until a line matching a regex appears — your assertion primitive.
list_commandsEvery command the client console knows (devcon handshake).
launchStart FiveM, optionally straight into host:port (default: the configured server).
quit_gameGraceful quit over devcon; force kills the FiveM process tree.
window_statusGame window existence, title, pid, rect, foreground state.
focus_window / restore_focusBring the game forward / give focus back to your window. Input tools focus automatically.
screenshotPNG of the game window (PrintWindow, screen-BitBlt fallback). Downscaled — default 900, optional crop rect. Every shot costs transcript tokens all session: prefer text probes, shoot small.
press_key / hold_key / release_keyReal scan-code input — GTA's DirectInput ignores VK-only injection. Held keys are released if the process dies.
type_textLiteral Unicode events — the channel the F8 console and chat NUI read.
mouse_move / click / scrollRelative moves drive the camera; absolute coordinates position the cursor for NUI.
waitPause between actions (loading screens, walk cycles).
read_client_logThe newest CitizenFX_log_*.log from the FiveM install.
bridgeInvoke the mcpb bridge resource: ping, players, poll, call_export, trigger_event (server half) and ping, position, teleport, freeze, call_native, send_nui, nui_callback (client half). op is validated against the chosen target.

Prompts

Two workflows are shipped as MCP prompts, distilled from the live-verified loops:

  • test_resource(resource, expectations?) — clean restart → console error scan → client-half scan → in-game scenario (keys, screenshot, bridge state) → evidence-backed PASS/FAIL report where anything unverifiable is said so out loud.
  • smoke_check — one fast sweep: connections, which server, error tails on both sides, window + screenshot, persisted client log. OK/WARN/DOWN per line.

The bridge resource (bridge/)

Client-side testing (natives, NUI callbacks, position) is outside what devcon and RCON can reach — the small companion resource closes that gap and ships in this repo.

sh
# on the dev servercp -r bridge/ <server-data>/resources/mcpb     # or a junction# server.cfg:#   ensure mcpb#   setr mcpb_enabled true#   setr mcpb_token <a-random-token>#   setr mcpb_event_allowlist  my:event,other:event      # trigger_event may fire only these#   setr mcpb_export_allowlist myres:*,other:method       # optional; empty = any export#   setr mcpb_native_allowlist SetEntityHealth,GetGameTimer   # optional; empty = any native#   setr mcpb_client_timeout_ms 8000                      # a silent client fails fast#   setr mcpb_verbose true                                # echo requests to both consoles

and point this server at it with FIVEM_MCPB_TOKEN. Then:

bridge { target: "client", src: 1, op: "position" }bridge { target: "server", op: "call_export", args: "{\"resource\":\"myres\",\"method\":\"money\",\"args\":[1]}" }

Client results come back through an in-band queue polled over RCON (~100 ms granularity since v0.5 — no log file needed; pre-0.5 resources still fall back to the log tail).

Dev servers only. mcpb_enabled defaults to false, the command is accepted only from the console/RCON (never from a player), and the token is checked when set — but call_native is exactly as safe as the console it runs behind. Keep RCON and this bridge off anything you care about; see SECURITY.md. The full wire contract: docs/protocol.md §4.

Typical loop (what an agent does)

  1. server_command: "ensure my-resource"
  2. wait_for_console: target=server, pattern="Started resource my-resource|Error"
  3. client_command: "connect localhost:30120" drives the join itself, then read_console: target=client catches client-side console output that never reaches the server log.

Security notes — read before exposing anything

  • The client devcon socket has no authentication. Anyone who can reach it can run local console commands in that game client (connect, quit, ...). FiveM binds it to 127.0.0.1 unless the client is started with -devcon (then 0.0.0.0); this tool assumes the loopback default and never needs more. Do not tunnel it.
  • RCON is the server's admin root. Keep rcon_password strong; FIVEM_RCON_PASSWORD lives in your MCP config — protect that file the same way.
  • FXServer itself has no server-side devcon socket on current builds (verified 2026-09-02), which is why the server half is RCON + log tail.
  • Treat server_command as giving the agent root on your box the moment it can exec anything; run it only against development servers.

Development

sh
pnpm test        # vitest: fake devcon/rcon servers, byte-level SendInput/PNG checks, bridge contract, docs driftpnpm typecheckpnpm check       # biomepnpm build       # -> dist/pnpm run ci      # all of the above (plain `pnpm ci` is a pnpm builtin and errors)

Releasing: move the Unreleased changelog notes under the new version heading, then pnpm version <patch|minor|major> (bumps and syncs server.json + the bridge manifest, and tags), npm publish from your machine (prepublishOnly runs the full gate), and git push --follow-tags. The Release workflow then re-runs the gate, creates the GitHub Release from CHANGELOG.md, and registers the version with the MCP Registry. See CONTRIBUTING.md.

Live verification against a real server/game: pnpm live:probe, live:e2e, live:m2, live:m3.

The wire protocol (DevCon frames, RCON/getinfo OOB datagrams, the Cfx string hash) is documented byte-by-byte in docs/protocol.md, derived from the open-source CitizenFX server, citizenfx/fivem@03dcc562. Live-verified: RCON reply format, getinfo response and the >8-byte challenge drop were confirmed against a real FXServer on 2026-09-02.

License

MIT. The FiveM/CitizenFX name is a trademark of Cfx.re; this project is not affiliated with or endorsed by Cfx.re.

来源:README.md,提交 ce65a7f

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.6.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分