Part 4 of a series on building agents with the Microsoft Work IQ API. Part 1 introduced Work IQ, Part 2 built a conversational A2A client, and Part 3 gave a custom agent Microsoft 365 capabilities through MCP. The first three agents in this series were useful only while they were running. Part 2 remembered a conversation through contextId. Part 3 could read and change Microsoft 365 data through MCP. Stop either process, however, and…
Part 3 of a series on building agents with the Microsoft Work IQ API. Part 1 introduced Work IQ, and Part 2 built a conversational A2A client with multi-turn context and streaming. Over the last year, one problem has followed nearly every capability we added to our private AI application: tools multiply quickly. The first connector is manageable. So are the first few functions. Then the agent needs email, calendar, people, Teams, SharePoint and OneDrive.…
Part 2 of a series on building agents with the Microsoft Work IQ API. Part 1 explained the Work IQ model and made a first grounded call with raw HttpClient. The raw A2A call in Part 1 was useful for one reason: it showed exactly what crossed the wire. I could see the Work IQ token audience, the JSON-RPC method, the A2A version header and the response shape. That removed a lot of guesswork. It…
Over the last year, our team has been building a private AI application for clients. The use cases changed from project to project, but the infrastructure underneath them started to look uncomfortably familiar. We needed agents. Then tools for those agents. Then connectors to Microsoft 365 and other systems. Then indexing, retrieval, conversation state, monitoring and permission checks. Every new capability solved a user problem while quietly giving us another component to operate. I saw…
In Part 1, we built a Foundry agent with long-term memory that could remember user preferences, roles, and context across sessions without any custom embedding pipelines. If you haven’t read that post yet, I’d recommend starting there, as this one builds directly on top of that code. But here’s the thing: memory on its own is useful, but it’s not transformative. Knowing that a user prefers bullet-point summaries or works in the finance department is…




