Xbox Live Blade MCP
Xbox Live profiles, achievements, friends, presence, game library, SmartGlass console control, and Store catalog — as an MCP server.
Built on xbox-webapi-python (200+ stars, 16 API providers, MIT). Designed for Sidereal and any MCP-compatible host.
Why another Xbox MCP?
| Feature | xboxlive-blade-mcp | Apify Xbox scrapers | gaming-mcp | Forerunner (Halo) |
|---|---|---|---|---|
| Real Xbox Live API (not scraping) | Yes | No (web scrape) | No (local FS) | Yes |
| Profile / gamerscore | Yes | Partial | No | Halo only |
| Achievements | Yes | No | No | No |
| Friends / presence | Yes | No | No | No |
| Game library + playtime | Yes | No | Local only | No |
| Messages (read/send) | Yes | No | No | No |
| Game clips + screenshots | Yes | No | No | No |
| SmartGlass console control | Yes | No | No | No |
| Store catalog search | Yes | Products only | No | No |
| Token-efficient output | Pipe-delimited | JSON blobs | JSON blobs | JSON blobs |
| Write gates | Yes | N/A | N/A | N/A |
| Credential scrubbing | Yes | Apify-managed | N/A | Basic |
| Cross-platform | macOS/Linux/Win | Cloud only | Windows only | Cross-platform |
| Cost | Free | $19-25/mo | Free | Free |
| Tool count | 22 | 1 (via gateway) | 3 | 6 |
| gaming-v1 contract | 17/17 | 0/17 | 0/17 | 0/17 |
Quick Start
1. Install
# Via uv (recommended)
uvx xboxlive-blade-mcp
# Via pip
pip install xboxlive-blade-mcp
2. Configure Azure App
- Go to portal.azure.com > App registrations > New registration
- Name:
xboxlive-blade-mcp(or any name) - Redirect URI:
http://localhost:8400/auth/callback(Web) - Note the Application (client) ID
- Under Certificates & secrets, create a Client secret (optional for public clients)
3. Authenticate
export XBOX_CLIENT_ID="your-azure-app-client-id"
export XBOX_CLIENT_SECRET="your-client-secret" # optional
xboxlive-blade-mcp auth
This opens a browser for Microsoft account login. Tokens are cached at ~/.xboxlive-blade-mcp/tokens.json and auto-refresh on each use.
4. Run
# stdio (Claude Desktop, Sidereal)
xboxlive-blade-mcp
# HTTP transport
XBOX_MCP_TRANSPORT=http xboxlive-blade-mcp
Claude Desktop / Sidereal config
{
"mcpServers": {
"xbox": {
"command": "uvx",
"args": ["xboxlive-blade-mcp"],
"env": {
"XBOX_CLIENT_ID": "your-client-id",
"XBOX_CLIENT_SECRET": "your-secret",
"XBOX_WRITE_ENABLED": "false"
}
}
}
}
Tools (22)
Read (17 tools)
| Tool | Description | gaming-v1 |
|---|---|---|
xbox_info |
Auth status, gamertag, write gate | — |
xbox_profile |
User profile (gamerscore, tier, bio) | profile |
xbox_search_users |
Search by gamertag | search_users |
xbox_achievements |
Per-game achievement list | achievements |
xbox_achievement_summary |
Overall gamerscore + completion % | achievement_summary |
xbox_achievement_compare |
Compare two users on a game | achievement_compare |
xbox_achievement_groups |
Base game + DLC completion | achievement_groups |
xbox_games |
Full game library | games_played |
xbox_games_recent |
Recently played | games_recent |
xbox_games_purchased |
Owned/entitled titles | games_purchased |
xbox_game_details |
Store product metadata | game_details |
xbox_search_games |
Catalog search | search_games |
xbox_friends |
Friends with online status | friends |
xbox_presence |
Detailed presence for one user | presence |
xbox_inbox |
Message inbox | — |
xbox_clips |
Game clips with URIs | — |
xbox_screenshots |
Screenshots with URIs | — |
Write-gated (4 tools) — require XBOX_WRITE_ENABLED=true
| Tool | Description | gaming-v1 | Gate |
|---|---|---|---|
xbox_send_message |
Send text message (256 char max) | send_message |
write |
xbox_friend_add |
Add friend / accept request | friend_add |
write |
xbox_friend_remove |
Remove a friend | friend_remove |
write + confirm |
xbox_console_command |
SmartGlass: power, volume, media | — | write + confirm |
xbox_consoles |
List registered consoles | devices |
— |
SmartGlass Commands
xbox_console_command supports: power_on, power_off, reboot, mute, unmute, volume_up, volume_down, play, pause, go_home, go_back
Output Format
Compact, pipe-delimited, LLM-optimised:
# xbox_profile
TestPlayer | xuid=2535428504476914 | gamerscore=15230 | account_tier=Gold | bio=Playing games
# xbox_friends
CoolGamer | Online | xuid=253542850... | playing=Halo Infinite | gamerscore=8500
AnotherFriend | Offline | xuid=253542850... | last_seen=2026-04-01T18:30
# xbox_achievements (title_id=1240327261)
## 1240327261 (62/100 unlocked, 1250/2000G)
First Blood | 50G | earned=2026-01-15T10:00 | Win your first match
Legendary | 100G | locked | Complete campaign on Legendary
Environment Variables
| Variable | Required | Secret | Default | Description |
|---|---|---|---|---|
XBOX_CLIENT_ID |
Yes | No | — | Azure App client ID |
XBOX_CLIENT_SECRET |
No | Yes | "" |
Azure App client secret |
XBOX_TOKEN_PATH |
No | No | ~/.xboxlive-blade-mcp/tokens.json |
Cached token location |
XBOX_WRITE_ENABLED |
No | No | false |
Enable write operations |
XBOX_MCP_TRANSPORT |
No | No | stdio |
stdio or http |
XBOX_MCP_HOST |
No | No | 127.0.0.1 |
HTTP bind host |
XBOX_MCP_PORT |
No | No | 8500 |
HTTP bind port |
XBOX_MCP_API_TOKEN |
No | Yes | — | Bearer token for HTTP auth |
Security Model
- Write gates: All mutations (messaging, friend management, SmartGlass) require
XBOX_WRITE_ENABLED=true - Confirm gates: SmartGlass power commands and friend removal require explicit
confirm=true - Credential scrubbing: XBL3.0 tokens, JWTs, client secrets stripped from all error output
- Token storage: Cached at
~/.xboxlive-blade-mcp/tokens.jsonwithchmod 600 - Auto-refresh: Tokens refresh automatically on each request; re-auth only on full expiry
- No credential leakage: Tool responses never contain tokens or secrets
Sidereal Marketplace
This MCP implements the gaming-v1 service contract (17/17 operations). It is published to the Sidereal Marketplace as a community plugin.
Contract Coverage
| Tier | Coverage | Operations |
|---|---|---|
| Required | 4/4 | profile, achievements, achievement_summary, games_played |
| Recommended | 4/4 | games_recent, friends, presence, search_users |
| Optional | 6/6 | achievement_compare, achievement_groups, games_purchased, devices, game_details, search_games |
| Gated | 3/3 | send_message, friend_add, friend_remove |
Development
# Clone
git clone https://github.com/Groupthink-dev/xboxlive-blade-mcp.git
cd xboxlive-blade-mcp
# Install with dev dependencies
uv sync --group dev --group test
# Run tests
uv run pytest
# Lint
uv run ruff check src/ tests/
uv run mypy src/
# Run locally
uv run xboxlive-blade-mcp
Architecture
src/xboxlive_blade_mcp/
├── server.py # FastMCP tools (22 tools across 8 domains)
├── client.py # Xbox Live API client (wraps xbox-webapi-python)
├── auth.py # Bearer token middleware (HTTP transport)
├── models.py # Config, write/confirm gates, credential scrubbing
├── formatters.py # Token-efficient pipe-delimited output
└── xbox_auth.py # Interactive OAuth2 browser flow (auth subcommand)
Dependencies
| Package | Purpose |
|---|---|
| fastmcp | MCP server framework |
| xbox-webapi | Xbox Live API client (16 providers, OAuth2, rate limiting) |
| httpx | Async HTTP (transitive via xbox-webapi) |
| pydantic | Validation (transitive via fastmcp) |
Underlying Xbox Live APIs
This MCP wraps the unofficial Xbox Live REST APIs which are the same endpoints used by the official Xbox app. They are not officially documented by Microsoft but have been stable for years. The community-maintained xbox-webapi-python library (200+ stars, 10 contributors) handles the complex auth chain (MSA OAuth2 -> Xbox User Token -> XSTS Token) and provides built-in rate limiting.
Licence
MIT
Metadata
Release files for xboxlive-blade-mcp 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xboxlive_blade_mcp-0.2.0.tar.gz | 102.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xboxlive_blade_mcp-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 124.2 kB
Release files / xboxlive_blade_mcp-0.2.0.tar.gz
| Download URL | xboxlive_blade_mcp-0.2.0.tar.gz |
|---|---|
| Size | 102.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
81f1fda19494fb996e0f4e84cb732730f1dd84d6e7e56e415c34a57da5fdbf54
|
|
BLAKE2b-256 checksum How to use checksums |
3762551c9e7414e4b8ea544c301837833857bf9e0ba787ec58498e37e667db57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 28, 2026.
Transparency logRelease files / xboxlive_blade_mcp-0.2.0-py3-none-any.whl
| Download URL | xboxlive_blade_mcp-0.2.0-py3-none-any.whl |
|---|---|
| Size | 21.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5bc13c3ea34e2cc06dfe6370e022b316e1ca8d8a8460fff8a04834cbbe6ce0a5
|
|
BLAKE2b-256 checksum How to use checksums |
e15e881fac9224e7f2a75925897638b9d8feda93dfdf5d99e025ecda7cc88961
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 28, 2026.
Transparency log