{"id":2104,"date":"2026-04-22T10:30:43","date_gmt":"2026-04-22T17:30:43","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/foundry\/?p=2104"},"modified":"2026-04-24T08:46:05","modified_gmt":"2026-04-24T15:46:05","slug":"introducing-toolboxes-in-foundry","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/foundry\/introducing-toolboxes-in-foundry\/","title":{"rendered":"Introducing Toolboxes in Foundry"},"content":{"rendered":"<h2 aria-level=\"3\"><span data-contrast=\"none\">Available in Public Preview Today <\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Toolbox is a new way to\u00a0<strong>curate, configure, and reuse<\/strong> tools across all of your AI agents without rewiring them every time from Foundry.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Today, teams build agents across different frameworks and runtimes. Each agent often wires tools directly, with its own authentication, credentials, and\u00a0integration\u00a0code. As organizations\u00a0scale\u00a0agent usage, this leads to duplicated work, inconsistent behavior, and fragile production deployments.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Toolbox fixes this by letting you define a <strong>curated set of tools\u00a0once<\/strong>, <strong>manage them centrally in Foundry<\/strong>, and <strong>expose them through\u00a0a unified endpoint<\/strong>\u00a0that\u00a0any agent can consume.<\/span><\/p>\n<h4><em>Why are tools messy today\u00a0<\/em><\/h4>\n<p>Consider this scenario: developer onboarding. You\u2019re building an agent that provisions an environment for a new engineer. It creates an Entra ID account, adds access to GitHub repos, spins up cloud resources, creates onboarding tasks in Azure DevOps, and sends a welcome message in Teams.\u00a0 Sounds straightforward, until you look closer.<\/p>\n<p>That single agent depends on five tools. Five different tool types (APIs, MCP servers, skills, connectors, flows). Five different authentication models. Five different owning teams; each with their own expectations for how their tools should be called. Now multiply that across every agent your organization is building.\nTeams re\u2011implement the same tools. Credentials are duplicated. Governance is inconsistent or missing entirely. There\u2019s little visibility into what tools exist, who is using them, or whether they\u2019re governed at all. Developers stall, not because the models aren\u2019t capable, but because tool integration has become the bottleneck. The infrastructure already exists. Enterprises have gateways, credential vaults, policies, and observability. What\u2019s missing is a developer experience that packages this infrastructure into something reusable, discoverable, and governed by default.<\/p>\n<p>That\u2019s what Foundry Toolbox is designed to provide.<\/p>\n<p><figure id=\"attachment_2129\" aria-labelledby=\"figcaption_attachment_2129\" class=\"wp-caption alignnone\" ><a href=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/before-after-architecture-New.webp\"><img decoding=\"async\" class=\" wp-image-2129\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/before-after-architecture-New-300x233.webp\" alt=\"before after architecture New image\" width=\"655\" height=\"509\" srcset=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/before-after-architecture-New-300x233.webp 300w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/before-after-architecture-New-1024x796.webp 1024w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/before-after-architecture-New-768x597.webp 768w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/before-after-architecture-New-1536x1195.webp 1536w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/before-after-architecture-New.webp 1800w\" sizes=\"(max-width: 655px) 100vw, 655px\" \/><\/a><figcaption id=\"figcaption_attachment_2129\" class=\"wp-caption-text\"><br \/>Stop wiring every agent to every tool.<\/figcaption><\/figure><\/p>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Toolbox Overview<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h2>\n<p><strong><i>Discover. Build. Consume. Govern.\u00a0<\/i>\u00a0<\/strong><\/p>\n<p><span data-contrast=\"none\">What is a Toolbox: A<\/span><span data-contrast=\"auto\">\u00a0toolbox is a reusable bundle of tools, managed in Foundry, that agents consume through a single, consistent interface.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Toolbox<\/span><span data-contrast=\"none\">es cover the full tool lifecycle through four pillars: Find the right tools. Build a toolbox. Consume a toolbox from any agent. Govern everything that flows through it.\u00a0<\/span><span data-contrast=\"none\">\u00a0In\u00a0public\u00a0preview today, the focus is on\u00a0<\/span><b><span data-contrast=\"none\">Build<\/span><\/b><span data-contrast=\"none\">\u00a0and\u00a0<\/span><b><span data-contrast=\"none\">Consume<\/span><\/b><span data-contrast=\"none\">; the two steps that remove friction immediately.<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/foundry-toolbox-marketecture-Latest-1.webp\"><img decoding=\"async\" class=\"alignnone wp-image-2131\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/foundry-toolbox-marketecture-Latest-1-300x200.webp\" alt=\"foundry toolbox marketecture Latest image\" width=\"755\" height=\"503\" srcset=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/foundry-toolbox-marketecture-Latest-1-300x200.webp 300w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/foundry-toolbox-marketecture-Latest-1-1024x683.webp 1024w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/foundry-toolbox-marketecture-Latest-1-768x512.webp 768w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/foundry-toolbox-marketecture-Latest-1-1536x1024.webp 1536w, https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/foundry-toolbox-marketecture-Latest-1.webp 1800w\" sizes=\"(max-width: 755px) 100vw, 755px\" \/><\/a><\/p>\n<table style=\"font-weight: 400; width: 86.0321%; height: 259px;\" data-tablestyle=\"MsoNormalTable\" data-tablelook=\"1696\" aria-rowcount=\"5\">\n<tbody>\n<tr style=\"height: 23px;\" aria-rowindex=\"1\">\n<td style=\"height: 23px; width: 13.2244%;\" data-celllook=\"0\"><b><span data-contrast=\"auto\">Pillar<\/span><\/b><span data-ccp-props=\"{&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 23px; width: 31.4731%;\" data-celllook=\"0\"><b><span data-contrast=\"auto\">What it is<\/span><\/b><span data-ccp-props=\"{&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 23px; width: 40.8151%;\" data-celllook=\"0\"><b><span data-contrast=\"auto\">What it enables<\/span><\/b><span data-ccp-props=\"{&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr style=\"height: 47px;\" aria-rowindex=\"2\">\n<td style=\"height: 47px; width: 13.2244%;\" data-celllook=\"0\"><b><span data-contrast=\"auto\">Discover\u00a0<\/span><\/b><b><span data-contrast=\"auto\">(coming soon)<\/span><\/b><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 47px; width: 31.4731%;\" data-celllook=\"0\"><span data-contrast=\"auto\">The ability to find the right tools without manually browsing long catalogs or knowing where tools live.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 47px; width: 40.8151%;\" data-celllook=\"0\"><span data-contrast=\"auto\">Developers and agents can discover existing, approved tools instead of rebuilding them, reducing duplication and improving consistency.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr style=\"height: 47px;\" aria-rowindex=\"3\">\n<td style=\"height: 47px; width: 13.2244%;\" data-celllook=\"0\"><b><span data-contrast=\"auto\">Build<\/span><\/b>\n<b><span data-contrast=\"auto\">(Today)<\/span><\/b><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 47px; width: 31.4731%;\" data-celllook=\"0\"><span data-contrast=\"auto\">The ability to select tools into a\u00a0<\/span><b><span data-contrast=\"auto\">toolbox<\/span><\/b><span data-contrast=\"auto\">\u00a0\u2014 a named, reusable bundle of tools managed in Foundry.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 47px; width: 40.8151%;\" data-celllook=\"0\"><span data-contrast=\"auto\">Teams define tools once, configure authentication and access centrally, and publish a reusable toolbox that others can consume.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr style=\"height: 47px;\" aria-rowindex=\"4\">\n<td style=\"height: 47px; width: 13.2244%;\" data-celllook=\"0\"><b><span data-contrast=\"auto\">Consume<\/span><\/b>\n<b><span data-contrast=\"auto\">(Today)<\/span><\/b><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 47px; width: 31.4731%;\" data-celllook=\"0\"><span data-contrast=\"auto\">A\u00a0<\/span><b><span data-contrast=\"auto\">single,\u00a0MCP<\/span><\/b>\u2011<b><span data-contrast=\"auto\">compatible\u00a0endpoint<\/span><\/b><span data-contrast=\"auto\">\u00a0that exposes all tools in a toolbox to any agent runtime.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 47px; width: 40.8151%;\" data-celllook=\"0\"><span data-contrast=\"auto\">Agents connect once and dynamically discover and invoke all tools in the toolbox, without\u00a0per<\/span>\u2011<span data-contrast=\"auto\">tool\u00a0wiring or custom SDKs.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr style=\"height: 95px;\" aria-rowindex=\"5\">\n<td style=\"height: 95px; width: 13.2244%;\" data-celllook=\"0\"><b><span data-contrast=\"auto\">Govern<\/span><\/b><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">(coming soon)<\/span><\/b><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 95px; width: 31.4731%;\" data-celllook=\"0\"><span data-contrast=\"auto\">Centralized authentication and observability applied to all tool calls flowing through a toolbox.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<td style=\"height: 95px; width: 40.8151%;\" data-celllook=\"0\"><span data-contrast=\"auto\">Security and platform teams get consistent controls and visibility, while developers avoid stitching governance into every agent.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 aria-level=\"3\"><span data-contrast=\"none\">Build\u00a0\u2013 Curate Tools into Reusable Toolboxes<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">A toolbox is a named, reusable bundle of tools managed in Foundry.\u00a0You select tools, configure authentication, and publish the toolbox as a shared asset.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Tools you can include today:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Built-in tools:<\/span><\/b><span data-contrast=\"auto\">\u00a0Web Search, Code Interpreter, File Search, Azure AI Search<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"16\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Protocols:<\/span><\/b><span data-contrast=\"auto\">\u00a0Model Context Protocol (MCP), Agent-to-Agent (A2A),\u00a0OpenAPI<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Authentication is handled centrally using options like OAuth identity passthrough and Microsoft Entra managed\u00a0identity\u00a0\u00a0so,\u00a0individual agents\u00a0don\u2019t\u00a0manage credentials themselves.\u00a0\u00a0And any agent team can consume it without re-wiring the individual tools.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span data-contrast=\"none\">Consume &#8211; One\u00a0Endpoint, Any Agent\u00a0<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">When you build a toolbox, Foundry gives you a\u00a0unified\u00a0MCP-compatible endpoint\u00a0for the entire bundle.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><code><em>https:\/\/zava.services.ai.azure.com\/api\/projects\/&lt;project&gt;\/toolbox\/&lt;toolbox-name&gt;\/mcp?api-version=v1\u00a0<\/em><\/code><\/p>\n<p><span data-contrast=\"auto\">\u00a0With one endpoint, an agent can:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Discover and invoke all tools in the toolbox dynamically<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Span multiple protocols and auth models transparently<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"11\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Use a production-ready version while the toolbox continues to evolve<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Agents connect once; no per-tool wiring, no custom SDKs.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/Foundry-toolbox-ux.gif\"><img decoding=\"async\" class=\"alignnone wp-image-2111\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/04\/Foundry-toolbox-ux.gif\" alt=\"Foundry toolbox ux image\" width=\"990\" height=\"557\" \/><\/a><\/p>\n<h2 aria-level=\"3\"><span data-contrast=\"none\">Toolboxes are Foundry Homed, not Foundry-Bound<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h2>\n<p><i><span data-contrast=\"none\">Build once\u00a0consume\u00a0anywhere.<\/span><\/i><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">A common question we hear is:\u00a0<\/span><b><span data-contrast=\"auto\">\u201c<\/span><\/b><span data-contrast=\"auto\">Are we locked into Foundry\u00a0Agents?\u201d<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">No,\u00a0and\u00a0that\u2019s\u00a0a deliberate design choice.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Toolboxes are created and governed in Foundry, where teams configure tools and credentials. But the consumption surface is open. Any\u00a0agent\u00a0runtime that can consume an MCP endpoint can use a toolbox.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This includes:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"18\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Custom agents: Built with Microsoft Agent Framework,\u00a0LangGraph, or your own code<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"18\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Coding agents: GitHub Copilot, Claude Code, and MCP-enabled IDEs<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">You can reuse tool investments across runtimes without duplicating configuration or governance.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h2><span data-contrast=\"none\">Getting started with Toolbox in Foundry<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">You can be up and running with Toolbox in just a few steps.<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Step 1: Set up your Foundry project client<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">A Toolbox lives inside a Foundry project. Create an <code>AIProjectClient <\/code>using your project endpoint and Azure credentials.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-py\"><span style=\"font-size: 10pt;\"><code class=\"language-py\">from azure.identity import DefaultAzureCredential \r\nfrom azure.ai.projects import AIProjectClient \r\nimport os  \r\nclient = AIProjectClient( \r\n\u202f\u202f\u202f endpoint=os.environ[\"FOUNDRY_PROJECT_ENDPOINT\"], \r\n\u202f\u202f\u202f credential=DefaultAzureCredential() \r\n) <\/code><\/span><\/pre>\n<p><span class=\"TextRun SCXW224651245 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW224651245 BCX8\">This sets up a connection to your Foundry project and handles authentication for local development, managed identity, or CI automatically.<\/span><\/span><span class=\"EOP Selected SCXW224651245 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Step 2: Build a toolbox<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Next, create a toolbox and add the tools your agents need.<\/span>\n<span data-contrast=\"auto\">In this example, the toolbox combines:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"21\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Web search over approved domains<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"21\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Azure AI Search over internal documentation<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"21\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">A GitHub MCP server for\u00a0taking action<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<\/ul>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\"><span style=\"font-size: 10pt;\">toolbox_version = client.beta.toolboxes.create_toolbox_version( \r\ntoolbox_version = client.beta.toolboxes.create_toolbox_version( \r\n    toolbox_name=\"customer-feedback-triaging-toolbox\", \r\n    description=\"Search public and internal documentation to triage customer feedback, then respond to issues or create tasks in GitHub. \", \r\n    tools=[ \r\n        { \r\n        \"type\": \"web_search\", \r\n        \"description\": \"Use this tool to retrieve public documentation in our official websites\". \r\n  \"custom_search_configuration\": { \r\n          \"project_connection_id\": \"&lt;BING_CONNECTION_NAME&gt;\", \r\n          \"instance_name\": \"&lt;BING_INSTANCE_NAME&gt;\" \r\n        } \r\n        },\r\n        { \r\n        \"type\": \"azure_ai_search\", \r\n        \"name\": \"product-manuals-ai-search\", \r\n        \"description\": \"Search internal product documentation\", \r\n        \"azure_ai_search\": { \r\n            \"indexes\": [ \r\n            { \r\n                \"index_name\": \"&lt;INDEX_NAME&gt;\", \r\n                \"project_connection_id\": \"&lt;CONNECTION_ID&gt;\" \r\n           } \r\n            ] \r\n        } \r\n        }, \r\n        { \r\n        \"type\": \"mcp\", \r\n        \"server_label\": \"github\", \r\n        \"server_url\": \"https:\/\/api.githubcopilot.com\/mcp\u201d,\r\n        \"project_connection_id\":  \"&lt;CONNECTION_ID&gt;\" \r\n        } \r\n    ], \r\n) \r\nprint(f\"Created toolbox: {toolbox_version.name}, version: {toolbox_version.version}\") \r\nprint(toolbox_version.mcp_endpoint)<\/span> <\/code><\/pre>\n<p><b><span data-contrast=\"auto\">What happened here<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"19\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">A Toolbox and its first version were created<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"19\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Tools spanning web search, internal search, and MCP servers were registered<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"19\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Authentication for each tool is handled by Foundry (OAuth, Microsoft Entra, etc.)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Foundry gives you a\u00a0unified\u00a0endpoint to\u00a0your toolbox to\u00a0test with:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/zava.services.ai.azure.com\/api\/projects\/foundry-tools\/toolbox\/customer-feedback-triaging-toolbox\/versions\/1\/mcp\"><span data-contrast=\"none\">https:\/\/zava.services.ai.azure.com\/api\/projects\/foundry-tools\/toolbox\/customer-feedback-triaging-toolbox\/versions\/1\/mcp?api-version=v1<\/span><\/a><\/p>\n<p><b><span data-contrast=\"auto\">Step 3: Attach the toolbox to an agent<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">You can use Toolbox with\u00a0any agent framework.\u00a0Here\u2019s\u00a0an example using\u00a0Microsoft Agent Framework with a\u00a0Foundry<\/span>\u2011<span data-contrast=\"auto\">hosted\u00a0model.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\"><span style=\"font-size: 10pt;\">import asyncio\r\nimport logging\r\nimport os\r\nimport pathlib\r\nimport re\r\nfrom urllib.parse import urlparse as _urlparse\r\n\r\nimport httpx\r\nfrom dotenv import load_dotenv\r\n\r\nload_dotenv(override=False)\r\n\r\nfrom azure.identity import DefaultAzureCredential, get_bearer_token_provider\r\nfrom azure.ai.agentserver.responses import (\r\n    ResponseContext,\r\n    ResponseEventStream,\r\n    ResponsesAgentServerHost,\r\n    ResponsesServerOptions,\r\n    get_input_expanded,\r\n)\r\nfrom azure.ai.agentserver.responses.models import CreateResponse\r\nfrom agent_framework import MCPStreamableHTTPTool\r\nfrom agent_framework.azure import AzureOpenAIChatClient\r\nfrom agent_framework.observability import enable_instrumentation\r\n\r\nenable_instrumentation(enable_sensitive_data=True)<\/span><\/code><\/pre>\n<p><span data-contrast=\"auto\">What this sets up<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">An agent backed by a\u00a0Foundry<\/span>\u2011<span data-contrast=\"auto\">hosted\u00a0model<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Authentication handled through Microsoft Entra<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">A Microsoft Agent Framework agent ready to use tools<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">Tracing enabled by default<\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Step 4: Attach the Toolbox to your agent<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Now, connect your Toolbox endpoint to the\u00a0agent\u00a0so it has access to all tools defined in the Toolbox.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-py\"><span style=\"font-size: 10pt;\"><code class=\"language-py\">AGENT_NAME = os.getenv(\"AGENT_NAME\")\r\nlogger = logging.getLogger(AGENT_NAME)\r\n\r\nTOOLBOX_ENDPOINT =os.getenv(\"FOUNDRY_TOOLBOX_ENDPOINT\")\r\n\r\n_TOOLBOX_FEATURES = \"Toolboxes=V1Preview\"\r\n\r\nclass _ToolboxAuth(httpx.Auth):\r\n    \"\"\"httpx Auth that injects a fresh bearer token on every request.\r\n\r\n    Uses ``get_bearer_token_provider`` so the underlying credential handles\r\n    caching and proactive token refresh automatically.\r\n    \"\"\"\r\n    def __init__(self, token_provider):\r\n        self._get_token = token_provider\r\n    def auth_flow(self, request):\r\n        request.headers[\"Authorization\"] = f\"Bearer {self._get_token()}\"\r\n        yield request\r\n\r\nSYSTEM_PROMPT = \"\"\"You are a helpful assistant with access to Microsoft Foundry toolbox tools. Use the available tools to help answer user questions accurately and concisely.\"\"\"\r\n\r\ndef _create_agent():\r\n    \"\"\"Create and return the MAF agent with toolbox tools.\"\"\"\r\n    credential = DefaultAzureCredential()\r\n\r\n    chat_client = AzureOpenAIChatClient(\r\n        endpoint=azure_openai_endpoint,\r\n        deployment_name=AZURE_AI_MODEL_DEPLOYMENT_NAME,\r\n        credential=credential,\r\n    )\r\n\r\n    logger.info(\"Connecting to toolbox: %s\", TOOLBOX_ENDPOINT)\r\n    token_provider = get_bearer_token_provider(credential, \"https:\/\/ai.azure.com\/.default\")\r\n    extra_headers = {\"Foundry-Features\": _TOOLBOX_FEATURES} if _TOOLBOX_FEATURES else {}\r\n    http_client = httpx.AsyncClient(\r\n        auth=_ToolboxAuth(token_provider),\r\n        headers=extra_headers,\r\n        timeout=120.0,\r\n    )\r\n\r\n    mcp_tool = MCPStreamableHTTPTool(\r\n        name=\"toolbox\",\r\n        url=TOOLBOX_ENDPOINT,\r\n        http_client=http_client,\r\n        load_prompts=False,\r\n    )\r\n    tools = [mcp_tool]\r\n\r\n    agent = chat_client.as_agent(\r\n        name=AGENT_NAME,\r\n        instructions=SYSTEM_PROMPT,\r\n        tools=tools,\r\n    )\r\n\r\n    logger.info(\r\n        \"[%s] starting up (model=%s, endpoint=%s)\",\r\n        AGENT_NAME, AZURE_AI_MODEL_DEPLOYMENT_NAME, PROJECT_ENDPOINT,\r\n    )\r\n    return agent\r\n<\/code><\/span><\/pre>\n<p><span data-contrast=\"auto\">What this does<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Adds the Toolbox endpoint as a single tool<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Gives the agent access to every tool in the Toolbox<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Uses Microsoft Entra for secure, managed authentication<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\n<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Step 5: Promote and share a\u00a0production<\/span><\/b>\u2011<b><span data-contrast=\"auto\">ready\u00a0Toolbox<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Once you are fully\u00a0tested\u00a0one version of toolbox, you can promote this version to be the default version of toolbox and share the toolbox endpoint broadly.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\"><span style=\"font-size: 10pt;\">toolbox = client.beta.toolboxes.update( \r\n    toolbox_name=\"my-toolbox\", \r\n    default_version=\"&lt;version_id&gt;\", \r\n) \r\nprint(f\"Default version: {toolbox.default_version}\")<\/span> <\/code><\/pre>\n<p><span data-contrast=\"auto\">After this you can share the toolbox endpoint with other people while you continue iterating this toolbox:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<p><code><a href=\"https:\/\/zava.services.ai.azure.com\/api\/projects\/foundry-tools\/toolbox\/customer-feedback-triaging-toolbox\/mcp\"><span data-contrast=\"none\">https:\/\/zava.services.ai.azure.com\/api\/projects\/foundry-tools\/toolbox\/customer-feedback-triaging-toolbox\/mcp?api-version=v1<\/span><\/a><\/code><\/p>\n<p><span class=\"TextRun SCXW85070029 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW85070029 BCX8\">In future iterations, once you have another production-ready version, you can update the toolbox again pointing to the newer\u00a0<\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW85070029 BCX8\">version<\/span><span class=\"NormalTextRun SCXW85070029 BCX8\">\u00a0and people using this toolbox\u00a0<\/span><span class=\"NormalTextRun SCXW85070029 BCX8\">won\u2019t<\/span><span class=\"NormalTextRun SCXW85070029 BCX8\">\u00a0need to change their code and agent at all.<\/span><\/span><span class=\"EOP Selected SCXW85070029 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335557856&quot;:16777215,&quot;335559739&quot;:0,&quot;335559740&quot;:285}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"3\"><span data-contrast=\"none\">Start Building<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h2>\n<ol>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/foundry\/agents\/how-to\/tools\/toolbox\"><span data-contrast=\"none\">Documentation for toolbox in Foundry<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li>Start with <a href=\"http:\/\/aka.ms\/foundry-toolbox-azd\">AZD CLI<\/a><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"%1.\" data-font=\"\" data-listid=\"13\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Sample code for using toolbox with Hosted Agents in Foundry Agent Service<\/span><span data-ccp-props=\"{}\">\u00a0<\/span>\n<ol>\n<li aria-setsize=\"-1\" data-leveltext=\"%1.\" data-font=\"\" data-listid=\"13\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"http:\/\/aka.ms\/foundry-toolbox-maf\"><span data-contrast=\"auto\">Microsoft Agent Framework<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/a><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"%1.\" data-font=\"\" data-listid=\"13\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"http:\/\/aka.ms\/foundry-toolbox-langgraph\"><span data-contrast=\"auto\">LangGraph<\/span><\/a><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"%1.\" data-font=\"\" data-listid=\"13\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"http:\/\/aka.ms\/foundry-toolbox-copilotsdk\"><span data-contrast=\"auto\">Copilot SDK<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/a><\/li>\n<\/ol>\n<\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"%1.\" data-font=\"\" data-listid=\"13\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Start with <a href=\"https:\/\/ai.azure.com\/nextgen\">Foundry Portal (Build -&gt; Tools)<\/a> or <a href=\"https:\/\/aka.ms\/foundrytk\">Foundry Toolkit for VS Code<\/a> Pre-release to start building Toolboxes<\/span><\/li>\n<\/ol>\n<ol>\n<li style=\"list-style-type: none;\"><\/li>\n<\/ol>\n<ol>\n<li style=\"list-style-type: none;\"><\/li>\n<\/ol>\n<ol>\n<li style=\"list-style-type: none;\"><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Available in Public Preview Today \u00a0 Toolbox is a new way to\u00a0curate, configure, and reuse tools across all of your AI agents without rewiring them every time from Foundry.\u00a0 Today, teams build agents across different frameworks and runtimes. Each agent often wires tools directly, with its own authentication, credentials, and\u00a0integration\u00a0code. As organizations\u00a0scale\u00a0agent usage, this leads [&hellip;]<\/p>\n","protected":false},"author":166509,"featured_media":1563,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[112,51,1],"tags":[122,121,2],"class_list":["post-2104","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-foundry-agent-service","category-mcp","category-microsoft-foundry","tag-foundry-agent-service","tag-foundry-tools","tag-microsoft-foundry"],"acf":[],"blog_post_summary":"<p>Available in Public Preview Today \u00a0 Toolbox is a new way to\u00a0curate, configure, and reuse tools across all of your AI agents without rewiring them every time from Foundry.\u00a0 Today, teams build agents across different frameworks and runtimes. Each agent often wires tools directly, with its own authentication, credentials, and\u00a0integration\u00a0code. As organizations\u00a0scale\u00a0agent usage, this leads [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2104","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\/166509"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/comments?post=2104"}],"version-history":[{"count":3,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2104\/revisions"}],"predecessor-version":[{"id":2156,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2104\/revisions\/2156"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media\/1563"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media?parent=2104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/categories?post=2104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/tags?post=2104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}