c6951c21f6
* Add MCP-based skills discovery (McpSkill, McpSkillsSource, McpSkillResource) Implement Agent Skills discovery over MCP following the SEP-2640 convention: - McpSkillsSource: reads skill://index.json to discover skills served by an MCP server - McpSkill: lazily fetches SKILL.md content via resources/read on demand - McpSkillResource: wraps MCP resource results (text and binary) - Path traversal protection in get_resource for defense in depth - Samples for Foundry Toolbox and standalone MCP skills server - Comprehensive unit tests (514 lines) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review comments: rename to MCP* convention, fix error handling and samples - Rename McpSkill/McpSkillResource/McpSkillsSource to MCPSkill/MCPSkillResource/MCPSkillsSource - Add data-URI prefix stripping for blob resource decoding - Let non-McpError exceptions propagate from get_resource() - Fix contradictory test comment - Use interactive input() in mcp_based_skill sample - Remove misleading sample output block Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Restore debug logging for McpError in get_resource() Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use AzureCliCredential in Foundry toolbox skills sample for consistency Replace DefaultAzureCredential with AzureCliCredential to match the credential convention used in all other samples. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use MCPStreamableHTTPTool in MCP skills sample Replace raw mcp library imports (ClientSession, streamable_http_client) with the framework's MCPStreamableHTTPTool to keep MCP server connections consistent regardless of whether skills are enabled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Branch on McpError.error.code so only not-found errors return empty Previously _try_read_index() and get_resource() swallowed every McpError as 'no skills available', making auth failures, server crashes, and connection drops indistinguishable from a server that simply has no skills. Now only two codes are treated as not-found: - -32002 (MCP-spec Resource not found) - -32601 (METHOD_NOT_FOUND — server lacks resources/read) All other McpError codes and non-McpError exceptions propagate with a warning log, surfacing real failures visibly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add tests for non-McpError and non-not-found error propagation in MCP skills Cover the re-raise branch in MCPSkill.get_resource for plain ConnectionError/TimeoutError, the generic McpError (code 0) propagation on get_resource, and TimeoutError propagation in _try_read_index. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert "Use MCPStreamableHTTPTool in MCP skills sample" This reverts commit f31ed0ded914e094f3ac5d811997b2cefc55836b. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Introduce MCP_SKILLS experimental feature for MCP skill classes Add a separate MCP_SKILLS feature ID to ExperimentalFeature enum and use it for MCPSkillResource, MCPSkill, and MCPSkillsSource, since their promotion timeline is partly outside of our control. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Foundry Provider Samples
This folder contains Azure AI Foundry and Foundry Local samples for Agent Framework.
FoundryAgent Samples
| File | Description |
|---|---|
foundry_agent_basic.py |
Foundry Agent basic example |
foundry_agent_custom_client.py |
Foundry Agent custom client configuration |
foundry_agent_hosted.py |
Foundry Agent for hosted agents |
foundry_agent_with_function_tools.py |
Foundry Agent with local function tools |
FoundryChatClient Samples
| File | Description |
|---|---|
foundry_chat_client.py |
Foundry Chat Client with project endpoint example |
foundry_chat_client_basic.py |
Foundry Chat Client basic example |
foundry_chat_client_code_interpreter_files.py |
Foundry Chat Client with code interpreter and files |
foundry_chat_client_image_analysis.py |
Foundry Chat Client with image analysis |
foundry_chat_client_with_code_interpreter.py |
Foundry Chat Client with code interpreter |
foundry_chat_client_with_explicit_settings.py |
Foundry Chat Client with explicit settings |
foundry_chat_client_with_file_search.py |
Foundry Chat Client with file search |
foundry_chat_client_with_function_tools.py |
Foundry Chat Client with function tools |
foundry_chat_client_with_hosted_mcp.py |
Foundry Chat Client with hosted MCP |
foundry_chat_client_with_local_mcp.py |
Foundry Chat Client with local MCP |
foundry_chat_client_with_session.py |
Foundry Chat Client with session management |
foundry_chat_client_with_toolbox.py |
Foundry Chat Client connected to a toolbox via its MCP endpoint using MCPStreamableHTTPTool |
foundry_chat_client_with_toolbox_skills.py |
Foundry Chat Client that discovers MCP-based skills from a Foundry Toolbox endpoint via MCPSkillsSource (uses an Azure AD bearer token and the toolbox preview header) |
FoundryLocalClient Samples
Prerequisites
-
Install Foundry Local and required local runtime components.
-
Install the connector package:
pip install agent-framework-foundry-local --pre
| File | Description |
|---|---|
foundry_local_agent.py |
Basic Foundry Local agent usage with streaming and non-streaming responses, plus function tool calling. |
Environment Variables
FOUNDRY_LOCAL_MODEL: Optional model alias/ID to use by default whenmodelis not passed toFoundryLocalClient.