ha-mcp-dev 7.5.0.dev590__tar.gz → 7.5.0.dev592__tar.gz
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.
- {ha_mcp_dev-7.5.0.dev590/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.5.0.dev592}/PKG-INFO +1 -1
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/pyproject.toml +1 -1
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/__main__.py +35 -11
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/LICENSE +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/README.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/setup.cfg +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/settings_ui.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "7.5.0.
|
|
7
|
+
version = "7.5.0.dev592"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.14"
|
|
@@ -288,11 +288,11 @@ def _setup_standard_mode() -> None:
|
|
|
288
288
|
_log_startup_version()
|
|
289
289
|
|
|
290
290
|
|
|
291
|
-
def _http_run_kwargs(transport: str, port: int, path: str) -> dict:
|
|
291
|
+
def _http_run_kwargs(transport: str, host: str, port: int, path: str) -> dict:
|
|
292
292
|
"""Build common run_async kwargs for HTTP-based transports."""
|
|
293
293
|
return {
|
|
294
294
|
"transport": transport,
|
|
295
|
-
"host":
|
|
295
|
+
"host": host,
|
|
296
296
|
"port": port,
|
|
297
297
|
"path": path,
|
|
298
298
|
"show_banner": _get_show_banner(),
|
|
@@ -724,13 +724,26 @@ def main_dev() -> None:
|
|
|
724
724
|
|
|
725
725
|
|
|
726
726
|
# HTTP entry point for web clients
|
|
727
|
-
def _get_http_runtime(default_port: int = 8086) -> tuple[int, str]:
|
|
727
|
+
def _get_http_runtime(default_port: int = 8086) -> tuple[str, int, str]:
|
|
728
728
|
"""Return runtime configuration shared by HTTP transports.
|
|
729
729
|
|
|
730
730
|
Args:
|
|
731
731
|
default_port: Default port to use if MCP_PORT env var is not set.
|
|
732
|
+
|
|
733
|
+
The bind host comes from ``MCP_HOST`` and defaults to ``0.0.0.0``. The
|
|
734
|
+
explicit literal default is load-bearing: FastMCP's own ``Settings.host``
|
|
735
|
+
defaults to ``127.0.0.1``, so dropping the fallback would silently flip
|
|
736
|
+
the default and break existing LAN deployments. Set ``MCP_HOST=127.0.0.1``
|
|
737
|
+
to bind to loopback on workstation deployments.
|
|
738
|
+
|
|
739
|
+
Note: FastMCP also honors a ``FASTMCP_HOST`` env var natively, but
|
|
740
|
+
because ``_http_run_kwargs`` passes ``host=`` explicitly to
|
|
741
|
+
``run_async``, any ``FASTMCP_HOST`` value in the environment is
|
|
742
|
+
ignored — ``MCP_HOST`` is the only env var that affects bind host
|
|
743
|
+
for ha-mcp's CLI entry points.
|
|
732
744
|
"""
|
|
733
745
|
|
|
746
|
+
host = os.getenv("MCP_HOST", "0.0.0.0")
|
|
734
747
|
port_str = os.getenv("MCP_PORT", str(default_port))
|
|
735
748
|
try:
|
|
736
749
|
port = int(port_str)
|
|
@@ -738,17 +751,18 @@ def _get_http_runtime(default_port: int = 8086) -> tuple[int, str]:
|
|
|
738
751
|
logger.error(f"Invalid MCP_PORT value: {port_str!r}. Must be an integer.")
|
|
739
752
|
sys.exit(1)
|
|
740
753
|
path = os.getenv("MCP_SECRET_PATH", "/mcp")
|
|
741
|
-
return port, path
|
|
754
|
+
return host, port, path
|
|
742
755
|
|
|
743
756
|
|
|
744
757
|
async def _run_http_with_graceful_shutdown(
|
|
745
758
|
transport: str,
|
|
759
|
+
host: str,
|
|
746
760
|
port: int,
|
|
747
761
|
path: str,
|
|
748
762
|
) -> None:
|
|
749
763
|
"""Run HTTP server with graceful shutdown support."""
|
|
750
764
|
await _run_with_shutdown(
|
|
751
|
-
_get_mcp().run_async(**_http_run_kwargs(transport, port, path))
|
|
765
|
+
_get_mcp().run_async(**_http_run_kwargs(transport, host, port, path))
|
|
752
766
|
)
|
|
753
767
|
|
|
754
768
|
|
|
@@ -820,12 +834,12 @@ def _run_http_server(transport: str, default_port: int = 8086) -> None:
|
|
|
820
834
|
"""
|
|
821
835
|
from ha_mcp.settings_ui import register_settings_routes
|
|
822
836
|
|
|
823
|
-
port, path = _get_http_runtime(default_port)
|
|
837
|
+
host, port, path = _get_http_runtime(default_port)
|
|
824
838
|
register_browser_landing(_get_mcp(), path)
|
|
825
839
|
register_settings_routes(_get_mcp(), _get_server(), secret_path=path)
|
|
826
840
|
|
|
827
841
|
_run_entrypoint(
|
|
828
|
-
_run_http_with_graceful_shutdown(transport, port, path),
|
|
842
|
+
_run_http_with_graceful_shutdown(transport, host, port, path),
|
|
829
843
|
"HTTP server",
|
|
830
844
|
)
|
|
831
845
|
|
|
@@ -836,6 +850,7 @@ def main_web() -> None:
|
|
|
836
850
|
Environment:
|
|
837
851
|
- HOMEASSISTANT_URL (required)
|
|
838
852
|
- HOMEASSISTANT_TOKEN (required)
|
|
853
|
+
- MCP_HOST (optional, default: "0.0.0.0"; set 127.0.0.1 to restrict to loopback)
|
|
839
854
|
- MCP_PORT (optional, default: 8086)
|
|
840
855
|
- MCP_SECRET_PATH (optional, default: "/mcp")
|
|
841
856
|
"""
|
|
@@ -849,6 +864,7 @@ def main_sse() -> None:
|
|
|
849
864
|
Environment:
|
|
850
865
|
- HOMEASSISTANT_URL (required)
|
|
851
866
|
- HOMEASSISTANT_TOKEN (required)
|
|
867
|
+
- MCP_HOST (optional, default: "0.0.0.0"; set 127.0.0.1 to restrict to loopback)
|
|
852
868
|
- MCP_PORT (optional, default: 8087)
|
|
853
869
|
- MCP_SECRET_PATH (optional, default: "/mcp")
|
|
854
870
|
"""
|
|
@@ -866,6 +882,7 @@ def main_oauth() -> None:
|
|
|
866
882
|
Environment:
|
|
867
883
|
- HOMEASSISTANT_URL (required): URL of the Home Assistant instance
|
|
868
884
|
- MCP_BASE_URL (required): Public URL where this server is accessible (e.g., https://your-tunnel.com)
|
|
885
|
+
- MCP_HOST (optional, default: "0.0.0.0"; set 127.0.0.1 to restrict to loopback)
|
|
869
886
|
- MCP_PORT (optional, default: 8086)
|
|
870
887
|
- MCP_SECRET_PATH (optional, default: "/mcp")
|
|
871
888
|
- LOG_LEVEL (optional, default: INFO)
|
|
@@ -891,7 +908,7 @@ def main_oauth() -> None:
|
|
|
891
908
|
logger.info(f"OAuth mode logging configured at {log_level} level")
|
|
892
909
|
_log_startup_version()
|
|
893
910
|
|
|
894
|
-
port, path = _get_http_runtime(default_port=8086)
|
|
911
|
+
host, port, path = _get_http_runtime(default_port=8086)
|
|
895
912
|
base_url = os.getenv("MCP_BASE_URL")
|
|
896
913
|
ha_url = os.getenv("HOMEASSISTANT_URL")
|
|
897
914
|
|
|
@@ -924,15 +941,20 @@ For setup instructions, see:
|
|
|
924
941
|
# Type narrowing: ha_url and base_url are guaranteed non-None after the check above
|
|
925
942
|
assert ha_url is not None
|
|
926
943
|
assert base_url is not None
|
|
927
|
-
_run_entrypoint(
|
|
944
|
+
_run_entrypoint(
|
|
945
|
+
_run_oauth_server(ha_url, base_url, host, port, path), "OAuth server"
|
|
946
|
+
)
|
|
928
947
|
|
|
929
948
|
|
|
930
|
-
async def _run_oauth_server(
|
|
949
|
+
async def _run_oauth_server(
|
|
950
|
+
ha_url: str, base_url: str, host: str, port: int, path: str
|
|
951
|
+
) -> None:
|
|
931
952
|
"""Run the OAuth-authenticated MCP server.
|
|
932
953
|
|
|
933
954
|
Args:
|
|
934
955
|
ha_url: Home Assistant instance URL (server-side config)
|
|
935
956
|
base_url: Public URL where this server is accessible (required)
|
|
957
|
+
host: Bind host (typically 0.0.0.0; override via MCP_HOST)
|
|
936
958
|
port: Port to listen on
|
|
937
959
|
path: MCP endpoint path
|
|
938
960
|
"""
|
|
@@ -968,7 +990,9 @@ async def _run_oauth_server(ha_url: str, base_url: str, port: int, path: str) ->
|
|
|
968
990
|
f"Starting OAuth-enabled MCP server with {len(tools)} tools on {base_url}{path}"
|
|
969
991
|
)
|
|
970
992
|
|
|
971
|
-
await _run_with_shutdown(
|
|
993
|
+
await _run_with_shutdown(
|
|
994
|
+
mcp.run_async(**_http_run_kwargs("http", host, port, path))
|
|
995
|
+
)
|
|
972
996
|
|
|
973
997
|
|
|
974
998
|
if __name__ == "__main__":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_entry_flow.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/transforms/lite_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp/utils/kill_signal_diagnostics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.5.0.dev590 → ha_mcp_dev-7.5.0.dev592}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|