Skip to main content

cookbook-aiml

Invoke ML models, run vector search, and connect to MCP servers from Databricks Apps. Use when the user wants to call a model serving endpoint, query a vector search index, use LLMs/embeddings, or connect to an MCP server in Dash, Streamlit, Reflex, or FastAPI.

Source facts

Repository
databricks-solutions/databricks-apps-cookbook
Last source activity
April 28, 2026 at 11:17
Detected SKILL.md language
English
Stars
187
Forks
124

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
cookbook-aiml
description
Invoke ML models, run vector search, and connect to MCP servers from Databricks Apps. Use when the user wants to call a model serving endpoint, query a vector search index, use LLMs/embeddings, or connect to an MCP server in Dash, Streamlit, Reflex, or FastAPI.
# AI/ML Integration Invoke models on [Model Serving](https://docs.databricks.com/aws/en/machine-learning/model-serving/), query [Vector Search](https://docs.databricks.com/aws/en/generative-ai/vector-search) indexes, and connect to [MCP servers](https://modelcontextprotocol.io/overview) from your Databricks App. ## Recipes ### Invoke a model serving endpoint The SDK call is framework-agnostic. Wrap it in your framework's UI pattern. #### Traditional ML (DataFrame input) ```python from databricks.sdk import WorkspaceClient w = WorkspaceClient() response = w.serving_endpoints.query( name="custom-regression-model", dataframe_split={ "columns": ["feature1", "feature2"], "data": [[1.5, 2.5]] } ) ``` #### LLM chat (messages) ```python from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ChatMessage, ChatMessageRole w = WorkspaceClient() response = w.serving_endpoints.query( name="chat-assistant-model", messages=[ ChatMessage(role=ChatMessageRole.SYSTEM, content="You are a helpful assistant."), ChatMessage(role=ChatMessageRole.USER, content="Provide tips for Databricks Apps."), ], ) ``` #### LLM completion (prompt) ```python from databricks.sdk import WorkspaceClient w = WorkspaceClient() response = w.serving_endpoints.query( name="llm-completions-model", prompt="Generate a recipe for scalable Databricks Apps.", temperature=0.5, ) ``` #### Embeddings ```python from databricks.sdk import WorkspaceClient w = WorkspaceClient() response = w.serving_endpoints.query( name="embedding-model", input="Databricks provides a unified analytics platform.", ) ``` ### Vector search Generate embeddings and query a vector search index: ```python from databricks.sdk import WorkspaceClient w = WorkspaceClient() openai_client = w.serving_endpoints.get_open_ai_client() def get_embeddings(text): response = openai_client.embeddings.create( model="databricks-gte-large-en", input=text ) return response.data[0].embedding def run_vector_search(prompt: str, index_name: str, columns: list[str]): vector = get_embeddings(prompt) result = w.vector_search_indexes.query_index( index_name=index_name, columns=columns, query_vector=vector, num_results=3, ) return result.result.data_array ``` ### Connect to an MCP server Use Unity Catalog [HTTP connections](https://docs.databricks.com/aws/en/query-federation/http) to connect to MCP servers. #### On-behalf-of-user **Streamlit:** ```python import streamlit as st from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod token = st.context.headers.get("X-Forwarded-Access-Token") w = WorkspaceClient(token=token, auth_type="pat") def init_mcp_session(connection_name): response = w.serving_endpoints.http_request( conn=connection_name, method=ExternalFunctionRequestHttpMethod.POST, path="/", json={"jsonrpc": "2.0", "id": "init-1", "method": "initialize", "params": {}}, ) return response.headers.get("mcp-session-id") session_id = init_mcp_session("github_mcp_connection") response = w.serving_endpoints.http_request( conn="github_mcp_connection", method=ExternalFunctionRequestHttpMethod.POST, path="/", headers={"Mcp-Session-Id": session_id}, json={"jsonrpc": "2.0", "id": "list-1", "method": "tools/list"}, ) st.json(response.json()) ``` **Reflex:** ```python import reflex as rx from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod class McpState(rx.State): response_data: str = "" @rx.event(background=True) async def send_request(self): headers = self.router.headers token = getattr(headers, "x_forwarded_access_token", "") w = WorkspaceClient(token=token, auth_type="pat") init_resp = w.serving_endpoints.http_request( conn="github_mcp_connection", method=ExternalFunctionRequestHttpMethod.POST, path="/", json={"jsonrpc": "2.0", "id": "init-1", "method": "initialize", "params": {}}, ) session_id = init_resp.headers.get("mcp-session-id") response = w.serving_endpoints.http_request( conn="github_mcp_connection", method=ExternalFunctionRequestHttpMethod.POST, path="/", headers={"Mcp-Session-Id": session_id}, json={"jsonrpc": "2.0", "id": "list-1", "method": "tools/list"}, ) async with self: self.response_data = str(response.json()) ``` #### Bearer token (service principal) ```python from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod w = WorkspaceClient() response = w.serving_endpoints.http_request( conn="github_connection", method=ExternalFunctionRequestHttpMethod.GET, path="/", headers={"Accept": "application/vnd.github+json"}, json={"jsonrpc": "2.0", "id": "init-1", "method": "initialize", "params": {}}, ) ``` ## Resources | Recipe | Resources | |--------|-----------| | Model serving | [Model Serving endpoint](https://docs.databricks.com/aws/en/machine-learning/model-serving/manage-serving-endpoints) | | Vector search | [Vector Search endpoint + index](https://docs.databricks.com/aws/en/generative-ai/vector-search) | | MCP | [Unity Catalog HTTP Connection](https://docs.databricks.com/aws/en/query-federation/http) with MCP base path | ## Permissions | Recipe | Permissions | |--------|-----------| | Model serving | `CAN QUERY` on the serving endpoint | | Vector search | `USE CATALOG`, `USE SCHEMA`, `SELECT` on the VS index | | MCP connections | `USE CONNECTION` on the HTTP Connection | | MCP (OBO) | Additionally configure [User authorization](https://docs.databricks.com/aws/en/dev-tools/databricks-apps/auth#user-authorization) scopes | ## Dependencies ``` databricks-sdk ``` For MCP, also add `mcp[cli]`. Plus your framework package. ## Common Pitfalls - Model serving endpoints must be in `READY` state before querying - Vector search requires generating embeddings first (use `get_open_ai_client()`) - MCP connections require a session initialization step; store the `mcp-session-id` for subsequent requests - OBO tokens are only available when deployed, not during local development
View on GitHub