A side-by-side look at the FiveM MCP and Unity Biome MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose FiveM MCP for gaming work as a local process; choose Unity Biome MCP for gaming as a local process. You can also run both side by side in one mcpServers block.
status, server_info, server_command.get_hierarchy, scene, search_scene.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Gaming | Gaming |
| Quality signal | 64/100 · Good | 64/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 16 | 31 |
| Directory activity | 3 views 0 installs 0 upvotes | 4 views 0 installs 0 upvotes |
| Tools | 23 | 40 |
| Full listing | View FiveM MCP | View Unity Biome MCP |
statusReport RCON configuration for the server, the devcon connection to the FiveM client console, and the server log-file tailer. Call this first.server_infoAsk the server's getinfo out-of-band endpoint: hostname, players online, max clients, protocol, game build. Works without rcon_password; use it to confirm which server you are pointed at.server_commandExecute a command on the server console over UDP RCON (any command the console accepts: ensure/stop/restart, convars, registered commands). The reply carries the command's captured console output. Needs `rcon_password` on the server and FIVEM_RCON_PASSWORD here; rate-limited server-side (~5 burst).client_commandType a LOCAL console command into the running Legacy client's F8 console over devcon — no screen focus needed, nothing is typed into the game window. This is the process's console context (connect, quit, tooling commands), NOT the chat command layer: commands registered with RegisterCommand are chat commands and live in a different system (run them through server_command, which has console privileges, or drive the chat UI with the M2 input tools). Waits until output goes quiet and returns the lines the client console printed.read_consoleReturn recent console lines without running anything. For 'client', reads the devcon line buffer (live from the moment this server first connected; supports afterSeq paging). For 'server', tails FIVEM_SERVER_LOG (FXServer's redirected stdout) — the last 512 KB, filtered; afterSeq is not supported there.wait_for_consoleBlock until a line matching a regex appears. 'client' watches the live devcon stream; 'server' polls FIVEM_SERVER_LOG for newly written lines (only lines appended after the call count). Use after a fire-and-forget command, to watch for a resource's startup banner, an error, or a scripted RESULT: line.list_commandsThe devcon handshake streams every command the client console knows (CVAR frames). For server commands, run 'help' through server_command instead. Filter with a case-insensitive substring.launchLaunch FiveM, optionally straight into a server via the fivem://connect link. Default target is the configured game port. Returns immediately — watch window_status/client_command to see when the game is up.quit_gameGraceful path: prints 'quit' to the client console over devcon and waits for the game to close (nothing is typed into the window). force: true kills the FiveM process tree instead — use it only when the game is wedged.window_statusWhether the FiveM game window exists, its title/pid, on-screen rect, and whether it is the foreground window. Input/screenshot tools focus it automatically.focus_windowRestores/minimizes-out if needed and steals foreground (remembering the previous window for restore_focus). Every input/screenshot tool calls this automatically.restore_focusReturns foreground to whatever window was focused before this tool focused the game.get_hierarchyScene hierarchy as text tree. For finding specific object by name/type use search_scene. Max 3000 nodes. Use filter/depth to narrow. Set components=true to see component types. Set compress=true to group repeated slots/points/meshes. Set summary=true for compact root-only counts (60-100 tokens). Set incremental=true to get NO_CHANGE if scene unchanged since last call. full=True: bypass distillation. scene: filter to a single scene by name (multi-scene only).sceneScene management. action: new|open|save|discard|open_additive|close|set_active|list|save_copy.
path: required for open/open_additive/close/set_active/save_copy. For save,
omit it to save to the current path; an untitled scene requires a path.
scene: save/discard/save_copy target when multiple scenes loaded (identifies by name).
save_copy: writes current dirty state to path as backup; active scene reference unchanged.
include_unsaved: always True — save_copy always captures current in-memory state.search_sceneSearch scene objects. Syntax: name text, t:Component, tag=Tag, layer=N, active=bool. Combine with spaces.
root: scope search to subtree (path or None for whole scene).
limit: max results (default 50; 0=unlimited).
scene: filter to a single scene by name (multi-scene only).get_componentComponent properties as key-value. For MULTIPLE objects, use inspect(paths='a,b,c') instead — 1 call vs N.
fields: comma-separated field names to keep (e.g. 'mass,position') — projects the result to save tokens; shows requested fields even at default values. Aliases: position, rotation, scale, mass, enabled, active, name.
full=True: bypass distillation, return raw response. compress=True: strip default values before transfer.
component: alias for type= (backward-compat with set_property naming). type= wins when both provided.inspectGet components for multiple objects at once. paths: comma-separated. components: comma-separated types (default: all).
find_type: component type to find — populates paths automatically (replaces explicit paths).
fields: comma-separated field names to keep across all objects — projects the result to save tokens. full=True: bypass distillation. compress=True: strip default values before transfer.set_propertySet component property (Edit Mode, SerializedObject — for Play Mode use `invoke_method` or `execute_code`).
find_type: component type — bulk-sets prop on all matching objects without specifying paths.
For GO rename use rename_object(). ObjectReference: scene path (/Player), asset path (Assets/X.mat), sub-asset (Assets/X.fbx::ClipName), &ref (e.g. &1) or $hexId (legacy), #instanceID (legacy), or 'null'. dry_run=True shows what would change without applying.
ref_component_type: when value is a plain scene path and the field expects a specific Component type (e.g. 'BoxCollider'), appends '::TypeName' to the value so C# resolves the correct component. Ignored when value already contains '::'.
effects: mutates scene via SerializedObject, creates an undo entry. Verify with get_component after.create_objectCreate new GameObject. components: comma-separated types to add on creation. primitive: Cube|Sphere|Cylinder|Capsule|Plane|Quad. prefab_path: instantiate from prefab asset. scene: create in named loaded scene (omit = active scene).set_activeSet GameObject active/inactive.delete_objectDelete GameObject by instance ID or scene path. Deletes scene objects. No confirmation required. Provide one. force=True to delete non-empty containers.manage_componentAdd or remove a component. Mutates scene. No confirmation required. action: 'add' or 'remove' ONLY (no 'enable'/'disable' — use set_property with prop='m_Enabled' for that). type: short name (e.g. 'Button') or full namespace (e.g. 'UnityEngine.UI.Button').set_parentReparent existing GameObject. parent=null → move to scene root. world_position_stays=True (default): preserves world transform. False: stays local to new parent.lint_scene_refsRead-only linter for scene references in DSL scripts or batch commands.
path: project-relative path to .playtest file.
snippet: inline DSL or batch commands to lint (mutually exclusive with path).
Checks: unresolved aliases, embedded aliases, missing objects, ambiguous names.
Returns: 'OK: no issues' or severity-tagged issues (ERROR/WARN) with file:line:token.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"fivem-mcp": {
"command": "npx",
"args": [
"-y",
"fivem-mcp-server"
]
}
}
}
{
"mcpServers": {
"german-krasnikov-unity-biome-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/german-krasnikov/unity-biome-mcp.git#subdirectory=server",
"unity-biome-mcp"
]
}
}
}