Home Assistant MCP

import os import click import logging import sys from .server import serve HOME_ASSISTANT_WEB_SOCKET_URL = os.getenv("HOME_ASSISTANT_WEB_SOCKET_URL") HOME_ASSISTANT_API_TOKEN = os.getenv("HOME_ASSISTANT_API_TOKEN") @click.command() @click.option("--url", required=False, help="Home Assistant websocket url") @click.option("--token", required=False, help="Home Assistant token") @click.option("-v", "--verbose", count=True) def main(url: str, token: str, verbose: bool) -> None: """MCP Home Assistant Server.""" import asyncio logging_level = logging.WARN if verbose == 1: logging_level = logging.INFO elif verbose >= 2: logging_level = logging.DEBUG if not url: url = HOME_ASSISTANT_WEB_SOCKET_URL or "" if not url: raise click.ClickException("url or environment var HOME_ASSISTANT_WEB_SOCKET_URL is required") if not token: token = HOME_ASSISTANT_API_TOKEN or "" if not token: raise click.ClickException("token or environment var HOME_ASSISTANT_API_TOKEN is required") logging.basicConfig(level=logging_level, stream=sys.stderr) asyncio.run(serve(url or HOME_ASSISTANT_WEB_SOCKET_URL, token or HOME_ASSISTANT_API_TOKEN)) if __name__ == "__main__": main()