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.
Recent Posts
(2025-10-01) Using MLflow's MCP Server for Conversational Trace Analysis
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.
(2025-09-21) Getting Started with Model Context Protocol Part 2: Prompts and Resources
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.
(2025-04-12) Getting Started with Model Context Protocol Part 1: Add a Simple MCP Server to Claude Desktop
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.
(2025-03-23) Emacs Introspection and Debugging
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.
This post works through a recent issue I encountered with the eglot
package and how I was able to identify and fix the issue using various introspection tools built into Emacs. It provides some general advice for how to use Emacs to learn about and debug issues with Emacs.
(2024-05-05) Persistent Elements in Daily Journals with Org Agenda
I use denote's journaling features to keep a daily project log, where I record whatever I'm working on, stray bits of knowledge, some TODOs, fleeting thoughts, etc.
In some cases, I want to refer back to these notes. But I (will) have a lot of these journal files. I don't want to search through them manually to find the name of that article, or that recommendation I jotted down, or whatever it was.
This post shows a quick solution to this issue using org-agenda-custom-commands to make a custom view over specified tags in my journal files.
(2024-03-29) Retrieving Data for the H2o RAG Benchmark
I was looking for a good dataset to use for comparing different models in a RAG application when I found this post on Reddit. It compares a bunch of models on a collection of questions over a set of documents provided by H2O.ai.
I wasn't super interested in the benchmark, but the files (mostly pdfs, one mp3, jpg, other file types) interested me for use in my own testing. This short post shows how to get them using the scripts provided by h2o.ai.
(2024-03-25) Making headings for recurring tasks in org mode
This short post shows how to use the org-clone-subtree-with-time-shift
command to make org headings for recurring tasks. I was recently trying to add a five-week class to my org agenda and I didn't want to manually create each heading and add or modify the timestamp. This approach made it very easy.
(2023-12-17) Introduction to Emacs Hooks
Today I was customizing the appearance of org files displayed with org-tree-slide. In particular, I wanted to increase the font size and start Olivetti mode whenever I started org-tree-slide-mode
and return everything to normal when I was done. This, I quickly discovered, required the use of hooks. Hooks are not especially complicated, but they are useful and worth taking a few minutes to understand. This post will cover the basics of working with hooks in emacs.
(2023-07-09) YASnippet for Prompt Templates for Chatgpt-Shell
The wonderful chatgpt-shell package by Xenodium lets you interact with the gpt-3.5 and gpt-4
APIs in emacs via a handy shell built on top of comint-mode
. It also integrates
well with org-mode
.
I find that I tend to re-use a few prompt patterns for specific tasks. Yasnippet provides a great