Skip to content

Commit 9318d8d

Browse files
committed
feat: add MCP tool to expose server version
Add a new get_mcp_server_version tool that returns the current version of the dbt-mcp server. This toolset is disabled by default and can be enabled via DBT_MCP_ENABLE_MCP_SERVER_METADATA=true.
1 parent e66d34f commit 9318d8d

18 files changed

Lines changed: 147 additions & 1 deletion

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Enhancement or New Feature
2+
body: Add MCP tool to expose server version
3+
time: 2026-01-14T10:00:00.000000+01:00

.task/checksum/d2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
f795cdc3073a1e601e0609c2ecdc6af6
1+
fb7ca5e5d199fba3a564f3d8b49d7e48

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ The dbt MCP server architecture allows for your agent to connect to a variety of
8888
- `fusion.get_column_lineage`
8989
- `get_column_lineage`
9090

91+
### Mcp Server Metadata
92+
- `get_mcp_server_version`
93+
9194

9295
## Examples
9396

docs/d2.png

27.5 KB
Loading

docs/diagram.d2

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ tools: Tools {
5656
style.border-radius: 8
5757
}
5858

59+
mcp_server_metadata: Mcp Server Metadata {
60+
style.border-radius: 8
61+
}
62+
5963
}
6064

6165
mcp -- tools.*

src/dbt_mcp/config/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
Toolset.DISCOVERY: "disable_discovery",
2828
Toolset.DBT_LSP: "disable_lsp",
2929
Toolset.SQL: "actual_disable_sql",
30+
Toolset.MCP_SERVER_METADATA: "disable_mcp_server_metadata",
3031
}
3132

3233
TOOLSET_TO_ENABLE_ATTR = {
@@ -37,6 +38,7 @@
3738
Toolset.DISCOVERY: "enable_discovery",
3839
Toolset.DBT_LSP: "enable_lsp",
3940
Toolset.SQL: "enable_sql",
41+
Toolset.MCP_SERVER_METADATA: "enable_mcp_server_metadata",
4042
}
4143

4244

src/dbt_mcp/config/settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class DbtMcpSettings(BaseSettings):
7777
None, alias="DISABLE_TOOLS"
7878
)
7979
disable_lsp: bool | None = Field(None, alias="DISABLE_LSP")
80+
disable_mcp_server_metadata: bool = Field(True, alias="DISABLE_MCP_SERVER_METADATA")
8081

8182
# Enable tool settings (allowlist)
8283
enable_tools: Annotated[list[ToolName] | None, NoDecode] = Field(
@@ -89,6 +90,9 @@ class DbtMcpSettings(BaseSettings):
8990
enable_discovery: bool = Field(False, alias="DBT_MCP_ENABLE_DISCOVERY")
9091
enable_lsp: bool = Field(False, alias="DBT_MCP_ENABLE_LSP")
9192
enable_sql: bool = Field(False, alias="DBT_MCP_ENABLE_SQL")
93+
enable_mcp_server_metadata: bool = Field(
94+
False, alias="DBT_MCP_ENABLE_MCP_SERVER_METADATA"
95+
)
9296

9397
# Tracking settings
9498
do_not_track: str | None = Field(None, alias="DO_NOT_TRACK")

src/dbt_mcp/mcp/server.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from dbt_mcp.dbt_cli.tools import register_dbt_cli_tools
1717
from dbt_mcp.dbt_codegen.tools import register_dbt_codegen_tools
1818
from dbt_mcp.discovery.tools import register_discovery_tools
19+
from dbt_mcp.mcp_server_metadata.tools import register_mcp_server_tools
1920
from dbt_mcp.lsp.providers.local_lsp_client_provider import LocalLSPClientProvider
2021
from dbt_mcp.lsp.providers.local_lsp_connection_provider import (
2122
LocalLSPConnectionProvider,
@@ -153,11 +154,22 @@ async def create_dbt_mcp(config: Config) -> DbtMCP:
153154
name="dbt",
154155
lifespan=app_lifespan,
155156
)
157+
156158
disabled_tools = set(config.disable_tools)
157159
enabled_tools = set(config.enable_tools)
158160
enabled_toolsets = config.enabled_toolsets
159161
disabled_toolsets = config.disabled_toolsets
160162

163+
# Register MCP server tools (always available)
164+
logger.info("Registering MCP server tools")
165+
register_mcp_server_tools(
166+
dbt_mcp,
167+
disabled_tools=disabled_tools,
168+
enabled_tools=enabled_tools,
169+
enabled_toolsets=enabled_toolsets,
170+
disabled_toolsets=disabled_toolsets,
171+
)
172+
161173
if config.semantic_layer_config_provider:
162174
logger.info("Registering semantic layer tools")
163175
register_sl_tools(
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""MCP Server tools module."""
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
"""MCP Server tools for server information and management."""
2+
3+
import logging
4+
from importlib.metadata import version
5+
6+
from mcp.server.fastmcp import FastMCP
7+
8+
from dbt_mcp.tools.definitions import ToolDefinition, dbt_mcp_tool
9+
from dbt_mcp.tools.register import register_tools
10+
from dbt_mcp.tools.tool_names import ToolName
11+
from dbt_mcp.tools.toolsets import Toolset
12+
13+
logger = logging.getLogger(__name__)
14+
15+
16+
def _get_server_version() -> str:
17+
"""Get the dbt-mcp server version from package metadata."""
18+
try:
19+
return version("dbt-mcp")
20+
except Exception:
21+
return "unknown"
22+
23+
24+
@dbt_mcp_tool(
25+
description="Get the version of the dbt MCP server. Use this to check what version of the dbt MCP server is running.",
26+
title="Get MCP Server Version",
27+
read_only_hint=True,
28+
destructive_hint=False,
29+
idempotent_hint=True,
30+
open_world_hint=False,
31+
)
32+
def get_mcp_server_version() -> str:
33+
"""Returns the current version of the dbt MCP server."""
34+
return _get_server_version()
35+
36+
37+
MCP_SERVER_TOOLS: list[ToolDefinition] = [
38+
get_mcp_server_version,
39+
]
40+
41+
42+
def register_mcp_server_tools(
43+
dbt_mcp: FastMCP,
44+
*,
45+
disabled_tools: set[ToolName],
46+
enabled_tools: set[ToolName],
47+
enabled_toolsets: set[Toolset],
48+
disabled_toolsets: set[Toolset],
49+
) -> None:
50+
"""Register MCP server tools."""
51+
register_tools(
52+
dbt_mcp,
53+
tool_definitions=MCP_SERVER_TOOLS,
54+
disabled_tools=disabled_tools,
55+
enabled_tools=enabled_tools,
56+
enabled_toolsets=enabled_toolsets,
57+
disabled_toolsets=disabled_toolsets,
58+
)

0 commit comments

Comments
 (0)