In my Blazor projects, the business logic has been tested with xUnit for a long time, but the components themselves were not. If an @if showed the wrong button, I only saw it by opening the page. In this post, we add a bUnit test project to a Blazor application and cover the cases I run into most often.
Build an MCP server in C# and plug it into Claude Code
Part 3 in the “Agent Skills” series: Part 1 – What an agent skill is | Part 2 – Create your own skill | Version française
In the first article and the second one of this series, we saw what a skill is and how to create one. A skill gives instructions to the agent, but it doesn’t give it access to new data or new systems. For that, you need tools, and that’s the role of MCP.
[Read More]Structured Outputs with Ollama and .NET
Part 6 in the “Local AI with Ollama and .NET” series: Part 1 – Ollama and .NET | Part 2 – Local RAG | Part 3 – AI Agents | Part 3.5 – MCP Server | Part 4 – Microsoft Agent Framework | Part 5 – Aspire | Version française
Asking a local model to reply in JSON directly in the prompt works most of the time. The problem is the rest of the time: the parsing blows up, and rarely at a good moment. Here’s a simple trick to get reliable JSON with Ollama and .NET.
[Read More]Orchestrating Ollama and Blazor with .NET Aspire
Part 5 in the “Local AI with Ollama and .NET” series: Part 1 – Ollama and .NET | Part 2 – Local RAG | Part 3 – AI Agents | Part 3.5 – MCP Server | Part 4 – Microsoft Agent Framework | Version française
Through the rest of the series, Ollama ran by hand: installed locally on the machine, the ollama pull done manually, and the .NET app pointing at Ollama’s local address hardcoded. It works, but it’s several manual steps to repeat on every machine. Aspire takes care of this configuration. I wanted to see what it changes.
Top 10 C# 13/14 and .NET 9/10 Features
Retrospective, Lessons Learned, and v2 Roadmap
This post is part of the Voice Assistant on Raspberry Pi series.
Six articles and two evenings later, we have a French-language voice assistant running entirely on two Raspberry Pi 4s.
[Read More]Function Calling: Teaching Tools to the Assistant
This post is part of the Voice Assistant on Raspberry Pi series.
In article #5, we injected weather data into every conversation, even for questions like “what’s your name?”. That wastes tokens. Function calling fixes this: the LLM decides when it needs a tool and only calls it when the question actually warrants it.
The complete code for this article is available on GitHub.
[Read More]Real-Time Weather and Swapping to the Claude API
This post is part of the Voice Assistant on Raspberry Pi series.
The assistant responds well, but it has no idea what the weather is like outside. We wire up Open-Meteo, a free, key-less weather API. And while we’re at it, we swap Ollama for the Claude API: a single line in appsettings.json.
The complete code for this article is available on GitHub.
[Read More]Memory, Silence Detection, and systemd
This post is part of the Voice Assistant on Raspberry Pi series.
The assistant from article #3 works, but every exchange starts from scratch. We fix that in three steps: conversational memory, automatic silence detection, and auto-start at boot with systemd.
The complete code for this article is available on GitHub.
[Read More]Ollama Integration and Home Context
This post is part of the Voice Assistant on Raspberry Pi series.
Article #2 ended with a hardcoded response, which was enough to confirm the audio pipeline works. Now we swap that line for a real HTTP call to Ollama on the pi-cerveau, and add a system prompt to give the assistant a personality and some knowledge about your home.
The complete code for this article is available on GitHub.
[Read More]