@coffeerunhobby/mcp-ha-connect 2.2.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/.env.example +1 -1
  2. package/README.md +11 -2
  3. package/dist/omadaClient/client.d.ts +6 -1
  4. package/dist/omadaClient/client.js +12 -1
  5. package/dist/omadaClient/client.js.map +1 -1
  6. package/dist/omadaClient/diagnose.d.ts +68 -0
  7. package/dist/omadaClient/diagnose.js +164 -0
  8. package/dist/omadaClient/diagnose.js.map +1 -0
  9. package/dist/omadaClient/index.d.ts +6 -0
  10. package/dist/omadaClient/index.js +15 -0
  11. package/dist/omadaClient/index.js.map +1 -1
  12. package/dist/omadaClient/macGroups.d.ts +58 -0
  13. package/dist/omadaClient/macGroups.js +124 -0
  14. package/dist/omadaClient/macGroups.js.map +1 -0
  15. package/dist/tools/infra/actions.d.ts +1 -1
  16. package/dist/tools/infra/actions.js +1 -1
  17. package/dist/tools/omada/index.js +6 -0
  18. package/dist/tools/omada/index.js.map +1 -1
  19. package/dist/tools/omada/macGroups.d.ts +19 -0
  20. package/dist/tools/omada/macGroups.js +77 -0
  21. package/dist/tools/omada/macGroups.js.map +1 -0
  22. package/dist/tools/omada/namespace.js +8 -0
  23. package/dist/tools/omada/namespace.js.map +1 -1
  24. package/dist/version.d.ts +1 -1
  25. package/dist/version.js +1 -1
  26. package/package.json +5 -1
  27. package/.codex/review-rules.md +0 -16
  28. package/.dockerignore +0 -8
  29. package/.gitattributes +0 -30
  30. package/.github/workflows/ci.yml +0 -193
  31. package/AGENTS.md +0 -389
  32. package/Dockerfile +0 -50
  33. package/docker-compose.yml +0 -23
  34. package/docs/CHANGELOG.md +0 -341
  35. package/docs/COVERAGE.md +0 -219
  36. package/docs/QUICK_START.md +0 -240
  37. package/eslint.config.js +0 -33
  38. package/n8n/ai-agent-safety-monitor.json +0 -355
  39. package/openapi.json +0 -1259
  40. package/scripts/check-version-sync.mjs +0 -69
  41. package/scripts/generate-jwt.ts +0 -121
  42. package/src/config.ts +0 -440
  43. package/src/haClient/automations.ts +0 -261
  44. package/src/haClient/calendars.ts +0 -94
  45. package/src/haClient/config.ts +0 -52
  46. package/src/haClient/devices.ts +0 -653
  47. package/src/haClient/entities.ts +0 -128
  48. package/src/haClient/events.ts +0 -689
  49. package/src/haClient/history.ts +0 -73
  50. package/src/haClient/index.ts +0 -336
  51. package/src/haClient/request.ts +0 -142
  52. package/src/haClient/services.ts +0 -45
  53. package/src/haClient/states.ts +0 -60
  54. package/src/haClient/updates.ts +0 -58
  55. package/src/haClient/wsCommand.ts +0 -44
  56. package/src/index.ts +0 -164
  57. package/src/localAI/index.ts +0 -88
  58. package/src/localAI/prompts.ts +0 -50
  59. package/src/localAI/providers/base.ts +0 -120
  60. package/src/localAI/providers/ollama.ts +0 -78
  61. package/src/localAI/providers/openai.ts +0 -86
  62. package/src/localAI/types.ts +0 -67
  63. package/src/omadaClient/auth.ts +0 -178
  64. package/src/omadaClient/client.ts +0 -337
  65. package/src/omadaClient/device.ts +0 -118
  66. package/src/omadaClient/index.ts +0 -310
  67. package/src/omadaClient/network.ts +0 -284
  68. package/src/omadaClient/request.ts +0 -365
  69. package/src/omadaClient/security.ts +0 -51
  70. package/src/omadaClient/site.ts +0 -344
  71. package/src/ownerQuestions/service.ts +0 -536
  72. package/src/permissions/index.ts +0 -143
  73. package/src/resources/index.ts +0 -213
  74. package/src/server/auth.ts +0 -175
  75. package/src/server/chatFace.ts +0 -789
  76. package/src/server/chatSlice.ts +0 -57
  77. package/src/server/common.ts +0 -170
  78. package/src/server/eventSubscription.ts +0 -343
  79. package/src/server/http.ts +0 -626
  80. package/src/server/instructions.ts +0 -97
  81. package/src/server/rateLimiter.ts +0 -227
  82. package/src/server/stdio.ts +0 -41
  83. package/src/server/stream.ts +0 -205
  84. package/src/tools/ai/analyzeSensors.ts +0 -33
  85. package/src/tools/ai/index.ts +0 -20
  86. package/src/tools/common.ts +0 -442
  87. package/src/tools/homeassistant/askOwner.ts +0 -133
  88. package/src/tools/homeassistant/automationControls.ts +0 -66
  89. package/src/tools/homeassistant/calendar.ts +0 -97
  90. package/src/tools/homeassistant/callService.ts +0 -25
  91. package/src/tools/homeassistant/controlClimate.ts +0 -68
  92. package/src/tools/homeassistant/controlCover.ts +0 -48
  93. package/src/tools/homeassistant/controlFan.ts +0 -44
  94. package/src/tools/homeassistant/controlLight.ts +0 -38
  95. package/src/tools/homeassistant/controlMediaPlayer.ts +0 -50
  96. package/src/tools/homeassistant/createAutomation.ts +0 -35
  97. package/src/tools/homeassistant/deleteAutomation.ts +0 -24
  98. package/src/tools/homeassistant/entityAction.ts +0 -35
  99. package/src/tools/homeassistant/entityGuard.ts +0 -28
  100. package/src/tools/homeassistant/getAllSensors.ts +0 -46
  101. package/src/tools/homeassistant/getAutomationTrace.ts +0 -30
  102. package/src/tools/homeassistant/getDomainSummary.ts +0 -29
  103. package/src/tools/homeassistant/getEntitiesByDomain.ts +0 -56
  104. package/src/tools/homeassistant/getHistory.ts +0 -24
  105. package/src/tools/homeassistant/getState.ts +0 -24
  106. package/src/tools/homeassistant/getStates.ts +0 -46
  107. package/src/tools/homeassistant/getVersion.ts +0 -21
  108. package/src/tools/homeassistant/index.ts +0 -121
  109. package/src/tools/homeassistant/listAutomations.ts +0 -35
  110. package/src/tools/homeassistant/listEntities.ts +0 -44
  111. package/src/tools/homeassistant/listPersons.ts +0 -46
  112. package/src/tools/homeassistant/sceneAndScript.ts +0 -53
  113. package/src/tools/homeassistant/searchEntities.ts +0 -58
  114. package/src/tools/homeassistant/sendNotification.ts +0 -179
  115. package/src/tools/homeassistant/systemTools.ts +0 -52
  116. package/src/tools/homeassistant/triggerAutomation.ts +0 -24
  117. package/src/tools/index.ts +0 -78
  118. package/src/tools/infra/actions.ts +0 -95
  119. package/src/tools/infra/index.ts +0 -138
  120. package/src/tools/omada/blockClient.ts +0 -28
  121. package/src/tools/omada/cyclePoePort.ts +0 -32
  122. package/src/tools/omada/deleteClient.ts +0 -27
  123. package/src/tools/omada/disableClientRateLimit.ts +0 -23
  124. package/src/tools/omada/getClient.ts +0 -14
  125. package/src/tools/omada/getDevice.ts +0 -14
  126. package/src/tools/omada/getFirewallSetting.ts +0 -14
  127. package/src/tools/omada/getInternetInfo.ts +0 -14
  128. package/src/tools/omada/getLanNetworkList.ts +0 -14
  129. package/src/tools/omada/getLanProfileList.ts +0 -14
  130. package/src/tools/omada/getPortForwardingStatus.ts +0 -26
  131. package/src/tools/omada/getRateLimitProfiles.ts +0 -14
  132. package/src/tools/omada/getSiteNtpStatus.ts +0 -14
  133. package/src/tools/omada/getSsidDetail.ts +0 -22
  134. package/src/tools/omada/getSsidList.ts +0 -21
  135. package/src/tools/omada/getSwitchStackDetail.ts +0 -14
  136. package/src/tools/omada/getThreatList.ts +0 -42
  137. package/src/tools/omada/getWlanGroupList.ts +0 -14
  138. package/src/tools/omada/graph.ts +0 -187
  139. package/src/tools/omada/index.ts +0 -153
  140. package/src/tools/omada/listBlockedClients.ts +0 -17
  141. package/src/tools/omada/listClients.ts +0 -14
  142. package/src/tools/omada/listClientsActivity.ts +0 -25
  143. package/src/tools/omada/listClientsPastConnections.ts +0 -44
  144. package/src/tools/omada/listDevices.ts +0 -14
  145. package/src/tools/omada/listDevicesStats.ts +0 -41
  146. package/src/tools/omada/listMostActiveClients.ts +0 -14
  147. package/src/tools/omada/listSites.ts +0 -18
  148. package/src/tools/omada/namespace.ts +0 -1164
  149. package/src/tools/omada/searchDevices.ts +0 -20
  150. package/src/tools/omada/setClientRateLimit.ts +0 -26
  151. package/src/tools/omada/setClientRateLimitProfile.ts +0 -25
  152. package/src/tools/omada/setSiteNtpServers.ts +0 -36
  153. package/src/tools/omada/setSsidEnabled.ts +0 -38
  154. package/src/tools/omada/unblockClient.ts +0 -26
  155. package/src/tools/types.ts +0 -11
  156. package/src/tools/utils/pagination-schema.ts +0 -27
  157. package/src/types/ai/index.ts +0 -11
  158. package/src/types/ai/types.ts +0 -67
  159. package/src/types/homeassistant/automations.ts +0 -43
  160. package/src/types/homeassistant/calendars.ts +0 -26
  161. package/src/types/homeassistant/config.ts +0 -14
  162. package/src/types/homeassistant/entities.ts +0 -14
  163. package/src/types/homeassistant/errors.ts +0 -33
  164. package/src/types/homeassistant/haConfig.ts +0 -7
  165. package/src/types/homeassistant/history.ts +0 -13
  166. package/src/types/homeassistant/index.ts +0 -46
  167. package/src/types/homeassistant/request.ts +0 -6
  168. package/src/types/homeassistant/serviceCall.ts +0 -18
  169. package/src/types/homeassistant/states.ts +0 -58
  170. package/src/types/homeassistant/updates.ts +0 -28
  171. package/src/types/index.ts +0 -12
  172. package/src/types/omada/activeClientInfo.ts +0 -17
  173. package/src/types/omada/clientActivity.ts +0 -32
  174. package/src/types/omada/clientBlockStatus.ts +0 -11
  175. package/src/types/omada/clientPastConnection.ts +0 -82
  176. package/src/types/omada/index.ts +0 -14
  177. package/src/types/omada/omadaApiResponse.ts +0 -5
  178. package/src/types/omada/omadaClientInfo.ts +0 -11
  179. package/src/types/omada/omadaDeviceInfo.ts +0 -11
  180. package/src/types/omada/omadaDeviceStats.ts +0 -31
  181. package/src/types/omada/omadaSiteSummary.ts +0 -5
  182. package/src/types/omada/oswStackDetail.ts +0 -11
  183. package/src/types/omada/paginatedResult.ts +0 -6
  184. package/src/types/omada/rateLimitProfile.ts +0 -58
  185. package/src/types/omada/threatInfo.ts +0 -38
  186. package/src/types/omada/tokenResult.ts +0 -6
  187. package/src/types.ts +0 -2
  188. package/src/utils/config-validations.ts +0 -68
  189. package/src/utils/jwt.ts +0 -112
  190. package/src/utils/logger.ts +0 -121
  191. package/src/utils/plainText.ts +0 -48
  192. package/src/utils/redact.ts +0 -59
  193. package/src/utils/sanitizeError.ts +0 -18
  194. package/src/utils/tlsDispatcher.ts +0 -69
  195. package/src/version.ts +0 -5
  196. package/tests/bdd/automation-creation.spec.ts +0 -214
  197. package/tests/bdd/automation-management.spec.ts +0 -267
  198. package/tests/bdd/calendar.spec.ts +0 -190
  199. package/tests/bdd/configuration.spec.ts +0 -283
  200. package/tests/bdd/device-control.spec.ts +0 -344
  201. package/tests/bdd/entity-listing.spec.ts +0 -208
  202. package/tests/bdd/entity-search.spec.ts +0 -183
  203. package/tests/bdd/history-retrieval.spec.ts +0 -195
  204. package/tests/bdd/notifications.spec.ts +0 -238
  205. package/tests/bdd/service-calls.spec.ts +0 -144
  206. package/tests/bdd/state-retrieval.spec.ts +0 -204
  207. package/tests/bench/hotpaths.bench.ts +0 -68
  208. package/tests/config.test.ts +0 -355
  209. package/tests/features/automation-creation.feature +0 -36
  210. package/tests/features/automation-management.feature +0 -54
  211. package/tests/features/calendar.feature +0 -37
  212. package/tests/features/configuration.feature +0 -70
  213. package/tests/features/device-control.feature +0 -100
  214. package/tests/features/entity-listing.feature +0 -51
  215. package/tests/features/entity-search.feature +0 -44
  216. package/tests/features/history-retrieval.feature +0 -38
  217. package/tests/features/notifications.feature +0 -37
  218. package/tests/features/service-calls.feature +0 -35
  219. package/tests/features/state-retrieval.feature +0 -37
  220. package/tests/fixtures/openapi-default-slice.json +0 -290
  221. package/tests/haClient/automationTrace.test.ts +0 -59
  222. package/tests/haClient/automations.test.ts +0 -149
  223. package/tests/haClient/config.test.ts +0 -117
  224. package/tests/haClient/entities.test.ts +0 -188
  225. package/tests/haClient/events.test.ts +0 -455
  226. package/tests/haClient/eventsTls.test.ts +0 -52
  227. package/tests/haClient/history.test.ts +0 -228
  228. package/tests/haClient/index.test.ts +0 -243
  229. package/tests/haClient/request.test.ts +0 -217
  230. package/tests/haClient/services.test.ts +0 -120
  231. package/tests/haClient/states.test.ts +0 -119
  232. package/tests/haClient/updates.test.ts +0 -193
  233. package/tests/index.test.ts +0 -160
  234. package/tests/integration/homeassistant.test.ts +0 -144
  235. package/tests/integration/omada.test.ts +0 -167
  236. package/tests/integration/server.test.ts +0 -151
  237. package/tests/localAI/index.test.ts +0 -177
  238. package/tests/localAI/ollama.test.ts +0 -187
  239. package/tests/localAI/openai.test.ts +0 -257
  240. package/tests/omadaClient/actions.test.ts +0 -161
  241. package/tests/omadaClient/clientBlocks.test.ts +0 -170
  242. package/tests/omadaClient/ntp.test.ts +0 -381
  243. package/tests/omadaClient/site.test.ts +0 -37
  244. package/tests/ownerQuestions/service.test.ts +0 -499
  245. package/tests/ownerQuestions/tools.test.ts +0 -186
  246. package/tests/permissions/index.test.ts +0 -217
  247. package/tests/resources/index.test.ts +0 -288
  248. package/tests/scripts/generateJwt.test.ts +0 -44
  249. package/tests/security/accessControl.test.ts +0 -223
  250. package/tests/security/authentication.test.ts +0 -117
  251. package/tests/security/configuration.test.ts +0 -170
  252. package/tests/security/cryptoTransport.test.ts +0 -172
  253. package/tests/security/dependencies.test.ts +0 -152
  254. package/tests/security/injection.test.ts +0 -117
  255. package/tests/security/insecureDesign.test.ts +0 -121
  256. package/tests/security/logging.test.ts +0 -131
  257. package/tests/security/resourceConsumption.test.ts +0 -142
  258. package/tests/server/auth.test.ts +0 -249
  259. package/tests/server/chatFace.test.ts +0 -320
  260. package/tests/server/common.test.ts +0 -84
  261. package/tests/server/http.test.ts +0 -561
  262. package/tests/server/instructions.test.ts +0 -152
  263. package/tests/server/memoizeJsonSchema.test.ts +0 -71
  264. package/tests/server/stdio.test.ts +0 -99
  265. package/tests/server/stream.test.ts +0 -285
  266. package/tests/server/toolVisibility.http.test.ts +0 -111
  267. package/tests/server/toolVisibility.test.ts +0 -129
  268. package/tests/tools/ai/analyzeSensors.test.ts +0 -227
  269. package/tests/tools/common.test.ts +0 -123
  270. package/tests/tools/homeassistant/handlers.test.ts +0 -872
  271. package/tests/tools/infra/invokeAction.test.ts +0 -280
  272. package/tests/tools/omada/graph.test.ts +0 -385
  273. package/tests/tools/omada/handlers.test.ts +0 -897
  274. package/tests/tools/omada/namespace.test.ts +0 -483
  275. package/tests/tools/registry.test.ts +0 -168
  276. package/tests/utils/config-validations.test.ts +0 -352
  277. package/tests/utils/jwt.test.ts +0 -115
  278. package/tests/utils/logger.test.ts +0 -327
  279. package/tests/utils/redact.test.ts +0 -105
  280. package/tsconfig.json +0 -24
  281. package/vitest.config.ts +0 -38
package/openapi.json DELETED
@@ -1,1259 +0,0 @@
1
- {
2
- "openapi": "3.1.0",
3
- "info": {
4
- "title": "Home Assistant MCP Wrapper",
5
- "version": "2.2.1",
6
- "description": "REST endpoints that wrap MCP tools for Home Assistant integration."
7
- },
8
- "servers": [
9
- { "url": "http://mcpserver.10.0.0.18.nip.io:3000", "description": "MCP Server" },
10
- { "url": "http://homeassistant.10.0.0.19.nip.io:8123", "description": "Home Assistant" },
11
- { "url": "http://ollama.10.0.0.17.nip.io:11434", "description": "Ollama AI" },
12
- { "url": "http://127.0.0.1:3000", "description": "Local development" }
13
- ],
14
- "paths": {
15
- "/health": {
16
- "get": {
17
- "operationId": "health",
18
- "summary": "Health check",
19
- "tags": ["System"],
20
- "responses": {
21
- "200": {
22
- "description": "OK",
23
- "content": {
24
- "application/json": {
25
- "schema": {
26
- "type": "object",
27
- "properties": {
28
- "status": { "type": "string", "example": "ok" },
29
- "mcp_path": { "type": "string" },
30
- "ha_url": { "type": "string" },
31
- "token_configured": { "type": "boolean" }
32
- }
33
- }
34
- }
35
- }
36
- }
37
- }
38
- }
39
- },
40
-
41
- "/get_states": {
42
- "post": {
43
- "operationId": "get_states",
44
- "summary": "Get all entity states from Home Assistant",
45
- "tags": ["State & Entity"],
46
- "responses": {
47
- "200": {
48
- "description": "All entities",
49
- "content": {
50
- "application/json": {
51
- "schema": {
52
- "type": "object",
53
- "properties": {
54
- "count": { "type": "integer" },
55
- "entities": { "type": "array", "items": { "type": "object" } }
56
- }
57
- }
58
- }
59
- }
60
- }
61
- }
62
- }
63
- },
64
-
65
- "/get_state": {
66
- "post": {
67
- "operationId": "get_state",
68
- "summary": "Get state of a specific entity",
69
- "tags": ["State & Entity"],
70
- "requestBody": {
71
- "required": true,
72
- "content": {
73
- "application/json": {
74
- "schema": {
75
- "type": "object",
76
- "required": ["entity_id"],
77
- "properties": {
78
- "entity_id": { "type": "string", "example": "light.living_room" }
79
- }
80
- }
81
- }
82
- }
83
- },
84
- "responses": {
85
- "200": {
86
- "description": "Entity state",
87
- "content": {
88
- "application/json": {
89
- "schema": { "type": "object" }
90
- }
91
- }
92
- }
93
- }
94
- }
95
- },
96
-
97
- "/get_entities_by_domain": {
98
- "post": {
99
- "operationId": "get_entities_by_domain",
100
- "summary": "Get all entities for a specific domain",
101
- "tags": ["State & Entity"],
102
- "requestBody": {
103
- "required": true,
104
- "content": {
105
- "application/json": {
106
- "schema": {
107
- "type": "object",
108
- "required": ["domain"],
109
- "properties": {
110
- "domain": { "type": "string", "example": "light" }
111
- }
112
- }
113
- }
114
- }
115
- },
116
- "responses": {
117
- "200": {
118
- "description": "Entities in domain",
119
- "content": {
120
- "application/json": {
121
- "schema": {
122
- "type": "object",
123
- "properties": {
124
- "count": { "type": "integer" },
125
- "entities": { "type": "array", "items": { "type": "object" } }
126
- }
127
- }
128
- }
129
- }
130
- }
131
- }
132
- }
133
- },
134
-
135
- "/search_entities": {
136
- "post": {
137
- "operationId": "search_entities",
138
- "summary": "Search for entities by name or entity_id",
139
- "tags": ["State & Entity"],
140
- "requestBody": {
141
- "required": true,
142
- "content": {
143
- "application/json": {
144
- "schema": {
145
- "type": "object",
146
- "required": ["query"],
147
- "properties": {
148
- "query": { "type": "string", "example": "bedroom" }
149
- }
150
- }
151
- }
152
- }
153
- },
154
- "responses": {
155
- "200": {
156
- "description": "Matching entities",
157
- "content": {
158
- "application/json": {
159
- "schema": {
160
- "type": "object",
161
- "properties": {
162
- "query": { "type": "string" },
163
- "count": { "type": "integer" },
164
- "entities": { "type": "array", "items": { "type": "object" } }
165
- }
166
- }
167
- }
168
- }
169
- }
170
- }
171
- }
172
- },
173
-
174
- "/get_all_sensors": {
175
- "post": {
176
- "operationId": "get_all_sensors",
177
- "summary": "Get all sensor and binary_sensor entities",
178
- "tags": ["State & Entity"],
179
- "responses": {
180
- "200": {
181
- "description": "All sensors",
182
- "content": {
183
- "application/json": {
184
- "schema": {
185
- "type": "object",
186
- "properties": {
187
- "count": { "type": "integer" },
188
- "sensors": { "type": "array", "items": { "type": "object" } }
189
- }
190
- }
191
- }
192
- }
193
- }
194
- }
195
- }
196
- },
197
-
198
- "/list_entities": {
199
- "post": {
200
- "operationId": "list_entities",
201
- "summary": "List entities with optional filtering",
202
- "tags": ["State & Entity"],
203
- "requestBody": {
204
- "required": false,
205
- "content": {
206
- "application/json": {
207
- "schema": {
208
- "type": "object",
209
- "properties": {
210
- "domain": { "type": "string", "example": "light" },
211
- "search": { "type": "string", "example": "kitchen" },
212
- "state": { "type": "string", "example": "on" },
213
- "limit": { "type": "integer", "example": 10 }
214
- }
215
- }
216
- }
217
- }
218
- },
219
- "responses": {
220
- "200": {
221
- "description": "Filtered entities",
222
- "content": {
223
- "application/json": {
224
- "schema": {
225
- "type": "object",
226
- "properties": {
227
- "count": { "type": "integer" },
228
- "filters": { "type": "object" },
229
- "entities": { "type": "array", "items": { "type": "object" } }
230
- }
231
- }
232
- }
233
- }
234
- }
235
- }
236
- }
237
- },
238
-
239
- "/get_domain_summary": {
240
- "post": {
241
- "operationId": "get_domain_summary",
242
- "summary": "Get summary statistics for a domain",
243
- "tags": ["State & Entity"],
244
- "requestBody": {
245
- "required": true,
246
- "content": {
247
- "application/json": {
248
- "schema": {
249
- "type": "object",
250
- "required": ["domain"],
251
- "properties": {
252
- "domain": { "type": "string", "example": "light" }
253
- }
254
- }
255
- }
256
- }
257
- },
258
- "responses": {
259
- "200": {
260
- "description": "Domain summary",
261
- "content": {
262
- "application/json": {
263
- "schema": {
264
- "type": "object",
265
- "properties": {
266
- "domain": { "type": "string" },
267
- "total": { "type": "integer" },
268
- "states": { "type": "object" }
269
- }
270
- }
271
- }
272
- }
273
- }
274
- }
275
- }
276
- },
277
-
278
- "/get_history": {
279
- "post": {
280
- "operationId": "get_history",
281
- "summary": "Get historical data for an entity",
282
- "tags": ["State & Entity"],
283
- "requestBody": {
284
- "required": true,
285
- "content": {
286
- "application/json": {
287
- "schema": {
288
- "type": "object",
289
- "required": ["entity_id"],
290
- "properties": {
291
- "entity_id": { "type": "string", "example": "sensor.temperature" },
292
- "hours": { "type": "integer", "example": 24 }
293
- }
294
- }
295
- }
296
- }
297
- },
298
- "responses": {
299
- "200": {
300
- "description": "Historical data",
301
- "content": {
302
- "application/json": {
303
- "schema": {
304
- "type": "object",
305
- "properties": {
306
- "entity_id": { "type": "string" },
307
- "history": { "type": "array", "items": { "type": "object" } }
308
- }
309
- }
310
- }
311
- }
312
- }
313
- }
314
- }
315
- },
316
-
317
- "/list_persons": {
318
- "post": {
319
- "operationId": "list_persons",
320
- "summary": "List all household members (person entities)",
321
- "description": "Returns all person entities with location state (home/away/unknown) and linked device trackers.",
322
- "tags": ["State & Entity"],
323
- "responses": {
324
- "200": {
325
- "description": "Persons list",
326
- "content": {
327
- "application/json": {
328
- "schema": {
329
- "type": "object",
330
- "properties": {
331
- "count": { "type": "integer" },
332
- "onsite": { "type": "integer" },
333
- "away": { "type": "integer" },
334
- "persons": {
335
- "type": "array",
336
- "items": {
337
- "type": "object",
338
- "properties": {
339
- "entity_id": { "type": "string" },
340
- "name": { "type": "string" },
341
- "state": { "type": "string" },
342
- "device_trackers": { "type": "array", "items": { "type": "string" } }
343
- }
344
- }
345
- }
346
- }
347
- }
348
- }
349
- }
350
- }
351
- }
352
- }
353
- },
354
-
355
- "/call_service": {
356
- "post": {
357
- "operationId": "call_service",
358
- "summary": "Call any Home Assistant service",
359
- "tags": ["Service & Control"],
360
- "requestBody": {
361
- "required": true,
362
- "content": {
363
- "application/json": {
364
- "schema": {
365
- "type": "object",
366
- "required": ["domain", "service"],
367
- "properties": {
368
- "domain": { "type": "string", "example": "light" },
369
- "service": { "type": "string", "example": "turn_on" },
370
- "service_data": { "type": "object" },
371
- "target": {
372
- "type": "object",
373
- "properties": {
374
- "entity_id": { "type": "string" },
375
- "device_id": { "type": "string" },
376
- "area_id": { "type": "string" }
377
- }
378
- }
379
- }
380
- }
381
- }
382
- }
383
- },
384
- "responses": {
385
- "200": {
386
- "description": "Service result",
387
- "content": {
388
- "application/json": {
389
- "schema": { "type": "object" }
390
- }
391
- }
392
- }
393
- }
394
- }
395
- },
396
-
397
- "/entity_action": {
398
- "post": {
399
- "operationId": "entity_action",
400
- "summary": "Simple turn_on/turn_off/toggle actions",
401
- "tags": ["Service & Control"],
402
- "requestBody": {
403
- "required": true,
404
- "content": {
405
- "application/json": {
406
- "schema": {
407
- "type": "object",
408
- "required": ["entity_id", "action"],
409
- "properties": {
410
- "entity_id": { "type": "string", "example": "light.living_room" },
411
- "action": { "type": "string", "enum": ["turn_on", "turn_off", "toggle"] }
412
- }
413
- }
414
- }
415
- }
416
- },
417
- "responses": {
418
- "200": {
419
- "description": "Action result",
420
- "content": {
421
- "application/json": {
422
- "schema": { "type": "object" }
423
- }
424
- }
425
- }
426
- }
427
- }
428
- },
429
-
430
- "/control_light": {
431
- "post": {
432
- "operationId": "control_light",
433
- "summary": "Control lights with brightness, color, temperature",
434
- "tags": ["Device Control"],
435
- "requestBody": {
436
- "required": true,
437
- "content": {
438
- "application/json": {
439
- "schema": {
440
- "type": "object",
441
- "required": ["entity_id", "action"],
442
- "properties": {
443
- "entity_id": { "type": "string", "example": "light.living_room" },
444
- "action": { "type": "string", "enum": ["turn_on", "turn_off", "toggle"] },
445
- "brightness_pct": { "type": "integer", "minimum": 0, "maximum": 100 },
446
- "color_temp_kelvin": { "type": "integer", "example": 4000 },
447
- "rgb_color": { "type": "array", "items": { "type": "integer" }, "example": [255, 128, 0] },
448
- "transition": { "type": "number", "example": 2.0 }
449
- }
450
- }
451
- }
452
- }
453
- },
454
- "responses": {
455
- "200": {
456
- "description": "Light control result",
457
- "content": {
458
- "application/json": {
459
- "schema": { "type": "object" }
460
- }
461
- }
462
- }
463
- }
464
- }
465
- },
466
-
467
- "/control_climate": {
468
- "post": {
469
- "operationId": "control_climate",
470
- "summary": "Control thermostats with temperature, HVAC mode",
471
- "tags": ["Device Control"],
472
- "requestBody": {
473
- "required": true,
474
- "content": {
475
- "application/json": {
476
- "schema": {
477
- "type": "object",
478
- "required": ["entity_id"],
479
- "properties": {
480
- "entity_id": { "type": "string", "example": "climate.living_room" },
481
- "temperature": { "type": "number", "example": 72 },
482
- "hvac_mode": { "type": "string", "enum": ["off", "heat", "cool", "heat_cool", "auto", "dry", "fan_only"] },
483
- "fan_mode": { "type": "string" },
484
- "preset_mode": { "type": "string", "example": "eco" }
485
- }
486
- }
487
- }
488
- }
489
- },
490
- "responses": {
491
- "200": {
492
- "description": "Climate control result",
493
- "content": {
494
- "application/json": {
495
- "schema": { "type": "object" }
496
- }
497
- }
498
- }
499
- }
500
- }
501
- },
502
-
503
- "/control_media_player": {
504
- "post": {
505
- "operationId": "control_media_player",
506
- "summary": "Control media players with playback, volume",
507
- "tags": ["Device Control"],
508
- "requestBody": {
509
- "required": true,
510
- "content": {
511
- "application/json": {
512
- "schema": {
513
- "type": "object",
514
- "required": ["entity_id", "action"],
515
- "properties": {
516
- "entity_id": { "type": "string", "example": "media_player.living_room" },
517
- "action": { "type": "string", "enum": ["play", "pause", "stop", "next", "previous", "volume_set", "volume_mute"] },
518
- "volume_level": { "type": "number", "minimum": 0, "maximum": 1 },
519
- "is_volume_muted": { "type": "boolean" }
520
- }
521
- }
522
- }
523
- }
524
- },
525
- "responses": {
526
- "200": {
527
- "description": "Media player control result",
528
- "content": {
529
- "application/json": {
530
- "schema": { "type": "object" }
531
- }
532
- }
533
- }
534
- }
535
- }
536
- },
537
-
538
- "/control_cover": {
539
- "post": {
540
- "operationId": "control_cover",
541
- "summary": "Control covers/blinds with position, tilt",
542
- "tags": ["Device Control"],
543
- "requestBody": {
544
- "required": true,
545
- "content": {
546
- "application/json": {
547
- "schema": {
548
- "type": "object",
549
- "required": ["entity_id", "action"],
550
- "properties": {
551
- "entity_id": { "type": "string", "example": "cover.living_room_blinds" },
552
- "action": { "type": "string", "enum": ["open", "close", "stop", "set_position", "set_tilt"] },
553
- "position": { "type": "integer", "minimum": 0, "maximum": 100 },
554
- "tilt_position": { "type": "integer", "minimum": 0, "maximum": 100 }
555
- }
556
- }
557
- }
558
- }
559
- },
560
- "responses": {
561
- "200": {
562
- "description": "Cover control result",
563
- "content": {
564
- "application/json": {
565
- "schema": { "type": "object" }
566
- }
567
- }
568
- }
569
- }
570
- }
571
- },
572
-
573
- "/control_fan": {
574
- "post": {
575
- "operationId": "control_fan",
576
- "summary": "Control fans with speed, oscillation, direction",
577
- "tags": ["Device Control"],
578
- "requestBody": {
579
- "required": true,
580
- "content": {
581
- "application/json": {
582
- "schema": {
583
- "type": "object",
584
- "required": ["entity_id", "action"],
585
- "properties": {
586
- "entity_id": { "type": "string", "example": "fan.bedroom" },
587
- "action": { "type": "string", "enum": ["turn_on", "turn_off", "toggle", "set_speed", "oscillate", "set_direction"] },
588
- "percentage": { "type": "integer", "minimum": 0, "maximum": 100 },
589
- "oscillating": { "type": "boolean" },
590
- "direction": { "type": "string", "enum": ["forward", "reverse"] }
591
- }
592
- }
593
- }
594
- }
595
- },
596
- "responses": {
597
- "200": {
598
- "description": "Fan control result",
599
- "content": {
600
- "application/json": {
601
- "schema": { "type": "object" }
602
- }
603
- }
604
- }
605
- }
606
- }
607
- },
608
-
609
- "/activate_scene": {
610
- "post": {
611
- "operationId": "activate_scene",
612
- "summary": "Activate a Home Assistant scene",
613
- "tags": ["Device Control"],
614
- "requestBody": {
615
- "required": true,
616
- "content": {
617
- "application/json": {
618
- "schema": {
619
- "type": "object",
620
- "required": ["entity_id"],
621
- "properties": {
622
- "entity_id": { "type": "string", "example": "scene.movie_time" }
623
- }
624
- }
625
- }
626
- }
627
- },
628
- "responses": {
629
- "200": {
630
- "description": "Scene activation result",
631
- "content": {
632
- "application/json": {
633
- "schema": { "type": "object" }
634
- }
635
- }
636
- }
637
- }
638
- }
639
- },
640
-
641
- "/run_script": {
642
- "post": {
643
- "operationId": "run_script",
644
- "summary": "Run a Home Assistant script",
645
- "tags": ["Device Control"],
646
- "requestBody": {
647
- "required": true,
648
- "content": {
649
- "application/json": {
650
- "schema": {
651
- "type": "object",
652
- "required": ["entity_id"],
653
- "properties": {
654
- "entity_id": { "type": "string", "example": "script.morning_routine" },
655
- "variables": { "type": "object" }
656
- }
657
- }
658
- }
659
- }
660
- },
661
- "responses": {
662
- "200": {
663
- "description": "Script execution result",
664
- "content": {
665
- "application/json": {
666
- "schema": { "type": "object" }
667
- }
668
- }
669
- }
670
- }
671
- }
672
- },
673
-
674
- "/send_notification": {
675
- "post": {
676
- "operationId": "send_notification",
677
- "summary": "Send notifications with full mobile app support",
678
- "tags": ["Device Control"],
679
- "requestBody": {
680
- "required": true,
681
- "content": {
682
- "application/json": {
683
- "schema": {
684
- "type": "object",
685
- "required": ["message"],
686
- "properties": {
687
- "message": { "type": "string", "example": "Hello from MCP!" },
688
- "title": { "type": "string", "example": "Alert" },
689
- "target": { "type": "string", "example": "mobile_app_iphone" },
690
- "tag": { "type": "string" },
691
- "group": { "type": "string" },
692
- "priority": { "type": "string", "enum": ["high", "normal", "low", "min"] },
693
- "actions": {
694
- "type": "array",
695
- "items": {
696
- "type": "object",
697
- "properties": {
698
- "action": { "type": "string" },
699
- "title": { "type": "string" },
700
- "uri": { "type": "string" }
701
- }
702
- }
703
- },
704
- "image": { "type": "string" },
705
- "sticky": { "type": "boolean" },
706
- "data": { "type": "object" }
707
- }
708
- }
709
- }
710
- }
711
- },
712
- "responses": {
713
- "200": {
714
- "description": "Notification result",
715
- "content": {
716
- "application/json": {
717
- "schema": { "type": "object" }
718
- }
719
- }
720
- }
721
- }
722
- }
723
- },
724
-
725
- "/list_notification_targets": {
726
- "post": {
727
- "operationId": "list_notification_targets",
728
- "summary": "Discover available mobile app notification targets",
729
- "tags": ["Device Control"],
730
- "responses": {
731
- "200": {
732
- "description": "Available notification targets",
733
- "content": {
734
- "application/json": {
735
- "schema": {
736
- "type": "object",
737
- "properties": {
738
- "targets": { "type": "array", "items": { "type": "string" } }
739
- }
740
- }
741
- }
742
- }
743
- }
744
- }
745
- }
746
- },
747
-
748
- "/list_automations": {
749
- "post": {
750
- "operationId": "list_automations",
751
- "summary": "List all automations with status",
752
- "tags": ["Automation"],
753
- "requestBody": {
754
- "required": false,
755
- "content": {
756
- "application/json": {
757
- "schema": {
758
- "type": "object",
759
- "properties": {
760
- "state": { "type": "string", "enum": ["on", "off"] }
761
- }
762
- }
763
- }
764
- }
765
- },
766
- "responses": {
767
- "200": {
768
- "description": "Automations list",
769
- "content": {
770
- "application/json": {
771
- "schema": {
772
- "type": "object",
773
- "properties": {
774
- "count": { "type": "integer" },
775
- "automations": { "type": "array", "items": { "type": "object" } }
776
- }
777
- }
778
- }
779
- }
780
- }
781
- }
782
- }
783
- },
784
-
785
- "/trigger_automation": {
786
- "post": {
787
- "operationId": "trigger_automation",
788
- "summary": "Manually trigger an automation",
789
- "tags": ["Automation"],
790
- "requestBody": {
791
- "required": true,
792
- "content": {
793
- "application/json": {
794
- "schema": {
795
- "type": "object",
796
- "required": ["entity_id"],
797
- "properties": {
798
- "entity_id": { "type": "string", "example": "automation.morning_lights" },
799
- "variables": { "type": "object" }
800
- }
801
- }
802
- }
803
- }
804
- },
805
- "responses": {
806
- "200": {
807
- "description": "Trigger result",
808
- "content": {
809
- "application/json": {
810
- "schema": { "type": "object" }
811
- }
812
- }
813
- }
814
- }
815
- }
816
- },
817
-
818
- "/enable_automation": {
819
- "post": {
820
- "operationId": "enable_automation",
821
- "summary": "Enable a disabled automation",
822
- "tags": ["Automation"],
823
- "requestBody": {
824
- "required": true,
825
- "content": {
826
- "application/json": {
827
- "schema": {
828
- "type": "object",
829
- "required": ["entity_id"],
830
- "properties": {
831
- "entity_id": { "type": "string", "example": "automation.morning_lights" }
832
- }
833
- }
834
- }
835
- }
836
- },
837
- "responses": {
838
- "200": {
839
- "description": "Enable result",
840
- "content": {
841
- "application/json": {
842
- "schema": { "type": "object" }
843
- }
844
- }
845
- }
846
- }
847
- }
848
- },
849
-
850
- "/disable_automation": {
851
- "post": {
852
- "operationId": "disable_automation",
853
- "summary": "Disable an automation",
854
- "tags": ["Automation"],
855
- "requestBody": {
856
- "required": true,
857
- "content": {
858
- "application/json": {
859
- "schema": {
860
- "type": "object",
861
- "required": ["entity_id"],
862
- "properties": {
863
- "entity_id": { "type": "string", "example": "automation.morning_lights" }
864
- }
865
- }
866
- }
867
- }
868
- },
869
- "responses": {
870
- "200": {
871
- "description": "Disable result",
872
- "content": {
873
- "application/json": {
874
- "schema": { "type": "object" }
875
- }
876
- }
877
- }
878
- }
879
- }
880
- },
881
-
882
- "/toggle_automation": {
883
- "post": {
884
- "operationId": "toggle_automation",
885
- "summary": "Toggle automation state",
886
- "tags": ["Automation"],
887
- "requestBody": {
888
- "required": true,
889
- "content": {
890
- "application/json": {
891
- "schema": {
892
- "type": "object",
893
- "required": ["entity_id"],
894
- "properties": {
895
- "entity_id": { "type": "string", "example": "automation.morning_lights" }
896
- }
897
- }
898
- }
899
- }
900
- },
901
- "responses": {
902
- "200": {
903
- "description": "Toggle result",
904
- "content": {
905
- "application/json": {
906
- "schema": { "type": "object" }
907
- }
908
- }
909
- }
910
- }
911
- }
912
- },
913
-
914
- "/reload_automations": {
915
- "post": {
916
- "operationId": "reload_automations",
917
- "summary": "Reload automations from config",
918
- "tags": ["Automation"],
919
- "responses": {
920
- "200": {
921
- "description": "Reload result",
922
- "content": {
923
- "application/json": {
924
- "schema": { "type": "object" }
925
- }
926
- }
927
- }
928
- }
929
- }
930
- },
931
-
932
- "/create_automation": {
933
- "post": {
934
- "operationId": "create_automation",
935
- "summary": "Create a new automation",
936
- "tags": ["Automation"],
937
- "requestBody": {
938
- "required": true,
939
- "content": {
940
- "application/json": {
941
- "schema": {
942
- "type": "object",
943
- "required": ["alias", "trigger", "action"],
944
- "properties": {
945
- "alias": { "type": "string", "example": "Turn on lights at sunset" },
946
- "description": { "type": "string" },
947
- "mode": { "type": "string", "enum": ["single", "restart", "queued", "parallel"] },
948
- "trigger": { "type": "array", "items": { "type": "object" } },
949
- "condition": { "type": "array", "items": { "type": "object" } },
950
- "action": { "type": "array", "items": { "type": "object" } }
951
- }
952
- }
953
- }
954
- }
955
- },
956
- "responses": {
957
- "200": {
958
- "description": "Creation result",
959
- "content": {
960
- "application/json": {
961
- "schema": {
962
- "type": "object",
963
- "properties": {
964
- "id": { "type": "string" }
965
- }
966
- }
967
- }
968
- }
969
- }
970
- }
971
- }
972
- },
973
-
974
- "/delete_automation": {
975
- "post": {
976
- "operationId": "delete_automation",
977
- "summary": "Delete an automation",
978
- "tags": ["Automation"],
979
- "requestBody": {
980
- "required": true,
981
- "content": {
982
- "application/json": {
983
- "schema": {
984
- "type": "object",
985
- "required": ["automation_id"],
986
- "properties": {
987
- "automation_id": { "type": "string", "example": "1234567890" }
988
- }
989
- }
990
- }
991
- }
992
- },
993
- "responses": {
994
- "200": {
995
- "description": "Deletion result",
996
- "content": {
997
- "application/json": {
998
- "schema": { "type": "object" }
999
- }
1000
- }
1001
- }
1002
- }
1003
- }
1004
- },
1005
-
1006
- "/get_automation_trace": {
1007
- "post": {
1008
- "operationId": "get_automation_trace",
1009
- "summary": "Get automation execution history",
1010
- "tags": ["Automation"],
1011
- "requestBody": {
1012
- "required": true,
1013
- "content": {
1014
- "application/json": {
1015
- "schema": {
1016
- "type": "object",
1017
- "required": ["entity_id"],
1018
- "properties": {
1019
- "entity_id": { "type": "string", "example": "automation.morning_lights" }
1020
- }
1021
- }
1022
- }
1023
- }
1024
- },
1025
- "responses": {
1026
- "200": {
1027
- "description": "Execution traces",
1028
- "content": {
1029
- "application/json": {
1030
- "schema": {
1031
- "type": "object",
1032
- "properties": {
1033
- "traces": { "type": "array", "items": { "type": "object" } }
1034
- }
1035
- }
1036
- }
1037
- }
1038
- }
1039
- }
1040
- }
1041
- },
1042
-
1043
- "/get_version": {
1044
- "post": {
1045
- "operationId": "get_version",
1046
- "summary": "Get Home Assistant version and config info",
1047
- "tags": ["System"],
1048
- "responses": {
1049
- "200": {
1050
- "description": "Version info",
1051
- "content": {
1052
- "application/json": {
1053
- "schema": {
1054
- "type": "object",
1055
- "properties": {
1056
- "version": { "type": "string" },
1057
- "location_name": { "type": "string" },
1058
- "time_zone": { "type": "string" },
1059
- "components": { "type": "array", "items": { "type": "string" } }
1060
- }
1061
- }
1062
- }
1063
- }
1064
- }
1065
- }
1066
- }
1067
- },
1068
-
1069
- "/restart_home_assistant": {
1070
- "post": {
1071
- "operationId": "restart_home_assistant",
1072
- "summary": "Restart the Home Assistant server",
1073
- "tags": ["System"],
1074
- "responses": {
1075
- "200": {
1076
- "description": "Restart initiated",
1077
- "content": {
1078
- "application/json": {
1079
- "schema": { "type": "object" }
1080
- }
1081
- }
1082
- }
1083
- }
1084
- }
1085
- },
1086
-
1087
- "/get_system_log": {
1088
- "post": {
1089
- "operationId": "get_system_log",
1090
- "summary": "Get system log entries from logbook",
1091
- "tags": ["System"],
1092
- "requestBody": {
1093
- "required": false,
1094
- "content": {
1095
- "application/json": {
1096
- "schema": {
1097
- "type": "object",
1098
- "properties": {
1099
- "hours": { "type": "integer", "example": 24 },
1100
- "entity_id": { "type": "string" }
1101
- }
1102
- }
1103
- }
1104
- }
1105
- },
1106
- "responses": {
1107
- "200": {
1108
- "description": "Log entries",
1109
- "content": {
1110
- "application/json": {
1111
- "schema": {
1112
- "type": "object",
1113
- "properties": {
1114
- "entries": { "type": "array", "items": { "type": "object" } }
1115
- }
1116
- }
1117
- }
1118
- }
1119
- }
1120
- }
1121
- }
1122
- },
1123
-
1124
- "/check_updates": {
1125
- "post": {
1126
- "operationId": "check_updates",
1127
- "summary": "Check for available updates",
1128
- "tags": ["System"],
1129
- "responses": {
1130
- "200": {
1131
- "description": "Available updates",
1132
- "content": {
1133
- "application/json": {
1134
- "schema": {
1135
- "type": "object",
1136
- "properties": {
1137
- "updates": { "type": "array", "items": { "type": "object" } }
1138
- }
1139
- }
1140
- }
1141
- }
1142
- }
1143
- }
1144
- }
1145
- },
1146
-
1147
- "/analyze_sensors": {
1148
- "post": {
1149
- "operationId": "analyze_sensors",
1150
- "summary": "AI-powered sensor analysis using Ollama",
1151
- "tags": ["AI"],
1152
- "requestBody": {
1153
- "required": true,
1154
- "content": {
1155
- "application/json": {
1156
- "schema": {
1157
- "type": "object",
1158
- "required": ["sensors"],
1159
- "properties": {
1160
- "sensors": {
1161
- "type": "object",
1162
- "description": "Sensor data to analyze. Object with entity_id keys and {state, unit, attributes} values."
1163
- }
1164
- }
1165
- }
1166
- }
1167
- }
1168
- },
1169
- "responses": {
1170
- "200": {
1171
- "description": "Analysis result",
1172
- "content": {
1173
- "application/json": {
1174
- "schema": {
1175
- "type": "object",
1176
- "properties": {
1177
- "analysis": { "type": "string" }
1178
- }
1179
- }
1180
- }
1181
- }
1182
- }
1183
- }
1184
- }
1185
- },
1186
-
1187
- "/list_calendars": {
1188
- "post": {
1189
- "operationId": "list_calendars",
1190
- "summary": "List all calendar entities",
1191
- "tags": ["Calendar"],
1192
- "responses": {
1193
- "200": {
1194
- "description": "Calendars list",
1195
- "content": {
1196
- "application/json": {
1197
- "schema": {
1198
- "type": "object",
1199
- "properties": {
1200
- "count": { "type": "integer" },
1201
- "calendars": { "type": "array", "items": { "type": "object" } }
1202
- }
1203
- }
1204
- }
1205
- }
1206
- }
1207
- }
1208
- }
1209
- },
1210
-
1211
- "/get_calendar_events": {
1212
- "post": {
1213
- "operationId": "get_calendar_events",
1214
- "summary": "Get events from one or all calendars",
1215
- "tags": ["Calendar"],
1216
- "requestBody": {
1217
- "required": false,
1218
- "content": {
1219
- "application/json": {
1220
- "schema": {
1221
- "type": "object",
1222
- "properties": {
1223
- "entity_id": { "type": "string", "example": "calendar.my_calendar" },
1224
- "start_date": { "type": "string", "example": "2026-01-01" },
1225
- "end_date": { "type": "string", "example": "2026-01-31" },
1226
- "days": { "type": "integer", "example": 30 }
1227
- }
1228
- }
1229
- }
1230
- }
1231
- },
1232
- "responses": {
1233
- "200": {
1234
- "description": "Calendar events",
1235
- "content": {
1236
- "application/json": {
1237
- "schema": {
1238
- "type": "object",
1239
- "properties": {
1240
- "events": { "type": "array", "items": { "type": "object" } }
1241
- }
1242
- }
1243
- }
1244
- }
1245
- }
1246
- }
1247
- }
1248
- }
1249
- },
1250
- "tags": [
1251
- { "name": "System", "description": "Health check and system info" },
1252
- { "name": "State & Entity", "description": "Entity state and search tools" },
1253
- { "name": "Service & Control", "description": "Generic service calls and entity actions" },
1254
- { "name": "Device Control", "description": "Specialized device control tools" },
1255
- { "name": "Automation", "description": "Automation management tools" },
1256
- { "name": "AI", "description": "AI-powered analysis tools" },
1257
- { "name": "Calendar", "description": "Calendar and event tools" }
1258
- ]
1259
- }