Skip to main content
Glama

OXII Smart Home MCP Server

by BaoBao112233

OXII Smart Home MCP Server

Modern documentation for the device-control MCP stack that pairs with the FastAPI chatbot. Use this guide the same way you would the chatbot docs: it covers setup, commands, tooling, and troubleshooting for standalone MCP development.

πŸ”Ž Overview

Purpose

Expose OXII smart home controls (device info, switching, AC, cronjobs, one-touch, room scenarios) via the Model Context Protocol (MCP).

Transport

Server Sent Events (SSE) on port

9031

.

Runtime

Python 3.10+,

mcp.server.FastMCP

with LangChain MCP adapters.

Consumers

The FastAPI chatbot (

chatbot/

) or any MCP-compatible client.

mcp/oxii-server/ β”œβ”€β”€ main.py # Boots the FastMCP process and registers tools β”œβ”€β”€ tools/ # Tool implementations (auth, device control, cronjobs…) β”œβ”€β”€ client.py # Quick demo client for manual testing β”œβ”€β”€ docker-compose.yml # Containerized runtime (exposes :9031) └── .env.example # Sample environment for OXII credentials

βœ… Prerequisites

  • Python 3.10 or newer (Poetry will manage dependencies), or Docker Engine 20.10+

  • OXII account credentials with device access (phone, password, country)

  • Network access to the OXII staging/prod API defined in OXII_BASE_URL

βš™οΈ Environment configuration

Create a working copy of the environment file and fill in the secrets:

cp .env.example .env

Variable

Description

OXII_BASE_URL

Root URL for the OXII API (staging provided by default).

OXII_PHONE

/

OXII_PASSWORD

/

OXII_COUNTRY

Login used to obtain access tokens.

PORT

/

HOST

Optional overrides for where the MCP server listens (default

0.0.0.0:9031

).

DEBUG

Toggle verbose logging (

true

/

false

).

πŸš€ Running the server

Option 1 – Local Poetry workflow

poetry install poetry run python main.py

This starts the server at http://localhost:9031/sse.

Option 2 – Docker Compose

cp .env.example .env # if you have not already docker compose up --build -d

The compose stack exposes port 9031 on the host. Combine this with the chatbot by pointing OXII_MCP_SERVER_URL to http://host.docker.internal:9031/sse inside the chatbot container.

βœ… Verifying the service

1. Use the bundled client

poetry run python client.py

Select a tool from the prompt and provide the required parameters to confirm end-to-end connectivity.

2. Visit the built-in docs UI

  • Human friendly docs: http://host.docker.internal:9031/docx

  • Machine readable catalogue: http://host.docker.internal:9031/docs.json

3. Curl the SSE handshake

curl -N http://localhost:9031/sse

You should see an initial JSON payload describing the MCP capabilities.

🧰 Tool catalogue

Below is a quick reference for each registered MCP tool. All payloads are JSON structures passed through the MCP protocol.

Tool

Purpose

Key parameters

get_device_list

List homes, rooms, devices, and remote buttons.

token

switch_device_control

Toggle SH1/SH2 relay devices.

token

,

house_id

,

device_id

,

button_code

,

command

(

ON

/

OFF

)

control_air_conditioner

Full AC control (mode, temp, fan).

token

,

serial_number

,

mode

,

fan_speed

,

temperature

, etc.

create_device_cronjob

Add/update/remove cronjobs for switches or AC.

token

,

device_id

or

button_id

,

action

,

cron_expression

,

command

one_touch_control_all_devices

Execute a house-wide preset (e.g., β€œturn everything off”).

token

,

house_id

,

status

one_touch_control_by_type

Toggle devices by type (LIGHT, CONDITIONER, …).

token

,

house_id

,

device_type

,

status

room_one_touch_control

Run a single-room preset.

token

,

room_id

,

status

ℹ️ Detailed schemas live in tools/ next to each function. Review those modules for argument validation and API payload shapes.

πŸ”„ Working with the chatbot

  1. Start the MCP server (local or Docker) and ensure port 9031 is reachable from the chatbot environment.

  2. In chatbot/.env, set OXII_MCP_SERVER_URL=http://host.docker.internal:9031/sse when running the chatbot in Docker.

  3. Restart the chatbot container (docker compose restart app) to apply env changes.

  4. Use the chatbot endpoint POST /ai/agent-oxii with a valid OXII tokenβ€”the agent will automatically call the MCP tools.

πŸ§ͺ Testing & diagnostics

  • Unit checks – Run poetry run pytest if you add tests (seed file test_tools.py is available as a template).

  • Token validation – Use chatbot/test_folders/testing_api.py to fetch a fresh token before invoking tools.

  • Logs – With DEBUG=true, the server prints detailed traces for each MCP call. In Docker, view them with docker compose logs -f oxii-server.

πŸ›  Troubleshooting

Symptom

Suggested fix

httpx.ConnectError: All connection attempts failed

The consumer is pointing to

localhost

from inside Docker. Use

host.docker.internal

or run both services on the same Compose network.

Authentication failures

Double-check

OXII_PHONE

,

OXII_PASSWORD

, and

OXII_COUNTRY

. Tokens expireβ€”fetch a new one if requests start returning 401.

Cronjob payload rejected

Ensure the cron expression has 6 fields (

second minute hour day month weekday

) and matches the device type (SH1/SH2 vs SH4).

AC commands ignored

Some devices require numeric mode/fan values. See constants in

tools/ac_control.py

for valid ranges.

Docker rebuilds are slow

Use

docker compose build oxii-server --no-cache

after dependency changes, otherwise rely on cached layers.

πŸ“š Further reading

-
security - not tested
F
license - not found
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Enables control of OXII smart home devices through the Model Context Protocol, supporting device switching, air conditioner control, cronjobs, and room scenarios. Integrates with chatbots and MCP-compatible clients for natural language home automation.

  1. πŸ”Ž Overview
    1. βœ… Prerequisites
      1. βš™οΈ Environment configuration
        1. πŸš€ Running the server
          1. Option 1 – Local Poetry workflow
          2. Option 2 – Docker Compose
        2. βœ… Verifying the service
          1. 1. Use the bundled client
          2. 2. Visit the built-in docs UI
          3. 3. Curl the SSE handshake
        3. 🧰 Tool catalogue
          1. πŸ”„ Working with the chatbot
            1. πŸ§ͺ Testing & diagnostics
              1. πŸ›  Troubleshooting
                1. πŸ“š Further reading

                  MCP directory API

                  We provide all the information about MCP servers via our MCP API.

                  curl -X GET 'https://glama.ai/api/mcp/v1/servers/BaoBao112233/Mockup-MCP'

                  If you have feedback or need assistance with the MCP directory API, please join our Discord server