| title | Tools Overview |
|---|---|
| description | Overview of tool types available in Agent Framework and provider support matrix. |
| zone_pivot_groups | programming-languages |
| author | eavanvalkenburg |
| ms.topic | reference |
| ms.author | edvan |
| ms.date | 02/09/2026 |
| ms.service | agent-framework |
Agent Framework supports many different types of tools that extend agent capabilities. Tools allow agents to interact with external systems, execute code, search data, and more.
:::zone pivot="programming-language-csharp"
| Tool Type | Description |
|---|---|
| Function Tools | Custom code that agents can call during conversations |
| Code Interpreter | Execute code in a sandboxed environment |
| File Search | Search through uploaded files |
| Web Search | Search the web for information |
| Hosted MCP Tools | MCP servers invoked by the provider runtime |
| Local MCP Tools | MCP servers running locally or on custom hosts |
| Foundry Toolboxes | Named, versioned bundles of hosted tool configurations managed in a Foundry project |
:::zone-end
:::zone pivot="programming-language-python"
| Tool Type | Description |
|---|---|
| Function Tools | Custom code that agents can call during conversations |
| Code Interpreter | Execute code in a sandboxed environment |
| File Search | Search through uploaded files |
| Web Search | Search the web for information |
| Hosted MCP Tools | MCP servers invoked by the provider runtime |
| Local MCP Tools | MCP servers running locally or on custom hosts |
| Foundry Toolboxes | Named, versioned bundles of hosted tool configurations managed in a Foundry project |
| Image Generation | Hosted image generation on the Foundry / OpenAI Responses runtime |
| Shell | Hosted shell execution on the OpenAI Responses runtime — distinct from the GitHub Copilot CLI's built-in shell/file/URL runtime tools |
| Bing Grounding | Web grounding via your own Grounding with Bing Search resource — experimental |
| Bing Custom Search | Bing grounding restricted to a curated domain list — preview |
| Azure AI Search | Query an Azure AI Search index through a Foundry connection — experimental |
| SharePoint | Ground answers in SharePoint content — preview |
| Microsoft Fabric | Query a Fabric data agent — preview |
| Memory Search | Search a Foundry-managed memory store — preview |
| Computer Use | Drive a desktop or browser environment — preview |
| Browser Automation | Drive a browser via Azure Playwright — preview |
| Agent-to-Agent (A2A) tool | Call a remote A2A agent as a tool from a Foundry agent — preview |
Note
Tools marked experimental or preview are documented on the relevant provider page and emit an ExperimentalWarning the first time they are used in a process.
:::zone-end
Tool Approval is a framework feature that lets you gate every tool invocation — function tools, hosted tools, MCP tool calls — through a human-in-the-loop decision before the model receives the result. It is handled by the framework's function-invoking chat client in both .NET and Python, so it works with any provider whose client invokes tools locally; it is not a per-provider capability. See the Tool Approval page for the full pattern, including how approvals interact with sessions, streaming, and middleware.
:::zone pivot="programming-language-csharp"
The OpenAI and Azure OpenAI providers each offer two client types — Responses and Chat Completion — with different tool capabilities. Azure OpenAI clients mirror their OpenAI equivalents. Copilot Studio and A2A agents run on a remote service so their capabilities are configured on the remote agent rather than through the Agent Framework client — they are not listed in the matrix.
| Tool Type | Responses | Chat Completion | Foundry | Anthropic | Ollama | GitHub Copilot |
|---|---|---|---|---|---|---|
| Function Tools | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Code Interpreter | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| File Search | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Web Search | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Hosted MCP Tools | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ |
| Local MCP Tools | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Note
The Responses and Chat Completion columns apply to both OpenAI and Azure OpenAI — the Azure variants mirror the same tool support as their OpenAI counterparts. The deprecated OpenAI Assistants API is no longer documented; for migration guidance see the Semantic Kernel migration guide.
:::zone-end
:::zone pivot="programming-language-python"
The OpenAI and Azure OpenAI providers each offer multiple client types with different tool capabilities. Azure OpenAI clients mirror their OpenAI equivalents. The Foundry column applies to FoundryChatClient — for FoundryAgent, the tools are configured on the Foundry agent definition (see What works and what doesn't with FoundryAgent). Copilot Studio and A2A agents run on a remote service so their capabilities are configured on the remote agent rather than through the Agent Framework client — they are not listed in the matrix.
| Tool Type | Responses | Chat Completion | Foundry | Anthropic | Ollama | Foundry Local | GitHub Copilot |
|---|---|---|---|---|---|---|---|
| Function Tools | ✅ | ✅ | ✅ | ✅ | ✅ | ||
| Code Interpreter | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| File Search | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Web Search | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Image Generation | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
Hosted Shell (get_shell_tool) |
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Built-in shell / file system / URL fetch | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅² |
| Hosted MCP Tools | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ |
| Local MCP Tools | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Foundry Toolboxes | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Bing Grounding (experimental) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Bing Custom Search (preview) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Azure AI Search (experimental) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| SharePoint (preview) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Microsoft Fabric (preview) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Memory Search (preview) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Computer Use (preview) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Browser Automation (preview) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Agent-to-Agent (A2A) tool (preview) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
¹ Depends on the chosen local model supporting function calling.
² Built into the GitHub Copilot CLI runtime, gated by a permission handler. Different surface from OpenAI's get_shell_tool.
Note
The Responses and Chat Completion columns apply to both OpenAI and Azure OpenAI — the Azure variants mirror the same tool support as their OpenAI counterparts. Local MCP Tools work with any provider that supports function tools.
:::zone-end
You can use an agent as a function tool for another agent, enabling agent composition and more advanced workflows. The inner agent is converted to a function tool and provided to the outer agent, which can then call it as needed.
:::zone pivot="programming-language-csharp"
Call .AsAIFunction() on an AIAgent to convert it to a function tool that can be provided to another agent:
// Create the inner agent with its own tools
AIAgent weatherAgent = new AIProjectClient(
new Uri("<your-foundry-project-endpoint>"),
new DefaultAzureCredential())
.AsAIAgent(
model: "gpt-4o-mini",
instructions: "You answer questions about the weather.",
name: "WeatherAgent",
description: "An agent that answers questions about the weather.",
tools: [AIFunctionFactory.Create(GetWeather)]);
// Create the main agent and provide the inner agent as a function tool
AIAgent agent = new AIProjectClient(
new Uri("<your-foundry-project-endpoint>"),
new DefaultAzureCredential())
.AsAIAgent(
model: "gpt-4o-mini",
instructions: "You are a helpful assistant.",
tools: [weatherAgent.AsAIFunction()]);
// The main agent can now call the weather agent as a tool
Console.WriteLine(await agent.RunAsync("What is the weather like in Amsterdam?"));Warning
DefaultAzureCredential is convenient for development but requires careful consideration in production. In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
:::zone-end
:::zone pivot="programming-language-python"
Call .as_tool() on an agent to convert it to a function tool that can be provided to another agent:
import os
from agent_framework.openai import OpenAIChatCompletionClient
from azure.identity import AzureCliCredential
# Create the inner agent with its own tools
weather_agent = OpenAIChatCompletionClient(
model=os.environ["AZURE_OPENAI_CHAT_COMPLETION_MODEL"],
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
credential=AzureCliCredential(),
).as_agent(
name="WeatherAgent",
description="An agent that answers questions about the weather.",
instructions="You answer questions about the weather.",
tools=get_weather
)
# Create the main agent and provide the inner agent as a function tool
main_agent = OpenAIChatCompletionClient(
model=os.environ["AZURE_OPENAI_CHAT_COMPLETION_MODEL"],
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
credential=AzureCliCredential(),
).as_agent(
instructions="You are a helpful assistant.",
tools=weather_agent.as_tool()
)
# The main agent can now call the weather agent as a tool
result = await main_agent.run("What is the weather like in Amsterdam?")
print(result.text)You can also customize the tool name, description, and argument name:
weather_tool = weather_agent.as_tool(
name="WeatherLookup",
description="Look up weather information for any location",
arg_name="query",
arg_description="The weather query or location"
):::zone-end
[!div class="nextstepaction"] Function Tools