Edit

Tools Overview

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.

Tool Types

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
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.

Tool Approval

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.

Provider Support Matrix

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.

Provider Support Matrix

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.

Using an Agent as a Function Tool

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.

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.

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"
)

Next steps