Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Important
Ta funkcja jest dostępna w wersji beta. Administratorzy obszaru roboczego mogą kontrolować dostęp do tej funkcji ze strony Podglądy . Zobacz Zarządzanie wersjami zapoznawczami usługi Azure Databricks.
Zarządzane przez Databricks serwery MCP to gotowe do użycia serwery, które łączą agentów sztucznej inteligencji z danymi przechowywanymi w katalogu Unity, indeksami wyszukiwania wektorowego Databricks, przestrzeniami Genie i funkcjami niestandardowymi.
Dostępne serwery zarządzane
Aby wyświetlić serwery MCP i ich adresy URL punktów końcowych, przejdź do obszaru roboczego >Agenci>serwery MCP:
Databricks udostępnia następujące serwery MCP, które działają od razu po uruchomieniu.
| Serwer MCP | Description | Wzorzec adresu URL |
|---|---|---|
| Wyszukiwanie wektorowe | Zapytaj indeksy wyszukiwania wektorów o znalezienie odpowiednich dokumentów. Obsługiwane są tylko indeksy z osadzeniami zarządzanymi przez Databricks. | https://<workspace-hostname>/api/2.0/mcp/vector-search/{catalog}/{schema} |
| Przestrzeń Genie | Wykonywanie zapytań o przestrzenie Genie w celu analizowania danych strukturalnych przy użyciu języka naturalnego. Używaj serwera Genie MCP do łączenia zewnętrznych asystentów sztucznej inteligencji, takich jak Claude lub ChatGPT, z Twoimi danymi w celu wykonywania operacji tylko do odczytu. Uwaga: Zarządzany serwer MCP dla Genie wywołuje Genie jako narzędzie MCP, co oznacza, że historia nie jest przekazywana podczas wywoływania API Genie. Alternatywnie możesz użyć usługi Genie w systemie z wieloma agentami. |
https://<workspace-hostname>/api/2.0/mcp/genie/{genie_space_id} |
| Funkcje Unity Catalog | Użyj funkcji Unity Catalog do uruchamiania wstępnie zdefiniowanych zapytań SQL. | https://<workspace-hostname>/api/2.0/mcp/functions/{catalog}/{schema} |
| DBSQL | Uruchom wygenerowane przez AI zapytania SQL. Użyj serwera MCP DBSQL, aby tworzyć potoki danych za pomocą narzędzi do kodowania sztucznej inteligencji (Claude Code, Cursor, Codex itp.). Dla pobierania danych tylko do odczytu oraz integracji czatbota użyj usługi Genie. | https://<workspace-hostname>/api/2.0/mcp/sql |
Przykładowy scenariusz
Rozważ użycie agenta niestandardowego, który pomaga w obsłudze klienta. Można połączyć go z wieloma zarządzanymi serwerami MCP:
-
Wyszukiwanie wektorowe:
https://<workspace-hostname>/api/2.0/mcp/vector-search/prod/customer_support- Szukaj zgłoszeń pomocy technicznej i dokumentacji
-
Przestrzeń Genie:
https://<workspace-hostname>/api/2.0/mcp/genie/{billing_space_id}- Wykonywanie zapytań dotyczących danych rozliczeniowych i informacji o klientach
-
Funkcje UC:
https://<workspace-hostname>/api/2.0/mcp/functions/prod/billing- Uruchamianie funkcji niestandardowych na potrzeby wyszukiwania i aktualizacji kont
Zapewnia to agentowi dostęp do danych bez struktury (biletów pomocy technicznej), danych ustrukturyzowanych (tabel rozliczeniowych) i niestandardowej logiki biznesowej.
Przykładowe notesy: tworzenie agenta za pomocą serwerów MCP usługi Databricks
W poniższych notatnikach pokazano, jak tworzyć agentów LangGraph i OpenAI, którzy wywołują narzędzia MCP na zarządzanych przez Databricks serwerach MCP.
Agent wywołujący narzędzia LangGraph MCP
Agent wywołujący narzędzia OpenAI MCP
Tworzenie agenta ze środowiska lokalnego
Nawiązywanie połączenia z serwerem MCP w usłudze Databricks jest podobne do nawiązywania połączenia z innym zdalnym serwerem MCP. Możesz nawiązać połączenie z serwerem przy użyciu standardowych zestawów SDK, takich jak zestaw SDK języka Python MCP. Główną różnicą jest to, że serwery MCP usługi Databricks są domyślnie bezpieczne i wymagają od klientów określenia uwierzytelniania.
Biblioteka języka Python databricks-mcp ułatwia uwierzytelnianie w niestandardowym kodzie agenta.
Najprostszym sposobem opracowywania kodu agenta jest uruchamianie go lokalnie i uwierzytelnianie w obszarze roboczym. Wykonaj następujące kroki, aby utworzyć agenta sztucznej inteligencji, który nawiązuje połączenie z serwerem MCP usługi Databricks.
Konfigurowanie środowiska
Użyj protokołu OAuth, aby uwierzytelnić się w obszarze roboczym. Uruchom następujące polecenie w lokalnym terminalu:
databricks auth login --host https://<your-workspace-hostname>Po wyświetleniu monitu ponownie wprowadź nazwę profilu i zanotuj ją do późniejszego użycia. Domyślna nazwa profilu to DEFAULT.
Upewnij się, że masz środowisko lokalne z językiem Python 3.12 lub nowszym, a następnie zainstaluj zależności:
pip install -U "mcp>=1.9" "databricks-sdk[openai]" "mlflow>=3.1.0" "databricks-agents>=1.0.0" "databricks-mcp"
Testowanie połączenia środowiska lokalnego
Aby można było uruchomić ten fragment kodu, w obszarze roboczym należy włączyć bezserwerowe obliczenia.
Zweryfikuj połączenie z serwerem MCP, wyświetlając listę narzędzi Unity Catalog i uruchamiając wbudowane narzędzie interpretera kodu Python.
- Uruchom następujący kod, aby zweryfikować połączenie z serwerem MCP:
from databricks_mcp import DatabricksMCPClient
from databricks.sdk import WorkspaceClient
# TODO: Update to the Databricks CLI profile name you specified when
# configuring authentication to the workspace.
databricks_cli_profile = "YOUR_DATABRICKS_CLI_PROFILE"
assert (
databricks_cli_profile != "YOUR_DATABRICKS_CLI_PROFILE"
), "Set databricks_cli_profile to the Databricks CLI profile name you specified when configuring authentication to the workspace"
workspace_client = WorkspaceClient(profile=databricks_cli_profile)
workspace_hostname = workspace_client.config.host
mcp_server_url = f"{workspace_hostname}/api/2.0/mcp/functions/system/ai"
# This code uses the Unity Catalog functions MCP server to expose built-in
# AI tools under `system.ai`, like the `system.ai.python_exec` code interpreter tool
def test_connect_to_server():
mcp_client = DatabricksMCPClient(server_url=mcp_server_url, workspace_client=workspace_client)
tools = mcp_client.list_tools()
print(
f"Discovered tools {[t.name for t in tools]} "
f"from MCP server {mcp_server_url}"
)
result = mcp_client.call_tool(
"system__ai__python_exec", {"code": "print('Hello, world!')"}
)
print(
f"Called system__ai__python_exec tool and got result "
f"{result.content}"
)
if __name__ == "__main__":
test_connect_to_server()
Tworzenie agenta
Rozszerz powyższy kod, aby zdefiniować podstawowego agenta jednokrotnego użycia, korzystającego z narzędzi. Zapisz kod agenta lokalnie jako plik o nazwie
mcp_agent.py:import json import uuid import asyncio from typing import Any, Callable, List from pydantic import BaseModel import mlflow from mlflow.pyfunc import ResponsesAgent from mlflow.types.responses import ResponsesAgentRequest, ResponsesAgentResponse from databricks_mcp import DatabricksMCPClient from databricks.sdk import WorkspaceClient # 1) CONFIGURE YOUR ENDPOINTS/PROFILE LLM_ENDPOINT_NAME = "databricks-claude-sonnet-4-5" SYSTEM_PROMPT = "You are a helpful assistant." DATABRICKS_CLI_PROFILE = "YOUR_DATABRICKS_CLI_PROFILE" assert ( DATABRICKS_CLI_PROFILE != "YOUR_DATABRICKS_CLI_PROFILE" ), "Set DATABRICKS_CLI_PROFILE to the Databricks CLI profile name you specified when configuring authentication to the workspace" workspace_client = WorkspaceClient(profile=DATABRICKS_CLI_PROFILE) host = workspace_client.config.host # Add more MCP server URLs here if desired, for example: # f"{host}/api/2.0/mcp/vector-search/prod/billing" # to include vector search indexes under the prod.billing schema, or # f"{host}/api/2.0/mcp/genie/<genie_space_id>" # to include a Genie space MANAGED_MCP_SERVER_URLS = [ f"{host}/api/2.0/mcp/functions/system/ai", ] # Add Custom MCP Servers hosted on Databricks Apps CUSTOM_MCP_SERVER_URLS = [] # 2) HELPER: convert between ResponsesAgent “message dict” and ChatCompletions format def _to_chat_messages(msg: dict[str, Any]) -> List[dict]: """ Take a single ResponsesAgent‐style dict and turn it into one or more ChatCompletions‐compatible dict entries. """ msg_type = msg.get("type") if msg_type == "function_call": return [ { "role": "assistant", "content": None, "tool_calls": [ { "id": msg["call_id"], "type": "function", "function": { "name": msg["name"], "arguments": msg["arguments"], }, } ], } ] elif msg_type == "message" and isinstance(msg["content"], list): return [ { "role": "assistant" if msg["role"] == "assistant" else msg["role"], "content": content["text"], } for content in msg["content"] ] elif msg_type == "function_call_output": return [ { "role": "tool", "content": msg["output"], "tool_call_id": msg["tool_call_id"], } ] else: # fallback for plain {"role": ..., "content": "..."} or similar return [ { k: v for k, v in msg.items() if k in ("role", "content", "name", "tool_calls", "tool_call_id") } ] # 3) “MCP SESSION” + TOOL‐INVOCATION LOGIC def _make_exec_fn( server_url: str, tool_name: str, ws: WorkspaceClient ) -> Callable[..., str]: def exec_fn(**kwargs): mcp_client = DatabricksMCPClient(server_url=server_url, workspace_client=ws) response = mcp_client.call_tool(tool_name, kwargs) return "".join([c.text for c in response.content]) return exec_fn class ToolInfo(BaseModel): name: str spec: dict exec_fn: Callable def _fetch_tool_infos(ws: WorkspaceClient, server_url: str) -> List[ToolInfo]: print(f"Listing tools from MCP server {server_url}") infos: List[ToolInfo] = [] mcp_client = DatabricksMCPClient(server_url=server_url, workspace_client=ws) mcp_tools = mcp_client.list_tools() for t in mcp_tools: schema = t.inputSchema.copy() if "properties" not in schema: schema["properties"] = {} spec = { "type": "function", "function": { "name": t.name, "description": t.description, "parameters": schema, }, } infos.append( ToolInfo( name=t.name, spec=spec, exec_fn=_make_exec_fn(server_url, t.name, ws) ) ) return infos # 4) “SINGLE‐TURN” AGENT CLASS class SingleTurnMCPAgent(ResponsesAgent): def _call_llm(self, history: List[dict], ws: WorkspaceClient, tool_infos): """ Send current history → LLM, returning the raw response dict. """ client = ws.serving_endpoints.get_open_ai_client() flat_msgs = [] for msg in history: flat_msgs.extend(_to_chat_messages(msg)) return client.chat.completions.create( model=LLM_ENDPOINT_NAME, messages=flat_msgs, tools=[ti.spec for ti in tool_infos], ) def predict(self, request: ResponsesAgentRequest) -> ResponsesAgentResponse: ws = WorkspaceClient(profile=DATABRICKS_CLI_PROFILE) # 1) build initial history: system + user history: List[dict] = [{"role": "system", "content": SYSTEM_PROMPT}] for inp in request.input: history.append(inp.model_dump()) # 2) call LLM once tool_infos = [ tool_info for mcp_server_url in (MANAGED_MCP_SERVER_URLS + CUSTOM_MCP_SERVER_URLS) for tool_info in _fetch_tool_infos(ws, mcp_server_url) ] tools_dict = {tool_info.name: tool_info for tool_info in tool_infos} llm_resp = self._call_llm(history, ws, tool_infos) raw_choice = llm_resp.choices[0].message.to_dict() raw_choice["id"] = uuid.uuid4().hex history.append(raw_choice) tool_calls = raw_choice.get("tool_calls") or [] if tool_calls: # (we only support a single tool in this “single‐turn” example) fc = tool_calls[0] name = fc["function"]["name"] args = json.loads(fc["function"]["arguments"]) try: tool_info = tools_dict[name] result = tool_info.exec_fn(**args) except Exception as e: result = f"Error invoking {name}: {e}" # 4) append the “tool” output history.append( { "type": "function_call_output", "role": "tool", "id": uuid.uuid4().hex, "tool_call_id": fc["id"], "output": result, } ) # 5) call LLM a second time and treat that reply as final followup = ( self._call_llm(history, ws, tool_infos=[]).choices[0].message.to_dict() ) followup["id"] = uuid.uuid4().hex assistant_text = followup.get("content", "") return ResponsesAgentResponse( output=[ { "id": uuid.uuid4().hex, "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": assistant_text}], } ], custom_outputs=request.custom_inputs, ) # 6) if no tool_calls at all, return the assistant’s original reply assistant_text = raw_choice.get("content", "") return ResponsesAgentResponse( output=[ { "id": uuid.uuid4().hex, "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": assistant_text}], } ], custom_outputs=request.custom_inputs, ) mlflow.models.set_model(SingleTurnMCPAgent()) if __name__ == "__main__": req = ResponsesAgentRequest( input=[{"role": "user", "content": "What's the 100th Fibonacci number?"}] ) resp = SingleTurnMCPAgent().predict(req) for item in resp.output: print(item)
Wdrażanie agenta
Gdy wszystko będzie gotowe do wdrożenia agenta łączącego się z zarządzanymi serwerami MCP, zobacz Wdrażanie agenta na potrzeby generowania aplikacji sztucznej inteligencji.
Określ wszystkie zasoby wymagane przez agenta w czasie logowania. Zobacz Uwierzytelnianie zasobów usługi Databricks
Jeśli na przykład agent używa poniżej wymienionych adresów URL serwera MCP, należy określić wszystkie indeksy wyszukiwania wektorów w schematach prod.customer_support i prod.billing. Należy również określić wszystkie funkcje Unity Catalog w prod.billing:
https://<your-workspace-hostname>/api/2.0/mcp/vector-search/prod/customer_supporthttps://<your-workspace-hostname>/api/2.0/mcp/vector-search/prod/billinghttps://<your-workspace-hostname>/api/2.0/mcp/functions/prod/billing
Jeśli agent łączy się z serwerami MCP w usłudze Databricks w celu odnajdywania i uruchamiania narzędzi, zarejestruj zasoby wymagane przez te serwery MCP za pomocą agenta. Usługa Databricks zaleca zainstalowanie databricks-mcp pakietu PyPI w celu uproszczenia tego procesu.
W szczególności, jeśli używasz zarządzanych serwerów MCP, możesz użyć databricks_mcp.DatabricksMCPClient().get_databricks_resources(<server_url>) do pobierania zasobów wymaganych przez zarządzany serwer MCP. Jeśli agent wysyła zapytanie do niestandardowego serwera MCP hostowanego w aplikacji usługi Databricks, możesz skonfigurować autoryzację, jawnie dołączając serwer jako zasób podczas rejestrowania modelu.
Aby na przykład wdrożyć agenta zdefiniowanego powyżej, uruchom następujący kod, przy założeniu, że zapisano definicję kodu agenta w pliku mcp_agent.py:
import os
from databricks.sdk import WorkspaceClient
from databricks import agents
import mlflow
from mlflow.models.resources import DatabricksFunction, DatabricksServingEndpoint, DatabricksVectorSearchIndex
from mcp_agent import LLM_ENDPOINT_NAME
from databricks_mcp import DatabricksMCPClient
# TODO: Update this to your Databricks CLI profile name
databricks_cli_profile = "YOUR_DATABRICKS_CLI_PROFILE"
assert (
databricks_cli_profile != "YOUR_DATABRICKS_CLI_PROFILE"
), "Set databricks_cli_profile to the Databricks CLI profile name you specified when configuring authentication to the workspace"
workspace_client = WorkspaceClient(profile=databricks_cli_profile)
# Configure MLflow and the Databricks SDK to use your Databricks CLI profile
current_user = workspace_client.current_user.me().user_name
mlflow.set_tracking_uri(f"databricks://{databricks_cli_profile}")
mlflow.set_registry_uri(f"databricks-uc://{databricks_cli_profile}")
mlflow.set_experiment(f"/Users/{current_user}/databricks_docs_example_mcp_agent")
os.environ["DATABRICKS_CONFIG_PROFILE"] = databricks_cli_profile
MANAGED_MCP_SERVER_URLS = [
f"{host}/api/2.0/mcp/functions/system/ai",
]
# Log the agent defined in mcp_agent.py
here = os.path.dirname(os.path.abspath(__file__))
agent_script = os.path.join(here, "mcp_agent.py")
resources = [
DatabricksServingEndpoint(endpoint_name=LLM_ENDPOINT_NAME),
DatabricksFunction("system.ai.python_exec"),
# --- Uncomment and edit the following lines to include custom mcp servers hosted on Databricks Apps ---
# DatabricksApp(app_name="app-name")
]
for mcp_server_url in MANAGED_MCP_SERVER_URLS:
mcp_client = DatabricksMCPClient(server_url=mcp_server_url, workspace_client=workspace_client)
resources.extend(mcp_client.get_databricks_resources())
with mlflow.start_run():
logged_model_info = mlflow.pyfunc.log_model(
artifact_path="mcp_agent",
python_model=agent_script,
resources=resources,
)
# TODO Specify your UC model name here
UC_MODEL_NAME = "main.default.databricks_docs_mcp_agent"
registered_model = mlflow.register_model(logged_model_info.model_uri, UC_MODEL_NAME)
agents.deploy(
model_name=UC_MODEL_NAME,
model_version=registered_model.version,
)
Dalsze kroki
- Łączenie klientów z serwerami MCP , takimi jak Cursor i Claude Desktop.
- Meta parametry dla serwerów wyszukiwania wektorów Databricks MCP