ha-mcp-dev 7.3.0.dev394__tar.gz → 7.3.0.dev396__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-7.3.0.dev394/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.3.0.dev396}/PKG-INFO +1 -1
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/pyproject.toml +1 -1
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/server.py +71 -17
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/LICENSE +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/README.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/setup.cfg +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "7.3.0.
|
|
7
|
+
version = "7.3.0.dev396"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.14"
|
|
@@ -143,6 +143,13 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
143
143
|
# Register bundled skills as MCP resources
|
|
144
144
|
self._register_skills()
|
|
145
145
|
|
|
146
|
+
# Enrich tool descriptions with BM25 keyword boosts. Runs
|
|
147
|
+
# unconditionally so Claude's native deferred-tool search
|
|
148
|
+
# (claude.ai) benefits even when ENABLE_TOOL_SEARCH is off.
|
|
149
|
+
# Must come before _apply_tool_search so CategorizedSearchTransform
|
|
150
|
+
# indexes the enriched descriptions.
|
|
151
|
+
self._apply_search_keyword_enrichment()
|
|
152
|
+
|
|
146
153
|
# Apply tool search transform (must come after all tools and
|
|
147
154
|
# ResourcesAsTools are registered so it can wrap everything)
|
|
148
155
|
self._apply_tool_search()
|
|
@@ -336,8 +343,11 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
336
343
|
)
|
|
337
344
|
|
|
338
345
|
# Extra keywords appended to tool descriptions for BM25 ranking.
|
|
339
|
-
#
|
|
340
|
-
#
|
|
346
|
+
# Applied unconditionally via SearchKeywordsTransform so they also
|
|
347
|
+
# improve retrieval for Claude's native deferred-tool search on
|
|
348
|
+
# claude.ai, which indexes tool names and descriptions with BM25
|
|
349
|
+
# (no semantic matching). Original tool docstrings stay unchanged;
|
|
350
|
+
# these keywords are appended by the transform at list-tools time.
|
|
341
351
|
_SEARCH_KEYWORDS: ClassVar[dict[str, str]] = {
|
|
342
352
|
# s02: "find entities" → ha_search_entities should outrank ha_deep_search
|
|
343
353
|
"ha_search_entities": (
|
|
@@ -390,8 +400,11 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
390
400
|
}
|
|
391
401
|
|
|
392
402
|
# Description overrides that REPLACE the original description for BM25.
|
|
393
|
-
# Used to narrow overly broad tools so they stop matching generic queries
|
|
394
|
-
#
|
|
403
|
+
# Used to narrow overly broad tools so they stop matching generic queries
|
|
404
|
+
# against ha-mcp's internal BM25 search tool. Only applied when
|
|
405
|
+
# enable_tool_search=True, because they are tuned specifically for the
|
|
406
|
+
# categorized search transform and replacing the base description would
|
|
407
|
+
# unnecessarily trim context for other clients.
|
|
395
408
|
_SEARCH_DESCRIPTION_OVERRIDES: ClassVar[dict[str, str]] = {
|
|
396
409
|
"ha_deep_search": (
|
|
397
410
|
"Search INSIDE automation, script, and helper YAML configurations. "
|
|
@@ -402,6 +415,53 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
402
415
|
),
|
|
403
416
|
}
|
|
404
417
|
|
|
418
|
+
def _apply_search_keyword_enrichment(self) -> None:
|
|
419
|
+
"""Append BM25 keyword boosts to tool descriptions.
|
|
420
|
+
|
|
421
|
+
Applied unconditionally so Claude's native deferred-tool search
|
|
422
|
+
(claude.ai uses BM25 over tool names and descriptions) can find
|
|
423
|
+
ha-mcp tools for common natural-language queries like "create
|
|
424
|
+
automation" — the scenario in #940. The original tool docstrings
|
|
425
|
+
in ``src/ha_mcp/tools/`` are unchanged; keywords are appended at
|
|
426
|
+
list-tools time via ``SearchKeywordsTransform``.
|
|
427
|
+
|
|
428
|
+
Description overrides (``_SEARCH_DESCRIPTION_OVERRIDES``) are only
|
|
429
|
+
applied when ``enable_tool_search`` is also set, because they
|
|
430
|
+
REPLACE the original description and are tuned specifically for
|
|
431
|
+
ha-mcp's internal BM25 search tool.
|
|
432
|
+
|
|
433
|
+
Runs before ``_apply_tool_search`` so downstream transforms
|
|
434
|
+
index the enriched descriptions.
|
|
435
|
+
"""
|
|
436
|
+
try:
|
|
437
|
+
from .transforms import SearchKeywordsTransform
|
|
438
|
+
except ImportError:
|
|
439
|
+
logger.warning(
|
|
440
|
+
"SearchKeywordsTransform not available; skipping description "
|
|
441
|
+
"enrichment (tool discoverability on claude.ai may be degraded)."
|
|
442
|
+
)
|
|
443
|
+
return
|
|
444
|
+
|
|
445
|
+
overrides = (
|
|
446
|
+
self._SEARCH_DESCRIPTION_OVERRIDES
|
|
447
|
+
if self.settings.enable_tool_search
|
|
448
|
+
else None
|
|
449
|
+
)
|
|
450
|
+
try:
|
|
451
|
+
self.mcp.add_transform(
|
|
452
|
+
SearchKeywordsTransform(
|
|
453
|
+
keywords=self._SEARCH_KEYWORDS,
|
|
454
|
+
overrides=overrides,
|
|
455
|
+
)
|
|
456
|
+
)
|
|
457
|
+
logger.info(
|
|
458
|
+
"Search keyword enrichment applied (%d boosts%s)",
|
|
459
|
+
len(self._SEARCH_KEYWORDS),
|
|
460
|
+
f", {len(overrides)} overrides" if overrides else "",
|
|
461
|
+
)
|
|
462
|
+
except Exception:
|
|
463
|
+
logger.exception("Failed to apply SearchKeywordsTransform")
|
|
464
|
+
|
|
405
465
|
def _apply_tool_search(self) -> None:
|
|
406
466
|
"""Apply the CategorizedSearchTransform if enabled.
|
|
407
467
|
|
|
@@ -410,6 +470,10 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
410
470
|
remain directly visible in list_tools() for individual permission
|
|
411
471
|
gating. ResourcesAsTools (list_resources/read_resource) are also
|
|
412
472
|
pinned when enabled.
|
|
473
|
+
|
|
474
|
+
Note: ``_apply_search_keyword_enrichment`` already ran before this
|
|
475
|
+
method and installed ``SearchKeywordsTransform`` — the enriched
|
|
476
|
+
catalog is what the categorized transform indexes.
|
|
413
477
|
"""
|
|
414
478
|
if not self.settings.enable_tool_search:
|
|
415
479
|
return
|
|
@@ -447,18 +511,6 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
447
511
|
)
|
|
448
512
|
|
|
449
513
|
try:
|
|
450
|
-
# Enrich tool descriptions for BM25 ranking (innermost transform).
|
|
451
|
-
# Added first so the search transform indexes enriched descriptions.
|
|
452
|
-
# Original tool docstrings are unchanged.
|
|
453
|
-
from .transforms import SearchKeywordsTransform
|
|
454
|
-
|
|
455
|
-
self.mcp.add_transform(
|
|
456
|
-
SearchKeywordsTransform(
|
|
457
|
-
keywords=self._SEARCH_KEYWORDS,
|
|
458
|
-
overrides=self._SEARCH_DESCRIPTION_OVERRIDES,
|
|
459
|
-
)
|
|
460
|
-
)
|
|
461
|
-
|
|
462
514
|
self.mcp.add_transform(
|
|
463
515
|
CategorizedSearchTransform(
|
|
464
516
|
max_results=5,
|
|
@@ -623,7 +675,9 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
623
675
|
if not f.resolve().is_relative_to(resolved_root):
|
|
624
676
|
continue
|
|
625
677
|
rel = f.relative_to(skill_dir)
|
|
626
|
-
ref_files.append(
|
|
678
|
+
ref_files.append(
|
|
679
|
+
{"name": str(rel), "uri": f"skill://{skill_name}/{rel}"}
|
|
680
|
+
)
|
|
627
681
|
except OSError:
|
|
628
682
|
logger.warning("Error reading skill files in %s", skill_dir)
|
|
629
683
|
return ref_files
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_entry_flow.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.3.0.dev394 → ha_mcp_dev-7.3.0.dev396}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|