Important
此功能在 Beta 版中。
将自己的自定义或第三方 MCP 服务器作为 Databricks 应用托管。 如果已有要部署的 MCP 服务器,或者想要将第三方 MCP 服务器作为工具源运行,则自定义 MCP 服务器非常有用。
Requirements
- 作为 Databricks 应用托管的 MCP 服务器必须实现与 HTTP 兼容的传输,例如 可流式传输。
将 MCP 服务器作为 Databricks 应用托管
有关编写自己的 MCP 服务器并将其部署为 Databricks 应用的示例,请参阅 自定义 MCP 服务器存储库 。
若要将现有 Python MCP 服务器托管为 Databricks 应用,请执行以下步骤:
配置你的环境
在部署 MCP 服务器之前,请使用 OAuth 向工作区进行身份验证。
在本地终端中运行以下命令:
databricks auth login --host https://<your-workspace-hostname>
设置 MCP 服务器
将 a
requirements.txt添加到 MCP 服务器的根目录,并为服务器指定 Python 依赖项。如果服务器使用 uv 进行包管理,请将
uv添加到 requirements.txt 文件中,它将自动处理安装其他依赖项。添加一个
app.yaml来指定运行 MCP 服务器的 CLI 命令。默认情况下,Databricks 应用程序在端口 8000 上侦听。 如果服务器侦听其他端口,请使用文件中的
app.yaml设置它。示例
app.yaml:command: [ 'uv', 'run', 'your-server-name', ..., # optionally include additional parameters here ]
将 MCP 服务器部署为 Databricks 应用
创建 Databricks 应用以托管 MCP 服务器:
databricks apps create mcp-my-custom-server通过从包含
app.yaml文件的目录运行以下命令,将源代码上传到 Databricks 并部署应用:DATABRICKS_USERNAME=$(databricks current-user me | jq -r .userName) databricks sync . "/Users/$DATABRICKS_USERNAME/mcp-my-custom-server" databricks apps deploy mcp-my-custom-server --source-code-path "/Workspace/Users/$DATABRICKS_USERNAME/mcp-my-custom-server"
连接到自定义 MCP 服务器
单击选项卡以查看如何从各种环境连接到 MCP 服务器。
本地环境
使用 OAuth 向工作区进行身份验证,如 “设置环境”中所述。
以下示例演示如何连接到自定义 MCP 服务器并列出可用工具:
from databricks_mcp import DatabricksOAuthClientProvider
from databricks.sdk import WorkspaceClient
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamablehttp_client
databricks_cli_profile = "DEFAULT"
workspace_client = WorkspaceClient(profile=databricks_cli_profile)
# Replace with your actual custom MCP server URL
mcp_server_url = "https://<workspace-hostname>/serving-endpoints/mcp-my-custom-server/invocations"
async def test_connection_to_server():
async with streamablehttp_client(
f"{mcp_server_url}", auth=DatabricksOAuthClientProvider(workspace_client)
) as (read_stream, write_stream, _), ClientSession(
read_stream, write_stream
) as session:
# List available tools
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
笔记本(服务主体)
使用服务主体访问 Databricks 笔记本中的托管 Databricks 应用。
import json
from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksOAuthClientProvider
from databricks.sdk.credentials_provider import ModelServingUserCredentials
from mcp.client.streamable_http import streamablehttp_client as connect
from mcp import ClientSession
async def main():
app_url = "https://mcp-server.databricksapps.com/mcp"
client = WorkspaceClient(
host="https://workspace_url",
client_id="client_id",
client_secret="client_secret"
)
async with connect(app_url, auth=DatabricksOAuthClientProvider(client)) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
await main()
代理代码(代表用户)
设置代用户授权机制。 请参阅 代表用户身份验证。
以下示例演示如何通过代理使用ModelServingUserCredentials来访问托管的Databricks应用以启用代表用户访问:
import json
from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksOAuthClientProvider
from databricks.sdk.credentials_provider import ModelServingUserCredentials
from mcp.client.streamable_http import streamablehttp_client as connect
from mcp import ClientSession
async def main():
app_url = "https://mcp-server.databricksapps.com/mcp"
client = WorkspaceClient(credentials_strategy = ModelServingUserCredentials())
async with connect(app_url, auth=DatabricksOAuthClientProvider(client)) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
await main()
使用 apps.apps 范围记录代理模型。 请参阅 代表用户身份验证。
代理代码(服务主体)
使用服务主体启用系统身份验证,以便从代理访问托管的 Databricks 应用:
import json
from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksOAuthClientProvider
from mcp.client.streamable_http import streamablehttp_client as connect
from mcp import ClientSession
async def main():
app_url = "https://mcp-server.databricksapps.com/mcp"
client = WorkspaceClient()
async with connect(app_url, auth=DatabricksOAuthClientProvider(client)) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
await main()
使用 DatabricksApps 资源记录代理模型。 请参阅自动身份验证直通。
示例笔记本:使用 Databricks MCP 服务器生成代理
以下笔记本演示如何创作 LangGraph 和 OpenAI 代理,这些代理使用 Databricks 应用上托管的自定义 MCP 服务器调用 MCP 工具。
LangGraph MCP 工具调用代理
OpenAI MCP 工具调用代理
其他资源
应用指南提供了端到端代码示例,用于将 MCP 服务器与不同的框架集成:
有关完整的源代码和其他示例,请参阅 Databricks Apps Cookbook 存储库。