@coffeerunhobby/mcp-ha-connect 0.5.0 → 0.7.0
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.
- package/README.md +438 -154
- package/dist/config.d.ts +0 -1
- package/dist/haClient/automations.d.ts +1 -2
- package/dist/haClient/automations.js +17 -7
- package/dist/haClient/automations.js.map +1 -1
- package/dist/haClient/calendars.d.ts +33 -0
- package/dist/haClient/calendars.js +68 -0
- package/dist/haClient/calendars.js.map +1 -0
- package/dist/haClient/config.d.ts +0 -1
- package/dist/haClient/devices.d.ts +0 -1
- package/dist/haClient/entities.d.ts +0 -1
- package/dist/haClient/events.d.ts +0 -1
- package/dist/haClient/history.d.ts +0 -1
- package/dist/haClient/index.d.ts +18 -2
- package/dist/haClient/index.js +23 -0
- package/dist/haClient/index.js.map +1 -1
- package/dist/haClient/labels.d.ts +64 -0
- package/dist/haClient/labels.js +177 -0
- package/dist/haClient/labels.js.map +1 -0
- package/dist/haClient/request.d.ts +0 -1
- package/dist/haClient/services.d.ts +0 -1
- package/dist/haClient/states.d.ts +0 -1
- package/dist/haClient/updates.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/localAI/index.d.ts +0 -1
- package/dist/localAI/prompts.d.ts +0 -1
- package/dist/localAI/providers/base.d.ts +0 -1
- package/dist/localAI/providers/ollama.d.ts +0 -1
- package/dist/localAI/providers/openai.d.ts +0 -1
- package/dist/localAI/types.d.ts +0 -1
- package/dist/resources/index.d.ts +2 -3
- package/dist/resources/index.js +132 -200
- package/dist/resources/index.js.map +1 -1
- package/dist/server/common.d.ts +2 -3
- package/dist/server/common.js +5 -10
- package/dist/server/common.js.map +1 -1
- package/dist/server/eventSubscription.d.ts +0 -1
- package/dist/server/http.d.ts +0 -1
- package/dist/server/rateLimiter.d.ts +0 -1
- package/dist/server/sse.d.ts +0 -1
- package/dist/server/stdio.d.ts +0 -1
- package/dist/server/stream.d.ts +0 -1
- package/dist/tools/analyzeSensors.d.ts +6 -0
- package/dist/tools/analyzeSensors.js +23 -0
- package/dist/tools/analyzeSensors.js.map +1 -0
- package/dist/tools/automationControls.d.ts +9 -0
- package/dist/tools/automationControls.js +41 -0
- package/dist/tools/automationControls.js.map +1 -0
- package/dist/tools/calendar.d.ts +7 -0
- package/dist/tools/calendar.js +82 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/callService.d.ts +3 -5
- package/dist/tools/callService.js +11 -94
- package/dist/tools/callService.js.map +1 -1
- package/dist/tools/common.d.ts +406 -0
- package/dist/tools/common.js +222 -0
- package/dist/tools/common.js.map +1 -0
- package/dist/tools/controlClimate.d.ts +6 -0
- package/dist/tools/controlClimate.js +50 -0
- package/dist/tools/controlClimate.js.map +1 -0
- package/dist/tools/controlCover.d.ts +6 -0
- package/dist/tools/controlCover.js +33 -0
- package/dist/tools/controlCover.js.map +1 -0
- package/dist/tools/controlFan.d.ts +6 -0
- package/dist/tools/controlFan.js +34 -0
- package/dist/tools/controlFan.js.map +1 -0
- package/dist/tools/controlLight.d.ts +6 -0
- package/dist/tools/controlLight.js +28 -0
- package/dist/tools/controlLight.js.map +1 -0
- package/dist/tools/controlMediaPlayer.d.ts +6 -0
- package/dist/tools/controlMediaPlayer.js +35 -0
- package/dist/tools/controlMediaPlayer.js.map +1 -0
- package/dist/tools/createAutomation.d.ts +6 -0
- package/dist/tools/createAutomation.js +24 -0
- package/dist/tools/createAutomation.js.map +1 -0
- package/dist/tools/deleteAutomation.d.ts +6 -0
- package/dist/tools/deleteAutomation.js +14 -0
- package/dist/tools/deleteAutomation.js.map +1 -0
- package/dist/tools/entityAction.d.ts +6 -0
- package/dist/tools/entityAction.js +22 -0
- package/dist/tools/entityAction.js.map +1 -0
- package/dist/tools/getAllSensors.d.ts +6 -0
- package/dist/tools/getAllSensors.js +14 -0
- package/dist/tools/getAllSensors.js.map +1 -0
- package/dist/tools/getAutomationTrace.d.ts +6 -0
- package/dist/tools/getAutomationTrace.js +14 -0
- package/dist/tools/getAutomationTrace.js.map +1 -0
- package/dist/tools/getDomainSummary.d.ts +6 -0
- package/dist/tools/getDomainSummary.js +14 -0
- package/dist/tools/getDomainSummary.js.map +1 -0
- package/dist/tools/getEntitiesByDomain.d.ts +3 -5
- package/dist/tools/getEntitiesByDomain.js +9 -75
- package/dist/tools/getEntitiesByDomain.js.map +1 -1
- package/dist/tools/getHistory.d.ts +6 -0
- package/dist/tools/getHistory.js +14 -0
- package/dist/tools/getHistory.js.map +1 -0
- package/dist/tools/getState.d.ts +3 -5
- package/dist/tools/getState.js +11 -84
- package/dist/tools/getState.js.map +1 -1
- package/dist/tools/getStates.d.ts +3 -5
- package/dist/tools/getStates.js +9 -65
- package/dist/tools/getStates.js.map +1 -1
- package/dist/tools/getVersion.d.ts +6 -0
- package/dist/tools/getVersion.js +14 -0
- package/dist/tools/getVersion.js.map +1 -0
- package/dist/tools/index.d.ts +6 -7
- package/dist/tools/index.js +97 -6
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/labels.d.ts +12 -0
- package/dist/tools/labels.js +139 -0
- package/dist/tools/labels.js.map +1 -0
- package/dist/tools/listAutomations.d.ts +6 -0
- package/dist/tools/listAutomations.js +17 -0
- package/dist/tools/listAutomations.js.map +1 -0
- package/dist/tools/listEntities.d.ts +6 -0
- package/dist/tools/listEntities.js +14 -0
- package/dist/tools/listEntities.js.map +1 -0
- package/dist/tools/listPersons.d.ts +6 -0
- package/dist/tools/listPersons.js +36 -0
- package/dist/tools/listPersons.js.map +1 -0
- package/dist/tools/sceneAndScript.d.ts +7 -0
- package/dist/tools/sceneAndScript.js +32 -0
- package/dist/tools/sceneAndScript.js.map +1 -0
- package/dist/tools/searchEntities.d.ts +3 -5
- package/dist/tools/searchEntities.js +11 -75
- package/dist/tools/searchEntities.js.map +1 -1
- package/dist/tools/sendNotification.d.ts +8 -0
- package/dist/tools/sendNotification.js +160 -0
- package/dist/tools/sendNotification.js.map +1 -0
- package/dist/tools/systemTools.d.ts +8 -0
- package/dist/tools/systemTools.js +32 -0
- package/dist/tools/systemTools.js.map +1 -0
- package/dist/tools/triggerAutomation.d.ts +6 -0
- package/dist/tools/triggerAutomation.js +14 -0
- package/dist/tools/triggerAutomation.js.map +1 -0
- package/dist/types/automations.d.ts +38 -0
- package/dist/types/automations.js +5 -0
- package/dist/types/automations.js.map +1 -0
- package/dist/types/calendars.d.ts +24 -0
- package/dist/types/calendars.js +5 -0
- package/dist/types/calendars.js.map +1 -0
- package/dist/types/config.d.ts +10 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/entities.d.ts +13 -0
- package/dist/types/entities.js +5 -0
- package/dist/types/entities.js.map +1 -0
- package/dist/types/entity.d.ts +22 -1
- package/dist/types/errors.d.ts +0 -1
- package/dist/types/haConfig.d.ts +0 -1
- package/dist/types/history.d.ts +12 -0
- package/dist/types/history.js +5 -0
- package/dist/types/history.js.map +1 -0
- package/dist/types/index.d.ts +7 -2
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/labels.d.ts +34 -0
- package/dist/types/labels.js +5 -0
- package/dist/types/labels.js.map +1 -0
- package/dist/types/request.d.ts +0 -1
- package/dist/types/serviceCall.d.ts +0 -1
- package/dist/types/states.d.ts +19 -0
- package/dist/types/states.js +5 -0
- package/dist/types/states.js.map +1 -0
- package/dist/types/updates.d.ts +24 -0
- package/dist/types/updates.js +5 -0
- package/dist/types/updates.js.map +1 -0
- package/dist/types.d.ts +0 -1
- package/dist/utils/config-validations.d.ts +0 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js +2 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/wrapper.d.ts +0 -1
- package/docs/CHANGELOG.md +114 -85
- package/docs/LOCAL_CLIENT.md +572 -268
- package/openapi.json +1149 -37
- package/package.json +9 -7
- package/src/haClient/automations.ts +19 -7
- package/src/haClient/calendars.ts +94 -0
- package/src/haClient/index.ts +36 -0
- package/src/resources/index.ts +159 -211
- package/src/server/common.ts +8 -16
- package/src/tools/analyzeSensors.ts +33 -0
- package/src/tools/automationControls.ts +66 -0
- package/src/tools/calendar.ts +97 -0
- package/src/tools/callService.ts +16 -105
- package/src/tools/common.ts +260 -0
- package/src/tools/controlClimate.ts +65 -0
- package/src/tools/controlCover.ts +45 -0
- package/src/tools/controlFan.ts +41 -0
- package/src/tools/controlLight.ts +35 -0
- package/src/tools/controlMediaPlayer.ts +47 -0
- package/src/tools/createAutomation.ts +35 -0
- package/src/tools/deleteAutomation.ts +24 -0
- package/src/tools/entityAction.ts +32 -0
- package/src/tools/getAllSensors.ts +21 -0
- package/src/tools/getAutomationTrace.ts +24 -0
- package/src/tools/getDomainSummary.ts +21 -0
- package/src/tools/getEntitiesByDomain.ts +15 -86
- package/src/tools/getHistory.ts +24 -0
- package/src/tools/getState.ts +16 -95
- package/src/tools/getStates.ts +14 -73
- package/src/tools/getVersion.ts +21 -0
- package/src/tools/index.ts +128 -6
- package/src/tools/listAutomations.ts +27 -0
- package/src/tools/listEntities.ts +24 -0
- package/src/tools/listPersons.ts +46 -0
- package/src/tools/sceneAndScript.ts +48 -0
- package/src/tools/searchEntities.ts +17 -86
- package/src/tools/sendNotification.ts +179 -0
- package/src/tools/systemTools.ts +52 -0
- package/src/tools/triggerAutomation.ts +24 -0
- package/src/types/automations.ts +43 -0
- package/src/types/calendars.ts +26 -0
- package/src/types/config.ts +11 -0
- package/src/types/entities.ts +14 -0
- package/src/types/history.ts +13 -0
- package/src/types/index.ts +37 -1
- package/src/types/states.ts +21 -0
- package/src/types/updates.ts +28 -0
- package/src/utils/logger.ts +2 -1
- package/tests/bdd/automation-creation.spec.ts +214 -0
- package/tests/bdd/automation-management.spec.ts +267 -0
- package/tests/bdd/calendar.spec.ts +190 -0
- package/tests/bdd/configuration.spec.ts +283 -0
- package/tests/bdd/device-control.spec.ts +344 -0
- package/tests/bdd/entity-listing.spec.ts +208 -0
- package/tests/bdd/entity-search.spec.ts +183 -0
- package/tests/bdd/history-retrieval.spec.ts +195 -0
- package/tests/bdd/notifications.spec.ts +238 -0
- package/tests/bdd/service-calls.spec.ts +144 -0
- package/tests/bdd/state-retrieval.spec.ts +204 -0
- package/tests/features/automation-creation.feature +36 -0
- package/tests/features/automation-management.feature +54 -0
- package/tests/features/calendar.feature +37 -0
- package/tests/features/configuration.feature +71 -0
- package/tests/features/device-control.feature +100 -0
- package/tests/features/entity-listing.feature +51 -0
- package/tests/features/entity-search.feature +44 -0
- package/tests/features/history-retrieval.feature +38 -0
- package/tests/features/notifications.feature +37 -0
- package/tests/features/service-calls.feature +35 -0
- package/tests/features/state-retrieval.feature +37 -0
- package/tests/haClient/index.test.ts +142 -110
- package/tests/localAI/index.test.ts +27 -18
- package/tests/server/common.test.ts +4 -4
- package/tests/server/stdio.test.ts +4 -6
- package/tests/tools/registry.test.ts +66 -259
- package/tsconfig.json +14 -15
- package/vitest.config.ts +1 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/haClient/automations.d.ts.map +0 -1
- package/dist/haClient/config.d.ts.map +0 -1
- package/dist/haClient/devices.d.ts.map +0 -1
- package/dist/haClient/entities.d.ts.map +0 -1
- package/dist/haClient/events.d.ts.map +0 -1
- package/dist/haClient/history.d.ts.map +0 -1
- package/dist/haClient/index.d.ts.map +0 -1
- package/dist/haClient/request.d.ts.map +0 -1
- package/dist/haClient/services.d.ts.map +0 -1
- package/dist/haClient/states.d.ts.map +0 -1
- package/dist/haClient/updates.d.ts.map +0 -1
- package/dist/haClient.d.ts +0 -97
- package/dist/haClient.d.ts.map +0 -1
- package/dist/haClient.js +0 -344
- package/dist/haClient.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/localAI/index.d.ts.map +0 -1
- package/dist/localAI/prompts.d.ts.map +0 -1
- package/dist/localAI/providers/base.d.ts.map +0 -1
- package/dist/localAI/providers/ollama.d.ts.map +0 -1
- package/dist/localAI/providers/openai.d.ts.map +0 -1
- package/dist/localAI/types.d.ts.map +0 -1
- package/dist/ollamaClient.d.ts +0 -37
- package/dist/ollamaClient.d.ts.map +0 -1
- package/dist/ollamaClient.js +0 -110
- package/dist/ollamaClient.js.map +0 -1
- package/dist/resources/index.d.ts.map +0 -1
- package/dist/server/common.d.ts.map +0 -1
- package/dist/server/eventSubscription.d.ts.map +0 -1
- package/dist/server/http.d.ts.map +0 -1
- package/dist/server/rateLimiter.d.ts.map +0 -1
- package/dist/server/sse.d.ts.map +0 -1
- package/dist/server/stdio.d.ts.map +0 -1
- package/dist/server/stream.d.ts.map +0 -1
- package/dist/server.d.ts +0 -8
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -30
- package/dist/server.js.map +0 -1
- package/dist/tools/callService.d.ts.map +0 -1
- package/dist/tools/getClient.d.ts +0 -8
- package/dist/tools/getClient.d.ts.map +0 -1
- package/dist/tools/getClient.js +0 -94
- package/dist/tools/getClient.js.map +0 -1
- package/dist/tools/getDevice.d.ts +0 -8
- package/dist/tools/getDevice.d.ts.map +0 -1
- package/dist/tools/getDevice.js +0 -94
- package/dist/tools/getDevice.js.map +0 -1
- package/dist/tools/getEntitiesByDomain.d.ts.map +0 -1
- package/dist/tools/getState.d.ts.map +0 -1
- package/dist/tools/getStates.d.ts.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/listClients.d.ts +0 -8
- package/dist/tools/listClients.d.ts.map +0 -1
- package/dist/tools/listClients.js +0 -73
- package/dist/tools/listClients.js.map +0 -1
- package/dist/tools/listDevices.d.ts +0 -8
- package/dist/tools/listDevices.d.ts.map +0 -1
- package/dist/tools/listDevices.js +0 -73
- package/dist/tools/listDevices.js.map +0 -1
- package/dist/tools/listSites.d.ts +0 -8
- package/dist/tools/listSites.d.ts.map +0 -1
- package/dist/tools/listSites.js +0 -67
- package/dist/tools/listSites.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -9
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -1382
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/searchDevices.d.ts +0 -8
- package/dist/tools/searchDevices.d.ts.map +0 -1
- package/dist/tools/searchDevices.js +0 -84
- package/dist/tools/searchDevices.js.map +0 -1
- package/dist/tools/searchEntities.d.ts.map +0 -1
- package/dist/types/entity.d.ts.map +0 -1
- package/dist/types/errors.d.ts.map +0 -1
- package/dist/types/haConfig.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/request.d.ts.map +0 -1
- package/dist/types/serviceCall.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/config-validations.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/wrapper.d.ts.map +0 -1
- package/src/tools/registry.ts +0 -1521
- package/src/types/entity.ts +0 -110
package/README.md
CHANGED
|
@@ -1,38 +1,108 @@
|
|
|
1
1
|
# MCP-HA-Connect
|
|
2
2
|
|
|
3
|
-
A production-ready Model Context Protocol (MCP) server for Home Assistant integration with AI assistants like Claude.
|
|
3
|
+
A production-ready Model Context Protocol (MCP) server for Home Assistant integration with AI assistants like Claude and LM Studio.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@coffeerunhobby/mcp-ha-connect)
|
|
6
|
+
[](https://github.com/coffeerunhobby/mcp-ha-connect/pkgs/container/mcp-ha-connect)
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
Choose your preferred installation method:
|
|
11
|
+
|
|
12
|
+
### Option 1: npx (Recommended - No Installation Required)
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"mcpServers": {
|
|
17
|
+
"homeassistant": {
|
|
18
|
+
"command": "npx",
|
|
19
|
+
"args": ["-y", "@coffeerunhobby/mcp-ha-connect"],
|
|
20
|
+
"env": {
|
|
21
|
+
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
22
|
+
"HA_TOKEN": "your_long_lived_access_token"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
```
|
|
4
28
|
|
|
5
|
-
|
|
29
|
+
### Option 2: Global npm Install
|
|
6
30
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- **State Monitoring**: Track and query device states in real-time
|
|
11
|
-
- **Rate Limiting**: Built-in rate limiting to protect your Home Assistant instance
|
|
12
|
-
- **Secure**: Token-based authentication and configurable rate limits
|
|
13
|
-
- **Mobile Ready**: Works with any HTTP-capable client
|
|
31
|
+
```bash
|
|
32
|
+
npm install -g @coffeerunhobby/mcp-ha-connect
|
|
33
|
+
```
|
|
14
34
|
|
|
15
|
-
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"homeassistant": {
|
|
39
|
+
"command": "mcp-ha-connect",
|
|
40
|
+
"env": {
|
|
41
|
+
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
42
|
+
"HA_TOKEN": "your_token"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
16
48
|
|
|
17
|
-
|
|
49
|
+
### Option 3: Docker
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"homeassistant": {
|
|
55
|
+
"command": "docker",
|
|
56
|
+
"args": [
|
|
57
|
+
"run",
|
|
58
|
+
"--rm",
|
|
59
|
+
"-i",
|
|
60
|
+
"-e", "HA_URL=http://host.docker.internal:8123",
|
|
61
|
+
"-e", "HA_TOKEN=your_token",
|
|
62
|
+
"ghcr.io/coffeerunhobby/mcp-ha-connect:latest"
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
18
68
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
69
|
+
### Option 4: Local Development
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"mcpServers": {
|
|
74
|
+
"homeassistant": {
|
|
75
|
+
"command": "node",
|
|
76
|
+
"args": ["C:\\workspace\\mcp-homeassistant\\dist\\index.js"],
|
|
77
|
+
"env": {
|
|
78
|
+
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
79
|
+
"HA_TOKEN": "your_token"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
23
85
|
|
|
24
|
-
|
|
86
|
+
## Configuration Locations
|
|
25
87
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
88
|
+
### Claude Desktop
|
|
89
|
+
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
90
|
+
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
91
|
+
- **Linux:** `~/.config/Claude/claude_desktop_config.json`
|
|
30
92
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
93
|
+
### LM Studio
|
|
94
|
+
- **Windows:** `%USERPROFILE%\.lmstudio\config.json`
|
|
95
|
+
- **macOS:** `~/Library/Application Support/LM Studio/config.json`
|
|
96
|
+
- **Linux:** `~/.config/lmstudio/config.json`
|
|
97
|
+
|
|
98
|
+
## Autonomous Safety Monitoring System
|
|
99
|
+
|
|
100
|
+
1. **JS Pre-filter**: Tier A triggers + basic anomaly detection
|
|
101
|
+
2. **Issue Objects**: Structured alerts (entity, area, threshold, observed, last_changed)
|
|
102
|
+
3. **LLM Decision**: Single JSON verdict from local model
|
|
103
|
+
4. **Smart Notifications**: Dedupe + cooldown to prevent alert fatigue
|
|
104
|
+
5. **Acknowledgment**: HA notification, Telegram, mobile app action, or voice
|
|
105
|
+
6. **Auto-Response**: Water/gas shutoff via HA valves/switches
|
|
36
106
|
|
|
37
107
|
See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE system.
|
|
38
108
|
|
|
@@ -78,7 +148,7 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
78
148
|
- Full type safety with TypeScript
|
|
79
149
|
- Stateful and stateless session support
|
|
80
150
|
|
|
81
|
-
## Available Tools (
|
|
151
|
+
## Available Tools (37 Total)
|
|
82
152
|
|
|
83
153
|
### State & Entity Tools
|
|
84
154
|
|
|
@@ -92,6 +162,7 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
92
162
|
| `listEntities` | List entities with filtering (domain, state, search, limit) |
|
|
93
163
|
| `getDomainSummary` | Get summary statistics for a domain |
|
|
94
164
|
| `getHistory` | Get historical data for an entity |
|
|
165
|
+
| `listPersons` | List all household members with location state (home/away) |
|
|
95
166
|
|
|
96
167
|
### Service & Control Tools
|
|
97
168
|
|
|
@@ -111,7 +182,8 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
111
182
|
| `controlFan` | Control fans with speed, oscillation, direction |
|
|
112
183
|
| `activateScene` | Activate a Home Assistant scene |
|
|
113
184
|
| `runScript` | Run a Home Assistant script |
|
|
114
|
-
| `sendNotification` | Send notifications
|
|
185
|
+
| `sendNotification` | Send notifications with full mobile app support (actions, priority, images) |
|
|
186
|
+
| `listNotificationTargets` | Discover available mobile app notification targets |
|
|
115
187
|
|
|
116
188
|
### Automation Tools
|
|
117
189
|
|
|
@@ -137,6 +209,13 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
137
209
|
| `checkUpdates` | Check for available updates |
|
|
138
210
|
| `analyzeSensors` | AI-powered sensor analysis using Ollama |
|
|
139
211
|
|
|
212
|
+
### Calendar Tools
|
|
213
|
+
|
|
214
|
+
| Tool | Description |
|
|
215
|
+
|------|-------------|
|
|
216
|
+
| `listCalendars` | List all calendar entities |
|
|
217
|
+
| `getCalendarEvents` | Get events from one or all calendars |
|
|
218
|
+
|
|
140
219
|
### MCP Resources
|
|
141
220
|
|
|
142
221
|
| Resource URI | Description |
|
|
@@ -149,134 +228,232 @@ See [docs/SSE_API.md](docs/SSE_API.md) for complete documentation of the SSE sys
|
|
|
149
228
|
|
|
150
229
|
## Prerequisites
|
|
151
230
|
|
|
152
|
-
- **Node.js 20+** (tested with v20.19.6)
|
|
153
|
-
- **npm 10.8+** (tested with v10.8.2)
|
|
231
|
+
- **Node.js 20+** (tested with v20.19.6) - for npm/npx methods
|
|
232
|
+
- **npm 10.8+** (tested with v10.8.2) - for npm/npx methods
|
|
233
|
+
- **Docker** (optional) - for Docker method
|
|
154
234
|
- Home Assistant instance with long-lived access token
|
|
155
235
|
- Network access to your Home Assistant instance
|
|
156
236
|
- (Optional) Ollama for AI-powered analysis
|
|
157
|
-
- (Optional) Docker for containerized deployment
|
|
158
237
|
|
|
159
|
-
##
|
|
238
|
+
## Getting Your Home Assistant Token
|
|
160
239
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
1. Log into your Home Assistant
|
|
240
|
+
1. Log into your Home Assistant instance
|
|
164
241
|
2. Click on your profile (bottom left)
|
|
165
242
|
3. Scroll down to "Long-Lived Access Tokens"
|
|
166
243
|
4. Click "Create Token"
|
|
167
244
|
5. Give it a name (e.g., "MCP Server")
|
|
168
245
|
6. Copy the token (shown only once!)
|
|
169
246
|
|
|
170
|
-
|
|
247
|
+
## Environment Variables
|
|
248
|
+
|
|
249
|
+
### Required
|
|
250
|
+
|
|
251
|
+
| Variable | Description | Example |
|
|
252
|
+
|----------|-------------|---------|
|
|
253
|
+
| `HA_URL` | Home Assistant URL | `http://homeassistant.10.0.0.19.nip.io:8123` |
|
|
254
|
+
| `HA_TOKEN` | Long-lived access token | `eyJhbGciOiJIUzI1NiIsInR5cCI...` |
|
|
255
|
+
|
|
256
|
+
### Optional - Home Assistant
|
|
257
|
+
|
|
258
|
+
| Variable | Default | Description |
|
|
259
|
+
|----------|---------|-------------|
|
|
260
|
+
| `HA_STRICT_SSL` | `true` | Validate SSL certificates |
|
|
261
|
+
| `HA_TIMEOUT` | `30000` | API request timeout (ms) |
|
|
262
|
+
|
|
263
|
+
### Optional - MCP Server
|
|
264
|
+
|
|
265
|
+
| Variable | Default | Description |
|
|
266
|
+
|----------|---------|-------------|
|
|
267
|
+
| `MCP_SERVER_LOG_LEVEL` | `info` | Log level: `debug`, `info`, `warn`, `error` |
|
|
268
|
+
| `MCP_SERVER_LOG_FORMAT` | `plain` | Log format: `plain`, `json`, `gcp-json` |
|
|
269
|
+
| `MCP_SERVER_USE_HTTP` | `false` | Enable HTTP mode (vs stdio) |
|
|
270
|
+
| `MCP_SERVER_STATEFUL` | `false` | Enable stateful sessions in HTTP mode |
|
|
271
|
+
|
|
272
|
+
### Optional - HTTP Mode
|
|
273
|
+
|
|
274
|
+
| Variable | Default | Description |
|
|
275
|
+
|----------|---------|-------------|
|
|
276
|
+
| `MCP_HTTP_PORT` | `3000` | HTTP server port |
|
|
277
|
+
| `MCP_HTTP_TRANSPORT` | `stream` | Transport: `stream` or `sse` |
|
|
278
|
+
| `MCP_HTTP_BIND_ADDR` | `127.0.0.1` | Bind address |
|
|
279
|
+
| `MCP_HTTP_PATH` | `/mcp` | MCP endpoint path |
|
|
280
|
+
| `MCP_HTTP_ENABLE_HEALTHCHECK` | `true` | Enable health check endpoint |
|
|
281
|
+
| `MCP_HTTP_HEALTHCHECK_PATH` | `/health` | Health check path |
|
|
282
|
+
| `MCP_HTTP_ALLOW_CORS` | `true` | Enable CORS |
|
|
283
|
+
| `MCP_HTTP_ALLOWED_ORIGINS` | `127.0.0.1,localhost` | Allowed CORS origins |
|
|
284
|
+
|
|
285
|
+
### Optional - SSE Events
|
|
286
|
+
|
|
287
|
+
| Variable | Default | Description |
|
|
288
|
+
|----------|---------|-------------|
|
|
289
|
+
| `MCP_SSE_EVENTS_ENABLED` | `false` | Enable real-time SSE events |
|
|
290
|
+
| `MCP_SSE_EVENTS_PATH` | `/subscribe_events` | SSE endpoint path |
|
|
291
|
+
|
|
292
|
+
### Optional - Rate Limiting
|
|
293
|
+
|
|
294
|
+
| Variable | Default | Description |
|
|
295
|
+
|----------|---------|-------------|
|
|
296
|
+
| `MCP_RATE_LIMIT_ENABLED` | `false` | Enable rate limiting |
|
|
297
|
+
| `MCP_RATE_LIMIT_WINDOW_MS` | `60000` | Rate limit window (ms) |
|
|
298
|
+
| `MCP_RATE_LIMIT_MAX_REQUESTS` | `100` | Max requests per window |
|
|
299
|
+
|
|
300
|
+
### Optional - AI Provider
|
|
301
|
+
|
|
302
|
+
| Variable | Default | Description |
|
|
303
|
+
|----------|---------|-------------|
|
|
304
|
+
| `AI_PROVIDER` | `ollama` | AI provider: `ollama`, `openai`, or `none` |
|
|
305
|
+
| `AI_URL` | `http://ollama.10.0.0.17.nip.io:11434` | AI server URL (Ollama) |
|
|
306
|
+
| `AI_MODEL` | `llama2` | AI model name |
|
|
307
|
+
| `AI_TIMEOUT` | `60000` | AI request timeout (ms) |
|
|
308
|
+
|
|
309
|
+
## Advanced Configuration Examples
|
|
310
|
+
|
|
311
|
+
### With AI Analysis (Ollama)
|
|
312
|
+
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"mcpServers": {
|
|
316
|
+
"homeassistant": {
|
|
317
|
+
"command": "npx",
|
|
318
|
+
"args": ["-y", "@coffeerunhobby/mcp-ha-connect"],
|
|
319
|
+
"env": {
|
|
320
|
+
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
321
|
+
"HA_TOKEN": "your_token",
|
|
322
|
+
"AI_PROVIDER": "ollama",
|
|
323
|
+
"AI_URL": "http://ollama.10.0.0.17.nip.io:11434",
|
|
324
|
+
"AI_MODEL": "llama2"
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
```
|
|
171
330
|
|
|
172
|
-
|
|
331
|
+
### Disable AI Features
|
|
332
|
+
|
|
333
|
+
```json
|
|
334
|
+
{
|
|
335
|
+
"mcpServers": {
|
|
336
|
+
"homeassistant": {
|
|
337
|
+
"command": "npx",
|
|
338
|
+
"args": ["-y", "@coffeerunhobby/mcp-ha-connect"],
|
|
339
|
+
"env": {
|
|
340
|
+
"HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
|
|
341
|
+
"HA_TOKEN": "your_token",
|
|
342
|
+
"AI_PROVIDER": "none"
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
```
|
|
173
348
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
MCP_HTTP_ALLOWED_ORIGINS=127.0.0.1,localhost
|
|
196
|
-
|
|
197
|
-
# SSE Event Subscription (real-time updates)
|
|
198
|
-
MCP_SSE_EVENTS_ENABLED=true # Enable SSE event subscription
|
|
199
|
-
MCP_SSE_EVENTS_PATH=/subscribe_events # SSE endpoint path
|
|
200
|
-
|
|
201
|
-
# Rate Limiting
|
|
202
|
-
MCP_RATE_LIMIT_ENABLED=true # Enable rate limiting
|
|
203
|
-
MCP_RATE_LIMIT_WINDOW_MS=60000 # Time window in ms (default: 1 minute)
|
|
204
|
-
MCP_RATE_LIMIT_MAX_REQUESTS=100 # Max requests per window
|
|
205
|
-
|
|
206
|
-
# AI Configuration (optional)
|
|
207
|
-
AI_PROVIDER=ollama # ollama or openai
|
|
208
|
-
AI_URL=http://ollama.10.0.0.17.nip.io:11434
|
|
209
|
-
AI_MODEL=phi4:14b
|
|
210
|
-
AI_TIMEOUT=60000
|
|
349
|
+
### Docker with Network Configuration
|
|
350
|
+
|
|
351
|
+
For Linux, you may need to add `host.docker.internal`:
|
|
352
|
+
|
|
353
|
+
```json
|
|
354
|
+
{
|
|
355
|
+
"mcpServers": {
|
|
356
|
+
"homeassistant": {
|
|
357
|
+
"command": "docker",
|
|
358
|
+
"args": [
|
|
359
|
+
"run",
|
|
360
|
+
"--rm",
|
|
361
|
+
"-i",
|
|
362
|
+
"--add-host=host.docker.internal:host-gateway",
|
|
363
|
+
"-e", "HA_URL=http://host.docker.internal:8123",
|
|
364
|
+
"-e", "HA_TOKEN=your_token",
|
|
365
|
+
"ghcr.io/coffeerunhobby/mcp-ha-connect:latest"
|
|
366
|
+
]
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
211
370
|
```
|
|
212
371
|
|
|
213
|
-
## Usage
|
|
372
|
+
## Usage Modes
|
|
373
|
+
|
|
374
|
+
### Mode 1: MCP Client (Claude Desktop / LM Studio)
|
|
214
375
|
|
|
215
|
-
|
|
376
|
+
Default stdio mode for MCP clients. See [Quick Start](#quick-start) section for configuration.
|
|
216
377
|
|
|
217
|
-
[
|
|
378
|
+
For detailed configuration options, see [docs/LOCAL_CLIENT.md](docs/LOCAL_CLIENT.md).
|
|
218
379
|
|
|
219
380
|
### Mode 2: HTTP Server
|
|
220
381
|
|
|
382
|
+
Start as standalone HTTP server for web applications:
|
|
383
|
+
|
|
221
384
|
```bash
|
|
222
|
-
#
|
|
223
|
-
|
|
385
|
+
# Using npx
|
|
386
|
+
npx @coffeerunhobby/mcp-ha-connect
|
|
387
|
+
|
|
388
|
+
# Or with environment variables
|
|
389
|
+
MCP_SERVER_USE_HTTP=true \
|
|
390
|
+
MCP_HTTP_PORT=3000 \
|
|
391
|
+
HA_URL=http://homeassistant.10.0.0.19.nip.io:8123 \
|
|
392
|
+
HA_TOKEN=your_token \
|
|
393
|
+
npx @coffeerunhobby/mcp-ha-connect
|
|
224
394
|
```
|
|
225
395
|
|
|
226
|
-
#### Streamable HTTP Transport
|
|
396
|
+
#### Streamable HTTP Transport
|
|
227
397
|
|
|
228
398
|
Configure your MCP client to use:
|
|
229
|
-
- **URL:** `http://
|
|
399
|
+
- **URL:** `http://localhost:3000/mcp`
|
|
230
400
|
- **Transport:** Streamable HTTP (MCP 2025-03-26)
|
|
231
401
|
|
|
232
402
|
#### SSE Event Subscription
|
|
233
403
|
|
|
234
404
|
Subscribe to real-time events:
|
|
235
|
-
- **URL:** `http://mcpserver.10.0.0.18.nip.io:3000/subscribe_events`
|
|
236
|
-
- **Method:** GET
|
|
237
|
-
- **Query params:** `domain`, `entity_id`, `event_types`
|
|
238
405
|
|
|
239
|
-
|
|
406
|
+
```javascript
|
|
407
|
+
const eventSource = new EventSource(
|
|
408
|
+
'http://localhost:3000/subscribe_events?domain=light&entity_id=light.living_room'
|
|
409
|
+
);
|
|
410
|
+
|
|
411
|
+
eventSource.addEventListener('state_changed', (event) => {
|
|
412
|
+
const data = JSON.parse(event.data);
|
|
413
|
+
console.log('Entity changed:', data.entity_id, data.new_state);
|
|
414
|
+
});
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
See [docs/SSE_API.md](docs/SSE_API.md) for complete SSE documentation.
|
|
418
|
+
|
|
419
|
+
### Mode 3: Docker Standalone
|
|
240
420
|
|
|
241
421
|
```bash
|
|
242
|
-
#
|
|
243
|
-
docker
|
|
422
|
+
# Pull image
|
|
423
|
+
docker pull ghcr.io/coffeerunhobby/mcp-ha-connect:latest
|
|
244
424
|
|
|
245
|
-
# Run
|
|
425
|
+
# Run in HTTP mode
|
|
246
426
|
docker run -d --name mcp-ha-connect \
|
|
247
427
|
-e HA_URL=http://homeassistant.10.0.0.19.nip.io:8123 \
|
|
248
428
|
-e HA_TOKEN=your_token \
|
|
249
429
|
-e MCP_SERVER_USE_HTTP=true \
|
|
250
430
|
-p 3000:3000 \
|
|
251
|
-
mcp-ha-connect
|
|
431
|
+
ghcr.io/coffeerunhobby/mcp-ha-connect:latest
|
|
252
432
|
```
|
|
253
433
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
```bash
|
|
279
|
-
npm run build
|
|
434
|
+
### Mode 4: Docker Compose
|
|
435
|
+
|
|
436
|
+
```yaml
|
|
437
|
+
version: '3.8'
|
|
438
|
+
|
|
439
|
+
services:
|
|
440
|
+
mcp-ha-connect:
|
|
441
|
+
image: ghcr.io/coffeerunhobby/mcp-ha-connect:latest
|
|
442
|
+
container_name: mcp-ha-connect
|
|
443
|
+
restart: unless-stopped
|
|
444
|
+
ports:
|
|
445
|
+
- "3000:3000"
|
|
446
|
+
environment:
|
|
447
|
+
- HA_URL=http://homeassistant.10.0.0.19.nip.io:8123
|
|
448
|
+
- HA_TOKEN=${HA_TOKEN}
|
|
449
|
+
- MCP_SERVER_USE_HTTP=true
|
|
450
|
+
- MCP_HTTP_BIND_ADDR=0.0.0.0
|
|
451
|
+
networks:
|
|
452
|
+
- home-automation
|
|
453
|
+
|
|
454
|
+
networks:
|
|
455
|
+
home-automation:
|
|
456
|
+
driver: bridge
|
|
280
457
|
```
|
|
281
458
|
|
|
282
459
|
## Integration Examples
|
|
@@ -326,56 +503,151 @@ docker exec -it n8n n8n list:workflow
|
|
|
326
503
|
|
|
327
504
|
Use the HTTP transport with your MCP-compatible web client:
|
|
328
505
|
|
|
329
|
-
1.
|
|
330
|
-
2.
|
|
331
|
-
3.
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
506
|
+
1. Start server in HTTP mode
|
|
507
|
+
2. Configure client to use `http://localhost:3000/mcp`
|
|
508
|
+
3. Set transport to Streamable HTTP (MCP 2025-03-26)
|
|
509
|
+
4. Enable CORS by adding your origin to `MCP_HTTP_ALLOWED_ORIGINS`
|
|
510
|
+
|
|
511
|
+
### With Remote MCP Proxy (uvx)
|
|
512
|
+
|
|
513
|
+
Connect to a remote MCP server using mcp-remote:
|
|
514
|
+
|
|
515
|
+
```json
|
|
516
|
+
{
|
|
517
|
+
"mcpServers": {
|
|
518
|
+
"homeassistant": {
|
|
519
|
+
"command": "uvx",
|
|
520
|
+
"args": [
|
|
521
|
+
"mcp-remote",
|
|
522
|
+
"http://your-server:3000/mcp"
|
|
523
|
+
]
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
339
527
|
```
|
|
340
528
|
|
|
341
|
-
|
|
342
|
-
1. Include `Mcp-Session-Id` header in requests
|
|
343
|
-
2. Reuse the same session ID for related requests
|
|
344
|
-
3. Session state is maintained server-side
|
|
529
|
+
## Network Configuration Notes
|
|
345
530
|
|
|
346
|
-
|
|
531
|
+
- **`host.docker.internal`** - Use this to access services on your host machine from Docker
|
|
532
|
+
- Works on Windows and macOS by default
|
|
533
|
+
- On Linux, add `--add-host=host.docker.internal:host-gateway` to docker args
|
|
534
|
+
- **Direct IP** - Use your machine's IP address (e.g., `http://10.0.0.19:8123`)
|
|
535
|
+
- **nip.io domains** - Use wildcard DNS for easy local development (e.g., `http://homeassistant.10.0.0.19.nip.io:8123`)
|
|
347
536
|
|
|
348
|
-
|
|
349
|
-
const eventSource = new EventSource(
|
|
350
|
-
'http://mcpserver.10.0.0.18.nip.io:3000/subscribe_events?domain=light'
|
|
351
|
-
);
|
|
352
|
-
|
|
353
|
-
eventSource.addEventListener('state_changed', (event) => {
|
|
354
|
-
const data = JSON.parse(event.data);
|
|
355
|
-
updateUI(data.entity_id, data.new_state);
|
|
356
|
-
});
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
## Security
|
|
537
|
+
## Security Best Practices
|
|
360
538
|
|
|
361
539
|
### Network Security
|
|
362
540
|
|
|
363
|
-
**Network Segmentation
|
|
364
|
-
-
|
|
365
|
-
-
|
|
366
|
-
-
|
|
367
|
-
- Never expose MCP server directly to internet
|
|
541
|
+
- **Network Segmentation**: Run MCP server on private LAN only
|
|
542
|
+
- **Docker Networks**: Use Docker networks for container isolation
|
|
543
|
+
- **VLAN**: Consider VLAN for IoT devices
|
|
544
|
+
- **No Internet Exposure**: Never expose MCP server directly to internet
|
|
368
545
|
|
|
369
|
-
###
|
|
546
|
+
### Token & Configuration Security
|
|
370
547
|
|
|
371
548
|
- Store `.env` securely (contains access token)
|
|
372
|
-
- Never commit `.env` to version control
|
|
549
|
+
- **Never** commit `.env` to version control
|
|
373
550
|
- Set `.env` permissions: `chmod 600 .env`
|
|
374
551
|
- Use `HA_STRICT_SSL=true` for HTTPS in production
|
|
375
552
|
- Rotate access tokens periodically
|
|
376
|
-
- Restrict `MCP_HTTP_ALLOWED_ORIGINS` (avoid wildcard)
|
|
553
|
+
- Restrict `MCP_HTTP_ALLOWED_ORIGINS` (avoid wildcard `*`)
|
|
377
554
|
- Bind to `127.0.0.1` for local-only access
|
|
378
|
-
- Enable rate limiting in production
|
|
555
|
+
- Enable rate limiting in production (`MCP_RATE_LIMIT_ENABLED=true`)
|
|
556
|
+
|
|
557
|
+
### MCP Client Configuration Security
|
|
558
|
+
|
|
559
|
+
⚠️ **Important:** Storing tokens directly in MCP client config files (Claude Desktop, LM Studio) exposes them to anyone with filesystem access. Consider:
|
|
560
|
+
|
|
561
|
+
- Using `.env` files with restricted permissions for Docker/local deployments
|
|
562
|
+
- Setting file permissions on config files (e.g., `chmod 600`)
|
|
563
|
+
- Using environment variable substitution if supported by your client
|
|
564
|
+
- Never committing config files with real tokens to version control
|
|
565
|
+
|
|
566
|
+
## Troubleshooting
|
|
567
|
+
|
|
568
|
+
### Claude Desktop / LM Studio Not Connecting
|
|
569
|
+
|
|
570
|
+
1. **Check config file location** - Verify you're editing the correct file
|
|
571
|
+
2. **Restart the application** - Close and reopen after config changes
|
|
572
|
+
3. **Check logs** - Look for error messages in the application logs
|
|
573
|
+
4. **Test connection manually**:
|
|
574
|
+
|
|
575
|
+
```bash
|
|
576
|
+
# Test npx
|
|
577
|
+
npx @coffeerunhobby/mcp-ha-connect
|
|
578
|
+
|
|
579
|
+
# Test Docker
|
|
580
|
+
docker run --rm -i \
|
|
581
|
+
-e HA_URL=http://homeassistant.10.0.0.19.nip.io:8123 \
|
|
582
|
+
-e HA_TOKEN=your_token \
|
|
583
|
+
ghcr.io/coffeerunhobby/mcp-ha-connect:latest
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
### Docker `host.docker.internal` Not Working (Linux)
|
|
587
|
+
|
|
588
|
+
Add host gateway:
|
|
589
|
+
|
|
590
|
+
```json
|
|
591
|
+
{
|
|
592
|
+
"args": [
|
|
593
|
+
"run",
|
|
594
|
+
"--rm",
|
|
595
|
+
"-i",
|
|
596
|
+
"--add-host=host.docker.internal:host-gateway",
|
|
597
|
+
"-e", "HA_URL=http://host.docker.internal:8123",
|
|
598
|
+
...
|
|
599
|
+
]
|
|
600
|
+
}
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### Home Assistant Connection Issues
|
|
604
|
+
|
|
605
|
+
1. **Verify URL** - Try accessing `http://your-ha-url:8123/api/` in browser
|
|
606
|
+
2. **Check token** - Ensure it's a valid long-lived access token
|
|
607
|
+
3. **Network access** - Verify MCP server can reach Home Assistant
|
|
608
|
+
4. **SSL issues** - Try `HA_STRICT_SSL=false` for testing
|
|
609
|
+
|
|
610
|
+
### AI Analysis Not Working
|
|
611
|
+
|
|
612
|
+
1. **Verify Ollama is running** - `curl http://your-ollama-url:11434/api/tags`
|
|
613
|
+
2. **Check model is available** - Ensure model is pulled: `ollama pull llama2`
|
|
614
|
+
3. **Set AI_PROVIDER** - Must be set to `ollama` (not `none`)
|
|
615
|
+
|
|
616
|
+
## Development
|
|
617
|
+
|
|
618
|
+
### Setup
|
|
619
|
+
|
|
620
|
+
```bash
|
|
621
|
+
# Clone repository
|
|
622
|
+
git clone https://github.com/coffeerunhobby/mcp-ha-connect.git
|
|
623
|
+
cd mcp-ha-connect
|
|
624
|
+
|
|
625
|
+
# Install dependencies
|
|
626
|
+
npm install
|
|
627
|
+
|
|
628
|
+
# Copy environment template
|
|
629
|
+
cp .env.example .env
|
|
630
|
+
|
|
631
|
+
# Edit .env with your Home Assistant details
|
|
632
|
+
nano .env
|
|
633
|
+
|
|
634
|
+
# Build
|
|
635
|
+
npm run build
|
|
636
|
+
|
|
637
|
+
# Run
|
|
638
|
+
npm start
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
### Available Scripts
|
|
642
|
+
|
|
643
|
+
```bash
|
|
644
|
+
npm run build # Build TypeScript to dist/
|
|
645
|
+
npm run dev # Run in development mode with watch
|
|
646
|
+
npm start # Run built version
|
|
647
|
+
npm test # Run tests
|
|
648
|
+
npm run lint # Run ESLint
|
|
649
|
+
npm run format # Format code with Prettier
|
|
650
|
+
```
|
|
379
651
|
|
|
380
652
|
## License
|
|
381
653
|
|
|
@@ -383,12 +655,24 @@ MIT
|
|
|
383
655
|
|
|
384
656
|
## Author
|
|
385
657
|
|
|
386
|
-
Coffee Run Hobby (github.com/coffeerunhobby)
|
|
658
|
+
Coffee Run Hobby ([github.com/coffeerunhobby](https://github.com/coffeerunhobby))
|
|
387
659
|
|
|
388
660
|
## Version
|
|
389
661
|
|
|
390
|
-
0.
|
|
662
|
+
0.7.0
|
|
663
|
+
|
|
664
|
+
## Links
|
|
665
|
+
|
|
666
|
+
- **GitHub**: [https://github.com/coffeerunhobby/mcp-ha-connect](https://github.com/coffeerunhobby/mcp-ha-connect)
|
|
667
|
+
- **npm**: [https://www.npmjs.com/package/@coffeerunhobby/mcp-ha-connect](https://www.npmjs.com/package/@coffeerunhobby/mcp-ha-connect)
|
|
668
|
+
- **Docker**: [https://github.com/coffeerunhobby/mcp-ha-connect/pkgs/container/mcp-ha-connect](https://github.com/coffeerunhobby/mcp-ha-connect/pkgs/container/mcp-ha-connect)
|
|
669
|
+
|
|
670
|
+
## Documentation
|
|
671
|
+
|
|
672
|
+
- [Changelog](docs/CHANGELOG.md)
|
|
673
|
+
- [Local Client Configuration](docs/LOCAL_CLIENT.md)
|
|
674
|
+
- [SSE Event API](docs/SSE_API.md)
|
|
391
675
|
|
|
392
|
-
##
|
|
676
|
+
## Contributing
|
|
393
677
|
|
|
394
|
-
|
|
678
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|