Skip to main content
Glama

xbox-mcp

Control an Xbox Series X|S by voice: an MCP server and claude-voice plugin.

It is a small MCP server over stdio, and an optional plugin for claude-voice. It reaches the console through Microsoft's cloud with python-xbox, and makes only the library calls listed in ADR-XB-001. No tool touches the store, purchases, the account, family, privacy, settings, friends or messages.

Try it without an Xbox

--simulate answers from a pretend Xbox, and says so:

$ uv run xbox-mcp status --simulate
Simulated: The Xbox is asleep.

The server itself, as a voice session starts it; it ends when its input does:

$ uv run xbox-mcp serve --simulate < /dev/null

Related MCP server: Alexa Echo MCP

The tools

Tool

Does

Changes anything

xbox_status

Whether the Xbox is on, asleep or off, and the game or app it runs

No

xbox_power_request

Asks whether to wake the Xbox or put it to sleep, and hands out a token; sends nothing

No

xbox_power_confirm

With that token, within 30 seconds and once only: wakes or sleeps the Xbox, reads it back, and after a wake switches its TV to the Xbox

Wakes or sleeps the Xbox

xbox_launch

Starts a game from the owner's own list, only if it is installed and the Xbox is on, and reads it back

Starts a game

Every answer has say, read aloud as it is, and success with outcome for a program: done, asked (a power question waits for the owner's yes), unreachable (Microsoft's cloud did not answer), signed_out (no Microsoft sign-in yet), refused, not_confirmed (a command was taken, but the console's status does not show it yet), or working (still going after the voice's time, and carrying on). Every answer that does not succeed also says what to do next.

Which actions are risky is the owner's call (the plugin standard's rule 7). Waking and sleeping are: each is a question read aloud, and then a confirm with a single-use token after the owner's spoken yes. Between 22:00 and 07:00 a wake is refused unless the TV the Xbox is plugged into is already on, because waking the Xbox switches that TV on through HDMI-CEC. By day, the question says the TV will come on too.

Settings

In ~/.config/xbox-mcp/config.toml, never in this repository:

[launch]                      # the only games xbox_launch may start
titles = ["Forza Horizon 5", "Minecraft"]

[tv]
command = ["uv", "run", "--directory", "~/tv-mcp", "tv-mcp", "serve"]
name = "the living-room TV"   # the TV, as the TV plugin knows it
device = "Xbox"               # the device on its input, as the TV plugin knows it

[night]                       # when a wake needs that TV already on
starts = 22
ends = 7

The TV is reached through the TV plugin's own tools (tv-mcp): only tv_status and tv_input, never a power tool.

Before you start

The console has to be set up once, by hand. The Norwegian menu names are in brackets.

  1. Settings → General → Power options (Strømalternativer): choose Sleep (Hvilemodus), not "Full shutdown / energy saving". Otherwise neither the network nor HDMI-CEC can wake it. Auto-off after one hour (the default) is fine: in Sleep mode the console only goes to sleep.

  2. Settings → Devices & connections (Enheter og tilkoblinger) → Remote features (Eksterne funksjoner) → Enable remote features. Set access to "Only from profiles signed in on this Xbox".

  3. Settings → TV & display options → Device control: enable HDMI-CEC. Turn on:

    • Play To;

    • the console turns other devices on;

    • other devices can turn the console off;

    • volume commands;

    • switching the TV's input with the controller.

    Leave "the console turns off other devices" off.

    To check it, restart the console: the TV should come on and show the Xbox.

With HDMI-CEC on, waking the console switches its TV on. That is why the plugin refuses to wake it at night unless that TV is already on (ADR-XB-003).

The gates

Every one of these runs in continuous integration, and all of them run here:

$ uv run ruff check .
All checks passed!
uv run ruff format --check .   # layout
uv run mypy src                # types
uv run pytest -q               # behaviour
python scripts/mutate.py       # that each rule's own test can fail

CONTRIBUTING.md says what each one is for, and decisions/ records the choices that shaped them, including how a change is made here.

Licence

GPL-3.0-or-later. See LICENSE.

Available Tools

4 tools
xbox_launchA

Start a listed game. Title: words of a game on the owner's own list. Only an installed title on that list starts, only while the Xbox is on, and the answer says 'not confirmed' until the Xbox shows it.

Inputs: title (required). Returns: object

xbox_power_confirmA

Carry out the owner's yes. Token: from the latest xbox_power_request, used once, within 30 seconds. Wakes or sleeps the Xbox, says 'not confirmed' until its status shows it, and after a wake switches the TV to the Xbox.

Inputs: token (required). Returns: object

xbox_power_requestA

Asks before wake or sleep. Action: wake or sleep. Sends nothing: read the question in 'say' aloud, and pass its token to xbox_power_confirm only on the owner's clear yes. At night a wake is refused unless the TV is already on.

Inputs: action (required). Returns: object

xbox_statusA
Read-only

Is it on, and what runs? Whether the Xbox is on, asleep or off, and the game or app it runs.

Inputs: no named parameters. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool maps to a distinct step: status reads state, power_request asks the owner, power_confirm executes the token, and launch starts a game. The descriptions explicitly explain the request→confirm handoff, so there is no realistic misselection.

    Naming Consistency4/5

    All names share the xbox_ snake_case prefix and a predictable verb/noun shape (xbox_power_request, xbox_power_confirm, xbox_launch). xbox_status is a bare noun getter rather than an action name, a minor deviation in an otherwise consistent scheme.

    Tool Count4/5

    Four tools is small but sensible for a single-device control surface, and each earns its place. It is on the thin side, though the split of power into request/confirm justifies two entries.

    Completeness3/5

    Status, power lifecycle, and launching are covered, but there is no tool to list the owner's games (xbox_launch requires a title from a list the agent cannot read) and no way to quit an app or handle media/volume. These are notable gaps that could dead-end an agent.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables users to run their saved rote plays by voice: a spoken request is matched to a procedure, launched asynchronously in the background, and its result reported later on demand. Writes and registry plays stay gated behind allowlists, confirmation codes, and OAuth-secured Streamable HTTP access.
      Apache 2.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables an AI assistant to control your own Amazon Echo devices and Alexa smart-home devices, including speaking messages, running routines, sending text commands, listing routines and devices, and controlling device power or brightness through an unofficial Alexa app session.
      45 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables Alexa+ to answer spoken questions about a home's energy use and act on them through seven voice-first tools, covering live device status, usage and cost reports, waste detection, savings recommendations, automation listing, device control, and confirmed energy-plan application.
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables users to drive one or more networked retro gaming devices through natural language: finding and launching games, viewing what's playing and play history, taking screenshots, backing up saves, editing configuration settings, writing or mapping NFC cards, and triggering system updates. Actions are host-aware, dry-runnable, and safety-checked, so it refuses to guess which device is meant or to disturb a game already running.
      14
      MIT