Skip to main content
Glama
test_precedence.py6.59 kB
"""Unit tests for tool registration precedence logic.""" from dbt_mcp.tools.register import should_register_tool from dbt_mcp.tools.tool_names import ToolName from dbt_mcp.tools.toolsets import Toolset class TestShouldRegisterTool: """Test the should_register_tool precedence logic.""" def test_precedence_1_individual_enable_highest(self): """Test that individual enable has highest precedence.""" # Enable query_metrics individually, but disable the entire toolset result = should_register_tool( tool_name=ToolName.QUERY_METRICS, enabled_tools={ToolName.QUERY_METRICS}, disabled_tools=set(), enabled_toolsets=set(), disabled_toolsets={Toolset.SEMANTIC_LAYER}, ) assert result is True, "Individual enable should override toolset disable" def test_precedence_2_individual_disable_overrides_toolset_enable(self): """Test that individual disable overrides toolset enable.""" # Enable semantic layer toolset, but disable query_metrics specifically result = should_register_tool( tool_name="query_metrics", enabled_tools=set(), disabled_tools={ToolName.QUERY_METRICS}, enabled_toolsets={Toolset.SEMANTIC_LAYER}, disabled_toolsets=set(), ) assert result is False, "Individual disable should override toolset enable" def test_precedence_3_toolset_enable_works(self): """Test that toolset enable enables all tools in toolset.""" result = should_register_tool( tool_name=ToolName.QUERY_METRICS, enabled_tools=set(), disabled_tools=set(), enabled_toolsets={Toolset.SEMANTIC_LAYER}, disabled_toolsets=set(), ) assert result is True, "Toolset enable should enable tool" def test_precedence_4_toolset_disable_works(self): """Test that toolset disable disables all tools in toolset.""" result = should_register_tool( tool_name=ToolName.QUERY_METRICS, enabled_tools=set(), disabled_tools=set(), enabled_toolsets=set(), disabled_toolsets={Toolset.SEMANTIC_LAYER}, ) assert result is False, "Toolset disable should disable tool" def test_precedence_5_default_enabled_when_no_enables_set(self): """Test that default is enabled when no explicit enables configured.""" result = should_register_tool( tool_name=ToolName.QUERY_METRICS, enabled_tools=set(), disabled_tools=set(), enabled_toolsets=set(), disabled_toolsets=set(), ) assert result is True, "Default should be enabled when no enables set" def test_precedence_5_default_disabled_when_enables_exist(self): """Test that default is disabled when any explicit enables exist.""" # Enable a different tool, this tool should be disabled by default result = should_register_tool( tool_name=ToolName.QUERY_METRICS, enabled_tools={ToolName.LIST_METRICS}, # Different tool enabled disabled_tools=set(), enabled_toolsets=set(), disabled_toolsets=set(), ) assert result is False, "Default should be disabled when other tools enabled" def test_precedence_5_default_disabled_when_toolset_enabled(self): """Test that default is disabled when any toolset is enabled.""" # Enable a different toolset, this tool's toolset not enabled result = should_register_tool( tool_name=ToolName.QUERY_METRICS, # SEMANTIC_LAYER tool enabled_tools=set(), disabled_tools=set(), enabled_toolsets={Toolset.ADMIN_API}, # Different toolset disabled_toolsets=set(), ) assert result is False, "Default should be disabled when any toolset enabled" def test_complex_scenario_toolset_with_exclusion(self): """Test enabling toolset but disabling specific tool within it.""" # Enable semantic layer, but disable get_dimensions result_enabled = should_register_tool( tool_name=ToolName.QUERY_METRICS, enabled_tools=set(), disabled_tools={ToolName.GET_DIMENSIONS}, enabled_toolsets={Toolset.SEMANTIC_LAYER}, disabled_toolsets=set(), ) assert result_enabled is True, "query_metrics should be enabled" result_disabled = should_register_tool( tool_name=ToolName.GET_DIMENSIONS, enabled_tools=set(), disabled_tools={ToolName.GET_DIMENSIONS}, enabled_toolsets={Toolset.SEMANTIC_LAYER}, disabled_toolsets=set(), ) assert result_disabled is False, "get_dimensions should be disabled" def test_complex_scenario_multiple_toolsets(self): """Test enabling multiple toolsets.""" # Enable both semantic layer and admin API for tool_name in [ ToolName.QUERY_METRICS, ToolName.TRIGGER_JOB_RUN, ]: result = should_register_tool( tool_name=ToolName(tool_name), enabled_tools=set(), disabled_tools=set(), enabled_toolsets={Toolset.SEMANTIC_LAYER, Toolset.ADMIN_API}, disabled_toolsets=set(), ) assert result is True, f"{tool_name} should be enabled" # Tool from different toolset should be disabled result = should_register_tool( tool_name=ToolName.GET_ALL_MODELS, # Discovery tool enabled_tools=set(), disabled_tools=set(), enabled_toolsets={Toolset.SEMANTIC_LAYER, Toolset.ADMIN_API}, disabled_toolsets=set(), ) assert result is False, "Discovery tool should be disabled" def test_individual_enable_overrides_everything(self): """Test that individual enable overrides all other settings.""" # Even with toolset disabled AND tool in disabled_tools, individual enable wins result = should_register_tool( tool_name=ToolName.QUERY_METRICS, enabled_tools={ToolName.QUERY_METRICS}, # Precedence 1 disabled_tools={ToolName.QUERY_METRICS}, # Precedence 2 (ignored) enabled_toolsets=set(), disabled_toolsets={Toolset.SEMANTIC_LAYER}, # Precedence 4 (ignored) ) assert result is True, "Individual enable should override everything"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dbt-labs/dbt-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server