{"id":2862,"date":"2026-09-09T16:00:39","date_gmt":"2026-09-09T23:00:39","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/foundry\/?p=2862"},"modified":"2026-09-10T00:45:41","modified_gmt":"2026-09-10T07:45:41","slug":"whats-new-in-microsoft-foundry-july-august-2026","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/foundry\/whats-new-in-microsoft-foundry-july-august-2026\/","title":{"rendered":"What&#8217;s new in Microsoft Foundry: July and August 2026"},"content":{"rendered":"<p>Microsoft Foundry&#8217;s July and August 2026 updates make Hosted Agents, Voice Live integration, and Toolboxes generally available; expand Claude tools hosted on Azure; update Model Router&#8217;s regions and model pool; add Foundry Local capabilities; and advance the Python, JavaScript, Java, and .NET SDKs.<\/p>\n<blockquote><p><strong>Author&#8217;s note<\/strong>: After a long summer break and a small US holiday, we have a lot to catch up on! I&#8217;ve brought July and August&#8217;s Foundry updates together in one roundup, with code examples and migration notes to help you get started.<\/p><\/blockquote>\n<h2>TL;DR<\/h2>\n<p>Hosted Agents, Voice Live integration, and Toolboxes are now generally available, giving developers a managed runtime for agent code, real-time voice, and reusable tools managed outside the agent. Claude deployments hosted on Azure add structured outputs, Web search, Web fetch, MCP connector, and Tool search, with the MCP connector using the beta API. Model Router adds regions, refreshes its routing pool with GPT-5.6 variants and Claude Opus 4.8, and expands agentic routing to eligible Anthropic and open-source models. Foundry Local on Azure Local extension <code>2607<\/code> adds preview model evaluation, vLLM model parallelism, and improved automatic GPU inference tuning, while Foundry DevPack <code>0.1.3<\/code> provides preview installers for Windows, macOS, and Linux on x64 and Arm64. By the end of August, the Python and JavaScript\/TypeScript SDKs had reached stable version <code>2.5.0<\/code> and Java <code>2.4.0<\/code>; the .NET <code>3.0.0<\/code> line remained in preview, with hosted-agent management and runtime support differing by language.<\/p>\n<h2>Join the community<\/h2>\n<p>Which July or August update should we cover with a deeper implementation example? Share what you are building\u2014or where you are blocked\u2014in <a href=\"https:\/\/aka.ms\/foundry\/discord\">Discord<\/a> or <a href=\"https:\/\/aka.ms\/foundry\/forum\">GitHub Discussions<\/a>, and <a href=\"https:\/\/devblogs.microsoft.com\/foundry\/category\/whats-new\/feed\/\">subscribe via RSS<\/a> for the next roundup.<\/p>\n<hr \/>\n<h2>Agents &amp; Foundry Agent Service<\/h2>\n<h3>Hosted Agents in Foundry are generally available (GA)<\/h3>\n<p>Build agents with your preferred framework and run them in Foundry&#8217;s managed runtime. We <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/gpt-5-6-now-available-in-microsoft-foundry\/\">announced general availability for Hosted Agents on July 9<\/a> in a post by Tina Schuchman, who leads our Foundry platform engineering organization.<\/p>\n<h4>Create an agent with the CLI<\/h4>\n<p>For this example, I&#8217;m using the OpenAI Agents SDK using Model Router with the Responses API protocol. The Foundry agents extension for Azure Developer CLI handles scaffolding, local testing, and deployment.<\/p>\n<p>If you&#8217;d rather work in VS Code than follow the CLI steps, I recommend <a href=\"https:\/\/aka.ms\/foundrytk\">installing Foundry Toolkit from the VS Code Marketplace<\/a>. For a guided visual workflow in the GitHub Copilot App, open Customize &gt; Canvas &gt; Microsoft Foundry to get started with <a href=\"https:\/\/github.com\/microsoft\/foundry-dev-tools\/tree\/main\/microsoft-foundry\">Foundry Canvas (preview)<\/a>.<\/p>\n<p>Install <a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/azure-developer-cli\/install-azd\">Azure Developer CLI<\/a> 1.32.0 or later and the <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/how-to\/install-cli-foundry-extensions#install-or-upgrade-an-individual-extension\">Foundry AI agents extension<\/a> 1.0.0-beta.13 (preview) or later. These are the end-of-August releases we&#8217;re using as the setup baseline:<\/p>\n<pre><code class=\"language-bash\">azd extension install azure.ai.agents --version 1.0.0-beta.13<\/code><\/pre>\n<p>Sign in with both <code>azd auth login<\/code> for the CLI and <code>az login<\/code> for the sample&#8217;s local Azure credential flow. You&#8217;ll need an existing Foundry project. Agent Service works with many models available in the <a href=\"https:\/\/ai.azure.com\/catalog\/models?capabilities=agentsv2&amp;cid=learnDoc\">Foundry model catalog<\/a>\u2014including model-router. If you haven&#8217;t deployed Model Router yet, follow the <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/openai\/how-to\/model-router#deploy-a-model-router-model\">Model Router deployment guide<\/a> before continuing.<\/p>\n<p>Start from the <a href=\"https:\/\/github.com\/microsoft-foundry\/foundry-samples\/tree\/main\/samples\/python\/hosted-agents\/bring-your-own\/responses\/openai-agents-sdk\">OpenAI Agents SDK template<\/a>. Run initialization from a writable directory outside another Git repository. Replace the example project resource ID with yours, and <code>model-router<\/code> with your deployment name if it differs:<\/p>\n<pre><code class=\"language-bash\">azd ai agent init openai-agents-hosted \\\r\n  --manifest https:\/\/github.com\/microsoft-foundry\/foundry-samples\/blob\/main\/samples\/python\/hosted-agents\/bring-your-own\/responses\/openai-agents-sdk\/azure.yaml \\\r\n  --project-id \"\/subscriptions\/&lt;subscription-id&gt;\/resourceGroups\/my-foundry-rg\/providers\/Microsoft.CognitiveServices\/accounts\/my-foundry-resource\/projects\/my-foundry-project\" \\\r\n  --model-deployment model-router \\\r\n  --agent-name openai-agents-router-demo \\\r\n  --deploy-mode code<\/code><\/pre>\n<p>I named my hosted agent <code>openai-agents-router-demo<\/code> for this demo. You can omit <code>--agent-name<\/code> to keep the template&#8217;s default name.<\/p>\n<p>Next, start the agent server on localhost to test it before deployment. The agent runs locally but still calls your deployed Model Router in Foundry:<\/p>\n<pre><code class=\"language-bash\">cd openai-agents-hosted\r\nazd ai agent run --no-client<\/code><\/pre>\n<p>Leave the server running, then invoke it from another terminal in the same directory:<\/p>\n<p><div class=\"alert alert-primary\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Incurring costs<\/strong><\/p><code>invoke<\/code> incurs charges for the routed model. After <code>deploy<\/code>, remote sessions also incur <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/concepts\/hosted-agents#pricing\">hosting charges<\/a>.<\/div><\/p>\n<pre><code class=\"language-bash\">azd ai agent invoke --local --new-session \\\r\n  \"Give a developer a two-sentence checklist for validating an AI agent before deployment.\"<\/code><\/pre>\n<p>When the local response looks right, check the source package excludes environment files and virtual environments, then publish the agent.<\/p>\n<pre><code class=\"language-bash\">azd deploy openai-agents-sdk-invocations\r\n\r\nazd ai agent invoke openai-agents-sdk-invocations --new-session \\\r\n  \"Give a developer a two-sentence checklist for validating an AI agent before deployment.\"<\/code><\/pre>\n<p>The commands select the template&#8217;s service key, <code>openai-agents-sdk-invocations<\/code>; despite that label, this sample uses Responses. Omitting <code>--local<\/code> sends the request to the deployed agent.<\/p>\n<p>Example cloud response:<\/p>\n<pre><code class=\"language-text\">Before deployment, validate functionality and reliability: run unit\/integration\/end-to-end tests and benchmarks against acceptance metrics, stress and latency tests, adversarial and edge-case inputs, domain-shift simulations, and verify reproducibility and data lineage.\r\nAlso confirm safety, ethics, and operations readiness: perform bias\/harm audits and red-team exercises, ensure PII handling, access control and injection protections, clear explainability and user disclaimers, monitoring\/alerts\/SLAs, a human-in-the-loop and rollback\/kill-switch, and legal\/compliance sign-off with a staged rollout plan.<\/code><\/pre>\n<p>Voila! I chose my model, used a third-party, open-source framework, and deployed my agent my way. Now it&#8217;s your turn: start in code, use the CLI, try Foundry Toolkit in VS Code, explore Foundry Canvas in the GitHub Copilot app, or use <a href=\"https:\/\/aka.ms\/azure-skills\">Azure Skills<\/a> in your preferred agent development environment.<\/p>\n<p>Once you&#8217;ve installed Azure Skills, try this prompt:<\/p>\n<pre><code class=\"language-text\">Use the Foundry OpenAI Agents SDK hosted-agent template with Model Router through the Responses API. Reuse my existing Foundry project and model deployment; ask me for their details. Help me test locally, then review the deployment plan and costs with me before I approve deployment.<\/code><\/pre>\n<p>You can stop the local server with <kbd>Ctrl<\/kbd>+<kbd>C<\/kbd>. Keep the deployed agent for the next step: talking to it.<\/p>\n<h4>Give your agent a voice<\/h4>\n<p>Hosted Agents with Voice Live are also generally available (GA). We&#8217;ve tested our agent through text. Now let&#8217;s talk to it.<\/p>\n<p>Using the same hosted agent from our previous example, we&#8217;ll run a minimal, voice-only session locally and reuse the <code>AudioProcessor<\/code> from the Voice Live quickstart. Replace the resource endpoint and project name with yours.<\/p>\n<p>First, install the Voice Live package and its audio dependency. On Linux, install PortAudio first:<\/p>\n<pre><code class=\"language-bash\"># Linux only\r\nsudo apt-get install -y portaudio19-dev libasound2-dev<\/code><\/pre>\n<p>Then install the Python packages:<\/p>\n<pre><code class=\"language-bash\">pip install --pre \"azure-ai-voicelive[aiohttp]\" azure-identity pyaudio<\/code><\/pre>\n<p><div class=\"alert alert-primary\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Incurring costs<\/strong><\/p>Running this session incurs <a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/speech-service\/voice-live#pricing\">Voice Live charges<\/a> for text and audio tokens at the pricing tier associated with your agent&#8217;s model. The pricing guide also includes token-usage estimates and additional charges for custom speech, voices, or avatars.<\/div><\/p>\n<p>Download <a href=\"https:\/\/github.com\/microsoft-foundry\/foundry-samples\/blob\/main\/samples\/python\/hosted-agents\/bring-your-own\/voicelive\/client\/voicelive_client.py\"><code>voicelive_client.py<\/code><\/a> to the same directory as your script. Then run:<\/p>\n<pre><code class=\"language-python\">import asyncio\r\n\r\nfrom azure.ai.voicelive.aio import connect\r\nfrom azure.ai.voicelive.models import (\r\n    AudioEchoCancellation,\r\n    AudioNoiseReduction,\r\n    AzureStandardVoice,\r\n    InputAudioFormat,\r\n    Modality,\r\n    OutputAudioFormat,\r\n    RequestSession,\r\n    ServerVad,\r\n)\r\nfrom azure.identity.aio import DefaultAzureCredential\r\n\r\nfrom voicelive_client import AudioProcessor\r\n\r\nasync def main():\r\n    async with DefaultAzureCredential() as credential:\r\n        async with connect(\r\n            endpoint=\"https:\/\/&lt;resource-name&gt;.services.ai.azure.com\",\r\n            credential=credential,\r\n            agent_config={\r\n                \"agent_name\": \"openai-agents-router-demo\",\r\n                \"project_name\": \"&lt;project-name&gt;\",\r\n            },\r\n        ) as connection:\r\n            audio = AudioProcessor(connection)\r\n            audio.start_playback()\r\n            try:\r\n                await connection.session.update(\r\n                    session=RequestSession(\r\n                        modalities=[Modality.TEXT, Modality.AUDIO],\r\n                        voice=AzureStandardVoice(name=\"en-US-Ava:DragonHDLatestNeural\"),\r\n                        input_audio_format=InputAudioFormat.PCM16,\r\n                        output_audio_format=OutputAudioFormat.PCM16,\r\n                        turn_detection=ServerVad(),\r\n                        input_audio_echo_cancellation=AudioEchoCancellation(),\r\n                        input_audio_noise_reduction=AudioNoiseReduction(type=\"azure_deep_noise_suppression\"),\r\n                    )\r\n                )\r\n\r\n                async for event in connection:\r\n                    if event.type == \"session.updated\":\r\n                        audio.start_capture()\r\n                    elif event.type == \"response.audio.delta\":\r\n                        audio.queue_audio(event.delta)\r\n                    elif event.type == \"input_audio_buffer.speech_started\":\r\n                        audio.skip_pending_audio()\r\n                    elif event.type == \"error\":\r\n                        raise RuntimeError(event.error.message)\r\n                    elif event.type == \"response.done\" and (\r\n                        event.response.status in (\"failed\", \"incomplete\")\r\n                    ):\r\n                        raise RuntimeError(str(event.response))\r\n            finally:\r\n                audio.shutdown()\r\n\r\ntry:\r\n    asyncio.run(main())\r\nexcept KeyboardInterrupt:\r\n    pass<\/code><\/pre>\n<p>Voice Live supports more than 600 neural voices; you can <a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/speech-service\/voice-live-how-to#audio-output-through-azure-text-to-speech\">explore the standard, HD, and custom options<\/a> and substitute the voice that fits your experience. Beyond voice choice, Voice Live includes real-time audio processing features for natural turn-taking and clearer input. Server-side voice activity detection (VAD) recognizes when I start and stop speaking; the <code>speech_started<\/code> handler then stops pending playback so I can interrupt the agent naturally. Echo cancellation prevents speaker output from feeding back into the microphone, while deep noise suppression reduces background noise. Together, these features enable more natural turn-taking in noisy, speaker-enabled scenarios such as customer support, field service, and in-vehicle assistants.<\/p>\n<p>Sample output:<\/p>\n<p><!-- WordPress publishing: Upload audio\/voice-live-hosted-agent-sample.mp3 to the Foundry media library, then replace the placeholder URL below with the uploaded media URL. --><\/p>\n<p><audio class=\"wp-audio-shortcode\" id=\"audio-2862-1\" preload=\"none\" style=\"width: 100%;\" controls=\"controls\"><source type=\"audio\/mpeg\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/09\/voice-live-hosted-agent-sample.mp3?_=1\" \/><a href=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/09\/voice-live-hosted-agent-sample.mp3\">https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/09\/voice-live-hosted-agent-sample.mp3<\/a><\/audio><\/p>\n<p>Learn more: <a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/speech-service\/how-to-voice-live-hosted-agent-integration\">Voice Live hosted-agent integration<\/a>, <a href=\"https:\/\/learn.microsoft.com\/azure\/ai-services\/speech-service\/how-to-voice-live-hosted-agent-integration#use-voice-live-with-a-responses-protocol-agent\">Responses-protocol setup<\/a>, <a href=\"https:\/\/github.com\/microsoft-foundry\/foundry-samples\/blob\/main\/samples\/python\/hosted-agents\/bring-your-own\/voicelive\/client\/voicelive_client.py\">shared Python voice client<\/a>, and <a href=\"https:\/\/github.com\/microsoft-foundry\/voicelive-samples\/blob\/main\/python\/voice-live-quickstarts\/agents-quickstart.py\">Voice Live Python quickstart<\/a>.<\/p>\n<p>You can delete the deployed agent using its agent name:<\/p>\n<pre><code class=\"language-bash\">azd ai agent delete openai-agents-router-demo<\/code><\/pre>\n<p>Stuck? See <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/how-to\/deploy-hosted-agent-code#troubleshooting\">Hosted Agent troubleshooting<\/a>, including help with active sessions that block deletion.<\/p>\n<h4>Run within your network boundary<\/h4>\n<p>If your agent needs private access to storage, databases, or Key Vault, plan its <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/concepts\/agents-networking-deep-dive\">VNet integration<\/a> alongside the deployment. Subnet capacity, DNS, private endpoints, and outbound access all affect which resources it can reach.<\/p>\n<h4>Get started<\/h4>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-primary\" href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/quickstarts\/quickstart-hosted-agent\" target=\"_blank\" rel=\"noopener\">Create a Hosted Agent<\/a><\/div>\n<ul>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/how-to\/vs-code-agents-workflow-pro-code\">Create an agent with Foundry Toolkit<\/a> with Foundry Toolkit.<\/li>\n<li><a href=\"https:\/\/github.com\/microsoft-foundry\/foundry-samples\/tree\/main\/samples\/python\/hosted-agents\/bring-your-own\/invocations\/github-copilot\">Start from code<\/a> with the Python Copilot SDK sample.<\/li>\n<li><a href=\"#create-an-agent-with-the-cli\">Use the CLI<\/a> with the OpenAI Agents SDK and Model Router example above.<\/li>\n<\/ul>\n<p>Runtime support varies by language. Check the <a href=\"#hosted-agents-and-toolboxes-move-to-stable-clients\">stable-client changes<\/a> and <a href=\"#runtime-requirements-move-forward\">runtime requirements<\/a> before migrating an existing agent.<\/p>\n<h3>Take tool authentication out of agent code with Toolboxes \u2014 generally available (GA)<\/h3>\n<p>Toolboxes give agents one MCP-compatible endpoint while Foundry manages tool authentication and credentials outside agent code. Teams can define integrations once, then version, share, and govern them across agents.<\/p>\n<p>Agent skills and tool search\u2014both in public preview\u2014package reusable instructions and workflows, while tool search finds relevant tools at runtime. Individual tools still have their own availability and access requirements.<\/p>\n<p><a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/how-to\/tools\/tool-search\">Tool Search<\/a> keeps larger Toolboxes practical. Instead of loading every tool definition on each turn, the agent searches the collection and adds only the tools relevant to the task. That reduces token use, context clutter, and selection from an overcrowded tool list.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-primary\" href=\"https:\/\/microsoft-foundry.github.io\/forgebook\/notebook\/mastering-foundry-toolbox\/\" target=\"_blank\" rel=\"noopener\">Try the Toolbox Recipe<\/a><\/div>\n<ul>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/quickstarts\/quickstart-toolbox-agent\">Build a Toolbox and use it with a hosted agent<\/a>.<\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/concepts\/toolbox-overview\">Explore the Toolbox architecture and supported tools<\/a>.<\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/foundry\/building-agents-that-act-on-your-behalf-with-toolboxes-in-foundry\/\">Configure user delegation and authentication<\/a>.<\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/how-to\/tools\/skills\">Create and attach Agent Skills<\/a>.<\/li>\n<\/ul>\n<hr \/>\n<h2>Foundry Models<\/h2>\n<h3>Expand Azure-hosted Claude inference with tools<\/h3>\n<p>In Foundry, <strong>Hosted on Azure<\/strong> describes where Claude inference runs: Anthropic operates the model service on Azure infrastructure, with prompts and completions remaining within Azure. <strong>Hosted on Anthropic<\/strong> runs inference on Anthropic infrastructure and offers a broader model catalog and API surface.<\/p>\n<p>This announcement closes five of the capability gaps between those options:<\/p>\n<table>\n<thead>\n<tr>\n<th>Capability<\/th>\n<th>Hosted on Azure<\/th>\n<th>Hosted on Anthropic<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Structured outputs<\/td>\n<td>\u2705 <strong>New<\/strong><\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Web search<\/td>\n<td>\u2705 <strong>New<\/strong><\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Web fetch<\/td>\n<td>\u2705 <strong>New<\/strong><\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>MCP connector <strong>(beta)<\/strong><\/td>\n<td>\u2705 <strong>New<\/strong><\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Tool search<\/td>\n<td>\u2705 <strong>New<\/strong><\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Advanced web search and fetch options<\/td>\n<td>\u2014<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Code execution<\/td>\n<td>\u2014<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Agent Skills<\/td>\n<td>\u2014<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Programmatic tool calling<\/td>\n<td>\u2014<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Files API<\/td>\n<td>\u2014<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td>Message Batches API<\/td>\n<td>\u2014<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<tr>\n<td>Server-side fallback<\/td>\n<td>\u2014<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u2705 Available \u00b7 \u2014 Not supported<\/p>\n<p>Check the <a href=\"https:\/\/platform.claude.com\/docs\/en\/build-with-claude\/claude-in-microsoft-foundry\">current support boundaries<\/a> before choosing a hosting option. When we have firmer plans and ETAs for the unsupported capabilities, we&#8217;ll share them.<\/p>\n<h4>Start with structured outputs<\/h4>\n<p>For a useful first test, I gave Claude this synthetic claim document and asked it for the policy number, loss type, and whether the claim should be escalated to an adjuster.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/09\/synthetic-claim.webp\" alt=\"Synthetic property damage claim showing policy C-123, storm damage, active water intrusion, and an escalation requirement\" \/><\/p>\n<p>The document contains no real customer data. Install the Anthropic SDK, Azure Identity, and Pydantic:<\/p>\n<pre><code class=\"language-bash\">pip install \"anthropic&gt;=0.74.0,&lt;1\" azure-identity pydantic<\/code><\/pre>\n<p>Authenticate with Azure CLI or another credential supported by <code>DefaultAzureCredential<\/code>, then save the sample document as <code>synthetic-claim.png<\/code> beside the script. Replace the resource name in this example with yours, then run:<\/p>\n<pre><code class=\"language-python\">import base64\r\nfrom pathlib import Path\r\n\r\nfrom anthropic import AnthropicFoundry\r\nfrom azure.identity import DefaultAzureCredential, get_bearer_token_provider\r\nfrom pydantic import BaseModel, ConfigDict\r\n\r\nclass ClaimIntake(BaseModel):\r\n    model_config = ConfigDict(extra=\"forbid\")\r\n\r\n    policy_number: str\r\n    loss_type: str\r\n    escalate_to_adjuster: bool\r\n\r\nclient = AnthropicFoundry(\r\n    resource=\"your-foundry-resource\",  # Name only, without .services.ai.azure.com\r\n    azure_ad_token_provider=get_bearer_token_provider(\r\n        DefaultAzureCredential(),\r\n        \"https:\/\/ai.azure.com\/.default\",\r\n    ),\r\n)\r\n\r\nresponse = client.beta.messages.parse(\r\n    model=\"claude-haiku-4-5\",\r\n    max_tokens=128,\r\n    messages=[\r\n        {\r\n            \"role\": \"user\",\r\n            \"content\": [\r\n                {\r\n                    \"type\": \"image\",\r\n                    \"source\": {\r\n                        \"type\": \"base64\",\r\n                        \"media_type\": \"image\/png\",\r\n                        \"data\": base64.b64encode(Path(\"synthetic-claim.png\").read_bytes()).decode(),\r\n                    },\r\n                },\r\n                {\r\n                    \"type\": \"text\",\r\n                    \"text\": \"Extract the policy number, loss type, and adjuster escalation decision from this insurance claim.\",\r\n                },\r\n            ],\r\n        }\r\n    ],\r\n    output_config={\r\n        \"format\": {\r\n            \"type\": \"json_schema\",\r\n            \"schema\": ClaimIntake.model_json_schema(),\r\n        }\r\n    },\r\n)\r\n\r\nclaim = ClaimIntake.model_validate_json(response.content[0].text)\r\nprint(claim.model_dump())<\/code><\/pre>\n<p>I also sent the same image and prompt through the standard Messages API. Here are the observed responses:<\/p>\n<table>\n<thead>\n<tr>\n<th>Without structured outputs<\/th>\n<th>With structured outputs<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Policy Number:<\/strong> C-123<\/p>\n<p><strong>Type of Loss:<\/strong> Storm \u2014 Hail and High-Wind Event (Cat 3 system)<\/p>\n<p><strong>Escalation Required:<\/strong> Yes \u2014 This claim requires escalation due to active water intrusion, which constitutes an imminent damage condition, and the scope of loss may exceed field-adjuster authorization thresholds.<\/td>\n<td>\n<pre><code>{\r\n  \"policy_number\": \"C-123\",\r\n  \"loss_type\": \"STORM \u2014 Hail and High-Wind Event\",\r\n  \"escalate_to_adjuster\": true\r\n}<\/code><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Both responses got the claim right. The difference is what your application receives: free-form Markdown that you still need to interpret, or schema-constrained JSON that Pydantic can validate immediately. Structured outputs guarantee the response shape and types, not the accuracy of extracted values, so validate important identifiers and routing decisions against your business rules.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-primary\" href=\"https:\/\/devblogs.microsoft.com\/foundry\/five-new-claude-capabilities-now-available-in-foundry\/\" target=\"_blank\" rel=\"noopener\">Try the Claude Tool Examples<\/a><\/div>\n<h3>Match each prompt to the right model<\/h3>\n<p>Choosing one model for every request means paying for more capability than simple prompts need or accepting lower quality on harder ones. <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/openai\/concepts\/model-router\">Model Router<\/a> gives your application one deployment and selects an eligible model for each request based on your preferred balance of quality and cost.<\/p>\n<p>We&#8217;ve expanded Model Router&#8217;s Global Standard availability to 28 regions and Data Zone Standard to 21. Router version <code>2025-11-18<\/code> adds the Azure OpenAI GPT-5.6 Sol, Terra, and Luna series alongside Anthropic&#8217;s Claude Opus 4.8. Eligible Anthropic and open-source models can also join OpenAI models for agentic requests, where model and tool compatibility allow it.<\/p>\n<p>You don&#8217;t need to deploy the underlying models separately, except for Claude models. Deploy the Claude models you want Model Router to consider, then it can select among them based on your routing mode.<\/p>\n<p>The refresh removes the retired <code>gpt-5-chat<\/code>, <code>gpt-5.2-chat<\/code>, <code>gpt-5.3-chat<\/code>, <code>DeepSeek-V3.1<\/code>, and <code>claude-opus-4.1<\/code> models from the routing pool. Earlier Model Router versions do not preserve access to a retired underlying model.<\/p>\n<p>If you configure a custom subset, check it for those names. Then run a fixed set of representative requests and compare answer quality, latency, and cost. A changed routing pool is worth an evaluation even when your application code does not change.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-primary\" href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/openai\/how-to\/model-router\" target=\"_blank\" rel=\"noopener\">Try Model Router<\/a><\/div>\n<ul>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/foundry-models\/whats-new-model-router#august-2026\">Review the August Model Router changes<\/a>.<\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/openai\/how-to\/evaluate-model-router\">Evaluate Model Router for your workload<\/a>.<\/li>\n<\/ul>\n<h3>Models added in July and August<\/h3>\n<p>Foundry&#8217;s model catalog also expanded across reasoning, realtime audio, transcription, and image generation:<\/p>\n<table>\n<thead>\n<tr>\n<th>Released<\/th>\n<th>Models<\/th>\n<th>Status<\/th>\n<th>What they add<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>July 7<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/gpt-realtime-2.1\"><code>gpt-realtime-2.1<\/code><\/a>, <a href=\"https:\/\/ai.azure.com\/catalog\/models\/gpt-realtime-2.1-mini\"><code>gpt-realtime-2.1-mini<\/code><\/a><\/td>\n<td>Preview<\/td>\n<td>Improved silence and noise handling for realtime audio<\/td>\n<\/tr>\n<tr>\n<td>July 9<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/gpt-5.6-sol\"><code>gpt-5.6-sol<\/code><\/a>, <a href=\"https:\/\/ai.azure.com\/catalog\/models\/gpt-5.6-terra\"><code>gpt-5.6-terra<\/code><\/a>, <a href=\"https:\/\/ai.azure.com\/catalog\/models\/gpt-5.6-luna\"><code>gpt-5.6-luna<\/code><\/a><\/td>\n<td>GA<\/td>\n<td>Three capability and cost tiers with text and image input<\/td>\n<\/tr>\n<tr>\n<td>July 24<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/claude-opus-5\"><code>claude-opus-5<\/code><\/a><\/td>\n<td>GA<\/td>\n<td>Anthropic&#8217;s most capable model for complex reasoning and coding<\/td>\n<\/tr>\n<tr>\n<td>July 28<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/FW-Kimi-K3\"><code>FW-Kimi-K3<\/code><\/a><\/td>\n<td>GA<\/td>\n<td>Native vision, a one-million-token context window, and long-horizon coding and reasoning<\/td>\n<\/tr>\n<tr>\n<td>July 29<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/gpt-live-transcribe\"><code>gpt-live-transcribe<\/code><\/a><\/td>\n<td>GA<\/td>\n<td>Streaming transcription through the Realtime API<\/td>\n<\/tr>\n<tr>\n<td>July 31<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/MAI-Image-2.6\"><code>MAI-Image-2.6<\/code><\/a>, <a href=\"https:\/\/ai.azure.com\/catalog\/models\/MAI-Image-2.6-Flash\"><code>MAI-Image-2.6-Flash<\/code><\/a><\/td>\n<td>Preview<\/td>\n<td>Image generation and editing, with quality and faster lower-cost variants<\/td>\n<\/tr>\n<tr>\n<td>August 11<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/MAI-Code-1.1-Flash\"><code>MAI-Code-1.1-Flash<\/code><\/a><\/td>\n<td>Preview<\/td>\n<td>Faster, lower-cost coding assistance for everyday engineering tasks<\/td>\n<\/tr>\n<tr>\n<td>August 26<\/td>\n<td><a href=\"https:\/\/ai.azure.com\/catalog\/models\/grok-4.6\"><code>grok-4.6<\/code><\/a><\/td>\n<td>Preview<\/td>\n<td>xAI&#8217;s latest Grok model in Foundry<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><code>gpt-chat-latest<\/code> also moved to version <code>2026-08-06<\/code>, expanding its context window to 400,000 tokens. Because it is a rolling preview alias rather than a new model, I have kept it outside the release table.<\/p>\n<p>You can now browse and compare models in the new Foundry model catalog without signing in.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-primary\" href=\"https:\/\/ai.azure.com\/catalog\/models?flight=unauth_catalog_filtering\" target=\"_blank\" rel=\"noopener\">Explore the Model Catalog<\/a><\/div>\n<h3>Run models on Azure Local infrastructure<\/h3>\n<p>For teams deploying models to their own Azure Local hardware, preview extension <a href=\"https:\/\/learn.microsoft.com\/azure\/azure-sovereign-clouds\/private\/foundry-local\/whats-new\"><code>2607<\/code><\/a> adds local model evaluation, multi-GPU parallelism for vLLM, and improved automatic GPU inference tuning. This update is for the Azure Local extension\u2014not the desktop Foundry Local SDK\u2014and requires an Azure Local environment and preview access.<\/p>\n<hr \/>\n<h2>Developer tools, APIs, SDKs, and CLI<\/h2>\n<h3>Foundry DevPack preview installers<\/h3>\n<p>Setting up a Foundry development environment can mean installing Azure CLI and <code>azd<\/code>, adding Foundry extensions, and connecting Foundry guidance to the coding tools you already use. The <a href=\"https:\/\/github.com\/microsoft\/foundry-dev-tools\/releases\/tag\/devpack-installer-0.1.3\">Foundry DevPack <code>0.1.3<\/code> preview<\/a> brings that setup into one installer for Windows, macOS, and Linux on x64 and Arm64.<\/p>\n<p>It installs Azure CLI, <code>azd<\/code>, the <code>microsoft.foundry<\/code> and <code>azure.ai.agents<\/code> extensions, and the Microsoft Foundry agent-development skill. If VS Code, GitHub Copilot CLI, or Claude Code is already installed, DevPack also connects the corresponding Foundry extension, plugin, or skill. It does not install those host applications.<\/p>\n<p>Because this is a preview release, try it on a development machine before adopting it across your team.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-secondary\" href=\"https:\/\/github.com\/microsoft\/foundry-dev-tools\/releases\/tag\/devpack-installer-0.1.3\" target=\"_blank\" rel=\"noopener\">Get the August DevPack preview<\/a><\/div>\n<h3>Choose the right SDK surface<\/h3>\n<p>The <strong>Foundry SDK<\/strong> is a family of project data-plane packages, not another name for the OpenAI SDK. Start with the surface that owns the operation:<\/p>\n<ul>\n<li>Use the <strong>Foundry Projects SDK<\/strong> to work with project-scoped resources such as agents, Toolboxes, evaluations, connections, datasets, and indexes.<\/li>\n<li>Use the <strong>OpenAI SDK<\/strong> for OpenAI-compatible inference APIs. A Foundry project client can create a configured OpenAI client, but the packages and API surfaces remain distinct.<\/li>\n<li>Use <strong>Azure Resource Manager, Bicep, or Terraform<\/strong> to provision Foundry resources, projects, deployments, networking, and role assignments. That control plane has a separate release cycle.<\/li>\n<\/ul>\n<p>The July and August releases matter less for their version numbers than for three changes you may need to act on.<\/p>\n<h4>Hosted Agents and Toolboxes move to stable clients<\/h4>\n<p>Python <code>azure-ai-projects<\/code> <code>2.3.0<\/code> and JavaScript\/TypeScript <code>@azure\/ai-projects<\/code> <code>2.3.0<\/code>, both released in July, moved core Hosted Agent and Toolbox operations out of beta. If you&#8217;re upgrading from <code>2.2.x<\/code> or earlier, update <code>project.beta.agents<\/code> to <code>project.agents<\/code> and <code>project.beta.toolboxes<\/code> to <code>project.toolboxes<\/code>.<\/p>\n<p>Java keeps hosted-agent management in the separate <code>com.azure:azure-ai-agents<\/code> package. For .NET, <code>Azure.AI.Projects<\/code> <code>2.0.1<\/code> remains the stable Projects package, while the <code>3.0.0-beta.1<\/code> line contains newer preview management APIs.<\/p>\n<h4>Evaluation jobs become long-running operations<\/h4>\n<p>Evaluation and data-generation job creation moved to long-running operations in Python <code>2.4.0<\/code>, JavaScript\/TypeScript <code>2.4.0<\/code>, Java Agents <code>2.3.0<\/code>, and the .NET <code>3.0.0-beta.1<\/code> preview. Code that inspected a job result immediately must instead wait for submission or completion using the language&#8217;s polling pattern.<\/p>\n<p>Test the full submission-to-completion path before upgrading an evaluation workflow\u2014not just client construction.<\/p>\n<h4>Runtime requirements move forward<\/h4>\n<p>By the end of August, Python <code>azure-ai-projects<\/code> <code>2.5.0<\/code> required Python 3.10 or later and <code>openai&gt;=3.0.0<\/code>. JavaScript\/TypeScript raised its minimum to Node.js 22 in <code>2.3.0<\/code>. Treat either upgrade path as a dependency migration and review your lockfile, custom HTTP clients, and CI runtime before rollout.<\/p>\n<p>Review the <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/how-to\/develop\/sdk-overview\">Foundry SDK overview<\/a> for the client boundaries, then use the <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-python\/blob\/main\/sdk\/ai\/azure-ai-projects\/CHANGELOG.md\">Python<\/a>, <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-js\/blob\/main\/sdk\/ai\/ai-projects\/CHANGELOG.md\">JavaScript\/TypeScript<\/a>, <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-java\/blob\/main\/sdk\/ai\/azure-ai-projects\/CHANGELOG.md\">Java<\/a>, or <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/blob\/main\/sdk\/ai\/Azure.AI.Projects\/CHANGELOG.md\">.NET<\/a> changelog for the package you ship.<\/p>\n<hr \/>\n<p>July and August gave us more capable models and agent APIs, plus clearer paths from local development to hosted deployment. Pick the update that removes the most friction from a workflow you already own, try it against a real task, and tell us what you build\u2014or where we still need to improve.<\/p>\n<h2>Resources &amp; Community<\/h2>\n<ul>\n<li><a href=\"https:\/\/aka.ms\/forgebook\">Foundry Forgebook<\/a>\u2014Your cookbook for building AI with Microsoft Foundry.<\/li>\n<li>Join the Foundry community\u2014<a href=\"https:\/\/aka.ms\/foundry\/discord\">Discord<\/a> and <a href=\"https:\/\/aka.ms\/foundry\/forum\">GitHub Discussions<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Catch up on July and August in Microsoft Foundry: stable Hosted Agent and Toolbox SDK paths, Claude tools on Azure-hosted deployments, Model Router updates, local inference improvements, and the SDK migrations worth checking before you upgrade.<\/p>\n","protected":false},"author":185793,"featured_media":2863,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,27],"tags":[25,7,38,157,2,55,103,104,170,28],"class_list":["post-2862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-foundry","category-whats-new","tag-agents","tag-claude","tag-foundry-local","tag-hosted-agents","tag-microsoft-foundry","tag-model-router","tag-models","tag-sdk","tag-toolboxes","tag-whats-new"],"acf":[],"blog_post_summary":"<p>Catch up on July and August in Microsoft Foundry: stable Hosted Agent and Toolbox SDK paths, Claude tools on Azure-hosted deployments, Model Router updates, local inference improvements, and the SDK migrations worth checking before you upgrade.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/users\/185793"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/comments?post=2862"}],"version-history":[{"count":2,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2862\/revisions"}],"predecessor-version":[{"id":2884,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2862\/revisions\/2884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media\/2863"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media?parent=2862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/categories?post=2862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/tags?post=2862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}