# API Reference ## MCP Schema Endpoint The server exposes an MCP (Model Context Protocol) schema endpoint that describes all available tools and their parameters: ```http GET /mcp ``` This endpoint returns a JSON schema describing all available tools, their parameters, and documentation resources. The schema follows the MCP specification and can be used by LLM clients to understand the server's capabilities. Example response: ```json { "tools": [ { "name": "list_devices", "description": "List all devices connected to Home Assistant", "parameters": { "type": "object", "properties": { "domain": { "type": "string", "enum": ["light", "climate", "alarm_control_panel", ...] }, "area": { "type": "string" }, "floor": { "type": "string" } } } }, // ... other tools ], "prompts": [], "resources": [ { "name": "Home Assistant API", "url": "https://developers.home-assistant.io/docs/api/rest/" } ] } ``` Note: The `/mcp` endpoint is publicly accessible and does not require authentication, as it only provides schema information. ## Device Control ### Common Entity Controls ```json { "tool": "control", "command": "turn_on", // or "turn_off", "toggle" "entity_id": "light.living_room" } ``` ### Light Control ```json { "tool": "control", "command": "turn_on", "entity_id": "light.living_room", "brightness": 128, "color_temp": 4000, "rgb_color": [255, 0, 0] } ``` ## Add-on Management ### List Available Add-ons ```json { "tool": "addon", "action": "list" } ``` ### Install Add-on ```json { "tool": "addon", "action": "install", "slug": "core_configurator", "version": "5.6.0" } ``` ### Manage Add-on State ```json { "tool": "addon", "action": "start", // or "stop", "restart" "slug": "core_configurator" } ``` ## Package Management ### List HACS Packages ```json { "tool": "package", "action": "list", "category": "integration" // or "plugin", "theme", "python_script", "appdaemon", "netdaemon" } ``` ### Install Package ```json { "tool": "package", "action": "install", "category": "integration", "repository": "hacs/integration", "version": "1.32.0" } ``` ## Automation Management ### Create Automation ```json { "tool": "automation_config", "action": "create", "config": { "alias": "Motion Light", "description": "Turn on light when motion detected", "mode": "single", "trigger": [ { "platform": "state", "entity_id": "binary_sensor.motion", "to": "on" } ], "action": [ { "service": "light.turn_on", "target": { "entity_id": "light.living_room" } } ] } } ``` ### Duplicate Automation ```json { "tool": "automation_config", "action": "duplicate", "automation_id": "automation.motion_light" } ``` ## Core Functions ### State Management ```http GET /api/state POST /api/state ``` Manages the current state of the system. **Example Request:** ```json POST /api/state { "context": "living_room", "state": { "lights": "on", "temperature": 22 } } ``` ### Context Updates ```http POST /api/context ``` Updates the current context with new information. **Example Request:** ```json POST /api/context { "user": "john", "location": "kitchen", "time": "morning", "activity": "cooking" } ``` ## Action Endpoints ### Execute Action ```http POST /api/action ``` Executes a specified action with given parameters. **Example Request:** ```json POST /api/action { "action": "turn_on_lights", "parameters": { "room": "living_room", "brightness": 80 } } ``` ### Batch Actions ```http POST /api/actions/batch ``` Executes multiple actions in sequence. **Example Request:** ```json POST /api/actions/batch { "actions": [ { "action": "turn_on_lights", "parameters": { "room": "living_room" } }, { "action": "set_temperature", "parameters": { "temperature": 22 } } ] } ``` ## Query Functions ### Get Available Actions ```http GET /api/actions ``` Returns a list of all available actions. **Example Response:** ```json { "actions": [ { "name": "turn_on_lights", "parameters": ["room", "brightness"], "description": "Turns on lights in specified room" }, { "name": "set_temperature", "parameters": ["temperature"], "description": "Sets temperature in current context" } ] } ``` ### Context Query ```http GET /api/context?type=current ``` Retrieves context information. **Example Response:** ```json { "current_context": { "user": "john", "location": "kitchen", "time": "morning", "activity": "cooking" } } ``` ## WebSocket Events The server supports real-time updates via WebSocket connections. ```javascript // Client-side connection example const ws = new WebSocket('ws://localhost:3000/ws'); ws.onmessage = (event) => { const data = JSON.parse(event.data); console.log('Received update:', data); }; ``` ### Supported Events - `state_change`: Emitted when system state changes - `context_update`: Emitted when context is updated - `action_executed`: Emitted when an action is completed - `error`: Emitted when an error occurs **Example Event Data:** ```json { "event": "state_change", "data": { "previous_state": { "lights": "off" }, "current_state": { "lights": "on" }, "timestamp": "2024-03-20T10:30:00Z" } } ``` ## Error Handling All endpoints return standard HTTP status codes: - 200: Success - 400: Bad Request - 401: Unauthorized - 403: Forbidden - 404: Not Found - 500: Internal Server Error **Error Response Format:** ```json { "error": { "code": "INVALID_PARAMETERS", "message": "Missing required parameter: room", "details": { "missing_fields": ["room"] } } } ``` ## Rate Limiting The API implements rate limiting to prevent abuse: - 100 requests per minute per IP for regular endpoints - 1000 requests per minute per IP for WebSocket connections When rate limit is exceeded, the server returns: ```json { "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Too many requests", "reset_time": "2024-03-20T10:31:00Z" } } ``` ## Example Usage ### Using curl ```bash # Get current state curl -X GET \ http://localhost:3000/api/state \ -H 'Authorization: ApiKey your_api_key_here' # Execute action curl -X POST \ http://localhost:3000/api/action \ -H 'Authorization: ApiKey your_api_key_here' \ -H 'Content-Type: application/json' \ -d '{ "action": "turn_on_lights", "parameters": { "room": "living_room", "brightness": 80 } }' ``` ### Using JavaScript ```javascript // Execute action async function executeAction() { const response = await fetch('http://localhost:3000/api/action', { method: 'POST', headers: { 'Authorization': 'ApiKey your_api_key_here', 'Content-Type': 'application/json' }, body: JSON.stringify({ action: 'turn_on_lights', parameters: { room: 'living_room', brightness: 80 } }) }); const data = await response.json(); console.log('Action result:', data); } ```