Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
kind: Enhancement or New feature
body: "Adds product docs tools: search_product_docs and get_product_doc_pages"
time: 2026-03-04T12:00:00.000000-06:00
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ The dbt MCP server architecture allows for your agent to connect to a variety of
- `fusion.get_column_lineage`: Traces column-level lineage via dbt Platform.
- `get_column_lineage`: Traces column-level lineage locally (requires dbt-lsp via dbt Labs VSCE).

### Product Docs
- `get_product_doc_pages`: Fetches the full Markdown content of one or more docs.getdbt.com pages by path or URL.
- `search_product_docs`: Searches docs.getdbt.com for pages matching a query; returns titles, URLs, and descriptions ranked by relevance. Use get_product_doc_pages to fetch full content.

### MCP Server Metadata
- `get_mcp_server_branch`: Returns the current git branch of the running dbt MCP server.
- `get_mcp_server_version`: Returns the current version of the dbt MCP server.
Expand Down
4 changes: 4 additions & 0 deletions docs/diagram.d2
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ tools: Tools {
style.border-radius: 8
}

product_docs: Product Docs {
style.border-radius: 8
}

mcp_server_metadata: MCP Server Metadata {
style.border-radius: 8
}
Expand Down
2 changes: 2 additions & 0 deletions src/dbt_mcp/config/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
Toolset.DISCOVERY: "disable_discovery",
Toolset.DBT_LSP: "disable_lsp",
Toolset.SQL: "actual_disable_sql",
Toolset.PRODUCT_DOCS: "disable_product_docs",
Toolset.MCP_SERVER_METADATA: "disable_mcp_server_metadata",
}

Expand All @@ -39,6 +40,7 @@
Toolset.DISCOVERY: "enable_discovery",
Toolset.DBT_LSP: "enable_lsp",
Toolset.SQL: "enable_sql",
Toolset.PRODUCT_DOCS: "enable_product_docs",
Toolset.MCP_SERVER_METADATA: "enable_mcp_server_metadata",
}

Expand Down
4 changes: 4 additions & 0 deletions src/dbt_mcp/config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ class DbtMcpSettings(BaseSettings):
None, alias="DISABLE_TOOLS"
)
disable_lsp: bool | None = Field(None, alias="DISABLE_LSP")
disable_product_docs: bool = Field(False, alias="DISABLE_PRODUCT_DOCS")
disable_mcp_server_metadata: bool = Field(True, alias="DISABLE_MCP_SERVER_METADATA")

# Enable tool settings (allowlist)
Expand All @@ -111,6 +112,7 @@ class DbtMcpSettings(BaseSettings):
enable_discovery: bool = Field(False, alias="DBT_MCP_ENABLE_DISCOVERY")
enable_lsp: bool = Field(False, alias="DBT_MCP_ENABLE_LSP")
enable_sql: bool = Field(False, alias="DBT_MCP_ENABLE_SQL")
enable_product_docs: bool = Field(False, alias="DBT_MCP_ENABLE_PRODUCT_DOCS")
enable_mcp_server_metadata: bool = Field(
False, alias="DBT_MCP_ENABLE_MCP_SERVER_METADATA"
)
Expand All @@ -135,6 +137,7 @@ def __repr__(self):
f"disable_discovery={self.disable_discovery}, "
f"disable_admin_api={self.disable_admin_api}, "
f"disable_sql={self.disable_sql}, "
f"disable_product_docs={self.disable_product_docs}, "
f"disable_tools={self.disable_tools}, "
f"disable_lsp={self.disable_lsp}, "
# enable settings
Expand All @@ -145,6 +148,7 @@ def __repr__(self):
f"enable_dbt_codegen={self.enable_dbt_codegen}, "
f"enable_discovery={self.enable_discovery}, "
f"enable_lsp={self.enable_lsp}, "
f"enable_product_docs={self.enable_product_docs}, "
f"enable_sql={self.enable_sql}, "
# everything else
f"dbt_prod_env_id={self.dbt_prod_env_id}, "
Expand Down
11 changes: 11 additions & 0 deletions src/dbt_mcp/mcp/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from dbt_mcp.dbt_admin.tools import register_admin_api_tools
from dbt_mcp.dbt_cli.tools import register_dbt_cli_tools
from dbt_mcp.dbt_codegen.tools import register_dbt_codegen_tools
from dbt_mcp.product_docs.tools import register_product_docs_tools
from dbt_mcp.discovery.tools import register_discovery_tools
from dbt_mcp.mcp_server_metadata.tools import register_mcp_server_tools
from dbt_mcp.lsp.providers.local_lsp_client_provider import LocalLSPClientProvider
Expand Down Expand Up @@ -166,6 +167,16 @@ async def create_dbt_mcp(config: Config) -> DbtMCP:
enabled_toolsets = config.enabled_toolsets
disabled_toolsets = config.disabled_toolsets

# Register product docs tools (always available, fetches from public docs.getdbt.com)
logger.info("Registering product docs tools")
register_product_docs_tools(
dbt_mcp,
disabled_tools=disabled_tools,
enabled_tools=enabled_tools,
enabled_toolsets=enabled_toolsets,
disabled_toolsets=disabled_toolsets,
)

# Register MCP server tools (always available)
logger.info("Registering MCP server tools")
register_mcp_server_tools(
Expand Down
1 change: 1 addition & 0 deletions src/dbt_mcp/product_docs/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Loading
Loading