xbox-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@xbox-mcp is my Xbox on, and what game is running?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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/nullRelated MCP server: Alexa Echo MCP
The tools
Tool | Does | Changes anything |
| Whether the Xbox is on, asleep or off, and the game or app it runs | No |
| Asks whether to wake the Xbox or put it to sleep, and hands out a token; sends nothing | No |
| 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 |
| 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 = 7The 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.
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.
Settings → Devices & connections (Enheter og tilkoblinger) → Remote features (Eksterne funksjoner) → Enable remote features. Set access to "Only from profiles signed in on this Xbox".
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 failCONTRIBUTING.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 toolsxbox_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_statusARead-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
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
Control your Tesla from your AI assistant - climate, charging, access, and security.
Query your Twitch streams, events, supporters, raids & rankings from an AI assistant via OAuth.
Control your existing Philips lights, Sonos speakers, Roborock vacuums and other supported devices through Port OS cloud. Give ChatGPT, Claude and other MCP-compatible assistants access to the devices you connect. Turn off the living room lights, play music on your speakers, adjust the thermostat, run a vacuum in a room, check a camera snapshot or find a connected tracker. Available actions depend on your linked provider accounts and each device’s supported capabilities. Port OS runs in the cloud; no local server is required. You choose the account, device and capability permissions each assistant receives. Device operations require user OAuth; public tool discovery does not grant device access. Port OS is in alpha. Setup: https://portoperatingsystem.com/docs/getting-started/ Support: https://portoperatingsystem.com/contact/
Sonos MCP server: control your Sonos speakers from any MCP client. Play songs, artists and playlists, set volume, group rooms, move music to another room, switch to TV, spoken announcements and reminders. 27 tools, English and Chinese. Works through the official Sonos cloud, so there is no home bridge to install; sign in with OAuth. Requires the free ZoneFoundry iOS app.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseNot gradedqualityBmaintenanceEnables 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 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseAqualityBmaintenanceEnables 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.14MIT