<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Derek Witt on Medium]]></title>
        <description><![CDATA[Stories by Derek Witt on Medium]]></description>
        <link>https://medium.com/@derek.witt-databricks?source=rss-9cb1fa93f7f5------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*IsdxnEbPhMWq8QPTPySUfg.jpeg</url>
            <title>Stories by Derek Witt on Medium</title>
            <link>https://medium.com/@derek.witt-databricks?source=rss-9cb1fa93f7f5------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 16:49:09 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@derek.witt-databricks/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Zero Alerts Doesn’t Mean Zero Attacks]]></title>
            <link>https://blog.databricksforstartups.com/zero-alerts-doesnt-mean-zero-attacks-e98412a82343?source=rss-9cb1fa93f7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/e98412a82343</guid>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[startupş]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <dc:creator><![CDATA[Derek Witt]]></dc:creator>
            <pubDate>Fri, 29 May 2026 14:30:17 GMT</pubDate>
            <atom:updated>2026-06-11T13:05:17.109Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RSn1CWhVZ9qPwa_UY-_1UQ.gif" /></figure><h4><em>How Alpha Level built autonomous threat detection on Databricks to catch what rules miss</em></h4><p><em>By </em><a href="https://www.linkedin.com/in/derek-witt-data/"><em>Derek Witt</em></a><em> and </em><a href="https://www.linkedin.com/in/codyanderson-db/"><em>Cody Anderson</em></a><em> (Databricks), </em><a href="https://www.linkedin.com/in/josh-neil/"><em>Joshua Neil</em></a><em> and </em><a href="https://www.linkedin.com/in/michael-pozmantier/"><em>Mike Pozmantier</em></a><em> (Alpha Level)</em></p><p>Twenty IPs. Eight countries. Thirty-three failed logins spread across several days. Zero alerts.</p><p>Not because nobody was watching. Because the attack used a legacy Microsoft authentication endpoint (OrgIdWsTrust2) that bypasses SigninLogs entirely. MFA never triggered. Conditional Access never triggered. The SIEM had nothing to write a rule against because it never saw the traffic.</p><p>In another customer environment, a Windows Server 2008 R2, end-of-life since January 2020, was serving 255 Citrix users every single business day. Listed in Microsoft Defender for Endpoint inventory as “Can be onboarded,” meaning it was known to exist but never enrolled. Zero process telemetry. Zero patches since 2020. An attacker who found it before anyone else did would have had an unmonitored server with active users and no detection coverage.</p><p>Neither of these showed up in an alert queue. They showed up in Autonomous Hunter, Alpha Level’s AI-driven anomaly detection platform built on Databricks, because behavioral anomalies don’t look like known attack signatures. They look like noise, or nothing at all.</p><h3>The gap nobody talks about</h3><p>The conversation around SOC tooling spends a lot of time on alert fatigue. Too many alerts, too much noise, analysts buried in false positives. That’s real. But there’s a quieter problem that gets less attention. That problem is the attacks that don’t generate any alert at all.</p><p>Rules-based detection (SIEM correlation rules, EDR signatures, Conditional Access policies, threat intel feeds) is great at catching what you anticipated. You wrote a rule for it, or a vendor shipped you a signature for it, and when it matches, it fires. Rules are good for identifying what is known, but adversaries are highly motivated to innovate, and you need protection for the unknown as well.</p><p>That works reasonably well for known attack patterns. It doesn’t work at all for the stuff designed to look normal: insider threats, lateral movement that uses legitimate admin tools, credential theft over legacy endpoints, C2 beaconing that mimics normal traffic cadences, ransomware precursors doing nothing but reconnaissance for weeks. These threats slip through not because your tools failed, but rather because the adversary is trying to blend in with normal users, and a rule can’t discriminate well. The net result is either too many false positives, or a missed breach.</p><p>A good human threat hunter, someone with deep knowledge of adversary behavior who sits down with raw data and actively looks for things that don’t add up, can find this stuff. Most organizations don’t have enough of them. And the ones they do have are spending most of their time on alert triage, not proactive hunting.</p><p>That’s the gap Autonomous Hunter is built for. Not alert triage. Finding the threats that aren’t generating alerts at all.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aFT0ZmqDqXS_ivSWBGox-Q.png" /></figure><h3>Why you can’t just dump logs into an LLM</h3><p>Can a large language model do this? You’ve got the logs. The model is smart. Point it at the data.</p><p>The honest answer is no. Not from raw telemetry. This isn’t a hot take. Ask any AI chatbot directly (“Should I use an LLM for anomaly detection from raw telemetry in a cyber security context?”) and it’ll tell you the same thing. Use statistical and ML models. LLMs are trained on language patterns, not behavioral baselines. They can’t tell you that this login frequency is unusual for <em>this specific user’s</em> auth patterns at <em>this time of year</em>, because they don’t have that baseline. They can reason about what anomalies look like in general. They can’t measure them.</p><p>The second problem is context. If you feed an agent raw logs, you’ve given it a needle-in-haystack problem with the emphasis on the haystack. Too little context, and it hallucinates. Too much spurious context, and it burns through tokens pattern-matching against noise and still hallucinates. Either way you get high costs and low confidence in the output.</p><p>Josh Neil, Alpha Level’s co-founder and CTO, calls this the Goldilocks problem. The work isn’t in the agent. It’s in preparing exactly the right context before the agent ever sees it. Strip out everything that’s benign. Surface the things that are actually anomalous. Assemble the surrounding context that makes an anomaly meaningful. Get that right, and the agent can do real investigative work. Skip it, and you’re throwing compute at a problem the agent wasn’t designed to solve.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*OfAf9cgwLRQiQmmi13O5Rg.gif" /></figure><h3>How Autonomous Hunter actually works</h3><p>Alpha Level built a three-stage pipeline on Databricks that separates the anomaly detection work from the agentic work. Each stage does what it’s actually good at.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LTIDgB3LuXhXD_jXeRJSWQ.gif" /></figure><p><strong>Stage 1: Statistical anomaly detection</strong></p><p>Security telemetry from across the enterprise (network flows, authentication events, cloud API logs, endpoint data) lands in a Databricks lakehouse. That’s the foundation everything runs on. Autonomous Hunter’s self-learning time series models run as Spark jobs directly against those data, building a per-enterprise behavioral baseline across all four telemetry surfaces. These aren’t rules. They’re models that learn what normal looks like for your specific environment, including your users’ login hours, typical inter-host traffic patterns, and usual authentication volumes across your auth stack.</p><p>When something deviates from that baseline significantly enough, it surfaces as a rare event. The threshold is high by design. Most anomalies are explainable, like someone logging in from a new city because they’re traveling, or a server seeing unusual traffic because of a deployment. The statistical models do the first pass of separating the rare from the merely unusual.</p><p><strong>Stage 2: Graph context assembly</strong></p><p>Rare events don’t live in isolation. Thirty-three failed logins across 20 IPs aren’t just a list of authentication failures. They’re part of a story that includes which accounts were targeted, what those accounts have access to, what other activity surrounded them, and how the timing pattern compares to known attack patterns.</p><p>Autonomous Hunter assembles rare events into graphs of nodes and edges, storing the context packages in Delta tables alongside the raw telemetry. Nodes are entities: users, hosts, IPs, authentication endpoints. Edges are the relationships and events connecting them, things like authentication attempts, network connections, and API calls. The graph captures <em>why</em> an event is anomalous, not just <em>that</em> it is. Events that can be explained by surrounding context get filtered here. A legitimate admin doing a bulk operation, a service account doing its normal job. Those get explained and dropped.</p><p>What’s left after graph filtering is a small population of anomalies that are both statistically rare and contextually unexplained. That’s what goes to the agent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3uLEtRXP4Pf7LYnruHIifg.gif" /></figure><p><strong>Stage 3: Agentic investigation and the analyst interface</strong></p><p>The AI agent receives a pre-packaged graph of exactly the right context, with no raw log dump and no irrelevant noise. Its job is to investigate, not hunt. It reasons about what the anomaly pattern could represent, what the likely impact is, what other data would confirm or rule out a threat, and what a SOC analyst needs to know.</p><p>The investigation summaries surface in the Autonomous Hunter SOC interface, a Databricks App that Alpha Level deploys for their customers. SOC analysts access it to review findings, dig into investigation summaries, and decide what to act on. The whole pipeline (ingest, anomaly detection, graph assembly, agentic investigation) and the analyst-facing interface all run on Databricks, which means Alpha Level isn’t stitching together a separate ML platform, a separate app hosting layer, and a separate data store. It’s one stack.</p><p>This is where the Goldilocks framing pays off. Because the agent is working from carefully prepared context, it can do the reasoning it’s actually good at: “here’s a pattern of behavior, here’s what’s anomalous about it, here’s what it probably means.” The output is an investigation summary a human analyst can act on, not another list of events to triage.</p><p>The agent is the last mile, not the first. All the heavy lifting that makes agentic investigation accurate and cost-effective happens upstream.</p><h3>What this finds in practice</h3><p><strong>Case 1: 20 IPs, zero alerts, an invisible brute force</strong></p><p>Microsoft’s OrgIdWsTrust2 legacy authentication endpoint is a documented blind spot. It’s a WS-Trust 2.0 flow that predates SigninLogs. Traffic through it simply doesn’t appear there. MFA doesn’t apply to it. Conditional Access doesn’t apply to it. Standard SIEM rules that fire on failed login volumes in AADRiskEvents or SecurityAlert won’t catch it either, because those tables are populated from SigninLogs.</p><p>Autonomous Hunter caught a distributed brute force campaign targeting this endpoint: 33 failed login attempts spread across 20+ source IPs in 8+ countries, sustained over multiple days. No velocity trigger because the attempts were slow and distributed. No location trigger because the IPs were already spread globally. Zero alerts in the customer’s existing stack.</p><p>Detection came from behavioral modeling. The pattern of attempts against that specific endpoint was anomalous against the enterprise’s baseline, even at the per-IP level. The attack was running indefinitely, undetected, with adversaries guessing passwords before MFA could ever enter the picture. Since MFA wasn’t hit, this means the adversary could determine which passwords worked, since only those would take the user to the MFA process, and failed logins were also transparent to the adversary.</p><p>Every Microsoft environment with legacy authentication enabled has this exposure and most of them have no visibility into it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*e0RKJmAMyKig7lZ0l9kXcQ.gif" /></figure><p><strong>Case 2: 255 users, EOL since 2020, no one knew</strong></p><p>The second case is less about an active attack and more about an attack surface nobody could see. A Windows Server 2008 R2 (end-of-life since January 2020, meaning no security patches for over five years) was serving 255 Citrix users every business day. It was visible in MDE inventory. Someone had just never enrolled it.</p><p>Because there was no agent on the server, there were no DeviceEvents, no ProcessEvents, no telemetry of any kind. The server existed in a monitoring gap.</p><p>Autonomous Hunter found it through behavioral network analysis alone. Traffic patterns from 255 hosts were converging on this one server in a way that was anomalous when viewed against the rest of the environment’s topology. No agent required.</p><p>Every environment has servers that fell through the cracks. The question is whether you find them before an attacker does.</p><h3>Why this runs on Databricks</h3><p>Josh has been building anomaly detection ML in security for a long time, going back to research environments where the team had access to real compute and used it. For a couple of decades, enterprise security standardized on SIEM platforms that traded raw compute capability for convenience and compliance. Those platforms dominate the market. They’re also not built for data science. They’re built for log storage and boolean query logic. You can’t run arbitrary ML workloads against your security telemetry in most of them.</p><p>The result is that a lot of detection capability that existed in high-compute research settings never made it into enterprise production at scale. Not because the algorithms were wrong. Because the platforms that enterprises bought weren’t capable of running them.</p><p>Databricks changes the equation in a few ways that matter specifically for what Alpha Level is building.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kaIx-mdCwFpz-0i_XaD6-w.png" /></figure><p><strong>Compute that scales with the workload.</strong> The algorithms powering Autonomous Hunter’s anomaly detection (time series modeling, graph computation, unsupervised clustering) are memory-intensive by nature. Security telemetry at enterprise scale is millions of events per day. Databricks handles arbitrary memory allocation and autoscaling for Spark jobs, which means Alpha Level doesn’t need a different architecture for a small design partner versus a global enterprise. The platform scales the infrastructure.</p><p><strong>A single platform from ingest to investigation.</strong> Data lands in the lakehouse, the ML runs on it as Spark jobs, the graph context gets assembled and stored in Delta tables, and the findings surface in a Databricks App. That’s the whole stack on one platform. For a five-person team landing enterprise security contracts, avoiding a separate ML platform, a separate application hosting layer, and a separate data store isn’t just a convenience. It’s the difference between a viable product and a maintenance nightmare.</p><p><strong>Data ownership, built for Lakewatch.</strong> Databricks recently launched <a href="https://www.databricks.com/product/lakewatch">Lakewatch</a>, an agentic SIEM built on the security lakehouse designed as a cost-effective, vendor-agnostic alternative to proprietary, legacy SIEMs. Alpha Level is built to complement it. Bring your security telemetry into Lakewatch, run Autonomous Hunter as the detection and investigation layer on top, and you’ve got a stack where you own the data, the detection doesn’t depend on the data platform staying put, and swapping out either component doesn’t require a year-long migration. That’s a meaningful shift from how security data has worked for the last decade.</p><h3>Who should be paying attention</h3><p>Autonomous Hunter is pre-release. Alpha Level is working with a select group of design partners, primarily enterprises that have existing security stacks and are increasingly concerned not about alert volume but about what they’re not detecting at all.</p><p>If you’re running security operations at an organization with real exposure and you’ve been assuming your SIEM coverage is complete, it probably isn’t. Legacy authentication endpoints, unmonitored servers, slow lateral movement that never triggers a velocity rule. These are the patterns that don’t show up until after something goes wrong.</p><p>Alpha Level will be demoing Autonomous Hunter at the 2026 Databricks Data and AI Summit. Demo videos are in the works. We’ll update this post with links when those are live. If you want to explore whether a design partnership makes sense for your organization, reach out to the team at <a href="https://alphalevel.ai/">alphalevel.ai</a> (<a href="/service/mailto:hello@alphalevelsec.com">hello@alphalevelsec.com</a>).</p><blockquote><a href="https://www.linkedin.com/in/derek-witt-data/"><em>Derek Witt</em></a><em> is a Solutions Architect at Databricks focused on the Startups segment. </em><a href="https://www.linkedin.com/in/codyanderson-db/"><em>Cody Anderson</em></a><em> is on the Databricks Startups and AI Accelerator team. </em><a href="https://www.linkedin.com/in/josh-neil/"><em>Joshua Neil</em></a><em> is co-founder and CTO at Alpha Level, with 26 years in threat detection research. </em><a href="https://www.linkedin.com/in/michael-pozmantier/"><em>Mike Pozmantier</em></a><em> is co-founder and CEO of Alpha Level.</em></blockquote><p><em>The Databricks for Startups Field Engineering team works closely with founders and engineers working on ambitious ideas. We love connecting on scalable architecture, data platforms, and the real challenges of bringing data and AI systems into production.</em></p><p><strong><em>Working on something interesting?</em></strong><em> We’d be happy to compare notes and see where we can help. Email us at </em><a href="/service/mailto:ask_startups@databricks.com"><em>ask_startups@databricks.com</em></a><em> or reach out on </em><a href="https://www.linkedin.com/in/derek-witt-data/"><em>LinkedIn</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e98412a82343" width="1" height="1" alt=""><hr><p><a href="https://blog.databricksforstartups.com/zero-alerts-doesnt-mean-zero-attacks-e98412a82343">Zero Alerts Doesn’t Mean Zero Attacks</a> was originally published in <a href="https://blog.databricksforstartups.com/">Databricks for Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Databricks Zerobus Ingest — Stop Paying for Pipes You Don’t Need]]></title>
            <link>https://blog.databricksforstartups.com/databricks-zerobus-ingest-stop-paying-for-pipes-you-dont-need-3dd586851126?source=rss-9cb1fa93f7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/3dd586851126</guid>
            <category><![CDATA[event-data]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[kafka]]></category>
            <category><![CDATA[data-ingestion]]></category>
            <category><![CDATA[zerobus]]></category>
            <dc:creator><![CDATA[Derek Witt]]></dc:creator>
            <pubDate>Thu, 05 Mar 2026 12:05:44 GMT</pubDate>
            <atom:updated>2026-03-14T00:46:01.825Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*n0OGzTJUob_LHzUsPpMkiw.gif" /></figure><h4>How Zerobus Ingest gets your event data into the lakehouse without the Kafka tax</h4><p><em>By Derek Witt (Solutions Architect at Databricks)</em></p><p>You’ve got sensors on a factory floor, clickstream events from your app, or telemetry from a fleet of devices doing something awesome in the field. The data is flowing, and you need it in your lakehouse. So you spin up a message bus service, write a Spark Streaming job to read from it, and then you wait on both of those systems while the data lands in a Delta table.</p><p>You’ve got sensors on a factory floor, clickstream events from your app, or telemetry from a fleet of devices doing something awesome in the field. The data is flowing, and you need it in your lakehouse. So you spin up a message bus service, write a Spark Streaming job to read from it, and then you wait on both of those systems while the data lands in a Delta table.</p><p>When you have 10 engineers and half of them are building core product, you can’t dedicate two of them to plumbing an event streaming pipeline. But that’s exactly what happens. Somebody becomes the “message bus person.” Somebody else debugs consumer lag on a Saturday. Meanwhile, the data you actually care about is sitting three hops away from where it needs to be.</p><p>What if your app could just push records directly into a Delta table in your lakehouse?</p><p><strong>What Zerobus Is (and Why It Beats a Message Bus)</strong></p><p><a href="https://www.databricks.com/product/data-engineering/lakeflow-connect/zerobus-ingest">Zerobus Ingest</a> is a serverless, push-based ingestion service that’s part of Databricks Lakeflow Connect. Your application sends data directly to a Delta table in Unity Catalog. No brokers, no partitions, no consumer groups, and no infrastructure to manage at all. You don’t provision anything. You don’t pick instance sizes. You scale by opening more connections, and Zerobus handles the rest.</p><p>The architecture shift is straightforward. Before Zerobus, the standard pattern looked like this:</p><p><strong>Before:</strong> App → Kafka → Spark Streaming → Delta Lake</p><p><strong>After:</strong> App → Zerobus Ingest → Delta Lake</p><p>That middle layer disappears entirely. You go from three systems to one managed service. Your app opens a stream, sends records, and they show up in your table within seconds. The data is buffered durably on the server side and materialized into Delta on a cadence that keeps your table fresh without you thinking about compaction or file sizes.</p><p>Here’s what the numbers look like: each stream handles up to 100 MB/s and 15,000 rows/s. Need more? Open more streams. Zerobus supports thousands of concurrent clients writing to the same table, which means you can scale to 10+ GB/s aggregate throughput without managing a single partition. For a company running a few hundred IoT devices, you probably won’t even think about limits. For a company with thousands of devices across regions, you still won’t manage infrastructure, you’ll just open more connections.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*xN3ynymyaeOwzIXxOJDy7Q.gif" /></figure><p>A caveat worth mentioning: if you need fan-out to five different consumers reading from the same event stream, keep the message bus. Zerobus is purpose-built for getting your data into the lakehouse without extra hops. It’s a scalpel for the “data needs to land in Delta” problem, not a general-purpose message bus.</p><p>But for many startups and smaller enterprises building out their data platform, the lakehouse <em>is</em> the destination. That means one less message broker bill, one less structured streaming compute job, one less dashboard to watch. That’s real money back in your pocket.</p><h4><strong>How Does it Work?</strong></h4><p>The whole flow is: create a table, point the SDK at it, send records. Twenty-ish lines of code, no cluster configs, no YAML manifests. Here’s what that looks like.</p><ol><li><strong>Create your target table</strong></li></ol><p>Zerobus doesn’t create or alter tables for you. Define your schema in Unity Catalog first:</p><pre>CREATE TABLE catalog.schema.sensor_events (<br>    device_id    STRING,<br>    temperature  DOUBLE,<br>    humidity     LONG,<br>    event_time   TIMESTAMP<br>);</pre><p>2. <strong>Send a single record</strong></p><p>Install the SDK (pip install databricks-zerobus-ingest-sdk) and you’re about 15 lines from ingesting data. SDKs also exist for <a href="https://github.com/databricks/zerobus-sdk-py">Java, Go, TypeScript, and Rust</a>, all built on a shared Rust core.</p><p>You’ll need a service principal with USE CATALOG, USE SCHEMA, MODIFY, and SELECT grants on your target table. You’ll also need to gather your <a href="https://docs.databricks.com/aws/en/ingestion/zerobus-ingest#get-your-workspace-url-and-zerobus-ingest-endpoint">Zerobus server endpoint</a> and workspace URL. Set up your credentials and connection info as environment variables and go:</p><pre>import os<br>from zerobus.sdk.sync import ZerobusSdk<br>from zerobus.sdk.shared import RecordType, StreamConfigurationOptions, TableProperties<br><br>sdk = ZerobusSdk(<br>    os.environ[&quot;ZEROBUS_SERVER_ENDPOINT&quot;],<br>    os.environ[&quot;DATABRICKS_WORKSPACE_URL&quot;],<br>)<br><br>options = StreamConfigurationOptions(record_type=RecordType.JSON)<br>table = TableProperties(os.environ[&quot;ZEROBUS_TABLE_NAME&quot;])<br><br>stream = sdk.create_stream(<br>    os.environ[&quot;DATABRICKS_CLIENT_ID&quot;],<br>    os.environ[&quot;DATABRICKS_CLIENT_SECRET&quot;],<br>    table,<br>    options,<br>)<br><br>try:<br>    record = {<br>        &quot;device_id&quot;: &quot;sensor-001&quot;,<br>        &quot;temperature&quot;: 22.5,<br>        &quot;humidity&quot;: 55,<br>        &quot;event_time&quot;: 1700000000000000,  # epoch microseconds<br>    }<br>    offset = stream.ingest_record_offset(record)<br>    stream.wait_for_offset(offset)  # blocks until durably written<br>finally:<br>    stream.close()</pre><p>Side note: timestamps are epoch <em>microseconds</em>, not millisecond timestamps and definitely not ISO strings. Get this wrong and your queries will return dates in the year 55000.</p><p>JSON works great for prototyping. For production workloads, switch to Protobuf for type safety and better throughput.</p><p>3. <strong>High-throughput batch ingest</strong></p><p>When you’ve got a fleet of devices or services pushing thousands of records per second, you don’t want to block on every ACK. Register an AckCallback handler instead and let the SDK handle durability confirmation in the background:</p><pre>from zerobus.sdk.shared import AckCallback<br><br>class MyAckHandler(AckCallback):<br>    def on_ack(self, offset: int) -&gt; None:<br>        print(f&quot;Durable up to offset: {offset}&quot;)<br><br>    def on_error(self, offset: int, message: str) -&gt; None:<br>        print(f&quot;Error at offset {offset}: {message}&quot;)<br><br>options = StreamConfigurationOptions(<br>    record_type=RecordType.JSON,<br>    ack_callback=MyAckHandler(),<br>)<br><br>stream = sdk.create_stream(<br>    os.environ[&quot;DATABRICKS_CLIENT_ID&quot;],<br>    os.environ[&quot;DATABRICKS_CLIENT_SECRET&quot;],<br>    table,<br>    options,<br>)<br><br>try:<br>    for i in range(10_000):<br>        record = {<br>            &quot;device_id&quot;: f&quot;sensor-{i % 200}&quot;,<br>            &quot;temperature&quot;: 21.0 + (i % 10),<br>            &quot;humidity&quot;: 40 + (i % 20),<br>            &quot;event_time&quot;: 1700000000000000 + (i * 1000000),<br>        }<br>        stream.ingest_record_nowait(record)  # fire-and-forget<br>    stream.flush()  # send all buffered records before closing<br>finally:<br>    stream.close()</pre><p>That’s it — No cluster configs, no partition math, and no YAML files longer than your actual application code. The flush() call at the end makes sure every buffered record has been sent before you close the stream. Delivery is at-least-once, so if you need deduplication downstream, plan for that in your table design.</p><p>4. <strong>Monitor Ingestion via System Tables</strong></p><p>Zerobus writes logging information to <a href="https://docs.databricks.com/aws/en/admin/system-tables/zerobus-ingest">system tables</a> so you can track ingestion without building your own monitoring. Records ingested, bytes written, last commit time, all queryable with SQL:</p><pre>SELECT<br>    table_name,<br>    SUM(committed_records)    AS total_records,<br>    SUM(committed_bytes)      AS total_bytes,<br>    MAX(commit_time)      AS last_ingest<br>FROM system.lakeflow.zerobus_ingest<br>WHERE table_name = &#39;catalog.schema.sensor_events&#39;<br>GROUP BY table_name;</pre><p>You can also create an <a href="https://www.databricks.com/product/business-intelligence">AI/BI Dashboard</a> off of these tables to monitor the stream in real-time.</p><p><strong>Where This Fits (and Where It Doesn’t)</strong></p><p><strong>IoT and manufacturing.</strong> Thousands of sensors on constrained networks pushing temperature readings, vibration data, location pings. This is the sweet spot. The SDK is lightweight enough to run on edge gateways, and the choice between gRPC (high throughput, long-lived connections) and REST (stateless, better for chatty low-frequency devices) means you can pick the right protocol for your hardware. Databricks has a <a href="https://www.databricks.com/blog/announcing-public-preview-zerobus-ingest">partnership with Soracom</a> to stream IoT data from cellular and satellite devices directly into the lakehouse. If your devices can make an outbound call, they can write to Zerobus.</p><p><strong>Clickstream and app events.</strong> Web and mobile events for personalization, monitoring, experimentation. Every extra hop between “user clicked a button” and “data is queryable” is latency your product team complains about. With Zerobus, your backend pushes the event and it’s in a Delta table seconds later, ready for your analytics queries or ML pipelines.</p><p><strong>Partner integrations.</strong> Instead of teaching a partner your message bus topology and handing them a runbook, give them an SDK and a service principal. They write to a table you own and govern. You control the schema, the access, and the audit trail. For startups building platforms where third parties send you data, this is a much simpler onboarding story.</p><p><strong>When not to use it.</strong> As mentioned earlier, Zerobus writes to one destination: Delta tables in your lakehouse. If you need multiple consumers reading from the same event stream in real time, a message bus is still the right tool. Zerobus doesn’t replace the message bus for true fan-out patterns. It replaces the bus for the very common case where you were only using it as a waypoint to get data into the lakehouse anyway. Be honest with yourself about which pattern you actually need. Most of the time, it’s the second one.</p><p>Because data lands directly in Unity Catalog governed tables, you get lineage, access controls, and audit logging from the moment the first record arrives. No extra setup for governance. It’s just there.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*PeFm2AIjQjhV0WqHM7Otuw.gif" /></figure><p><strong>Get Started</strong></p><p>If your ingest pipeline has more moving parts than your actual product, give Zerobus a look. Pick one table, one device fleet, one stream of app events. Wire it up in an afternoon. Watch the data land. Then decide whether you still need that Kafka cluster.</p><p>Take a look at this <a href="https://github.com/dbderek/databricks-zerobus-demo">lightweight demo</a> on creating a Zerobus-based stream, which includes a <a href="https://www.databricks.com/product/databricks-apps">Databricks App</a> for monitoring and shows some tips for deploying with <a href="https://docs.databricks.com/aws/en/dev-tools/bundles/">Databricks Asset Bundles</a>.</p><p>Consider using the <a href="https://github.com/databricks-solutions/ai-dev-kit">Databricks AI-Dev-Kit</a> for a fast start — it includes a databricks-zerobus-ingest skill that can help your coding agent start with best practices.</p><p><strong>Resources</strong></p><ul><li><a href="https://www.databricks.com/product/data-engineering/lakeflow-connect/zerobus-ingest">Zerobus Ingest product page</a></li><li><a href="https://docs.databricks.com/aws/en/ingestion/zerobus-overview">Documentation</a></li><li><a href="https://www.databricks.com/resources/demos/tours/lakeflow/connector/zerobus-ingest">Product tour</a></li><li><a href="https://github.com/databricks/zerobus-sdk-py">Python SDK on GitHub</a></li></ul><p><em>The Databricks for Startups Field Engineering team works closely with founders and engineers working on ambitious ideas. We love connecting on scalable architecture, data platforms, and the real challenges of bringing data and AI systems into production.</em></p><p><strong><em>Working on something interesting? </em></strong><em>We’d be happy to compare notes and see where we can help. Email the author at derek.witt@databricks.com or reach out on </em><a href="https://www.linkedin.com/in/derek-witt-data/"><em>LinkedIn</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3dd586851126" width="1" height="1" alt=""><hr><p><a href="https://blog.databricksforstartups.com/databricks-zerobus-ingest-stop-paying-for-pipes-you-dont-need-3dd586851126">Databricks Zerobus Ingest — Stop Paying for Pipes You Don’t Need</a> was originally published in <a href="https://blog.databricksforstartups.com/">Databricks for Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Scale Out or Scale Up? Sizing Your DBSQL Warehouses Without Wasting Money]]></title>
            <link>https://blog.databricksforstartups.com/scale-out-or-scale-up-sizing-your-dbsql-warehouses-without-wasting-money-60e8c0f47347?source=rss-9cb1fa93f7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/60e8c0f47347</guid>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[Derek Witt]]></dc:creator>
            <pubDate>Thu, 26 Feb 2026 18:51:56 GMT</pubDate>
            <atom:updated>2026-02-26T20:41:12.318Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-1TeaZSyZWGGJzKgHAb2QQ.gif" /></figure><p>Your dashboard is slow. You do what any reasonable person would do: bump the warehouse size to X-Large. Dashboards get faster. Your cloud bill gets uglier.</p><p>We’ve all been there. But here’s the thing — “how big should my warehouse be?” is the wrong question. The real question is <em>big how?</em> Should you scale <strong>out</strong> (more clusters of a smaller size) or scale <strong>up</strong> (fewer clusters of a bigger size)?</p><p>If you’re a startup or smaller team just getting on the platform, this one’s for you. No enterprise-scale assumptions. Just the stuff that matters when you’re trying to move fast and keep costs low.</p><h3>Three Flavors, One Recommendation</h3><p>Databricks SQL warehouses come in three types:</p><ul><li><strong>Serverless</strong> — Starts in 2–6 seconds, uses Intelligent Workload Management (IWM) to scale elastically, and includes compute cost in the per-DBU price. This is the one you want.</li><li><strong>Pro</strong> — Photon engine plus Predictive I/O, but no IWM. Use it when serverless isn’t available in your region, or you need custom networking.</li><li><strong>Classic</strong> — Entry-level. Most conservative scaling, no Predictive I/O. Fine for getting started.</li></ul><p>If serverless is available in your workspace, you should use it.</p><p><strong>One exception:</strong> If you’re running something that never stops, like an ingestion job firing every minute from a JDBC connection, serverless doesn’t help you. You’re not benefiting from elastic scaling if the warehouse never scales down. Put a Classic or Pro warehouse on and let it run continuously. That should be its own separate warehouse.</p><h3>The Only Framework You Need</h3><p>Forget complicated capacity planning spreadsheets. There are two scaling levers and two signals that tell you which one to pull.</p><h4>Scale OUT (add more clusters) when…</h4><p>Your problem is <strong>concurrency</strong>. Lots of users are hitting dashboards at the same time. Each query is fast on its own, but queries pile up waiting for a slot. This is the classic Monday-morning-dashboard-refresh pattern.</p><p>The signal: <strong>Peak Queued Queries &gt; 0</strong> on your warehouse’s Monitoring tab. If queries are waiting in line, they don’t need a bigger engine — they need <em>more</em> engines.</p><p>Here’s the intuition: Operations like sums, counts, and averages distribute well across nodes. If you have 30 people loading dashboards at 9 AM and all those queries are simple aggregations, giving them three small clusters is better than one big one.</p><h4>Scale UP (increase warehouse size) when…</h4><p>Your problem is <strong>query weight</strong>. You have a handful of heavy queries doing large joins, complex aggregations, or window functions — and they’re slow because the cluster runs out of memory and starts writing intermediate results to disk.</p><p>The signal: Open any slow query’s <strong>Query Profile</strong> and look for <strong>“Bytes spilled to disk.”</strong> If you see spill, the cluster needs more RAM. Bumping from Small to Medium keeps data in memory and often cuts runtime in half.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*gTd1Zoj8Xr3y3kFR1EktBg.gif" /></figure><p><strong>Your Warehouse Is Already Telling You What It Needs</strong></p><p>You don’t need a third-party observability tool. The <strong>Monitoring tab</strong> on the SQL warehouse compute page has everything you need. Here’s what to look at:</p><ol><li><strong>Peak Queued Queries</strong> — If this is consistently above zero during business hours, you need more clusters. Period. Increase your max cluster count.</li><li><strong>Running Clusters</strong> — This shows how autoscaling is responding to load. If the chart regularly hits your max cluster cap, your ceiling is too low.</li><li><strong>Completed Query Count</strong> — Correlate query volume with time of day. You’ll find burst windows that explain queuing spikes.</li><li><strong>Activity Details (beta)</strong> — Color-coded annotations showing busy vs. idle periods. Useful for spotting patterns at a glance.</li><li><strong>Query Profile</strong> — This is where you find “Bytes spilled to disk.” It lives in the query history detail view. Click into a slow query and inspect the profile.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Bs-tTBW2KERMwn7akuzXmQ.gif" /></figure><h3>Two Scenarios, Startup-Sized</h3><p>Let’s make it concrete with Serverless pricing at <strong>$0.70/DBU</strong> (AWS US list).</p><h4>Scenario A: Scale Up Saves Money</h4><p>A daily report runs on an <strong>X-Small</strong> (6 DBU/h). It takes 12 minutes and spills to disk. On a <strong>Small</strong> (12 DBU/h), spill disappears and runtime drops to 5 minutes.</p><ul><li><strong>X-Small:</strong> 6 DBU/h x $0.70 x (12/60) = <strong>$0.84 per run</strong></li><li><strong>Small:</strong> 12 DBU/h x $0.70 x (5/60) = <strong>$0.70 per run</strong></li></ul><p>Bigger warehouse, faster results, and actually cheaper per run. The monitoring data told you exactly what to do.</p><h4>Scenario B: Scale Out Saves Money</h4><p>A BI team of 25 opens dashboards twice a day in 20-minute bursts. The queries are light; they need admission slots, not horsepower.</p><ul><li><strong>1x Small:</strong> (12 DBU/h x $0.70 x 0.33h) x 2 bursts = <strong>~$166/month</strong></li><li><strong>2x 2X-Small clusters:</strong> 2 x (4 DBU/h x $0.70 x 0.33h) x 2 bursts = <strong>~$111/month</strong></li></ul><p>Same concurrency capacity, a third less cost by going smaller and wider.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*CpY1YU8vlU3k9v37WehKAQ.gif" /></figure><h3>Separate Your Warehouses</h3><p>Don’t run everything through a single warehouse. Split them by team and workload. For example:</p><ol><li><strong>BI users</strong> get a small warehouse (2X-Small or X-Small) with a generous max cluster count. If you have a team loading dashboards, let them scale out wide and back down quickly.</li><li><strong>Data engineering</strong> gets a slightly bigger warehouse (Small or Medium) with fewer clusters. These jobs tend to be heavier but less concurrent.</li><li><strong>Always-on ingestion</strong> gets its own Classic or Pro warehouse, sized to the job, running continuously. No point paying for serverless elasticity if the thing never stops.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/920/1*w4QPwflQHu_UYs-5O_q56g.gif" /></figure><h3>Start Small and Right-Size</h3><p>Here’s where we break from the usual advice. If you’re a startup, <strong>start small</strong>. Go with an X-Small or Small and see what happens. Most teams don’t need big warehouses, and you can always scale up when the monitoring tells you to.</p><p>The conventional wisdom says to start big so nobody complains about slowness. That makes sense for a Fortune 500. But if you’re a team of 20, 50, or even 200, be scrappy. Save the money. Watch the signals. Scale when the data says so.</p><p>A few parting tips:</p><ul><li><strong>Cap your max clusters</strong> to protect your budget. Autoscaling is smart, but it’s not your finance team.</li><li><strong>Set auto-stop aggressively</strong> for Serverless — 10 minutes in the UI, down to 1 minute via API. You’re not paying for idle time if there is no idle time.</li></ul><p>Warehouse sizing isn’t about picking the biggest option you can afford. It’s about matching your workload shape to the right combination of cluster size and cluster count. Use the monitoring signals and let the data tell you which lever to pull.</p><p>Your dashboards will be faster. And your budget will thank you.</p><p>This article was written by <a href="https://www.linkedin.com/in/derek-witt-data/">Derek Witt</a> and <a href="https://www.linkedin.com/in/john-william-neil/">John Neil</a> — Databricks Solutions Architects who work daily with Startups of all sizes and stages.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=60e8c0f47347" width="1" height="1" alt=""><hr><p><a href="https://blog.databricksforstartups.com/scale-out-or-scale-up-sizing-your-dbsql-warehouses-without-wasting-money-60e8c0f47347">Scale Out or Scale Up? Sizing Your DBSQL Warehouses Without Wasting Money</a> was originally published in <a href="https://blog.databricksforstartups.com/">Databricks for Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Your AI Dev Tool Knows Databricks. The Databricks AI-Dev-Kit Makes It an Expert.]]></title>
            <link>https://blog.databricksforstartups.com/your-ai-dev-tool-knows-databricks-the-databricks-ai-dev-kit-makes-it-an-expert-f08400837629?source=rss-9cb1fa93f7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/f08400837629</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[claude-code]]></category>
            <dc:creator><![CDATA[Derek Witt]]></dc:creator>
            <pubDate>Thu, 19 Feb 2026 16:51:06 GMT</pubDate>
            <atom:updated>2026-02-19T16:51:06.133Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Modern AI models can generate Databricks code. But there’s a meaningful difference between code that runs and code that follows battle-tested patterns — and for startups, that difference compounds fast.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MXIC_TlEBCheWv1AGia6Ew.png" /><figcaption>LLMs understand Databricks but Databricks moves so fast that they often miss recent enhancements. Without expert domain knowledge (or the Databricks AI-Dev-Kit), this can lead to brittle deployments.</figcaption></figure><h3>The “Close Enough” Problem</h3><p>Here’s a scenario you’ve probably lived: you ask your AI assistant to build a Databricks pipeline. Thirty seconds later, it hands you something that… works. Technically. It ingests data. It writes to Delta. It even has a comment or two.</p><p>But look closer. It’s using the legacy import dlt API instead of the new pyspark.pipelines module. It partitions by date instead of using Liquid Clustering. There’s no rescue data handling for malformed records — so when a malformed JSON blob shows up (and it will), it silently poisons your downstream tables. No schema hints, meaning your column types are one upstream change away from drifting. No file metadata for lineage. No ingestion timestamps. It’s generating code the way Databricks worked two years ago, and it doesn’t know what it doesn’t know.</p><p>Let me be honest: recent AI models are impressive. They <em>do</em> know Databricks fundamentals, and most of the time, they’ll get you something functional. The problem is that “close enough” works fine — until you’re scaling to production, debugging a silent data quality issue at 2 AM, or explaining to your CTO why you need two sprints for a refactor that “should have been built right the first time.”</p><h3>Databricks Moves Fast (Even for AI)</h3><p>Databricks ships platform changes at a pace that makes most LLM training data feel stale. Spark Declarative Pipelines (the modern replacement for Delta Live Tables), Liquid Clustering, Lakebase, Agent Bricks, ResponsesAgent. All relatively recent, all representing meaningful shifts in how you should build.</p><p>Models trained on documentation from six to eighteen months ago miss these paradigms. And field engineers at Databricks see the consequences daily: customers (and their AI assistants) reaching for patterns that worked fine in 2023 but now have strictly better alternatives.</p><p>Some quick examples of what’s shifted:</p><ul><li>PARTITION BY should be CLUSTER BY (Liquid Clustering). import dlt should be from pyspark import pipelines as dp.</li><li>Manual cluster sizing should be serverless-first. @dlt.table() should be @dp.table() with cluster_by instead of partition_cols.</li><li>The old dlt.read() should be spark.read.table() with explicit Unity Catalog paths.</li></ul><p>Each of these is a small thing. Together, they’re the difference between a modern architecture and a legacy one that’ll need rework before you hit your Series B.</p><h3>What the AI Dev Kit Actually Is</h3><p>The <a href="https://github.com/databricks-solutions/ai-dev-kit">Databricks AI Dev Kit</a> was created by Databricks field engineers, people who work with customers every day and see which patterns succeed in production and which ones create support tickets.</p><p>It has three layers:</p><ol><li><strong>Skills (20+ curated pattern libraries).</strong> These aren’t documentation dumps. They’re field-tested playbooks organized by domain. The Spark Declarative Pipelines skill alone has 10 files covering ingestion patterns, streaming, SCD Type 2, performance tuning, DLT migration, and project initialization. Model Serving covers 9 stages from training to production deployment. Each skill encodes the judgment calls that typically require a senior Databricks engineer in the room.</li><li><strong>MCP Server (50+ tools).</strong> Your AI assistant can actually <em>talk</em> to your Databricks workspace — create pipelines, deploy models, run SQL, manage Unity Catalog. It’s not just generating code; it’s executing it.</li><li><strong>Python library + starter template.</strong> For programmatic access and scaffolding new projects with the right structure from day one.</li></ol><p>It’s a certified Gold Project, fully open source, and actively maintained by 20+ Databricks Field Engineers. Works with Claude Code, Cursor, GitHub Copilot, and OpenAI Codex.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ubNT_JwN17XWj0YcAds2Bg.png" /><figcaption>The AI-Dev-Kit gives you ready-to-use skills and tools that give your assistant (Claude Code, Cursor, etc.) the up-to-date context it needs to create Databricks resources the right way the first time.</figcaption></figure><h3>The Difference in Practice</h3><p>Let’s say that you ask your AI something like: <em>“Build me a streaming ingestion pipeline for JSON files landing in cloud storage.”</em></p><p><strong>Without the AI Dev Kit</strong>, you get something like this:</p><pre>import dlt<br><br>@dlt.table(<br>  name=&quot;bronze_events&quot;,<br>  partition_cols=[&quot;date&quot;]<br>)<br><br>def bronze_events():<br>  return (<br>    spark.readStream<br>    .format(&quot;cloudFiles&quot;)<br>    .option(&quot;cloudFiles.format&quot;, &quot;json&quot;)<br>    .load(&quot;/mnt/raw/events/&quot;)<br>  )</pre><p>It runs. It ingests data. But it’s using the legacy DLT API (import dlt was replaced by pyspark.pipelines), partitioning instead of Liquid Clustering, reading from /mnt/ paths instead of Unity Catalog Volumes, and has no schema hints, no rescue data handling, no ingestion timestamps, and no file lineage tracking. Every one of those gaps is a future production incident waiting to happen.</p><p><strong>With the AI Dev Kit Spark Declarative Pipelines skill</strong>, a similar request produces:</p><pre>from pyspark import pipelines as dp<br>from pyspark.sql import functions as F<br>from pyspark.sql.types import StructType, StructField, StringType<br><br># Schema hints prevent type drift<br>event_schema = StructType([<br>    StructField(&quot;event_id&quot;, StringType(), nullable=False),<br>    StructField(&quot;user_id&quot;, StringType(), nullable=False),<br>    StructField(&quot;event_type&quot;, StringType(), nullable=True),<br>    StructField(&quot;event_timestamp&quot;, StringType(), nullable=True),<br>    StructField(&quot;amount&quot;, StringType(), nullable=True),<br>    StructField(&quot;country_code&quot;, StringType(), nullable=True)<br>])<br><br>@dp.table(<br>    name=&quot;bronze_events&quot;,<br>    cluster_by=[&quot;event_type&quot;, &quot;country_code&quot;],  # Liquid Clustering<br>    comment=&quot;Raw events with rescue data for malformed records&quot;,<br>    table_properties={<br>        &quot;quality&quot;: &quot;bronze&quot;,<br>        &quot;delta.enableChangeDataFeed&quot;: &quot;true&quot;<br>    }<br>)<br><br>def bronze_events():<br>    return (<br>        spark.readStream<br>        .format(&quot;cloudFiles&quot;)  # Auto Loader for incremental ingestion<br>        .option(&quot;cloudFiles.format&quot;, &quot;json&quot;)<br>        .option(&quot;cloudFiles.schemaLocation&quot;, &quot;schema_location/bronze_events&quot;)<br>        .option(&quot;rescuedDataColumn&quot;, &quot;_rescued_data&quot;)  # Capture malformed records<br>        .schema(event_schema)  # Schema hints prevent type drift<br>        .load(&quot;/Volumes/main/analytics/landing_zone/events/&quot;)  # Unity Catalog Volume<br>        .withColumn(&quot;_source_file&quot;, F.col(&quot;_metadata.file_path&quot;))<br>        .withColumn(&quot;_file_modified_at&quot;, F.col(&quot;_metadata.file_modification_time&quot;))<br>        .withColumn(&quot;_ingested_at&quot;, F.current_timestamp())<br>    )</pre><p>Liquid Clustering instead of partitioning. Schema hints to prevent type drift. Rescue data handling so malformed records get flagged instead of silently corrupting downstream tables. File metadata for lineage. Unity Catalog Volumes for storage instead of (now deprecated) DBFS. Serverless compute by default. Medallion architecture naming conventions baked in.</p><p>The first version ships today and creates a refactoring ticket for the next sprint. The second version ships today and you move on to the next thing.</p><h3>Why Startups Should Care</h3><p>Startups often optimize for two things: shipping speed and minimizing tech debt. <strong>The AI Dev Kit helps with both.</strong></p><p>You ship better code because your AI assistant has access to the same patterns that Databricks field engineers recommend to enterprise customers. But you also <em>learn</em> faster as the skills are educational, not just templates. When your AI generates a pipeline with Liquid Clustering and rescue data handling, you’re absorbing modern Databricks patterns through the code itself.</p><p>Technical debt compounds. The wrong architectural choices made at speed become expensive migrations six months later when you’re trying to scale. Getting it right the first time isn’t perfectionism; it’s pragmatism. And let’s be real, you probably don’t have a dedicated Databricks platform engineer on staff yet.</p><p>The AI Dev Kit gives your team senior-engineer-level Databricks judgment without the senior engineer. It’s like having a staff architect review every pipeline before it ships, except it happens at generation time, not in code review.</p><p>There’s a cost angle too. Serverless-first patterns, proper resource sizing, and Liquid Clustering instead of over-partitioned tables directly affect your Databricks bill.</p><p>In the end, you still need to understand what you’re building and review what your AI generates, but it dramatically reduces wrong turns and dead ends.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*48dPkl9GLyPCIcxYhFLyNg.png" /></figure><h3>Getting Started</h3><p>To get started, take a look at the AI-Dev-Kit <a href="http://github.com/databricks-solutions/ai-dev-kit">repo</a>.</p><p>Navigate to your project root using your terminal and install in one line:</p><pre>curl -sL https://raw.githubusercontent.com/databricks-solutions/ai-dev-kit/main/install.sh | bash</pre><p>You can start with skills-only mode (just context, no workspace access) or go full MCP server (context + execution). Either way, setup takes less than two minutes, and you’re on your way to greatly enhancing your Databricks development experience!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f08400837629" width="1" height="1" alt=""><hr><p><a href="https://blog.databricksforstartups.com/your-ai-dev-tool-knows-databricks-the-databricks-ai-dev-kit-makes-it-an-expert-f08400837629">Your AI Dev Tool Knows Databricks. The Databricks AI-Dev-Kit Makes It an Expert.</a> was originally published in <a href="https://blog.databricksforstartups.com/">Databricks for Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[12 Days of Demos: The Supervisor Claus with Agent Bricks]]></title>
            <link>https://blog.databricksforstartups.com/12-days-of-demos-the-supervisor-claus-with-agent-bricks-cffb70b3702c?source=rss-9cb1fa93f7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/cffb70b3702c</guid>
            <category><![CDATA[12daysofdemos2025]]></category>
            <category><![CDATA[genai]]></category>
            <category><![CDATA[agent-bricks]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[ai-agent]]></category>
            <dc:creator><![CDATA[Derek Witt]]></dc:creator>
            <pubDate>Thu, 18 Dec 2025 14:32:21 GMT</pubDate>
            <atom:updated>2025-12-18T14:32:21.162Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a81J0TMzT4O2nFAIofXIsQ.png" /></figure><h4>Day 9 of 12 Days of Demos</h4><p><em>This post is part of our 12 Days of Demos holiday series with the North Pole Modernization Office, a hands-on journey showing how Santa and the elves run their data, analytics, and AI operations on Databricks. Each installment builds on the last as we assemble a full, end-to-end Lakehouse architecture that powers the magic of the season.</em></p><p><em>If you’re just joining us, start with the </em><a href="https://medium.com/@arjun.gheewala-databricks/3bf81e73524a"><em>series introduction</em></a><em> to get the full story and setup checklist, and explore the </em><a href="https://github.com/arjuncode/12daysofdemos/tree/main/"><em>public GitHub repo</em></a><em> where you’ll find all notebooks, datasets, and assets you’ll need to follow along. Then check back daily on the </em><a href="https://medium.com/startups-at-databricks"><em>Startups at Databricks Medium blog</em></a><em> for the next chapter in Santa’s Lakehouse transformation!</em></p><p><em>If you run into any issues, email</em><strong><em> g@databricks.com</em></strong><em>!</em></p><p>The North Pole Modernization Office has come a long way. We have functions that query workshop production, reindeer telemetry, delivery routes, and behavioral analytics. We built a semantic search system over Santa’s letters. But Santa’s questions are getting more sophisticated:</p><blockquote><em>“Find letters from children who seem especially grateful and creative, then check if any of them are on the coal warning list — I want to make sure we’re not missing good kids who had a rough year.”</em></blockquote><p>A single agent with tools can query the behavioral data. But understanding the <em>content and sentiment</em> of the letters? That requires semantic search over unstructured text. We need an agent that can reason over letters <em>and</em> one that can execute structured queries, working together.</p><p>That’s where <strong>Agent Bricks</strong> comes in.</p><h4>What is Agent Bricks?</h4><p>Agent Bricks provides a streamlined way to build and optimize domain-specific AI agent systems. Instead of writing custom orchestration code, you configure what you need and Databricks handles the rest — model selection, fine-tuning, optimization, and deployment.</p><p>Agent Bricks currently supports four patterns: <strong>Information Extraction</strong> for turning documents into structured tables, <strong>Custom LLM</strong> for summarization and classification, <strong>Knowledge Assistant</strong> for Q&amp;A over your documents, and <strong>Multi-Agent Supervisor</strong> for coordinating multiple agents and tools.</p><p>Today we’ll build a <strong>Knowledge Assistant</strong> to answer questions about Santa’s letters (building on the semantic search work from Day 7), then combine it with our MCP-connected operational functions (from Day 8) in a <strong>Multi-Agent Supervisor</strong>.</p><h3>Part 1: Building a Knowledge Assistant</h3><p>The Knowledge Assistant creates a RAG-powered chatbot that can answer questions and cite its sources. In Day 7, we built a vector search index over Santa’s letters using databricks-gte-large-en. The Knowledge Assistant can use that index directly — we just need to point it at the right data.</p><h4>Create the Knowledge Assistant</h4><p>Navigate to <strong>Agents</strong> in the left navigation pane and click <strong>Knowledge Assistant</strong>.</p><p>Configure the agent with a name like npmo-letter-assistant and a description: &quot;Answers questions about children&#39;s letters to Santa, including sentiment, gift requests, tone, and Christmas spirit.&quot;</p><p>Under <strong>Knowledge Source</strong>, click <strong>Add knowledge source</strong> and select <strong>Vector Search Index</strong>. Choose the santa_letters_index you created in Day 7. For the <strong>Doc URI Column</strong>, select the column that identifies each letter (like name). For the <strong>Text Column</strong>, select letter. Give it a name like santa-letters and describe the content: &quot;Letters from children to Santa containing gift requests, expressions of gratitude, and holiday wishes.&quot;</p><p>Optionally add instructions to guide behavior:</p><pre>You are Santa&#39;s Letter Analysis Assistant. Answer questions about the <br>children&#39;s letters based on their content, tone, and sentiment. You can <br>find letters by concept (grateful, excited, creative) not just keywords. <br>Always cite which letters support your answers.</pre><p>Click <strong>Create Agent</strong> and wait a few minutes for it to build.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/926/1*-2oOtYCkDYFr8QEJD7M2oA.png" /><figcaption>Fully configured Knowledge Assistant</figcaption></figure><h4>Test the Knowledge Assistant</h4><p>Once ready, a chat window will pop-up to test from or you can try it in Playground.</p><p>Try questions like:</p><blockquote><em>“Find me letters from children who seem especially grateful and polite.”</em></blockquote><blockquote><em>“Which letters show the most Christmas spirit and enthusiasm?”</em></blockquote><blockquote><em>“Are there any letters requesting unusual or creative gifts?”</em></blockquote><p>The agent responds with answers grounded in the actual letters, complete with citations. This is the same semantic understanding we built in Day 7, now wrapped in a conversational agent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*wRRO7--winqfXswu2I5k1Q.gif" /><figcaption>Chat with your letters in Playground using our Knowledge Assistant we built.</figcaption></figure><h3>Part 2: Building a Multi-Agent Supervisor</h3><p>Now the real magic. We’ll create a supervisor that coordinates the Knowledge Assistant (for letter analysis) with the Unity Catalog functions we built in Day 8 (for operational data).</p><h4>Create the Multi-Agent Supervisor</h4><p>Navigate to <strong>Agents</strong> → <strong>Multi-Agent Supervisor</strong>.</p><p>Configure the supervisor with a name like npmo-operations-supervisor and a description: &quot;Coordinates North Pole operations by combining letter analysis with real-time operational data. Can find letters by sentiment or content, then cross-reference with behavioral scores, production metrics, and delivery data.&quot;</p><p>Under <strong>Configure Agents</strong>, add your sub-agents:</p><p><strong>Sub-agent 1: Letter Analysis (Knowledge Assistant)</strong></p><p>Select <strong>Agent Endpoint</strong> as the type, then choose npmo-letter-assistant (Note that the <strong>Agent Endpoint</strong> might be something a little different than the <strong>Agent Name</strong>). Name it something like Letter Analyst and describe it: &quot;Searches and analyzes children&#39;s letters to Santa. Can find letters by tone, sentiment, gift preferences, or Christmas spirit. Use this when questions involve the content of letters.&quot; You can also let these default to the values we put into the Knowledge Assistant.</p><p><strong>Sub-agent 2: Operational Functions (Unity Catalog)</strong></p><p>Select <strong>Unity Catalog Function</strong> as the type. Add the functions we created in Day 8. In the future, this will leverage Managed MCP rather than individual functions.</p><ul><li>get_coal_warning_list — Children currently flagged for coal</li><li>get_top_nice_children — Highest-scoring children</li><li>get_child_naughty_nice_score — Look up a specific child&#39;s score</li><li>get_behavior_events_by_type — Analyze behavioral patterns</li><li>get_low_energy_reindeer — Reindeer needing rest</li><li>get_team_quality_metrics — Elf team performance</li><li>get_workshop_material_totals — Workshop material usage information</li></ul><p>For each function, the description comes from the SQL COMMENT we added in Day 8.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Diwj0e0bOFc3pXmP3bsIng.gif" /><figcaption>A fully configured supervisor agent.</figcaption></figure><p>Add instructions to guide coordination:</p><pre>You are the North Pole Operations Supervisor. When answering questions:<br><br>1. Determine if the question requires letter analysis, operational data, <br>   or both.<br>2. For questions about letter content, sentiment, or tone, consult the <br>   Letter Analyst.<br>3. For questions about scores, metrics, or status, use the operational <br>   functions.<br>4. For complex questions, gather information from multiple sources and <br>   synthesize a complete answer.<br><br>Always explain which sources you consulted.</pre><p>Click <strong>Create Agent</strong> and wait for it to build.</p><h4>Test the Supervisor</h4><p>Once deployed, test with questions that require coordination across both domains:</p><blockquote><em>“Find letters from grateful, creative children, then tell me if any of them are on the coal warning list.”</em></blockquote><p>Watch the supervisor work:</p><ol><li>Route the letter question to the Knowledge Assistant</li><li>Extract child names from the results</li><li>Call get_coal_warning_list() to check their status</li><li>Synthesize both into a coherent answer</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*VTkE5juP9QILSUx6a6ACig.gif" /></figure><p>More scenarios to try:</p><blockquote><em>“Which children wrote the most enthusiastic letters but have low naughty-nice scores? Something doesn’t add up.”</em></blockquote><blockquote><em>“Find letters mentioning art supplies or creative gifts. How is the workshop team handling craft-related production?”</em></blockquote><blockquote><em>“Show me the top 10 nicest children and find their letters so I can see what they asked for.”</em></blockquote><h3>What’s Happening Under the Hood</h3><p>The Multi-Agent Supervisor uses advanced orchestration to parse intent and understand what domains the question touches, route to the right specialist (Knowledge Assistant or UC functions), manage context between sub-agents, synthesize results into a coherent response, and enforce access controls so users only see results they’re authorized to access.</p><p>You didn’t write any of this orchestration logic. Agent Bricks built it.</p><h3>Improving Quality with Human Feedback</h3><p>Both Knowledge Assistant and Multi-Agent Supervisor support improvement through labeling sessions. The workflow: add sample questions to the <strong>Improve</strong> tab, start a labeling session and share with subject matter experts, have reviewers provide feedback via the Review App, then merge feedback and the system retrains.</p><p>For the North Pole, this means Santa’s senior elves can flag when the agent misinterprets a letter’s tone or makes a bad routing decision, and the system improves over time.</p><h3>Wrapping Up</h3><p>Today we combined a Knowledge Assistant specializing in Santa’s letters and with our operational functions in a Multi-Agent Supervisor. The North Pole Modernization Office now has an AI system that can reason over letters <em>and</em> query operational data — and coordinate between the two.</p><p>The pattern applies beyond holiday logistics. Complex enterprise questions rarely live in a single system. Agent Bricks lets you build specialized agents for each domain and orchestrate them without writing custom orchestration code.</p><p><em>Following along with the series? We’d love to hear how it’s going. Reach out to your Databricks account team with questions, or connect with me on </em><a href="https://www.linkedin.com/in/derek-witt-data/"><em>LinkedIn</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cffb70b3702c" width="1" height="1" alt=""><hr><p><a href="https://blog.databricksforstartups.com/12-days-of-demos-the-supervisor-claus-with-agent-bricks-cffb70b3702c">12 Days of Demos: The Supervisor Claus with Agent Bricks</a> was originally published in <a href="https://blog.databricksforstartups.com/">Databricks for Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[12 Days of Demos: Santa’s AI Toolkit with Managed MCP]]></title>
            <link>https://blog.databricksforstartups.com/12-days-of-demos-santas-ai-toolkit-with-managed-mcp-4389567e892f?source=rss-9cb1fa93f7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/4389567e892f</guid>
            <category><![CDATA[mcp-protocol]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[12daysofdemos2025]]></category>
            <category><![CDATA[mcp-server]]></category>
            <dc:creator><![CDATA[Derek Witt]]></dc:creator>
            <pubDate>Wed, 17 Dec 2025 14:33:06 GMT</pubDate>
            <atom:updated>2025-12-17T14:33:06.440Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ayJRB2I0sUlbiyjlIAcErg.png" /></figure><h4>Day 8 of 12 Days of Demos</h4><p><em>This post is part of our 12 Days of Demos holiday series with the North Pole Modernization Office, a hands-on journey showing how Santa and the elves run their data, analytics, and AI operations on Databricks. Each installment builds on the last as we assemble a full, end-to-end Lakehouse architecture that powers the magic of the season.</em></p><p><em>If you’re just joining us, start with the </em><a href="https://medium.com/@arjun.gheewala-databricks/3bf81e73524a"><em>series introduction</em></a><em> to get the full story and setup checklist, and explore the </em><a href="https://github.com/arjuncode/12daysofdemos/tree/main"><em>public GitHub repo</em></a><em> where you’ll find all notebooks, datasets, and assets you’ll need to follow along. Then check back daily on the </em><a href="https://medium.com/startups-at-databricks"><em>Startups at Databricks Medium blog</em></a><em> for the next chapter in Santa’s Lakehouse transformation!</em></p><p><em>If you run into any issues, email</em><strong><em> g@databricks.com</em></strong><em>!</em></p><p>The North Pole Modernization Office has made great progress. We’ve ingested data with Auto Loader, built reliable pipelines with SDP, enriched datasets with batch AI functions, and packaged business logic into Unity Catalog functions. But functions sitting in a catalog don’t help an AI agent answer questions.</p><p>That’s where <a href="https://docs.databricks.com/aws/en/generative-ai/mcp/managed-mcp"><strong>Databricks Managed MCP Servers</strong></a> come in.</p><p>Model Context Protocol (MCP) is an open standard that lets AI agents access external data and tools. Think of MCP servers as bridges between your LLM and the systems that hold your business logic. Databricks provides managed MCP servers that work out of the box. Point an agent at a simple URL, and every function in your schema becomes a callable tool.</p><p>The URL pattern:</p><pre>https://&lt;workspace-hostname&gt;/api/2.0/mcp/functions/&lt;catalog&gt;/&lt;schema&gt;</pre><p>No containers to deploy. No infrastructure to manage. Just governed, version-controlled functions exposed as AI-ready tools.</p><h4>Step 1: Initialize the Data</h4><p>First, clone the <a href="https://github.com/arjuncode/12daysofdemos/tree/main"><strong>12 Days of Demos repository</strong></a><strong> </strong>into your Databricks workspace. We’ll work through a demo notebook to prepare our data and functions.</p><p>Open the mcp-demo.ipynb notebook in the 08-mcp folder, optionally update the configuration, and run the following cells:</p><pre>TARGET_CATALOG = &quot;workspace&quot;<br>TARGET_SCHEMA = &quot;dbrx_12daysofdemos&quot;<br>TARGET_VOLUME = &quot;raw_data_volume&quot;</pre><pre>%run &quot;../00-init/load-data&quot;</pre><p>This step:</p><ul><li>Sets your Unity Catalog context</li><li>Creates a Volume for staging files</li><li>Ingests synthetic CSV data into managed Delta tables</li></ul><p>The datasets cover core North Pole operations:</p><p>gift_requests Letters to Santa with extracted gift preferences reindeer_telemetry Flight metrics, heart rate, energy efficiency workshop_production Toy manufacturing by elf team and shift behavioral_analytics Naughty/nice scores and behavioral events delivery_optimization Routes, weather delays, chimney accessibility</p><h4>Step 2: Create the Functions</h4><p>This step registers SQL functions that encapsulate queries an AI agent can invoke.</p><p>Here’s an example that returns workshop material usage:</p><pre>CREATE OR REPLACE FUNCTION get_workshop_material_totals()<br>RETURNS TABLE(total_plastic_kg DOUBLE, total_wood_kg DOUBLE, <br>              total_metal_kg DOUBLE, total_fabric_kg DOUBLE)<br>COMMENT &#39;Returns total usage of all materials in the workshop.&#39;<br>RETURN (<br>  SELECT <br>    SUM(materials_plastic_kg) as total_plastic_kg,<br>    SUM(materials_wood_kg) as total_wood_kg,<br>    SUM(materials_metal_kg) as total_metal_kg,<br>    SUM(materials_fabric_kg) as total_fabric_kg<br>  FROM workshop_production<br>);</pre><p>The COMMENT is important — it tells the AI agent what the function does, helping it decide which tool to call.</p><p>The notebook creates 20+ functions spanning the full operation:</p><ul><li><strong>Workshop:</strong> get_team_quality_metrics(), get_shift_performance(), get_toy_defect_rate()</li><li><strong>Reindeer:</strong> get_reindeer_flight_metrics(), get_flying_reindeer_status(), get_low_energy_reindeer()</li><li><strong>Behavior:</strong> get_top_nice_children(), get_coal_warning_list(), get_child_naughty_nice_score()</li><li><strong>Delivery:</strong> get_weather_impact_on_delivery(), get_chimney_accessibility(), get_delivery_route_metrics()</li></ul><p>Connect to Serverless compute and run all cells below Step 2 to register the functions in Unity Catalog.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*9gWZe9uG4obq9xE-xhQRxA.gif" /><figcaption>Viewing our created functions in Unity Catalog.</figcaption></figure><h4>Testing with AI Playground</h4><p>Now we connect the pieces. Navigate to <strong>AI Playground</strong> in your workspace.</p><ol><li>Select a model with the <strong>Tools enabled</strong> label</li><li>Click <strong>Tools</strong> → <strong>+ Add tool</strong> → <strong>Hosted Function</strong></li><li>Browse to your catalog and schema, then select the functions you want to expose</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*c9k-inYdUcO2QpWsxoau-g.gif" /><figcaption>Selecting a model and adding our functions via Managed MCP server in the Databricks Playground</figcaption></figure><p>Let’s also set a system prompt for our Playground agent:</p><blockquote>You are Santa’s Chief Planning Officer for his holiday season efforts. Santa is going to ask you plain text questions about elements of his toy production and delivery planning, along with other topics. Use the MCP tools provided to answer the questions.</blockquote><p>With the tools attached and the system prompt created, try some natural language queries:</p><blockquote>“Which elf team has the best quality scores?”</blockquote><blockquote>“Show me reindeer with energy efficiency below 0.7 — who needs a carrot break?”</blockquote><blockquote>“How much does a blizzard slow down our delivery times compared to clear weather?”</blockquote><blockquote>“Who are the top 10 nicest children this year?”</blockquote><p>The agent recognizes which function to call, executes it against your data, and synthesizes the results into a natural response.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*-65CiQJDerm3oifditSuKQ.gif" /></figure><h4>The Magic Behind the Scenes</h4><p>When you add Unity Catalog functions as tools in AI Playground, it connects to the Managed MCP Server at:</p><pre>https://&lt;your-workspace&gt;/api/2.0/mcp/functions/12daysofdemos/npmo</pre><p>The server automatically:</p><ul><li>Exposes each function as a callable tool</li><li>Uses the COMMENT as the tool description</li><li>Handles parameter validation and type conversion</li><li>Returns structured results the LLM can reason over</li></ul><p>This is the value of managed infrastructure: you focus on the business logic, Databricks handles the plumbing.</p><h4><strong>Export to Deployable Code</strong></h4><p>Click <strong>Get code </strong>in AI Playground to generate a Python notebook with a Pydantic-based agent. This gives you code you can customize, test programmatically, and deploy to a Model Serving endpoint.</p><h4>Connect External Clients</h4><p>Managed MCP Servers work with any <a href="https://docs.databricks.com/aws/en/generative-ai/mcp/connect-external-services">MCP-compatible client </a>— including tools like Cursor and Claude Desktop. Your Unity Catalog functions become tools anywhere MCP is supported.</p><h4>Combine Data Sources</h4><p>Tomorrow we’ll explore Agent Bricks and multi-agent orchestration. But the pattern we’ve established today — governed functions exposed via MCP — is the foundation. You can combine:</p><ul><li><strong>UC Functions MCP</strong> — Custom business logic (what we built today)</li><li><strong>Vector Search MCP</strong> — Semantic search over documents</li><li><strong>Genie MCP</strong> — Natural language queries against tables</li><li><strong>DBSQL MCP</strong> — Run AI-generated SQL.</li></ul><p>An agent could search documentation, query structured data, and run business logic — all in one conversation.</p><h4>Wrapping Up</h4><p>Today we turned Unity Catalog functions into AI-ready tools with zero infrastructure work. The North Pole Modernization Office now has an AI operations center where agents can answer questions about workshop production, reindeer health, delivery logistics, and the all-important naughty-or-nice list.</p><p>The pattern applies beyond the North Pole. Your organization has business logic locked in dashboards, stored procedures, and tribal knowledge. Unity Catalog functions + Managed MCP lets you expose that logic to AI in a way that’s auditable, secure, and maintainable.</p><h4>Up next…</h4><p>We take the next step with Agent Bricks, orchestrating multi-agent systems that can reason, plan, and execute complex tasks. If you missed earlier days, catch up <a href="https://medium.com/startups-at-databricks/all?topic=12daysofdemos2025">here</a>.</p><p>Happy holidays, and happy data engineering! 🎄🦌</p><p><em>Following along with the series? We’d love to hear how it’s going! Reach out to your Databricks account team with questions, or connect with me on </em><a href="https://www.linkedin.com/in/derek-witt-data/"><em>LinkedIn</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4389567e892f" width="1" height="1" alt=""><hr><p><a href="https://blog.databricksforstartups.com/12-days-of-demos-santas-ai-toolkit-with-managed-mcp-4389567e892f">12 Days of Demos: Santa’s AI Toolkit with Managed MCP</a> was originally published in <a href="https://blog.databricksforstartups.com/">Databricks for Startups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>