Running the WUIC assistant on a local LLM: Ollama, an MCP server, and a free agentic VS Code The WUIC framework team replaced the cloud-based generation half of its RAG chatbot with a local LLM running via Ollama, cutting per-token costs and privacy exposure. A side effect emerged: exposing the same WUIC knowledge to VS Code through an MCP server yields a free agentic coding assistant that knows the framework without an API key. The setup uses qwen2.5-coder:32b on a GPU box in the LAN, with retrieval remaining local via ONNX. Our in-product RAG chatbot https://wuic-framework.com/blog/rag-chatbot-with-claude-and-bge-m3 has two halves. The first is retrieval — hybrid BM25 + bge-m3 + a fine-tuned reranker, running locally as native .NET/ONNX, with zero API surface to anyone. The second is generation — turning the retrieved chunks into an answer, or into a proposed metadata change https://wuic-framework.com/blog/rag-chatbot-tool-use-framework-integration . That second half talked to a cloud API with a per-token bill. This post is about replacing that second half with a local model , and about a side effect that turned out to be more useful than the original goal: the same WUIC knowledge, exposed to VS Code, gives you a free agentic coding assistant that actually knows the framework — no API key, no per-token cost. That side effect later became a product of its own — see the update at the end. It is also an honest post. A local LLM is not "free" in the sense people usually mean. You trade money and privacy gains for quality and latency losses. The last section is the bill. The retrieval half did not move — it was already local. Only the brain changed. bash BEFORE retrieval local ONNX → Claude API $ per token, cloud round-trip AFTER retrieval local ONNX → Ollama / qwen2.5 $0, on a GPU box in the LAN The two are not the same model class, and pretending otherwise would be dishonest — more on that below. But the wiring is clean, because the engine already spoke an OpenAI-compatible dialect. Pointing it at a local server is configuration, not surgery: rag-llm-provider = ollama OpenAI-compatible wire format rag-llm-base-url = http://