-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Python: Add support for Foundry Toolboxes #5346
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Evan Mattson (moonbox3)
merged 10 commits into
microsoft:main
from
moonbox3:py-foundry-toolbox
Apr 21, 2026
Merged
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
6716549
Add support for the Foundry Toolbox in MAF
moonbox3 540c932
Merge branch 'main' into py-foundry-toolbox
moonbox3 00353f6
Update to latest azure ai projects package
moonbox3 fb48f70
Improve sample
moonbox3 8aa058c
Rename ADR to 0025
moonbox3 c643e94
Update ADR
moonbox3 05a101e
Apply suggestion from @alliscode
moonbox3 24de904
Improve samples
moonbox3 7e71724
Merge branch 'py-foundry-toolbox' of github.com:moonbox3/agent-framew…
moonbox3 2bd0cb0
Update test
moonbox3 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -203,6 +203,8 @@ temp*/ | |
|
|
||
| # AI | ||
| .claude/ | ||
| .omc/ | ||
| .omx/ | ||
| WARP.md | ||
| **/memory-bank/ | ||
| **/projectBrief.md | ||
|
|
||
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,66 @@ | ||
| # Agent Framework Foundry | ||
|
|
||
| This package contains the Microsoft Foundry integrations for Microsoft Agent Framework, including Foundry chat clients, preconfigured Foundry agents, Foundry embedding clients, and Foundry memory providers. | ||
|
|
||
| ## Toolboxes | ||
|
|
||
| A *toolbox* is a named, versioned bundle of hosted tool configurations — code interpreter, file search, image generation, MCP, web search, and so on — stored inside a Microsoft Foundry project. Toolboxes let you manage tool configuration once and reuse it across agents. | ||
|
|
||
| ### Authoring a toolbox | ||
|
|
||
| Toolboxes can be authored two ways: | ||
|
|
||
| - **Foundry portal** — create and version toolboxes through the UI without touching code. | ||
| - **Programmatically** — use the [`azure-ai-projects`](https://pypi.org/project/azure-ai-projects/) SDK to create, update, and version toolboxes from Python. | ||
|
|
||
| > Toolbox authoring APIs (`ToolboxVersionObject`, `ToolboxObject`, `project_client.beta.toolboxes.*`) require `azure-ai-projects>=2.1.0`. Earlier versions can only consume toolboxes that already exist. | ||
|
|
||
| ### Using toolboxes with `FoundryAgent` | ||
|
|
||
| For hosted `FoundryAgent`, the toolbox must already be attached to the agent in the Microsoft Foundry project. Once attached, the agent invokes its toolbox tools transparently — no client-side wiring required — and you interact with the agent the same way you would with any other tool-equipped Foundry agent. | ||
|
|
||
| ### Using toolboxes with `FoundryChatClient` | ||
|
|
||
| There are two patterns for wiring a toolbox into a `FoundryChatClient`-backed agent. | ||
|
|
||
| **1. Fetch, optionally filter, and pass the tools directly** | ||
|
|
||
| Load the toolbox from the Microsoft Foundry project, optionally select a subset of its tools, and hand them to an `Agent` alongside any other tools you own: | ||
|
|
||
| ```python | ||
| from agent_framework import Agent | ||
| from agent_framework.foundry import FoundryChatClient, select_toolbox_tools | ||
|
|
||
| client = FoundryChatClient(...) | ||
| toolbox = await client.get_toolbox("my-toolbox", version="3") | ||
|
|
||
| # Pass the whole toolbox: | ||
| agent = Agent(client=client, tools=toolbox) | ||
|
|
||
| # Or filter to a subset first: | ||
| selected = select_toolbox_tools(toolbox, include_types=["code_interpreter", "mcp"]) | ||
| agent = Agent(client=client, tools=selected) | ||
| ``` | ||
|
|
||
| See [`foundry_chat_client_with_toolbox.py`](../../samples/02-agents/providers/foundry/foundry_chat_client_with_toolbox.py) for a full example, including combining multiple toolboxes. | ||
|
|
||
| **2. Connect to the toolbox's MCP endpoint with `MCPStreamableHTTPTool`** | ||
|
|
||
| Each toolbox is reachable as an MCP server. Instead of fetching and fanning out its individual tool definitions, you can point a MAF `MCPStreamableHTTPTool` at the toolbox's MCP endpoint — the agent then discovers and calls its tools over MCP at runtime: | ||
|
|
||
| ```python | ||
| from agent_framework import Agent, MCPStreamableHTTPTool | ||
| from agent_framework.foundry import FoundryChatClient | ||
|
|
||
| async with Agent( | ||
| client=FoundryChatClient(...), | ||
| instructions="You are a helpful assistant. Use the toolbox tools when useful.", | ||
| tools=MCPStreamableHTTPTool( | ||
| name="my_toolbox", | ||
| description="Tools served by my Foundry toolbox", | ||
| url="https://<your-toolbox-mcp-endpoint>", | ||
| ), | ||
| ) as agent: | ||
| result = await agent.run("What tools are available?") | ||
| print(result.text) | ||
| ``` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.