Skip to main content
Glama

HomeAssistant MCP

hass.ts2.96 kB
import { z } from 'zod'; // Entity Schema const entitySchema = z.object({ entity_id: z.string().regex(/^[a-z0-9_]+\.[a-z0-9_]+$/), state: z.string(), attributes: z.record(z.any()), last_changed: z.string(), last_updated: z.string(), context: z.object({ id: z.string(), parent_id: z.string().nullable(), user_id: z.string().nullable() }) }); // Service Schema const serviceSchema = z.object({ domain: z.string().min(1), service: z.string().min(1), target: z.object({ entity_id: z.union([z.string(), z.array(z.string())]), device_id: z.union([z.string(), z.array(z.string())]).optional(), area_id: z.union([z.string(), z.array(z.string())]).optional() }).optional(), service_data: z.record(z.any()).optional() }); // State Changed Event Schema const stateChangedEventSchema = z.object({ event_type: z.literal('state_changed'), data: z.object({ entity_id: z.string(), old_state: z.union([entitySchema, z.null()]), new_state: entitySchema }), origin: z.string(), time_fired: z.string(), context: z.object({ id: z.string(), parent_id: z.string().nullable(), user_id: z.string().nullable() }) }); // Config Schema const configSchema = z.object({ location_name: z.string(), time_zone: z.string(), components: z.array(z.string()), version: z.string() }); // Device Control Schema const deviceControlSchema = z.object({ domain: z.string().min(1), command: z.string().min(1), entity_id: z.union([z.string(), z.array(z.string())]), parameters: z.record(z.any()).optional() }).refine(data => { if (typeof data.entity_id === 'string') { return data.entity_id.startsWith(data.domain + '.'); } return data.entity_id.every(id => id.startsWith(data.domain + '.')); }, { message: 'entity_id must match the domain' }); // Validation functions export const validateEntity = (data: unknown) => { const result = entitySchema.safeParse(data); return { success: result.success, error: result.success ? undefined : result.error }; }; export const validateService = (data: unknown) => { const result = serviceSchema.safeParse(data); return { success: result.success, error: result.success ? undefined : result.error }; }; export const validateStateChangedEvent = (data: unknown) => { const result = stateChangedEventSchema.safeParse(data); return { success: result.success, error: result.success ? undefined : result.error }; }; export const validateConfig = (data: unknown) => { const result = configSchema.safeParse(data); return { success: result.success, error: result.success ? undefined : result.error }; }; export const validateDeviceControl = (data: unknown) => { const result = deviceControlSchema.safeParse(data); return { success: result.success, error: result.success ? undefined : result.error }; };

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/jango-blockchained/advanced-homeassistant-mcp'

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