# Launcher commands Every command of `horizon-launcher`, and the tool `horizon-launcher mcp` offers for it. A tool's arguments are the command's, in snake_case. A tool runs the command with `--json` and returns what it printed. The tools that change the player's things for good need `confirm: true`. The tools that send something or reach other people say "only when the player asks". The game's own tools, `game_*`, are in [horizon-ctl-commands.md](horizon-ctl-commands.md). With No AI on, `mcp` and `agent-config` are hidden and refuse; every other command stays. See [agent-control.md](agent-control.md#no-ai). ## `horizon-launcher versions` List Horizon releases, or the installed versions. horizon-launcher versions - `--installed`: Only the versions installed here (no network) MCP: `versions`. ## `horizon-launcher install` Download and install a release (a tag such as v2026.10.13, or "latest"). horizon-launcher install - `TAG` MCP: `install`. ## `horizon-launcher remove` Remove an installed version. horizon-launcher remove - `TAG` MCP: `remove`, needs `confirm: true`. ## `horizon-launcher prepare` Prepare a version's resources from your own Minecraft install, or from Mojang. horizon-launcher prepare - `--minecraft`: The game folder of the official launcher, Prism Launcher, MultiMC, the Modrinth App, ATLauncher or GDLauncher (default: the launcher's, then every launcher's default) - `--download`: Download Minecraft from Mojang for the signed-in account that owns it, instead of using an install MCP: `prepare`. ## `horizon-launcher play` Start the client (needs a signed-in Microsoft account that owns Minecraft: Java Edition). horizon-launcher play - `--instance`: The instance to play (its name or id; default: the selected one) - `--world`: Open or create this world (a folder under saves) at once - `--creative`: Creative mode for a new world - `--join`: Join a friend's world with its invite code - `--server`: Join this server at once: an address, or a server of the list by name or position - `--arg`: An extra argument for the game, passed through as-is (repeatable), for example --server-thread MCP: `play`, then the `game_*` tools. ## `horizon-launcher server` Run a dedicated server here; type commands into its console. horizon-launcher server - `--dir`: The server's folder (default: the one the launcher uses) - `--accept-eula`: Agree to the Minecraft EULA (https://aka.ms/MinecraftEULA) MCP: `server`, `server_command`, `server_log`, `server_stop`. ## `horizon-launcher native-build` Native mods (experimental, docs/native-mods.md): compile mixin bundles on the Horizon revision they pin, with the launcher's own Rust, as the version the "Native mods" instance plays. Not sandboxed: the mods' code runs with your rights. horizon-launcher native-build [FOLDER] - `FOLDER`: A mod folder (horizon-mixin.toml, or an unpacked .hnmod), or a folder of them (default: the native mods installed and turned on in the instance) - `--instance`: The instance whose installed native mods to build, and which then plays the build (default: the selected one; the game's own home builds into the Native mods instance) - `--trust-native-code`: You read the mods' source and trust it with full access to this computer MCP: none: the player's switch. ## `horizon-launcher notes` Show a release's patch notes (default: the newest). horizon-launcher notes [TAG] - `TAG` MCP: `notes`. ## `horizon-launcher links` Show the Discord, sponsor and website links. horizon-launcher links MCP: `links`. ## `horizon-launcher account list` The signed-in accounts and which one plays. horizon-launcher account list MCP: `account_list`. ## `horizon-launcher account sign-in` Sign in with a Microsoft account in your browser (device code). Play needs one that owns Minecraft: Java Edition. horizon-launcher account sign-in MCP: `account_sign_in`. ## `horizon-launcher account sign-out` Sign out: the account's tokens leave the keychain. horizon-launcher account sign-out - `WHO`: Its name or UUID MCP: `account_sign_out`, needs `confirm: true`. ## `horizon-launcher account select` Play as this account, or as one of your offline names. horizon-launcher account select - `WHO` MCP: `account_select`. ## `horizon-launcher account offline` Play offline (LAN, offline-mode servers) beside a signed-in account that owns the game: as NAME (kept to switch back to; 3 to 16 letters, digits or _), or as the name the game made up. horizon-launcher account offline [NAME] - `NAME` MCP: `account_offline`. ## `horizon-launcher account forget-offline` Forget one of your offline names. horizon-launcher account forget-offline - `NAME` MCP: `account_forget_offline`. ## `horizon-launcher account skin` Show or set an offline name's skin and cape: a 64x64 (or 64x32) skin PNG, a 64x32 cape PNG, the model. Kept by the launcher and given to the game when that name plays. horizon-launcher account skin [FILE] - `NAME` - `FILE`: The skin's PNG - `--model`: classic or slim arms - `--cape`: The cape's PNG - `--no-skin`: Back to the default skin - `--no-cape`: Take the cape off MCP: `account_skin`. ## `horizon-launcher settings` Show the launcher's settings, or set one (the Settings page): selected-version TAG, minecraft-dir PATH, server-dir PATH ("default" resets a folder), install-new-versions on|off, opening-animation on|off, proxy http://host:port ("default" removes it), while-playing stay|minimize|hide (what the window does while the game runs), language system|en|fr|ru (the window's language; system follows the computer's), accent violet|blue|teal|green|amber|red|pink, background PATH (a picture behind Home; "default" shows Horizon's landscape). horizon-launcher settings [KEY] [VALUE] - `KEY` (selected-version, minecraft-dir, server-dir, install-new-versions, opening-animation, proxy, while-playing, language, accent, background) - `VALUE`: The new value (with KEY) MCP: `settings`. ## `horizon-launcher game-args` Show or set the extra arguments the game starts with (for example --server-thread); quotes group a word with spaces in it. horizon-launcher game-args [ARGS] - `ARGS`: Omit to show the current arguments MCP: `game_args`. ## `horizon-launcher share-log` Upload an instance's latest.log to mclo.gs (a paste service for Minecraft logs) and print its link, for a bug report: only when the player asks. The home folder, the user name and the account names are taken out first; the link expires after 90 days unread. horizon-launcher share-log - `--instance`: The instance (default: the selected one) MCP: `share_log`, only when the player asks. ## `horizon-launcher unshare-log` Delete a log shared with share-log: the ":" it printed. horizon-launcher unshare-log - `SHARED` MCP: `unshare_log`, needs `confirm: true`. ## `horizon-launcher logs` Print the end of the game's log (logs/latest.log in the game folder), or its newest crash report. horizon-launcher logs - `--lines`: How many lines of latest.log - `--crash`: The newest crash report instead MCP: `logs`. ## `horizon-launcher update` Look for a newer Horizon release and launcher, and install them. horizon-launcher update - `--check`: Only report what is available MCP: `update`. ## `horizon-launcher desktop-entry` Linux: put Horizon in the applications menu (an entry and the icon, under $XDG_DATA_HOME), or take it out with --remove. horizon-launcher desktop-entry - `--remove`: Remove the entry and the icon, and stop adding them back MCP: `desktop_entry`. ## `horizon-launcher data status` What is allowed, the install ID and how many items wait (the default). horizon-launcher data status MCP: `data_status`. ## `horizon-launcher data allow` Turn kinds on: performance, crashes, bugs, benchmarks, or all. horizon-launcher data allow ... - `KINDS` MCP: `data_allow`, only when the player asks. ## `horizon-launcher data deny` Turn kinds off: performance, crashes, bugs, benchmarks, or all. horizon-launcher data deny ... - `KINDS` MCP: `data_deny`. ## `horizon-launcher data show` Print exactly what would be sent. horizon-launcher data show MCP: `data_show`. ## `horizon-launcher data delete` Delete everything sent from here, and what waits, and take a new install ID. horizon-launcher data delete MCP: `data_delete`, needs `confirm: true`. ## `horizon-launcher data send` Send what is waiting now. horizon-launcher data send MCP: `data_send`, only when the player asks. ## `horizon-launcher data bug` Send a bug report you write; it is printed first, as it would leave. horizon-launcher data bug - `TEXT` - `--log`: Add the end of the game's log (scrubbed, without chat) - `--yes`: Send without asking MCP: `data_bug`, only when the player asks. ## `horizon-launcher data benchmark` Upload a benchmark report (docs/benchmark-report.md); it is printed first. horizon-launcher data benchmark - `FILE` - `--yes` MCP: `data_benchmark`, only when the player asks. ## `horizon-launcher instance list` The instances, each with its game folder (* = the one Play starts). horizon-launcher instance list MCP: `instance_list`. ## `horizon-launcher instance create` Make an instance: empty but for your options and name, or a copy of another one's worlds, options and packs. horizon-launcher instance create - `NAME` - `--copy`: The instance to copy (its name or id) MCP: `instance_create`. ## `horizon-launcher instance rename` Rename an instance (its folder stays). horizon-launcher instance rename - `INSTANCE` - `NAME` MCP: `instance_rename`. ## `horizon-launcher instance icon` Set an instance's icon: a block or item name from your prepared files (grass_block), a colour (#3fa7d6), or none. horizon-launcher instance icon - `INSTANCE` - `ICON` MCP: `instance_icon`. ## `horizon-launcher instance group` Put an instance in a sidebar group, or take it out with no group. horizon-launcher instance group [GROUP] - `INSTANCE` - `GROUP` MCP: `instance_group`. ## `horizon-launcher instance select` Make Play start this instance. horizon-launcher instance select - `INSTANCE` MCP: `instance_select`. ## `horizon-launcher instance version` Keep an instance on one installed Horizon version, or "latest" to follow updates again. horizon-launcher instance version - `INSTANCE` MCP: `instance_version`. ## `horizon-launcher instance export` Export an instance (or a port) to share: its settings, packs, Horizon mods and the worlds named, as a .mrpack (resource packs from Modrinth listed by download) or a zip. Never logs, screenshots or account data; worlds go without their per-player files. horizon-launcher instance export [INSTANCE] - `INSTANCE`: The instance (default: the selected one) - `--format` (mrpack, zip) - `--world`: A world to put in it (its name or folder); repeat for more - `--out`: Where to write it (default: ".mrpack" in the current folder) MCP: `instance_export`. ## `horizon-launcher instance launch` Show or set what runs around an instance's game: a shell command before it (the game starts only if it succeeds), a wrapper it runs through (`nice -n 5`), and environment variables ("NAME=value NAME2=value"). An empty value clears one. On Linux, also GameMode, MangoHud and the dedicated graphics card, when the computer has them. horizon-launcher instance launch - `INSTANCE` - `--pre-launch` - `--wrapper` - `--env` - `--gamemode`: Linux: run it through GameMode (gamemoderun), on or off - `--mangohud`: Linux: MangoHud's overlay, on or off - `--dedicated-gpu`: Linux: the dedicated graphics card (DRI_PRIME, or NVIDIA's offload), on or off MCP: `instance_launch`, needs `confirm: true`. ## `horizon-launcher instance shortcut` Put a shortcut on the desktop that plays an instance (`play --instance`): a .desktop file (also in the applications menu) on Linux, an app on macOS, a .lnk on Windows. horizon-launcher instance shortcut [INSTANCE] - `INSTANCE`: The instance (default: the selected one) - `--remove`: Move the instance's shortcuts to the trash instead MCP: `instance_shortcut`. ## `horizon-launcher instance import` Import what a file is, as dropping it on the window does: a shared instance (a .mrpack without mod loaders, such as `instance export` writes, or a game folder zip) becomes a new instance; a Java modpack goes to the Modpacks import; a resource or shader pack into the instance (default: the selected one). horizon-launcher instance import - `FILE` - `--instance`: The instance a pack goes into MCP: `instance_import`. ## `horizon-launcher worlds list` The worlds: name, mode, version, last played and size (the default). horizon-launcher worlds list - `--instance`: The instance (default: the selected one) MCP: `worlds_list`. ## `horizon-launcher worlds backup` Zip a world into the instance's backups/ folder, as the game's Make Backup does. horizon-launcher worlds backup - `WORLD`: Its folder or name - `--instance` MCP: `worlds_backup`. ## `horizon-launcher worlds copy` Copy a world beside it, as " (1)". horizon-launcher worlds copy - `WORLD` - `--instance` MCP: `worlds_copy`. ## `horizon-launcher worlds delete` Move a world to the system's trash. horizon-launcher worlds delete - `WORLD` - `--instance` MCP: `worlds_delete`, needs `confirm: true`. ## `horizon-launcher worlds datapack-list` A world's data packs, and which are on. horizon-launcher worlds datapack-list - `WORLD` - `--instance` MCP: `worlds_datapack_list`. ## `horizon-launcher worlds datapack-add` Copy a data pack zip into a world (the game turns it on when the world opens). horizon-launcher worlds datapack-add - `WORLD` - `FILE` - `--instance` MCP: `worlds_datapack_add`. ## `horizon-launcher worlds datapack-remove` Move a world's data pack to the system's trash. horizon-launcher worlds datapack-remove - `WORLD` - `PACK`: Its file name, with or without .zip - `--instance` MCP: `worlds_datapack_remove`, needs `confirm: true`. ## `horizon-launcher packs list` The resource and shader packs, and which are on (the default). horizon-launcher packs list - `--kind` (resource, shader): Only this kind - `--instance`: The instance (default: the selected one) MCP: `packs_list`. ## `horizon-launcher packs add` Copy a pack file in: a resource pack .zip, a shader pack .zip or a .hshader. horizon-launcher packs add - `FILE` - `--instance` MCP: `packs_add`. ## `horizon-launcher packs on` Turn a pack on (a resource pack goes on top; a shader pack replaces the one that was on). horizon-launcher packs on - `PACK`: Its file name or title - `--kind` (resource, shader) - `--instance` MCP: `packs_on`. ## `horizon-launcher packs off` Turn a pack off. horizon-launcher packs off - `PACK` - `--kind` (resource, shader) - `--instance` MCP: `packs_off`. ## `horizon-launcher packs remove` Turn a pack off and move it to the system's trash. horizon-launcher packs remove - `PACK` - `--kind` (resource, shader) - `--instance` MCP: `packs_remove`, needs `confirm: true`. ## `horizon-launcher screenshots list` The screenshots, the newest first, with their files (the default). horizon-launcher screenshots list - `--instance`: The instance (default: the selected one) MCP: `screenshots_list`. ## `horizon-launcher screenshots delete` Move a screenshot to the system's trash. horizon-launcher screenshots delete - `SCREENSHOT`: Its file name, with or without .png - `--instance` MCP: `screenshots_delete`, needs `confirm: true`. ## `horizon-launcher multiplayer list` The servers of the game's Multiplayer screen (the default). horizon-launcher multiplayer list - `--instance`: The instance (default: the selected one) MCP: `multiplayer_list`. ## `horizon-launcher multiplayer add` Add a server to the list. horizon-launcher multiplayer add
- `ADDRESS`: Its address, as in the game's Add Server (host or host:port) - `--name`: Its name in the list (default: Minecraft Server) - `--instance` MCP: `multiplayer_add`. ## `horizon-launcher multiplayer remove` Remove a server from the list: its position from 1, name or address. horizon-launcher multiplayer remove - `SERVER` - `--instance` MCP: `multiplayer_remove`, needs `confirm: true`. ## `horizon-launcher modpack list` The imported packs and their coverage (the default). horizon-launcher modpack list MCP: `modpack_list`. ## `horizon-launcher modpack import` Import a .mrpack, a CurseForge zip or an instance folder, and write its coverage report. horizon-launcher modpack import - `PATH` MCP: `modpack_import`. ## `horizon-launcher modpack port` Get the jars of what this computer can port and carry them over. horizon-launcher modpack port - `PACK`: The pack's folder name, as list shows it - `--from`: A folder with your own jars (an installed instance, a downloads folder) MCP: `modpack_port`. ## `horizon-launcher modpack play` Play a ported pack as its own profile. horizon-launcher modpack play - `PACK` MCP: `modpack_play`. ## `horizon-launcher modpack remove` Remove an imported pack: its jars, ports and the profile's saves. horizon-launcher modpack remove - `PACK` MCP: `modpack_remove`, needs `confirm: true`. ## `horizon-launcher mods list` What the browser installed in an instance (the default). horizon-launcher mods list - `--instance`: The instance (default: the selected one) MCP: `mods_list`. ## `horizon-launcher mods search` Search for packs Horizon loads. horizon-launcher mods search [TEXT]... - `TEXT` - `--kind` (mod, resource, modpack, shader, datapack) - `--everything`: Also what was made for other versions or runs only partly, each marked - `--source` (modrinth, curseforge, horizon) MCP: `mods_search`. ## `horizon-launcher mods check` Say how well a Java mod runs in Horizon: its jar is downloaded (checksum checked), carried over and read; the answer is kept. horizon-launcher mods check - `PROJECT` - `--everything`: Allow a version made for another Minecraft version (1.21 and later) - `--source` (modrinth, curseforge, horizon) MCP: `mods_check`. ## `horizon-launcher mods install` Install a pack and what it needs into an instance, by its id or slug (checksums checked); a Java mod is ported into horizon-mods and turned on; a modpack is imported as an instance of its own; a data pack goes into the world `--world` names. horizon-launcher mods install - `PROJECT` - `--world`: Install the project's data pack into this world of the instance (its name or folder) - `--instance`: The instance (default: the selected one) - `--everything`: Allow a version made for another Minecraft version - `--source` (modrinth, curseforge, horizon) MCP: `mods_install`. ## `horizon-launcher mods update` Update what the browser installed (or one pack). horizon-launcher mods update [PROJECT] - `PROJECT` - `--check`: Only say what is newer - `--instance`: The instance (default: the selected one) MCP: `mods_update`. ## `horizon-launcher mods remove` Remove a pack the browser installed. horizon-launcher mods remove - `PROJECT` - `--instance`: The instance (default: the selected one) MCP: `mods_remove`, needs `confirm: true`. ## `horizon-launcher mods enable` Turn on a mod the browser installed (horizon-mods.txt, as the game's Options > Mods does). horizon-launcher mods enable - `PROJECT` - `--instance`: The instance (default: the selected one) MCP: `mods_enable`. ## `horizon-launcher mods disable` Turn off a mod the browser installed; it stays installed. horizon-launcher mods disable - `PROJECT` - `--instance`: The instance (default: the selected one) MCP: `mods_disable`. ## `horizon-launcher rust status` Whether it is installed, its version and whether this computer can link with it. horizon-launcher rust status MCP: `rust_status`. ## `horizon-launcher rust install` Download the pinned toolchain from static.rust-lang.org (once), checked by SHA-256. horizon-launcher rust install MCP: `rust_install`. ## `horizon-launcher rust remove` Delete the toolchain and the native builds' Cargo home. horizon-launcher rust remove MCP: `rust_remove`. ## `horizon-launcher servers list` The servers, their folder and whether they run. horizon-launcher servers list MCP: `servers_list`. ## `horizon-launcher servers create` Create a server; with no options it is a new world, survival, normal, 10 players, friends only. horizon-launcher servers create - `--name` - `--seed`: The new world's seed (default: random) - `--copy-world`: Start from a copy of this world folder (one of your saves) - `--mode` (survival, creative, adventure, spectator) - `--difficulty` (peaceful, easy, normal, hard) - `--max-players` - `--open`: Let anyone in (no whitelist) - `--check-accounts`: Check players' Minecraft accounts (they must sign in with Microsoft) - `--player`: Who may join (repeatable); the first becomes an operator - `--accept-eula`: Agree to the Minecraft EULA (https://aka.ms/MinecraftEULA) MCP: `servers_create`, only when the player asks. ## `horizon-launcher servers set-up` Copy an installed, prepared version's programs and game files for the servers (again). horizon-launcher servers set-up MCP: `servers_set_up`. ## `horizon-launcher servers run` Run a horizon-server command on a server, for example: servers run "My server" -- status. horizon-launcher servers run -- ... - `SERVER`: The server's name or folder - `ARGS` MCP: `servers_run`. ## `horizon-launcher servers forget` Take a server off the list (its folder stays). horizon-launcher servers forget - `SERVER` MCP: `servers_forget`, needs `confirm: true`. ## `horizon-launcher mcp` Serve the Model Context Protocol on stdin and stdout, for AI agents (refused while No AI is on). horizon-launcher mcp MCP: none: this command is the MCP server. ## `horizon-launcher agent-config` How to connect an AI agent (Claude Code, Codex, Cursor, any MCP client) to `mcp`: the config to paste and the command that adds it (refused while No AI is on). horizon-launcher agent-config - `--client` (claude-code, codex, cursor, generic): Only this client - `--test`: Start the MCP server as a client would and say whether it answered MCP: none: it prints how to connect a client to `mcp`. ## `horizon-launcher no-ai` Show or set No AI: on hides and turns off every AI feature (the companion, agent control, horizon-ctl and both MCP servers); off, the default, makes them available. horizon-launcher no-ai [STATE] - `STATE` (on, off): Omit to show the current state MCP: none: the player's switch. ## `horizon-launcher benchmark` Measure the launcher: starts (the first is the cold one), page switching, idle CPU and memory, the release list fetch; writes a benchmark report to benchmarks/ in its data folder. horizon-launcher benchmark - `--repeats`: How many times to start it MCP: `benchmark`.