Hi, I’m Dan, a developer advocate at Databricks focused on Generative AI. I make MLflow guides and examples, build AI agent demos on Databricks, and help with technical events, etc.

This site is where I publish first. Expect regular posts on LLMs, open tooling, and the day-to-day craft of building with Databricks.

Read more…

Recent posts

Harness Engineering

February 28, 2026

In the first couple of years of LLMs, we talked a lot about "prompt engineering": how to craft a prompt just so in order to induce the LLM to do what we want. Since then, we've moved on to the more expansive "context engineering": how multiple available sources of context (chat history, file reads, web search results, etc.) should be combined to induce an agent to do what we want. Here, I'm writing about the even-more-expansive notion of "harness engineering": how do we orchestrate the whole loop of LLM invocations, tool calls, background process management, context retrieval, permission asks, etc., to get the agent to do what we want?

Saving and Restoring Window Configurations in Emacs

November 22, 2025

When working in emacs, I often switch between different combinations of windows with different splits. For example, I might have one configuration with an org mode buffer with some notes alongside org-agenda, and another with a Python source file and a Python REPL. Before, I was switching between them by changing buffers and splits each time, which was cumbersome. Registers make it much simpler, and desktop-save-mode lets you persist window configurations across sessions.

Using MLflow's MCP Server for Conversational Trace Analysis

October 1, 2025

MLflow 3.4 introduced an official MCP server that lets AI assistants like Claude interact directly with your MLflow traces. This post explores how to set it up when MLflow is installed in a virtual environment, and demonstrates practical usage with both Claude Desktop and Claude Code for debugging and analyzing GenAI application traces.

Getting Started with Model Context Protocol Part 2: Prompts and Resources

September 21, 2025

In the first part of this series on Anthropic's Model Context Protocol, I showed how to define a very simple MCP server with one tool and install it to Claude Desktop. In this post, we will look at two more MCP concepts and learn how to use them: resources, which expose data and other content to models, and prompts, which are intended to allow users to select reusable prompt templates suited for certain tasks or workflows.

Getting Started with Model Context Protocol Part 1: Add a Simple MCP Server to Claude Desktop

April 12, 2025

This post provides a simple, minimal example of setting up and using an MCP (model context protocol) server for use with Claude Desktop.

There are many MCP guides and tutorials and docs out there. In this one, I attempt to start with very simple implementations with as little complexity as possible in order to get started as quickly as possible.

Future posts will add more complexity, showing how to use additional MCP abstractions like prompts and resources, how to write an MCP client in Python, and how to use LLMs from other providers with MCPs.

Emacs Introspection and Debugging

March 23, 2025

If you use Emacs, you will eventually run into errors. Maybe a recent package update introduced some new issues with your system. Or some custom elisp you wrote runs into an edge case. Regardless of the cause, Emacs provides many tools for identifying the causes of errors and learning how to address them.

All posts →