ha-mcp-dev 8.4.3.dev2652__tar.gz → 8.4.3.dev2654__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-8.4.3.dev2652/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2654}/PKG-INFO +31 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/pyproject.toml +38 -8
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/__main__.py +9 -8
- ha_mcp_dev-8.4.3.dev2654/src/ha_mcp/_vendor/requirements.txt +11 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/auth/oidc_compat.py +4 -4
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/auth/provider.py +48 -31
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/backup_manager.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/capture.py +2 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/content.py +2 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/paths.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/provision.py +2 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/errors.py +5 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/ha_request_queue.py +5 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/http_transport.py +4 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/llm_exposure.py +4 -4
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/log_filters.py +3 -38
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/handlers.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/middleware.py +6 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/read_only.py +10 -6
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/redaction.py +5 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/server.py +7 -4
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/__init__.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_tools_meta.py +3 -7
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/smoke_test.py +4 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/strict_bps.py +6 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/auto_backup.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/backup.py +4 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/config_entry_flow.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/config_entry_reconfigure.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/dashboard_edit_errors.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/device_control.py +2 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/helpers.py +7 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/integration_reconfigure.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/log_sources.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/log_sources_fault.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/log_sources_supervisor.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/radio/zigbee.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/renamed_tool_middleware.py +5 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_deep.py +2 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tool_search_hint_middleware.py +6 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_addons.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_areas.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_assist_pipeline.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_blueprints.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_bug_report.py +31 -16
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_calendar.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_camera.py +2 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_categories.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_code.py +3 -5
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_config_automations.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_config_dashboards.py +3 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_config_helpers.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_config_scenes.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_config_scripts.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_dashboard_screenshot.py +3 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_dev.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_energy.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_entities.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_filesystem.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_groups.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_hacs.py +4 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_history.py +4 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_integrations.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_labels.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_radio.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_registry.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_resources.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_search.py +4 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_security_policy.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_service.py +4 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_services.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_system.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_themes.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_todo.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_traces.py +4 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_updates.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_utility.py +1 -1
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_voice_assistant.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_yaml_config.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_yaml_read.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_zones.py +3 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/util_helpers.py +5 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/validation_middleware.py +7 -2
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/transforms/categorized_search.py +34 -26
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/transforms/lite_docstrings.py +4 -4
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/transport_security.py +1 -4
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/visibility/enforcement.py +7 -3
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654/src/ha_mcp_dev.egg-info}/PKG-INFO +31 -3
- ha_mcp_dev-8.4.3.dev2654/src/ha_mcp_dev.egg-info/requires.txt +45 -0
- ha_mcp_dev-8.4.3.dev2652/src/ha_mcp/_vendor/requirements.txt +0 -8
- ha_mcp_dev-8.4.3.dev2652/src/ha_mcp_dev.egg-info/requires.txt +0 -9
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/setup.cfg +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/tests/test_env_manager.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ha-mcp-dev
|
|
3
|
-
Version: 8.4.3.
|
|
3
|
+
Version: 8.4.3.dev2654
|
|
4
4
|
Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
|
|
5
5
|
Author-email: Julien <github@qc-h.net>
|
|
6
6
|
License: MIT
|
|
@@ -19,9 +19,37 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
19
19
|
Requires-Python: <3.15,>=3.13
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist:
|
|
22
|
+
Requires-Dist: anyio>=4.10; python_version >= "3.14"
|
|
23
|
+
Requires-Dist: anyio>=4.9; python_version < "3.14"
|
|
24
|
+
Requires-Dist: authlib>=1.6.11
|
|
25
|
+
Requires-Dist: cyclopts>=4.0.0
|
|
26
|
+
Requires-Dist: exceptiongroup>=1.2.2
|
|
27
|
+
Requires-Dist: griffelib>=2.0.0
|
|
28
|
+
Requires-Dist: httpx2>=2.5.0
|
|
29
|
+
Requires-Dist: joserfc>=1.5.0
|
|
30
|
+
Requires-Dist: jsonref>=1.1.0
|
|
31
|
+
Requires-Dist: jsonschema>=4.20.0
|
|
32
|
+
Requires-Dist: jsonschema-path>=0.3.4
|
|
33
|
+
Requires-Dist: openapi-pydantic>=0.5.1
|
|
34
|
+
Requires-Dist: opentelemetry-api>=1.28.0
|
|
35
|
+
Requires-Dist: platformdirs>=4.0.0
|
|
36
|
+
Requires-Dist: py-key-value-aio[filetree,keyring,memory]<0.5.0,>=0.4.4
|
|
37
|
+
Requires-Dist: pydantic-settings>=2.0.0
|
|
38
|
+
Requires-Dist: pyjwt[crypto]>=2.10.1
|
|
39
|
+
Requires-Dist: pyperclip>=1.9.0
|
|
40
|
+
Requires-Dist: python-multipart>=0.0.26
|
|
41
|
+
Requires-Dist: pywin32>=311; sys_platform == "win32"
|
|
42
|
+
Requires-Dist: pyyaml<7.0,>=6.0
|
|
43
|
+
Requires-Dist: rich>=13.9.4
|
|
44
|
+
Requires-Dist: sse-starlette>=3.0.0
|
|
45
|
+
Requires-Dist: starlette>=1.0.1
|
|
46
|
+
Requires-Dist: typing-extensions>=4.13.0
|
|
47
|
+
Requires-Dist: typing-inspection>=0.4.1
|
|
48
|
+
Requires-Dist: uncalled-for>=0.4.0
|
|
49
|
+
Requires-Dist: uvicorn>=0.35; sys_platform != "emscripten"
|
|
50
|
+
Requires-Dist: watchfiles>=1.0.0
|
|
23
51
|
Requires-Dist: httpx[socks]<0.29,>=0.28.1
|
|
24
|
-
Requires-Dist: pydantic<3,>=2.13.4
|
|
52
|
+
Requires-Dist: pydantic[email]<3,>=2.13.4
|
|
25
53
|
Requires-Dist: python-dotenv==1.2.3
|
|
26
54
|
Requires-Dist: truststore==0.10.4
|
|
27
55
|
Requires-Dist: cryptography<51,>=48.0.0
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.4.3.
|
|
7
|
+
version = "8.4.3.dev2654"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
# Upper bound widened to <3.15 so the package installs on Home Assistant's
|
|
@@ -28,14 +28,44 @@ classifiers = [
|
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
dependencies = [
|
|
31
|
-
|
|
31
|
+
# fastmcp/mcp/mcp-types are vendored (scripts/vendor_fastmcp.py) so HA
|
|
32
|
+
# Core's own mcp 1.x pin can't conflict. Below: their runtime requirements.
|
|
33
|
+
"anyio>=4.10; python_version >= '3.14'",
|
|
34
|
+
"anyio>=4.9; python_version < '3.14'",
|
|
35
|
+
"authlib>=1.6.11",
|
|
36
|
+
"cyclopts>=4.0.0",
|
|
37
|
+
"exceptiongroup>=1.2.2",
|
|
38
|
+
"griffelib>=2.0.0",
|
|
39
|
+
"httpx2>=2.5.0",
|
|
40
|
+
"joserfc>=1.5.0",
|
|
41
|
+
"jsonref>=1.1.0",
|
|
42
|
+
"jsonschema>=4.20.0",
|
|
43
|
+
"jsonschema-path>=0.3.4",
|
|
44
|
+
"openapi-pydantic>=0.5.1",
|
|
45
|
+
"opentelemetry-api>=1.28.0",
|
|
46
|
+
"platformdirs>=4.0.0",
|
|
47
|
+
"py-key-value-aio[filetree,keyring,memory]>=0.4.4,<0.5.0",
|
|
48
|
+
"pydantic-settings>=2.0.0",
|
|
49
|
+
"pyjwt[crypto]>=2.10.1",
|
|
50
|
+
"pyperclip>=1.9.0",
|
|
51
|
+
"python-multipart>=0.0.26",
|
|
52
|
+
"pywin32>=311; sys_platform == 'win32'",
|
|
53
|
+
"pyyaml>=6.0,<7.0",
|
|
54
|
+
"rich>=13.9.4",
|
|
55
|
+
"sse-starlette>=3.0.0",
|
|
56
|
+
"starlette>=1.0.1",
|
|
57
|
+
"typing-extensions>=4.13.0",
|
|
58
|
+
"typing-inspection>=0.4.1",
|
|
59
|
+
"uncalled-for>=0.4.0",
|
|
60
|
+
"uvicorn>=0.35; sys_platform != 'emscripten'",
|
|
61
|
+
"watchfiles>=1.0.0",
|
|
32
62
|
# Shared with the embedded HA process: admit Core's versions, including
|
|
33
63
|
# compatible updates, instead of requiring it to keep our exact pin.
|
|
34
64
|
# uv.lock selects standalone versions; HA's own constraints select
|
|
35
65
|
# the embedded versions. Check both the HACS minimum and current Core
|
|
36
66
|
# before raising these floors; standalone lock updates can move independently.
|
|
37
67
|
"httpx[socks]>=0.28.1,<0.29",
|
|
38
|
-
"pydantic>=2.13.4,<3",
|
|
68
|
+
"pydantic[email]>=2.13.4,<3",
|
|
39
69
|
"python-dotenv==1.2.3",
|
|
40
70
|
"truststore==0.10.4",
|
|
41
71
|
# websockets is deliberately ABSENT from this list: ha-mcp ships its own
|
|
@@ -46,9 +76,9 @@ dependencies = [
|
|
|
46
76
|
# conflicting version demands and any of their installs can replace or
|
|
47
77
|
# tear it in place (#2135/#2146); a declared dependency here would make
|
|
48
78
|
# ha-mcp PIN that contested copy, which is what forced the in-place
|
|
49
|
-
# replacements.
|
|
50
|
-
#
|
|
51
|
-
# not the absence of this line — and the embedded no-stomp e2e guard is
|
|
79
|
+
# replacements. Home Assistant's environment carries a shared copy anyway
|
|
80
|
+
# (Core and other integrations install it), so what keeps us off it is the
|
|
81
|
+
# vendored import path, not the absence of this line — and the embedded no-stomp e2e guard is
|
|
52
82
|
# what proves no install of ours ever replaces the shared copy.
|
|
53
83
|
# Range (not a hard pin) so the resolver can satisfy Home Assistant's own
|
|
54
84
|
# cryptography constraint when ha-mcp is installed into the HA venv for
|
|
@@ -119,7 +149,6 @@ explicit_package_bases = true
|
|
|
119
149
|
|
|
120
150
|
[[tool.mypy.overrides]]
|
|
121
151
|
module = [
|
|
122
|
-
"fastmcp.*",
|
|
123
152
|
"jq",
|
|
124
153
|
"pydantic_monty",
|
|
125
154
|
"pydantic_monty.*",
|
|
@@ -388,7 +417,8 @@ dev = [
|
|
|
388
417
|
# it is NOT a runtime dependency (see the note in [project.dependencies]).
|
|
389
418
|
"websockets>=15.0.1",
|
|
390
419
|
"docker>=7.1.0",
|
|
391
|
-
|
|
420
|
+
# Shared SDK for the component's llm_api.py tests; mirrors HA Core's 1.x line.
|
|
421
|
+
"mcp>=1.26.0,<2",
|
|
392
422
|
"mypy>=1.17.0",
|
|
393
423
|
"openai>=1.0.0",
|
|
394
424
|
"jsonschema>=4.25.1",
|
|
@@ -42,8 +42,7 @@ from ha_mcp.browser_landing import ( # noqa: E402
|
|
|
42
42
|
from ha_mcp.log_filters import install_sdk_log_filters # noqa: E402
|
|
43
43
|
|
|
44
44
|
if TYPE_CHECKING:
|
|
45
|
-
from fastmcp import FastMCP
|
|
46
|
-
|
|
45
|
+
from ha_mcp._vendor.fastmcp import FastMCP
|
|
47
46
|
from ha_mcp.client.rest_client import HomeAssistantClient
|
|
48
47
|
from ha_mcp.config import Settings
|
|
49
48
|
from ha_mcp.server import HomeAssistantSmartMCPServer
|
|
@@ -68,8 +67,7 @@ class OAuthProxyClient:
|
|
|
68
67
|
|
|
69
68
|
def _get_oauth_client(self) -> "HomeAssistantClient":
|
|
70
69
|
"""Get the OAuth client for the current request context."""
|
|
71
|
-
from fastmcp.server.dependencies import get_access_token
|
|
72
|
-
|
|
70
|
+
from ha_mcp._vendor.fastmcp.server.dependencies import get_access_token
|
|
73
71
|
from ha_mcp.client.rest_client import (
|
|
74
72
|
HomeAssistantAuthError,
|
|
75
73
|
HomeAssistantClient,
|
|
@@ -293,7 +291,7 @@ def _validate_standard_credentials(settings: "Settings") -> None:
|
|
|
293
291
|
|
|
294
292
|
def _get_show_banner() -> bool:
|
|
295
293
|
"""Check if server banner should be shown (respects FASTMCP_SHOW_SERVER_BANNER env var)."""
|
|
296
|
-
import fastmcp
|
|
294
|
+
from ha_mcp._vendor import fastmcp
|
|
297
295
|
|
|
298
296
|
return fastmcp.settings.show_server_banner
|
|
299
297
|
|
|
@@ -321,7 +319,11 @@ def _http_run_kwargs(host: str, port: int, path: str) -> dict[str, Any]:
|
|
|
321
319
|
"path": path,
|
|
322
320
|
"stateless_http": True,
|
|
323
321
|
"show_banner": _get_show_banner(),
|
|
324
|
-
|
|
322
|
+
# ws="none": uvicorn's default imports the shared websockets package.
|
|
323
|
+
"uvicorn_config": {
|
|
324
|
+
"log_config": _get_timestamped_uvicorn_log_config(),
|
|
325
|
+
"ws": "none",
|
|
326
|
+
},
|
|
325
327
|
}
|
|
326
328
|
|
|
327
329
|
|
|
@@ -441,8 +443,7 @@ def _setup_logging(log_level_str: str, force: bool = True) -> None:
|
|
|
441
443
|
"""
|
|
442
444
|
log_level = getattr(logging, log_level_str)
|
|
443
445
|
|
|
444
|
-
import fastmcp
|
|
445
|
-
|
|
446
|
+
from ha_mcp._vendor import fastmcp
|
|
446
447
|
from ha_mcp.utils.usage_logger import preserve_startup_collector
|
|
447
448
|
|
|
448
449
|
with preserve_startup_collector():
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Vendored-library pins, bumped by the renovate custom manager that matches
|
|
2
|
+
# this exact path (see renovate.json — no stock manager sees this file).
|
|
3
|
+
#
|
|
4
|
+
# Renovate runs scripts/vendor_websockets.py (websockets) or
|
|
5
|
+
# scripts/vendor_fastmcp.py (fastmcp-slim, mcp, mcp-types) before committing
|
|
6
|
+
# a bump; tests/src/unit/test_vendored_*.py reject stale or altered trees.
|
|
7
|
+
# For a manual pin change, run the same generator and commit its outputs.
|
|
8
|
+
websockets==17.1
|
|
9
|
+
fastmcp-slim==4.0.3
|
|
10
|
+
mcp==2.2.0
|
|
11
|
+
mcp-types==2.2.0
|
|
@@ -5,10 +5,10 @@ from __future__ import annotations
|
|
|
5
5
|
import logging
|
|
6
6
|
from typing import override
|
|
7
7
|
|
|
8
|
-
from fastmcp.server.auth.oauth_proxy.models import ProxyDCRClient
|
|
9
|
-
from fastmcp.server.auth.oidc_proxy import OIDCProxy
|
|
10
|
-
from mcp.server.auth.provider import AuthorizationParams, RefreshToken
|
|
11
|
-
from mcp.shared.auth import OAuthClientInformationFull
|
|
8
|
+
from ha_mcp._vendor.fastmcp.server.auth.oauth_proxy.models import ProxyDCRClient
|
|
9
|
+
from ha_mcp._vendor.fastmcp.server.auth.oidc_proxy import OIDCProxy
|
|
10
|
+
from ha_mcp._vendor.mcp.server.auth.provider import AuthorizationParams, RefreshToken
|
|
11
|
+
from ha_mcp._vendor.mcp.shared.auth import OAuthClientInformationFull
|
|
12
12
|
|
|
13
13
|
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
@@ -16,18 +16,25 @@ import os
|
|
|
16
16
|
import secrets
|
|
17
17
|
import time
|
|
18
18
|
from base64 import urlsafe_b64decode, urlsafe_b64encode
|
|
19
|
-
from collections.abc import
|
|
19
|
+
from collections.abc import Callable
|
|
20
20
|
from pathlib import Path
|
|
21
21
|
from typing import Any
|
|
22
22
|
from urllib.parse import parse_qs, urlencode, urlparse, urlunparse
|
|
23
23
|
|
|
24
|
-
from
|
|
24
|
+
from pydantic import AnyHttpUrl, ValidationError
|
|
25
|
+
from starlette.datastructures import MutableHeaders
|
|
26
|
+
from starlette.requests import Request
|
|
27
|
+
from starlette.responses import HTMLResponse, RedirectResponse, Response
|
|
28
|
+
from starlette.routing import Route
|
|
29
|
+
from starlette.types import ASGIApp, Message, Receive, Scope, Send
|
|
30
|
+
|
|
31
|
+
from ha_mcp._vendor.fastmcp.server.auth.auth import (
|
|
25
32
|
AccessToken, # FastMCP version has claims field
|
|
26
33
|
ClientRegistrationOptions,
|
|
27
34
|
OAuthProvider,
|
|
28
35
|
RevocationOptions,
|
|
29
36
|
)
|
|
30
|
-
from mcp.server.auth.provider import (
|
|
37
|
+
from ha_mcp._vendor.mcp.server.auth.provider import (
|
|
31
38
|
AuthorizationCode,
|
|
32
39
|
AuthorizationParams,
|
|
33
40
|
AuthorizeError,
|
|
@@ -35,11 +42,7 @@ from mcp.server.auth.provider import (
|
|
|
35
42
|
TokenError,
|
|
36
43
|
construct_redirect_uri,
|
|
37
44
|
)
|
|
38
|
-
from mcp.shared.auth import OAuthClientInformationFull, OAuthToken
|
|
39
|
-
from pydantic import AnyHttpUrl, ValidationError
|
|
40
|
-
from starlette.requests import Request
|
|
41
|
-
from starlette.responses import HTMLResponse, RedirectResponse, Response
|
|
42
|
-
from starlette.routing import Route
|
|
45
|
+
from ha_mcp._vendor.mcp.shared.auth import OAuthClientInformationFull, OAuthToken
|
|
43
46
|
|
|
44
47
|
from ..utils.data_paths import get_data_dir
|
|
45
48
|
from .consent_form import create_consent_html, create_error_html
|
|
@@ -52,6 +55,34 @@ ACCESS_TOKEN_EXPIRY_SECONDS = 60 * 60 # 1 hour
|
|
|
52
55
|
REFRESH_TOKEN_EXPIRY_SECONDS = 7 * 24 * 60 * 60 # 7 days
|
|
53
56
|
|
|
54
57
|
|
|
58
|
+
class _StampIssOnErrorRedirects:
|
|
59
|
+
"""ASGI wrapper that stamps ``iss`` on the error redirects of the app it wraps.
|
|
60
|
+
|
|
61
|
+
The SDK serves ``/authorize`` as an ASGI app, so the stamp is applied to the
|
|
62
|
+
headers as they are sent. A class, not a function, so Starlette's ``Route``
|
|
63
|
+
mounts it as raw ASGI instead of wrapping it in ``request_response``.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
def __init__(self, app: ASGIApp, stamp: Callable[[str], str]) -> None:
|
|
67
|
+
self.app = app
|
|
68
|
+
self.stamp = stamp
|
|
69
|
+
|
|
70
|
+
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
|
|
71
|
+
async def send_stamped(message: Message) -> None:
|
|
72
|
+
if message["type"] == "http.response.start" and message["status"] in (
|
|
73
|
+
302,
|
|
74
|
+
303,
|
|
75
|
+
307,
|
|
76
|
+
):
|
|
77
|
+
headers = MutableHeaders(scope=message)
|
|
78
|
+
location = headers.get("location", "")
|
|
79
|
+
if location and "error" in parse_qs(urlparse(location).query):
|
|
80
|
+
headers["location"] = self.stamp(location)
|
|
81
|
+
await send(message)
|
|
82
|
+
|
|
83
|
+
await self.app(scope, receive, send_stamped)
|
|
84
|
+
|
|
85
|
+
|
|
55
86
|
class HomeAssistantCredentials:
|
|
56
87
|
"""Temporary HA credentials held between consent form and token exchange."""
|
|
57
88
|
|
|
@@ -396,11 +427,8 @@ class HomeAssistantOAuthProvider(OAuthProvider):
|
|
|
396
427
|
params.append(("iss", self._issuer()))
|
|
397
428
|
return urlunparse(parsed._replace(query=urlencode(params)))
|
|
398
429
|
|
|
399
|
-
def _wrap_authorize_with_iss(
|
|
400
|
-
|
|
401
|
-
) -> "Callable[[Request], Awaitable[Response]]":
|
|
402
|
-
"""Wrap the SDK's ``/authorize`` endpoint to stamp ``iss`` on its
|
|
403
|
-
error redirects.
|
|
430
|
+
def _wrap_authorize_with_iss(self, endpoint: ASGIApp) -> ASGIApp:
|
|
431
|
+
"""Wrap the SDK's ``/authorize`` app to stamp ``iss`` on its error redirects.
|
|
404
432
|
|
|
405
433
|
The SDK's ``AuthorizationHandler`` builds OAuth error authorization
|
|
406
434
|
responses (invalid scope, ``authorize()`` raising after redirect-URI
|
|
@@ -409,27 +437,16 @@ class HomeAssistantOAuthProvider(OAuthProvider):
|
|
|
409
437
|
is a same-origin redirect to the consent form (no ``error``), which is
|
|
410
438
|
not an authorization response and stays untouched.
|
|
411
439
|
"""
|
|
412
|
-
|
|
413
|
-
async def authorize_with_iss(request: Request) -> Response:
|
|
414
|
-
response: Response = await endpoint(request)
|
|
415
|
-
location = response.headers.get("location", "")
|
|
416
|
-
if (
|
|
417
|
-
response.status_code in (302, 303, 307)
|
|
418
|
-
and location
|
|
419
|
-
and "error" in parse_qs(urlparse(location).query)
|
|
420
|
-
):
|
|
421
|
-
response.headers["location"] = self._ensure_single_iss(location)
|
|
422
|
-
return response
|
|
423
|
-
|
|
424
|
-
return authorize_with_iss
|
|
440
|
+
return _StampIssOnErrorRedirects(endpoint, self._ensure_single_iss)
|
|
425
441
|
|
|
426
442
|
def get_routes(self, mcp_path: str | None = None) -> list[Route]:
|
|
427
443
|
"""
|
|
428
444
|
Get OAuth routes including custom consent form routes.
|
|
429
445
|
|
|
430
446
|
This extends the base OAuth routes with:
|
|
431
|
-
-
|
|
432
|
-
|
|
447
|
+
- /authorize - the SDK handler, its error redirects stamped with ``iss``;
|
|
448
|
+
success redirects to /consent
|
|
449
|
+
- GET/POST /consent - the consent form and its submission
|
|
433
450
|
- Custom /.well-known/oauth-authorization-server with enhanced metadata
|
|
434
451
|
"""
|
|
435
452
|
# Get base OAuth routes
|
|
@@ -442,7 +459,7 @@ class HomeAssistantOAuthProvider(OAuthProvider):
|
|
|
442
459
|
|
|
443
460
|
async def enhanced_metadata_handler(request: Request) -> Response:
|
|
444
461
|
"""Enhanced OAuth metadata handler with Claude.ai compatibility."""
|
|
445
|
-
from mcp.server.auth.routes import build_metadata
|
|
462
|
+
from ha_mcp._vendor.mcp.server.auth.routes import build_metadata
|
|
446
463
|
|
|
447
464
|
# Get base metadata from MCP SDK
|
|
448
465
|
metadata = build_metadata(
|
|
@@ -492,7 +509,7 @@ class HomeAssistantOAuthProvider(OAuthProvider):
|
|
|
492
509
|
isinstance(route, Route)
|
|
493
510
|
and route.path == "/.well-known/oauth-authorization-server"
|
|
494
511
|
):
|
|
495
|
-
from mcp.server.auth.routes import cors_middleware
|
|
512
|
+
from ha_mcp._vendor.mcp.server.auth.routes import cors_middleware
|
|
496
513
|
|
|
497
514
|
enhanced_routes.append(
|
|
498
515
|
Route(
|
|
@@ -520,7 +537,7 @@ class HomeAssistantOAuthProvider(OAuthProvider):
|
|
|
520
537
|
# ChatGPT expects /.well-known/openid-configuration (OpenID Connect Discovery)
|
|
521
538
|
# in addition to /.well-known/oauth-authorization-server (OAuth 2.1)
|
|
522
539
|
# Per RFC 8414, many servers support both endpoints with identical metadata
|
|
523
|
-
from mcp.server.auth.routes import cors_middleware
|
|
540
|
+
from ha_mcp._vendor.mcp.server.auth.routes import cors_middleware
|
|
524
541
|
|
|
525
542
|
enhanced_routes.append(
|
|
526
543
|
Route(
|
|
@@ -62,7 +62,8 @@ from pathlib import Path
|
|
|
62
62
|
from typing import Any, Literal, NotRequired, TypedDict
|
|
63
63
|
|
|
64
64
|
import yaml # type: ignore[import-untyped]
|
|
65
|
-
|
|
65
|
+
|
|
66
|
+
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
66
67
|
|
|
67
68
|
from .client.rest_client import HomeAssistantConnectionError, HomeAssistantError
|
|
68
69
|
from .utils.data_paths import get_data_dir
|
|
@@ -2215,7 +2216,7 @@ async def _fetch_dashboard(client: Any, entity_id: str) -> Any:
|
|
|
2215
2216
|
The component refuses YAML bodies, so those capture through legacy unchanged.
|
|
2216
2217
|
Imported lazily to avoid an import cycle.
|
|
2217
2218
|
"""
|
|
2218
|
-
from fastmcp.exceptions import ToolError
|
|
2219
|
+
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
2219
2220
|
|
|
2220
2221
|
from .tools.tools_config_dashboards import (
|
|
2221
2222
|
_component_dashboard_config,
|
{ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
@@ -19,7 +19,8 @@ from typing import Any, Literal, NoReturn, cast
|
|
|
19
19
|
from urllib.parse import quote
|
|
20
20
|
|
|
21
21
|
import httpx
|
|
22
|
-
|
|
22
|
+
|
|
23
|
+
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
23
24
|
|
|
24
25
|
from ..errors import ErrorCode, create_error_response
|
|
25
26
|
from ..tools.helpers import raise_tool_error
|
{ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
@@ -5,8 +5,8 @@ from __future__ import annotations
|
|
|
5
5
|
import hashlib
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
|
-
from fastmcp.utilities.types import Image
|
|
9
|
-
from mcp.types import ImageContent
|
|
8
|
+
from ha_mcp._vendor.fastmcp.utilities.types import Image
|
|
9
|
+
from ha_mcp._vendor.mcp.types import ImageContent
|
|
10
10
|
|
|
11
11
|
from ..errors import ErrorCode, create_error_response
|
|
12
12
|
from ..tools.helpers import raise_tool_error
|
{ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
@@ -9,7 +9,7 @@ from collections import Counter
|
|
|
9
9
|
from dataclasses import dataclass
|
|
10
10
|
from typing import Any, cast
|
|
11
11
|
|
|
12
|
-
from fastmcp.exceptions import ToolError
|
|
12
|
+
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
13
13
|
|
|
14
14
|
from ..errors import ErrorCode, create_error_response
|
|
15
15
|
from ..tools.helpers import raise_tool_error
|
{ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2654}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
@@ -27,7 +27,8 @@ from dataclasses import dataclass
|
|
|
27
27
|
from typing import Any
|
|
28
28
|
|
|
29
29
|
import httpx
|
|
30
|
-
|
|
30
|
+
|
|
31
|
+
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
31
32
|
|
|
32
33
|
from ..errors import ErrorCode, create_error_response
|
|
33
34
|
from ..tools.helpers import raise_tool_error
|
|
@@ -10,9 +10,14 @@ The structured error format enables AI agents to:
|
|
|
10
10
|
- Understand the context and details of failures
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
import logging
|
|
13
14
|
from enum import StrEnum
|
|
14
15
|
from typing import Any
|
|
15
16
|
|
|
17
|
+
# Level FastMCP logs ha-mcp's ToolErrors at: user-facing failures, not server
|
|
18
|
+
# bugs. A ToolError built without it logs at FastMCP's default, ERROR.
|
|
19
|
+
TOOL_ERROR_LOG_LEVEL = logging.WARNING
|
|
20
|
+
|
|
16
21
|
|
|
17
22
|
class ErrorCode(StrEnum):
|
|
18
23
|
"""
|
|
@@ -7,7 +7,11 @@ import logging
|
|
|
7
7
|
from contextvars import ContextVar
|
|
8
8
|
from typing import Any
|
|
9
9
|
|
|
10
|
-
from fastmcp.server.middleware.middleware import
|
|
10
|
+
from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
|
|
11
|
+
CallNext,
|
|
12
|
+
Middleware,
|
|
13
|
+
MiddlewareContext,
|
|
14
|
+
)
|
|
11
15
|
|
|
12
16
|
from .errors import create_timeout_error
|
|
13
17
|
from .tool_dispatch import (
|
|
@@ -11,12 +11,13 @@ from time import monotonic
|
|
|
11
11
|
from typing import Any
|
|
12
12
|
from uuid import uuid4
|
|
13
13
|
|
|
14
|
-
import fastmcp
|
|
15
|
-
from fastmcp import FastMCP
|
|
16
|
-
from fastmcp.server.http import StarletteWithLifespan
|
|
17
14
|
from starlette.middleware import Middleware
|
|
18
15
|
from starlette.types import ASGIApp, Message, Receive, Scope, Send
|
|
19
16
|
|
|
17
|
+
from ha_mcp._vendor import fastmcp
|
|
18
|
+
from ha_mcp._vendor.fastmcp import FastMCP
|
|
19
|
+
from ha_mcp._vendor.fastmcp.server.http import StarletteWithLifespan
|
|
20
|
+
|
|
20
21
|
from .config import get_global_settings
|
|
21
22
|
|
|
22
23
|
logger = logging.getLogger(__name__)
|
|
@@ -35,12 +35,12 @@ import time
|
|
|
35
35
|
from collections.abc import Callable, Mapping, Sequence
|
|
36
36
|
from typing import TYPE_CHECKING, Any
|
|
37
37
|
|
|
38
|
-
from fastmcp.server.middleware import Middleware
|
|
38
|
+
from ha_mcp._vendor.fastmcp.server.middleware import Middleware
|
|
39
39
|
|
|
40
40
|
if TYPE_CHECKING:
|
|
41
|
-
from fastmcp.server.middleware import CallNext, MiddlewareContext
|
|
42
|
-
from fastmcp.tools import Tool
|
|
43
|
-
from mcp import types as mt
|
|
41
|
+
from ha_mcp._vendor.fastmcp.server.middleware import CallNext, MiddlewareContext
|
|
42
|
+
from ha_mcp._vendor.fastmcp.tools import Tool
|
|
43
|
+
from ha_mcp._vendor.mcp import types as mt
|
|
44
44
|
|
|
45
45
|
logger = logging.getLogger(__name__)
|
|
46
46
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""MCP SDK
|
|
1
|
+
"""MCP SDK log-noise filters shared across every HTTP launcher.
|
|
2
2
|
|
|
3
3
|
Extracted from :mod:`ha_mcp.__main__` for the same reason as
|
|
4
4
|
:mod:`ha_mcp.browser_landing`: the in-process server (the ``ha_mcp_tools``
|
|
@@ -17,8 +17,6 @@ from __future__ import annotations
|
|
|
17
17
|
import logging
|
|
18
18
|
|
|
19
19
|
import anyio
|
|
20
|
-
from fastmcp.exceptions import ToolError
|
|
21
|
-
from pydantic import ValidationError as PydanticValidationError
|
|
22
20
|
|
|
23
21
|
|
|
24
22
|
class StatelessSessionLogFilter(logging.Filter):
|
|
@@ -54,37 +52,6 @@ class StatelessSessionLogFilter(logging.Filter):
|
|
|
54
52
|
return "Terminating session: None" not in message
|
|
55
53
|
|
|
56
54
|
|
|
57
|
-
class ToolValidationLogFilter(logging.Filter):
|
|
58
|
-
"""Demote fastmcp tool-failure tracebacks to single-line warnings.
|
|
59
|
-
|
|
60
|
-
Pydantic ValidationError and tool-raised ToolError aren't server bugs,
|
|
61
|
-
so the traceback through fastmcp/pydantic internals is just noise. The
|
|
62
|
-
structured error detail is preserved in the WARNING message; stack is
|
|
63
|
-
intentionally dropped because these are user-input errors, not bugs.
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
def filter(self, record: logging.LogRecord) -> bool:
|
|
67
|
-
"""Demote a known-benign validation/tool-error record to WARNING."""
|
|
68
|
-
if record.name != "fastmcp.server.server" or not record.exc_info:
|
|
69
|
-
return True
|
|
70
|
-
|
|
71
|
-
msg = record.getMessage()
|
|
72
|
-
err = record.exc_info[1]
|
|
73
|
-
if "Error validating tool" in msg and isinstance(err, PydanticValidationError):
|
|
74
|
-
record.msg = f"{msg}: {err.errors(include_url=False)}"
|
|
75
|
-
elif "Error calling tool" in msg and isinstance(err, ToolError):
|
|
76
|
-
record.msg = f"{msg}: {err}"
|
|
77
|
-
else:
|
|
78
|
-
return True
|
|
79
|
-
|
|
80
|
-
record.args = ()
|
|
81
|
-
record.levelno = logging.WARNING
|
|
82
|
-
record.levelname = "WARNING"
|
|
83
|
-
record.exc_info = None
|
|
84
|
-
record.exc_text = None
|
|
85
|
-
return True
|
|
86
|
-
|
|
87
|
-
|
|
88
55
|
_DISCONNECT_TEARDOWN_ERRORS = (anyio.ClosedResourceError, anyio.BrokenResourceError)
|
|
89
56
|
|
|
90
57
|
|
|
@@ -140,8 +107,7 @@ class SessionDisconnectLogFilter(logging.Filter):
|
|
|
140
107
|
stateful session runners of mcp/server/streamable_http_manager.py) -- it
|
|
141
108
|
just logs it as an alarming ERROR-level traceback. That's an expected
|
|
142
109
|
race in a stateless HTTP protocol (the client already gave up), not a
|
|
143
|
-
server bug, so demote it
|
|
144
|
-
other known-benign failures. Any other exception on this logger -- an
|
|
110
|
+
server bug, so demote it. Any other exception on this logger -- an
|
|
145
111
|
actual crash -- is left untouched.
|
|
146
112
|
"""
|
|
147
113
|
|
|
@@ -194,7 +160,7 @@ def _add_filter_once(logger_name: str, filter_cls: type[logging.Filter]) -> None
|
|
|
194
160
|
|
|
195
161
|
|
|
196
162
|
def install_sdk_log_filters() -> None:
|
|
197
|
-
"""Attach the demotion filters above to their
|
|
163
|
+
"""Attach the suppression/demotion filters above to their MCP SDK loggers.
|
|
198
164
|
|
|
199
165
|
Every HTTP launcher must call this: the CLI (``ha_mcp.__main__``), the
|
|
200
166
|
Home Assistant app's ``start.py``, and the in-process embedded server
|
|
@@ -204,4 +170,3 @@ def install_sdk_log_filters() -> None:
|
|
|
204
170
|
"""
|
|
205
171
|
_add_filter_once("mcp.server.streamable_http", StatelessSessionLogFilter)
|
|
206
172
|
_add_filter_once("mcp.server.streamable_http_manager", SessionDisconnectLogFilter)
|
|
207
|
-
_add_filter_once("fastmcp.server.server", ToolValidationLogFilter)
|
|
@@ -31,7 +31,7 @@ def _is_write_or_destructive(tool: Any) -> bool:
|
|
|
31
31
|
ann = getattr(tool, "annotations", None)
|
|
32
32
|
# No annotations = treat as potentially write (safe default for the
|
|
33
33
|
# UI, matches the runtime gate which doesn't skip read-only).
|
|
34
|
-
return ann is None or
|
|
34
|
+
return ann is None or ann.read_only_hint is not True
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def _extract_arg_paths(parameters: dict[str, Any]) -> list[dict[str, Any]]:
|
|
@@ -9,7 +9,12 @@ from typing import Any, NoReturn
|
|
|
9
9
|
|
|
10
10
|
import anyio
|
|
11
11
|
from anyio.to_thread import run_sync as run_in_thread
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
|
|
14
|
+
CallNext,
|
|
15
|
+
Middleware,
|
|
16
|
+
MiddlewareContext,
|
|
17
|
+
)
|
|
13
18
|
|
|
14
19
|
from ..errors import ErrorCode, create_error_response
|
|
15
20
|
from ..renamed_tools import current_tool_name
|
|
@@ -38,9 +38,13 @@ from contextlib import contextmanager
|
|
|
38
38
|
from contextvars import ContextVar
|
|
39
39
|
from typing import TYPE_CHECKING, Any, NamedTuple, NoReturn
|
|
40
40
|
|
|
41
|
-
from fastmcp.server.middleware.middleware import
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
|
|
42
|
+
CallNext,
|
|
43
|
+
Middleware,
|
|
44
|
+
MiddlewareContext,
|
|
45
|
+
)
|
|
46
|
+
from ha_mcp._vendor.fastmcp.server.transforms import Transform
|
|
47
|
+
from ha_mcp._vendor.fastmcp.tools import Tool
|
|
44
48
|
|
|
45
49
|
from .config import get_global_settings
|
|
46
50
|
from .errors import ErrorCode, create_error_response
|
|
@@ -49,8 +53,8 @@ from .tool_dispatch import CALL_PROXY_META_TOOLS
|
|
|
49
53
|
from .tools.helpers import raise_tool_error
|
|
50
54
|
|
|
51
55
|
if TYPE_CHECKING:
|
|
52
|
-
from fastmcp.server.transforms import GetToolNext
|
|
53
|
-
from fastmcp.utilities.versions import VersionSpec
|
|
56
|
+
from ha_mcp._vendor.fastmcp.server.transforms import GetToolNext
|
|
57
|
+
from ha_mcp._vendor.fastmcp.utilities.versions import VersionSpec
|
|
54
58
|
|
|
55
59
|
logger = logging.getLogger(__name__)
|
|
56
60
|
|
|
@@ -328,7 +332,7 @@ READ_ONLY_EXEMPT_TOOLS: dict[str, ReadOnlyExemption] = {
|
|
|
328
332
|
def is_read_safe(tool: Tool) -> bool:
|
|
329
333
|
"""Return True when the tool's annotations declare it read-only."""
|
|
330
334
|
annotations = getattr(tool, "annotations", None)
|
|
331
|
-
return bool(annotations and
|
|
335
|
+
return bool(annotations and annotations.read_only_hint is True)
|
|
332
336
|
|
|
333
337
|
|
|
334
338
|
def read_only_visible(tool: Tool) -> bool:
|
|
@@ -41,7 +41,11 @@ import threading
|
|
|
41
41
|
from collections.abc import Iterable, Sequence
|
|
42
42
|
from typing import Any
|
|
43
43
|
|
|
44
|
-
from fastmcp.server.middleware.middleware import
|
|
44
|
+
from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
|
|
45
|
+
CallNext,
|
|
46
|
+
Middleware,
|
|
47
|
+
MiddlewareContext,
|
|
48
|
+
)
|
|
45
49
|
|
|
46
50
|
from .config import get_global_settings
|
|
47
51
|
|