Skip to content

Commit ea05158

Browse files
committed
Allow passing semantic layer client in context
1 parent ac2db30 commit ea05158

File tree

4 files changed

+21
-6
lines changed

4 files changed

+21
-6
lines changed

src/dbt_mcp/dbt_cli/tools.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import subprocess
33
from collections.abc import Iterable, Sequence
44

5-
from mcp.server.fastmcp import Context, FastMCP
5+
from mcp.server.fastmcp import FastMCP
66
from pydantic import Field
77

88
from dbt_mcp.config.config import DbtCliConfig

src/dbt_mcp/mcp/server.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import Any
66

77
from dbtlabs_vortex.producer import shutdown
8+
from dbtsl.client.sync import SyncSemanticLayerClient
89
from mcp.server.fastmcp import FastMCP
910
from mcp.types import ContentBlock, TextContent
1011

@@ -109,6 +110,15 @@ def get_context(self) -> DbtMcpContext:
109110
request_context=request_context,
110111
fastmcp=self,
111112
semantic_layer_config=self.config.semantic_layer_config,
113+
semantic_layer_client=(
114+
SyncSemanticLayerClient(
115+
environment_id=self.config.semantic_layer_config.prod_environment_id,
116+
auth_token=self.config.semantic_layer_config.service_token,
117+
host=self.config.semantic_layer_config.host,
118+
)
119+
if self.config.semantic_layer_config
120+
else None
121+
),
112122
discovery_config=self.config.discovery_config,
113123
dbt_cli_config=self.config.dbt_cli_config,
114124
admin_api_config=self.config.admin_api_config,

src/dbt_mcp/semantic_layer/tools.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,7 @@
2626

2727
def get_fetcher(ctx: DbtMcpContext) -> SemanticLayerFetcher:
2828
sl_config = ctx.get_semantic_layer_config()
29-
sl_client = SyncSemanticLayerClient(
30-
environment_id=sl_config.prod_environment_id,
31-
auth_token=sl_config.service_token,
32-
host=sl_config.host,
33-
)
29+
sl_client = ctx.get_semantic_layer_client()
3430
return SemanticLayerFetcher(
3531
sl_client=sl_client,
3632
config=sl_config,

src/dbt_mcp/tools/config.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
SemanticLayerConfig,
1111
)
1212
from dbt_mcp.dbt_admin.client import DbtAdminAPIClient
13+
from dbt_mcp.semantic_layer.client import SemanticLayerClientProtocol
1314

1415

1516
class DbtMcpContext(Context[ServerSession, object, Request]):
1617
"""Custom context for the MCP server"""
1718

1819
_semantic_layer_config: SemanticLayerConfig | None = None
20+
_semantic_layer_client: SemanticLayerClientProtocol | None = None
1921
_discovery_config: DiscoveryConfig | None = None
2022
_dbt_cli_config: DbtCliConfig | None = None
2123
_admin_api_config: AdminApiConfig | None = None
@@ -26,13 +28,15 @@ def __init__(
2628
request_context: RequestContext[ServerSession, object, Request] | None = None,
2729
fastmcp: FastMCP | None = None,
2830
semantic_layer_config: SemanticLayerConfig | None = None,
31+
semantic_layer_client: SemanticLayerClientProtocol | None = None,
2932
discovery_config: DiscoveryConfig | None = None,
3033
dbt_cli_config: DbtCliConfig | None = None,
3134
admin_api_config: AdminApiConfig | None = None,
3235
admin_api_client: DbtAdminAPIClient | None = None,
3336
):
3437
super().__init__(request_context=request_context, fastmcp=fastmcp)
3538
self._semantic_layer_config = semantic_layer_config
39+
self._semantic_layer_client = semantic_layer_client
3640
self._discovery_config = discovery_config
3741
self._dbt_cli_config = dbt_cli_config
3842
self._admin_api_config = admin_api_config
@@ -43,6 +47,11 @@ def get_semantic_layer_config(self) -> SemanticLayerConfig:
4347
raise ValueError("Semantic layer config is not set")
4448
return self._semantic_layer_config
4549

50+
def get_semantic_layer_client(self) -> SemanticLayerClientProtocol:
51+
if self._semantic_layer_client is None:
52+
raise ValueError("Semantic layer client is not set")
53+
return self._semantic_layer_client
54+
4655
def get_discovery_config(self) -> DiscoveryConfig:
4756
if self._discovery_config is None:
4857
raise ValueError("Discovery config is not set")

0 commit comments

Comments
 (0)