Building an AI-Powered Conference App with .NET’s Composable Stack — Microsoft built ConferencePulse, a Blazor Server app for live conference sessions, by composing five .NET extension libraries together. They used it at MVP Summit.
What ConferencePulse does
ConferencePulse runs during live sessions and provides: AI-generated polls from session content, audience Q&A with a RAG pipeline pulling from a live knowledge base, auto-generated insights, and session summaries produced by multiple concurrent AI agents. The stack is .NET 10, Blazor Server, Aspire, split across five projects: Web, Core, Ingestion, Agents, Mcp, and AppHost.
Microsoft.Extensions.AI: one abstraction for everything
IChatClient is the unified abstraction — you wire it up once and the same interface works for Azure OpenAI, OpenAI, Anthropic, or any other provider. Six lines to get a fully configured client with function invocation, OpenTelemetry tracing, and logging middleware:
services.AddChatClient(new AzureOpenAIClient(...).GetChatClient("gpt-4o"))
.UseFunctionInvocation()
.UseOpenTelemetry()
.UseLogging();
The same IChatClient is reused later for the data ingestion enrichment step — no separate client for that.
DataIngestion pipeline
Session content flows through a pipeline: MarkdownReader → HeaderChunker (500 tokens, 50 token overlap) → SummaryEnricher + KeywordEnricher → VectorStoreWriter (Qdrant). The enrichers use the same IChatClient to generate summaries and extract keywords before indexing. Audience questions, Q&A pairs, and poll results are ingested in real-time as the session progresses — the knowledge base grows during the talk.
VectorData: provider-agnostic search
VectorStoreCollection.SearchAsync() works the same whether the backing store is Qdrant or Azure AI Search. Hybrid search (vector + full-text) is supported. The RAG pipeline for audience Q&A queries this collection and gets back relevant chunks to pass as context to the chat client.
MCP: session content as tools
The session content is exposed via MCP so any MCP-compatible client can access it. Both the server and client are implemented — the server exposes session knowledge as MCP tools, and the client allows calling those tools from within the agent pipeline.
Agent Framework: parallel multi-agent summary
The session summary is generated by three agents running concurrently — PollSummaryAgent, QuestionSummaryAgent, and InsightSummaryAgent — then merged. This uses the group chat or parallel execution pattern from Microsoft Agent Framework. Each agent handles one concern; the orchestrator merges the outputs.
The design principle
The post makes a point worth keeping: use the simplest tool that fits. Direct IChatClient calls for simple generation tasks. Tool/function calling for structured data extraction. Full agents only when you need autonomous multi-step reasoning. The library layering enforces this — you can pick up Microsoft.Extensions.AI without pulling in the full Agent Framework.
See the full post for the complete project structure and source links.
