Tworzenie przybornika i zarządzanie nim w narzędziu Foundry

Warning

W przypadku nawiązywania połączenia z narzędziami nienależących do rozwiązania Foundry możesz ponieść koszty, a dane mogą być wysyłane poza granicą zgodności firmy Foundry i przetwarzane zgodnie z odpowiednimi warunkami i zasadami obsługi danych. Zapoznaj się z dokumentacją narzędzia, aby dowiedzieć się, jak zarządzać dostępem do narzędzia.

W tym artykule pokazano, jak utworzyć przybornik, dodać i skonfigurować narzędzia, sprawdzić, czy są ładowane, zintegrować przybornik z hostowanym agentem i zarządzać wersjami przybornika. Aby zapoznać się z ogólnym wprowadzeniem do pojęcia Toolbox, zobacz Czym jest Toolbox w Foundry?. Aby zapoznać się ze składnią konfiguracji narzędzi i opcjami uwierzytelniania dla każdego typu narzędzia, zobacz Konfigurowanie narzędzi.

Wymagania wstępne

  • Aktywny projekt Microsoft Foundry.

  • RBAC: przypisz rolę Foundry User w projekcie Foundry każdej tożsamości, która ma zastosowanie w danym scenariuszu:

    • Deweloper (zawsze wymagany) — tożsamość, która tworzy, aktualizuje i zarządza wersjami toolboxu.
    • Tożsamość agenta (wymagana w przypadku korzystania z agenta opartego na promptach) — tożsamość zarządzana agenta, która wywołuje narzędzia w czasie działania.
    • Użytkownik końcowy (wymagany tylko w przypadku przepływów OAuth) — każdy użytkownik, którego tożsamość jest przekazywana za pośrednictwem połączeń OAuth lub UserEntraToken (na przykład w przepływach MCP opartych na OAuth lub tokenu Entra użytkownika (przekazywanie tożsamości zarządzanego użytkownika)).

    Aby uzyskać instrukcje krok po kroku dotyczące przypisywania roli użytkownika usługi Foundry do tożsamości agenta, zobacz Przypisywanie uprawnień do tożsamości agenta.

  • Projekt Foundry musi znajdować się w jednym z obsługiwanych regionów. Poszczególne typy narzędzi w przyborniku są dodatkowo ograniczone przez region i model — nie wszystkie typy narzędzi są dostępne w każdym regionie lub w każdym modelu. Zobacz Zgodność regionów i modeli.

  • Visual Studio Code (VS Code).

  • Zainstaluj Microsoft Foundry Toolkit for Visual Studio Code extension z witryny Visual Studio Code Marketplace.

  • SDK języka Python: pip install azure-ai-projects azure-identity

  • .NET SDK: zainstaluj spójny zestaw pakietów w wersji zapoznawczej i Azure Identity:

    dotnet add package Azure.AI.Projects --version 2.1.0-beta.4
    dotnet add package Azure.AI.Projects.Agents --version 2.1.0-beta.4
    dotnet add package Azure.AI.Extensions.OpenAI --version 2.1.0-beta.4
    dotnet add package Azure.Identity
    
  • Zestaw SDK języka JavaScript: npm install @azure/ai-projects @azure/identity

  • interfejs wiersza polecenia dewelopera Azure: zainstaluj interfejs wiersza polecenia dewelopera Azure (azd 1.27.1 lub nowszy) i pakiet rozszerzenia ujednoliconego interfejsu wiersza polecenia rozwiązania Foundry:

    # Install the unified bundle (provides azd ai agent, connection, inspector,
    # project, routine, skill, and toolbox).
    azd ext install microsoft.foundry
    

Ważne

  • Zestaw narzędzi obsługuje maksymalnie jedno narzędzie bez pola name (wyszukiwanie w sieci Web, Wyszukiwanie AI platformy Azure, interpreter kodu, wyszukiwanie plików). Aby uwzględnić więcej niż jedno wystąpienie tego samego typu narzędzia, ustaw unikalny name dla każdego wystąpienia, aby je rozróżnić. Uwzględnienie dwóch wystąpień tego samego typu bez name powoduje błąd invalid_payload. Aby uzyskać szczegółowe informacje, zobacz Wiele typów narzędzi.
  • Dodaj element description do każdego narzędzia w przyborniku, aby ułatwić modelowi wybranie odpowiedniego narzędzia dla każdego żądania.
  • Dokładnie przejrzyj dokumentację każdego narzędzia, aby dowiedzieć się więcej na temat poszczególnych konfiguracji, ograniczeń i ostrzeżeń.

Jeśli używasz GitHub Copilot dla Azure do wygenerowania szkieletu hostowanego agenta, który korzysta z zestawu narzędzi, poniższe odwołania do umiejętności opisują ten sam kontrakt punktu końcowego (zmienna środowiskowa, nagłówki, protokół MCP, wzorce cytowania i rozwiązywanie problemów), który agent musi zaimplementować:

  • Dokumentacja zestawu narzędzi zawierająca wskazówki dotyczące formatu punktu końcowego, protokołu MCP, obsługi zgody OAuth, schematów cytowania i rozwiązywania problemów.
  • Użyj zestawu narzędzi w agencie hostowanym, aby znaleźć wskazówki dotyczące ustalania punktów końcowych, konwencji zmiennych środowiskowych, struktury ładunku, wzorców integracji kodu i śledzenia.

Szybka ścieżka

  1. Utwórz:Utwórz wersję zestawu narzędzi z co najmniej jednym narzędziem. Każdy fragment kodu powinien być skupiony na jednym zadaniu i nie przekraczać 30 wierszy; w przypadku kompletnych aplikacji użyj podlinkowanych, utrzymywanych przykładów.
  2. Opublikuj lub wybierz wersję: Pierwsza wersja staje się domyślna automatycznie. W przypadku nowszych wersji przetestuj i promuj wersję, gdy będzie można ustawić ją jako domyślną.
  3. Dołączanie i używanie: Skopiuj punkt końcowy odbiorcy przybornika, a następnie zintegruj go z agentem.
  4. Sprawdź: Użyj punktu końcowego specyficznego dla wersji, aby wyświetlić listę dostępnych narzędzi, a następnie uruchomić jedno żądanie agenta, które wywołuje oczekiwane narzędzie.

Obsługa funkcji

Zestawy SDK i narzędzia obsługują operacje zarządzania przybornikami, jak pokazano w poniższej tabeli.

Operation zestaw SDK Python interfejs API REST SDK .NET Zestaw SDK dla języka JavaScript Azure Developer CLI Zestaw narzędzi Foundry
Aktualizacja zestawu narzędzi, wymienianie, pobieranie i usuwanie ✔️ ✔️ ✔️ ✔️ N/A ✔️
Tworzenie wersji przybornika ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Lista wersji przybornika, pobieranie i usuwanie ✔️ ✔️ ✔️ ✔️ N/A Nr. Interfejs użytkownika pokazuje tylko najnowszą wersję.
Ograniczenia (zasady RAI) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Możesz także zarządzać zestawami narzędzi w sposób konwersacyjny za pomocą serwera Foundry MCP Server. Zobacz Zarządzanie przybornikami za pomocą serwera MCP Foundry.

Możesz dodać następujące narzędzia do przybornika. W tej tabeli przedstawiono obsługę przez SDK i narzędzia dla każdego narzędzia oraz informację, czy można je również podłączyć bezpośrednio do agenta (poza zestawem narzędzi). Informacje o tym, jak przepływa ruch dla poszczególnych narzędzi, gdy projekt korzysta z izolacji sieciowej, można znaleźć w artykule Izolacja sieciowa dla zestawu narzędzi.

Narzędzie W przyborniku Bezpośrednia integracja narzędzi zestaw SDK Python interfejs API REST SDK .NET Zestaw SDK dla języka JavaScript Azure Developer CLI Zestaw narzędzi Foundry
Protokół MCP (Model Context Protocol) ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Wyszukiwanie w Internecie ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Wyszukiwanie AI platformy Azure ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Interpreter kodu ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Wyszukiwanie plików ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OpenAPI ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ Nie
Agent-do-agenta (A2A) ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ Nie
Automatyzacja przeglądarki ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ Nie
Inteligencja sieciowa Fabric ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Inteligencja Pracy ✅ Tak ✅ Tak ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Wyszukiwanie narzędzi ✅ Tak ❌ Nie ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Umiejętności ✅ Tak ❌ Nie ✔️ ✔️ ✔️ ✔️ ✔️ Nie

Dostępność narzędzi zależy również od regionu i modelu projektu. Przed wdrożeniem zestawu narzędzi sprawdź, czy region docelowy obsługuje typy narzędzi, których zamierzasz użyć. Zobacz Obsługa narzędzi według regionów i modelu.

Utwórz wersję zestawu narzędzi

Utwórz wersję przybornika na podstawie potrzebnych narzędzi.

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPToolboxTool, ToolSearchToolboxTool, WebSearchToolboxTool

# Create Foundry project client
endpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>"
project = AIProjectClient(
    endpoint=endpoint,
    credential=DefaultAzureCredential(),
)

# Create toolbox version with web search and MCP tools
toolbox_version = project.toolboxes.create_version(
    name="my-toolbox",
    description="Toolbox with web search and an MCP server",
    tools=[
        WebSearchToolboxTool(),
        MCPToolboxTool(
            server_label="myserver",
            server_url="https://your-mcp-server.example.com",
            require_approval="never",
            project_connection_id="my-key-auth-connection",
        ),
        ToolSearchToolboxTool(),
    ],
)
print(f"Created toolbox: {toolbox_version.name}, version: {toolbox_version.version}")
using Azure.Identity;
using Azure.AI.Projects;

// Create Foundry project client
var projectEndpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>";
AIProjectClient projectClient = new(new Uri(projectEndpoint), new DefaultAzureCredential());
AgentToolboxes toolboxClient = projectClient.AgentAdministrationClient.GetAgentToolboxes();

WebSearchToolboxTool webTool = new();
MCPToolboxTool mcpTool = new(serverLabel: "myserver")
{
  ServerUri = new Uri("https://your-mcp-server.example.com"),
  ToolCallApprovalPolicy = new McpToolCallApprovalPolicy(
    GlobalMcpToolCallApprovalPolicy.NeverRequireApproval),
};

ToolSearchToolboxTool searchTool = new() { Name = "ToolBoxSearch" };

ToolboxVersion toolboxVersion = await toolboxClient.CreateVersionAsync(
  name: "my-toolbox",
    tools: [webTool, mcpTool, searchTool],
    description: "Toolbox with web search, MCP, and tool search"
);
Console.WriteLine($"Created toolbox: {toolboxVersion.Name}, version: {toolboxVersion.Version}");
POST {project_endpoint}/toolboxes/my-toolbox/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{
  "description": "Toolbox with web search, MCP, and tool search",
  "tools": [
    {
      "type": "web_search",
      "description": "Search the web for current information"
    },
    {
      "type": "mcp",
      "server_label": "myserver",
      "server_url": "https://your-mcp-server.example.com",
      "require_approval": "never",
      "project_connection_id": "my-key-auth-connection"
    },
    {
      "type": "toolbox_search"
    }
  ]
}

Uwaga

Użyj zakresu tokenu https://ai.azure.com/.default podczas pobierania tokenu Bearer.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";

// Create Foundry project client
const projectEndpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>";

const project = new AIProjectClient(projectEndpoint, new DefaultAzureCredential());

const toolboxVersion = await project.toolboxes.createVersion(
  "my-toolbox",
  [
    {
      type: "web_search",
      description: "Search the web for current information",
    },
    {
      type: "mcp",
      server_label: "myserver",
      server_url: "https://your-mcp-server.example.com",
      require_approval: "never",
      project_connection_id: "my-key-auth-connection",
    },
    { type: "toolbox_search" },
  ],
  {
    description: "Toolbox with web search, MCP, and tool search",
  },
);
console.log(`Created toolbox: ${toolboxVersion.name}, version: ${toolboxVersion.version}`);

Użyj rozszerzenia Microsoft Foundry Toolkit dla programu Visual Studio Code, aby utworzyć i opublikować zestaw narzędzi w widoku Tools.

  1. Wybierz pozycję Foundry Toolkit na pasku działań.
  2. W obszarze Moje zasoby rozwiń Twoją nazwę projektu>Narzędzia.
  3. Wybierz ikonę + Dodaj przybornik.
  4. Na karcie Tworzenie niestandardowego przybornika wprowadź nazwę i opis przybornika, a następnie dodaj odpowiednie narzędzia.
  5. Aby włączyć routing narzędzi oparty na intencjach, wybierz pozycję Wyszukiwanie narzędzi.
  6. Wybierz Publikuj.

Opublikowanie nowego przybornika powoduje utworzenie pierwszej wersji. Ta wersja staje się domyślną wersją automatycznie.

Zrzut ekranu zestawu narzędzi Foundry Toolkit przedstawiający nazwę przybornika, opis, narzędzia i akcję Publikuj.

Korzystając z ujednoliconego pakietu microsoft.foundry rozszerzeń (zobacz sekcję Wymagania wstępne), utwórz zestaw narzędzi w dwóch krokach:

  1. Użyj azd ai connection create, aby zarejestrować każde połączenie projektu, do którego odwołuje się przybornik (jedno wywołanie na każdy rekord poświadczeń).
  2. Użyj azd ai toolbox create --from-file <toolbox.yaml>, aby utworzyć przybornik. YaML odwołuje się do połączeń według nazwy i nigdy nie osadza poświadczeń.

Wzorzec jest taki sam dla każdego rodzaju połączenia i typu uwierzytelniania:

  1. Ustaw aktywny projekt raz na powłokę:

    azd ai project set $PROJECT_ENDPOINT
    
  2. Utwórz połączenie za pomocą polecenia azd ai connection create. Flagi różnią się w zależności od typu uwierzytelniania, ale kształt polecenia jest zawsze:

    azd ai connection create <name> \
      --kind <remote-tool|remote-a2a|cognitive-search|GroundingWithCustomSearch> \
      --target <endpoint-url> \
      --auth-type <none|custom-keys|api-key|oauth2|user-entra-token|project-managed-identity|agentic-identity> \
      [--custom-key "Header=Value" | --key <key> | --client-id ... --client-secret ... --authorization-url ... --token-url ... | --audience <aad-resource-uri>]
    

    Użyj polecenia azd ai connection list i azd ai connection show <name> , aby sprawdzić połączenia i azd ai connection delete <name> --force usunąć je.

  3. Utwórz przybornik YAML, który odwołuje się do co najmniej jednego istniejącego połączenia według nazwy. Kod YAML nigdy nie osadza poświadczeń:

    # my-toolbox.yaml
    description: <human-readable description>
    connections:
      - name: <project-connection-name>   # must already exist in the project
    # Optional: add connectionless built-in tools and policies.
    tools:
      - type: web_search
        name: web
      - type: code_interpreter
        container: { type: auto }
        name: code
      # Tool search is connectionless.
      - type: toolbox_search
      # For Azure AI Search, set the index in the tool entry:
      # - type: azure_ai_search
      #   name: search
      #   azure_ai_search:
      #     indexes:
      #       - project_connection_id: <azure-ai-search-connection-name>
      #         index_name: <search-index-name>
      # For Bing Custom Search, set the instance in the tool entry:
      # - type: web_search
      #   name: bing
      #   custom_search_configuration:
      #     project_connection_id: <bing-connection-name>
      #     instance_name: <bing-instance-name>
    # Optional: attach existing project skills as MCP resources.
    skills:
      - name: <skill-name>          # uses the skill's default version
      - name: <other-skill>
        version: "2"               # pin to a specific skill version (string)
    policies:
      rai_config:
        rai_policy_name: <policy-name>    # must already exist on the project
    

    Co najmniej jeden z connections, skills lub tools musi być niepusty. Odwołania do umiejętności muszą wskazywać umiejętności, które już istnieją w tym samym projekcie Foundry; zobacz Używanie umiejętności w Foundry, aby utworzyć je za pomocą azd ai skill create. Aby uzyskać szczegółowe informacje na temat kompleksowej konfiguracji wyszukiwania narzędzi, zobacz Korzystanie z wyszukiwania narzędzi.

  4. Utwórz zestaw narzędzi na podstawie tego pliku:

    azd ai toolbox create <toolbox-name> --from-file ./my-toolbox.yaml
    

    Pierwsza wersja staje się domyślna automatycznie. Użyj azd ai toolbox list, azd ai toolbox show <name>, azd ai toolbox version list <name> i azd ai toolbox delete <name> --force, aby zarządzać panelami narzędzi.

Przykład: serwer MCP z uwierzytelnianiem opartym na kluczach

# 1. Create the connection
azd ai connection create my-gh-conn \
  --kind remote-tool \
  --target https://api.githubcopilot.com/mcp/ \
  --auth-type custom-keys \
  --custom-key "Authorization=Bearer $GITHUB_PAT"

# 2. Create the toolbox
azd ai toolbox create my-toolbox \
  --from-file ./my-toolbox.yaml \
  --no-prompt
# my-toolbox.yaml
description: GitHub MCP toolbox
connections:
  - name: my-gh-conn

Pobierz punkt końcowy MCP przybornika

W zależności od roli istnieją dwa wzorce punktów końcowych.

Roli Punkt końcowy Kiedy należy używać
Deweloper narzędzi {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1 Przetestuj lub zweryfikuj określoną wersję przed ustawieniem jej jako domyślnego.
Użytkownik przybornika {project_endpoint}/toolboxes/{toolbox_name}/mcp?api-version=v1 Podłącz agentów do przybornika. Zawsze obsługuje element default_version. Pierwsza tworzona wersja jest automatycznie ustawiana jako domyślna.

Zastąp symbole zastępcze własnymi wartościami:

  • {project_endpoint} to punkt końcowy projektu Foundry w postaci https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>. Skopiuj go ze strony Przegląd projektu w portalu Foundry lub z kolumny Adres URL punktu końcowego w widoku Przybornika zestawu narzędzi Microsoft Foundry Toolkit for Visual Studio Code.
  • {toolbox_name} i {version} to nazwa zestawu narzędzi i numer wersji, które utworzono w sekcji Tworzenie wersji zestawu narzędzi.

Wskazówka

Podłącz agentów do punktu końcowego konsumenta zestawu narzędzi. Zawsze udostępnia default_version, dzięki czemu możesz promować nowe wersje bez zmiany kodu agenta ani ponownego wdrażania. Zarezerwuj punkt końcowy Toolbox Developer (specyficzny dla danej wersji) do testowania wersji, zanim ją awansujesz.

Uwaga

Pierwsza wersja nowego narzędzia jest automatycznie promowana do default_version (v1). Jeśli chcesz zmienić wartość domyślną później, zobacz Podwyższanie poziomu wersji do domyślnej.

W rozszerzeniu Microsoft Foundry Toolkit for Visual Studio Code skopiuj punkt końcowy odbiorcy przybornika z widoku Toolboxes.

  1. Wybierz pozycję Foundry Toolkit na pasku działań.
  2. W obszarze Moje zasoby rozwiń Twoją nazwę projektu>Narzędzia.
  3. Na karcie Przyborniki znajdź przybornik.
  4. W kolumnie Adres URL punktu końcowego skopiuj punkt końcowy.

Wartość Adres URL punktu końcowego to punkt końcowy odbiorcy narzędzia. Aby utworzyć punkt końcowy specyficzny dla wersji, użyj wzorca dewelopera pokazanego w poprzedniej tabeli.

Weryfikowanie dostępności narzędzi

Przed uruchomieniem pełnego agenta upewnij się, że przybornik ładuje oczekiwane narzędzia przy użyciu zestawu SDK klienta MCP względem punktu końcowego. Użyj punktu końcowego specyficznego dla wersji, aby zweryfikować wersję przed ustawieniem jej jako domyślnej.

Zainstaluj zestaw SDK klienta MCP:

pip install mcp

Połącz się z przybornikiem i wymień narzędzia

import asyncio
from azure.identity import DefaultAzureCredential
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession

url = "https://<account>.services.ai.azure.com/api/projects/<proj>/toolboxes/<name>/versions/<version>/mcp?api-version=v1"

token = DefaultAzureCredential().get_token("https://ai.azure.com/.default").token
headers = {
    "Authorization": f"Bearer {token}",
}

async def verify_toolbox():
    async with streamablehttp_client(url, headers=headers) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # List available tools
            tools_result = await session.list_tools()
            print(f"Tools found: {len(tools_result.tools)}")
            for tool in tools_result.tools:
                print(f"  - {tool.name}: {(tool.description or '')[:80]}")

            # Call a tool (replace with actual tool name and arguments)
            result = await session.call_tool("<tool_name>", arguments={})
            print(result)

asyncio.run(verify_toolbox())

Uwaga

Użyj karty interfejsu API REST, aby zweryfikować dostępność narzędzia z .NET lub użyć zestawu SDK klienta Python MCP.

Użyj punktu końcowego specyficznego dla wersji (/versions/{version}/mcp), aby zweryfikować wersję przed jej promocją.

1. Zainicjuj sesję MCP:

POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}

2. Wyślij zainicjowane powiadomienie:

POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{"jsonrpc":"2.0","method":"notifications/initialized"}

3. Lista dostępnych narzędzi:

POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}

4. Wywołaj narzędzie:

POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"<TOOL_NAME>","arguments":{}}}

Zainstaluj zestaw SDK klienta MCP:

npm install @modelcontextprotocol/sdk

Połącz się z przybornikiem i wymień narzędzia

import { DefaultAzureCredential } from "@azure/identity";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";

const url = "https://<account>.services.ai.azure.com/api/projects/<proj>/toolboxes/<name>/versions/<version>/mcp?api-version=v1";

const credential = new DefaultAzureCredential();
const token = await credential.getToken("https://ai.azure.com/.default");

const transport = new StreamableHTTPClientTransport(
  new URL(url),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${token.token}`,
      },
    },
  },
);

const client = new Client({ name: "test", version: "1.0" });
await client.connect(transport);

// List available tools
const toolsResult = await client.listTools();
console.log(`Tools found: ${toolsResult.tools.length}`);
for (const tool of toolsResult.tools) {
  console.log(`  - ${tool.name}: ${(tool.description || "").slice(0, 80)}`);
}

// Call a tool (replace with actual tool name and arguments)
const result = await client.callTool({ name: "<tool_name>", arguments: {} });
console.log(result);

await client.close();

Użyj punktu końcowego MCP zestawu narzędzi wraz z przykładowym hostowanym agentem utworzonym na podstawie szablonu, aby sprawdzić ładowanie zestawu narzędzi w VS Code.

  1. W Foundry Toolkit, pod Moje zasoby>Twoja nazwa projektu>Narzędzia, znajdź zestaw narzędzi, który chcesz przetestować.
  2. Wybierz szablon kodu szkieletu.
  3. Po wyświetleniu monitu wybierz folder projektu.
  4. Postępuj zgodnie z wygenerowanymi README.md instrukcjami, aby zainstalować zależności, skonfigurować zmienne środowiskowe i uruchomić przykład lokalnie.
  5. Użyj Agent Inspector lub uruchom python main.py, aby potwierdzić ładowanie i reagowanie narzędzi przybornika.

Aby zweryfikować wersję przed promocją nowej wersji przybornika, użyj karty Python lub interfejsu API REST w tym kroku.

Uwaga

Użyj karty interfejsu API REST, aby zweryfikować dostępność narzędzia lub użyć zestawu SDK klienta Python MCP.

Sprawdź — zainicjuj: HTTP 200. Jeśli pominiesz krok inicjowania, kolejne wywołania kończą się niepowodzeniem.

Sprawdzanie — tools/list:

  • len(tools) > 0 — puste oznacza, że wersja przybornika nie została poprawnie aprowizowana.

  • Każde narzędzie ma name, description i inputSchema. Aby zapoznać się z konwencjami nazewnictwa narzędzi, zobacz specyfikację MCP.

  • inputSchema properties ma pole (niektóre serwery MCP pomijają to pole, co zakłóca działanie OpenAI).

  • Nazwy narzędzi mają przestrzeń nazw określoną przez typ narzędzia:

    Typ narzędzia Format nazwy narzędzia Example
    MCP {server_label}.{tool_name} myserver.some_tool
    OpenAPI {openapi_name}.{operationId} weatherapi.getForecast
    A2A name (nazwa agenta narzędzia) lub nazwa połączenia, jeśli pominięto name myagent
    Wszystkie inne typy narzędzi name Wartość pola lub domyślna nazwa narzędzia web_search
  • Narzędzia MCP zawierają _meta.tool_configuration blok zawierający ustawienia środowiska uruchomieniowego, takie jak require_approval. Zobacz Wymuszanie akceptacji narzędzi.

  • Zanotuj dokładne nazwy parametrów dla kroku wywołania (na przykład query vs queries).

Sprawdzanie — tools/call:

  • Brak pola najwyższego poziomu error . Jeśli występuje, sprawdź error.code. Aby uzyskać standardowe kody błędów MCP, zobacz specyfikację MCP:
    • -32006 → wymagana zgoda OAuth (wyodrębnij adres URL z error.message pliku).
    • Inne kody → awaria po stronie serwera.
  • result.content[] zawiera wpisy z "type": "text" — jest to dane wyjściowe narzędzia.
  • Dla wyszukiwania AI sprawdź result.structuredContent.documents[] metadane fragmentów (title, url, id, score).
  • Podczas wyszukiwania plików sprawdź result.content[].resource._meta metadane fragmentów (title, file_id, document_chunk_id, score).
  • Dla wyszukiwarek internetowych, sprawdź result.content[].resource._meta.annotations[] odnośniki URL (type, url, title, start_index, end_index).
  • W przypadku Fabric IQ sprawdź w result.structuredContent.documents[], czy są fragmenty cytowań. Każdy dokument zawiera pola title i url, które odwołują się do elementu Fabric (Ontology, agenta danych lub modelu semantycznego Power BI) użytego do uzasadnienia odpowiedzi.
  • "ServerError" Uważaj na w zawartości tekstowej — narzędzie zostało uruchomione, ale wystąpił błąd wewnętrzny.

Przykłady argumentów specyficznych dla tools/call narzędzia:

Typ narzędzia Argumenty
Wyszukiwanie AI {"query": "search text"}
Wyszukiwanie plików {"queries": ["search text"]} — lub {"queries": ["search text"], "vector_store_ids": ["<VECTOR_STORE_ID>"]} gdy magazyn wektorów jest przekazywany dynamicznie
Interpreter kodu {"code": "print(2 ** 100)"}
wyszukiwanie w sieci Web {"search_query": "weather in seattle"}
A2A {"message": {"parts": [{"kind": "text", "text": "Hello"}]}}
Inteligencja Tkanin Różni się w zależności od ujawnionego narzędzia — zwykle {"query": "..."} w przypadku narzędzi do wykonywania zapytań
Inteligencja Pracy {"message": {"parts": [{"type": "text", "text": "Hello"}]}}
MCP {"query": "what is agent service"}

Zintegruj zestaw narzędzi z agentem

W przypadku delegowania przez użytkownika z użyciem MCP i innych narzędzi połącz te narzędzia za pośrednictwem zestawu narzędzi Foundry. Podczas dodawania tego zestawu narzędzi do agenta hostowanego przez Microsoft Agent Framework użyj FoundryToolbox w języku Python lub AddFoundryToolboxes w środowisku .NET. Zobacz Korzystanie z zestawu narzędzi z hostowanym agentem.

LangGraph

Wymagania dotyczące fragmentu integracji hostowanej: Zainstaluj program langchain-azure-ai[tools]>1.2.3. W tym fragmencie użyto AzureAIProjectToolbox; aby uzyskać pełnego agenta, zestaw pakietów i pliki wdrożeniowe, użyj utrzymywanego przykładu LangGraph.

.env plik:

FOUNDRY_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
TOOLBOX_NAME=agent-tools
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o

main.py (wzorzec klucza):

from langchain_azure_ai.tools import AzureAIProjectToolbox

toolbox = AzureAIProjectToolbox(toolbox_name=TOOLBOX_NAME)
tools = await toolbox.get_tools()

Ważne

Klasa langchain_azure_ai.tools.AzureAIProjectToolbox wymaga .langchain-azure-ai[tools]>1.2.3

Microsoft — Struktura agentów

Zainstaluj agent-framework-foundry, oprócz wymaganego pakietu Azure Identity. Pełną implementację znajdziesz w utrzymywanym przykładzie Agent Framework.

Użyj FoundryToolbox z zestawu SDK Agent Framework, aby połączyć się z punktem końcowym toolbox. Klasa obsługuje uwierzytelnianie zestawu narzędzi i przekazuje kontekst wywołania agenta hostowanego.

.env plik:

FOUNDRY_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o

main.py (wzorzec klucza):

from agent_framework.foundry import FoundryToolbox
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# Toolbox MCP endpoint (platform-injected at runtime via TOOLBOX_ENDPOINT)
TOOLBOX_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1"

toolbox = FoundryToolbox(
    credential,
    url=TOOLBOX_ENDPOINT,
)

agent = chat_client.as_agent(
    name="my-toolbox-agent",
    instructions="You are a helpful assistant with access to Foundry toolbox tools.",
    tools=[toolbox],
)
ResponsesAgentServerHost().run()

zestaw SDK Copilot

Wymagania dotyczące fragmentu integracji hostowanej: Zainstaluj zestaw SDK GitHub Copilot dla środowiska uruchomieniowego. Zarys zależy od pomocników McpBridge i _get_toolbox_token należących do aplikacji, które nie są tutaj zaimplementowane. Postępuj zgodnie z istniejącymi wzorcami integracji punktów końcowych przybornika i uwierzytelniania oraz wzorcami integracji hostowanego agenta. Zachowana pełna próbka nie jest jeszcze dostępna.

Użyj zestawu SDK GitHub Copilot, aby zbudować agenta opartego na narzędziowniku, który łączy wywołanie narzędzia Copilot z punktem końcowym MCP narzędziownika Foundry.

Uwaga

Zestaw SDK Copilot odrzuca nazwy narzędzi zawierające kropki. Most automatycznie zastępuje . z _ w nazwach narzędzi. Na przykład myserver.get_info staje się .myserver_get_info

.env plik:

GITHUB_TOKEN=<your-github-token>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1

agent.py (wzorzec klucza — mostek MCP)

# 1. Open an MCP session to the toolbox endpoint
bridge = McpBridge(endpoint=TOOLBOX_ENDPOINT, token=_get_toolbox_token())
await bridge.initialize()
mcp_tools = await bridge.list_tools()

# 2. Map MCP tool list to Copilot SDK tool definitions
#    Dots in tool names are replaced with underscores (Copilot SDK requirement)
copilot_tools = [
    {
        "name": t["name"].replace(".", "_"),
        "description": t.get("description", ""),
        "parameters": t.get("inputSchema", {}),
    }
    for t in mcp_tools
]

# 3. Wire tool calls back to the MCP session
async def tool_handler(name: str, arguments: dict) -> str:
    return await bridge.call_tool(name.replace("_", ".", 1), arguments)

# 4. Run the Copilot SDK agent
agent = Agent(
    tools=copilot_tools,
    tool_handler=tool_handler,
    token=os.environ["GITHUB_TOKEN"],
)

Microsoft — Struktura agentów

Zainstaluj Microsoft.Agents.AI.Foundry.Hosting i Azure.Identity. Aby zapoznać się z kompletnym projektem, zobacz publiczny przykład hosted-toolbox dla platformy Agent Framework.

Użyj AddFoundryToolboxes, aby zarejestrować co najmniej jeden zestaw narzędzi za pomocą hostowanego agenta. Integracja ustala zarządzany punkt końcowy MCP, uwierzytelnia żądania i uwzględnia stan narzędzi w próbie gotowości.

Zmienne środowiskowe:

AZURE_AI_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o
TOOLBOX_NAME=<toolbox-name>

Program.cs (wzorzec klucza):

using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;

string projectEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
    ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable(
    "AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-4o";
string toolboxName = Environment.GetEnvironmentVariable("TOOLBOX_NAME")
    ?? throw new InvalidOperationException("TOOLBOX_NAME is not set.");

var credential = new DefaultAzureCredential();
AIAgent agent = new AIProjectClient(new Uri(projectEndpoint), credential)
    .AsAIAgent(
        model: deploymentName,
        instructions: "You are a helpful assistant with access to toolbox tools.",
        name: "hosted-toolbox-agent");

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.Services.AddFoundryToolboxes(credential, toolboxName);

var app = builder.Build();
app.MapFoundryResponses();
app.Run();

Uwaga

Przykłady integracji dla tego kroku są dostępne tylko dla Python i .NET.

Uwaga

Przykłady integracji dla tego kroku są dostępne tylko dla Python i .NET.

Użyj rozszerzenia Microsoft Foundry Toolkit dla programu Visual Studio Code, aby wygenerować szkielet przykładu hostowanego agenta, który jest już połączony z Twoim zestawem narzędzi.

  1. Wybierz pozycję Foundry Toolkit na pasku działań.
  2. W obszarze Moje zasoby rozwiń Twoją nazwę projektu>Narzędzia.
  3. Na karcie Przyborniki znajdź przybornik, który chcesz użyć, a następnie wybierz szablon kodu Scaffold.
  4. W Palecie Poleceń wybierz folder projektu po wyświetleniu powiadomienia.
  5. Otwórz wygenerowany README.md plik i wykonaj kroki instalacji, uruchamiania lokalnego i wdrażania dla szkieletu.

Wygenerowany projekt obejmuje punkt wejścia hostowanego agenta, pliki wdrożeniowe oraz README.md z dokładnymi instrukcjami konfiguracji, uruchamiania i wdrażania.

Jeśli chcesz zintegrować zestaw narzędzi z istniejącym projektem hostowanego agenta, zamiast generować nowy przykład, użyj punktu końcowego MCP zestawu narzędzi ze wzorcami dla języka Python lub platformy .NET w tej sekcji.

Przekaż punkt końcowy Toolbox swojemu agentowi

Po utworzeniu zestawu narzędzi pobierz jego punkt końcowy MCP za pomocą azd ai toolbox show i przekaż go do kodu agenta jako zmienną środowiskową. Agent odczytuje zmienną podczas uruchamiania i używa jej do połączenia się z zestawem narzędzi.

  1. Uzyskaj punkt końcowy narzędzia Toolbox:

    azd ai toolbox show <toolbox-name> --output json
    

    Pole endpoint w odpowiedzi identyfikuje wybraną wersję. Użyj jej do przetestowania tej wersji przed podwyższeniem poziomu. W przypadku agenta, który powinien korzystać z default_version, skonstruuj punkt końcowy odbiorcy bez wersji pokazany w sekcji Uzyskiwanie punktu końcowego MCP zestawu narzędzi.

  2. Ustaw punkt końcowy jako zmienną środowiskową, którą agent odczytuje podczas uruchamiania:

    # .env (or however your runtime loads environment variables)
    TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/mcp?api-version=v1
    
  3. W kodzie agenta odczytaj TOOLBOX_ENDPOINT go i nawiąż z nim połączenie za pomocą klienta MCP. Użyj wzorców integracji dla języka Python lub platformy .NET, opisanych wcześniej w tej sekcji, jako punktu odniesienia przy konfiguracji klienta i zakresu tokenu Entra (https://ai.azure.com/.default zakres).

Obsługa wymagań dotyczących zatwierdzania narzędzi

Przybornik zwraca _meta.tool_configuration obiekt do każdego wpisu narzędzia zwróconego przez tools/list. Gdy narzędzie ma require_approval ustawioną wartość "always", środowisko uruchomieniowe agenta musi przedstawić użytkownikowi oczekującą akcję i poczekać na potwierdzenie przed wywołaniem narzędzia. Punkt końcowy MCP nie blokuje tools/call. Egzekwowanie leży wyłącznie po stronie środowiska uruchomieniowego agenta.

Po utworzeniu i przetestowaniu zestawu narzędzi połącz go z agentem. Wzorzec integracji zależy od typu agenta:

  • Hostowany agent (własny kod uruchomiony w usłudze Foundry Agent Service): zobacz Korzystanie z przybornika z hostowanym agentem, aby zapoznać się ze wzorcami integracji dla Agent Framework, LangGraph, Visual Studio Code i Azure Developer CLI oraz wymaganiami dotyczącymi zatwierdzania w czasie wykonywania.

Konfigurowanie require_approval w narzędziu

Ustaw require_approval podczas tworzenia wersji zestawu narzędzi. Przykłady narzędzi MCP w sekcji Tworzenie wersji przybornika pokazują zarówno wartości "always", jak i "never". Aby ustawić to za pomocą SDK:

from azure.ai.projects.models import MCPToolboxTool

# Set require_approval on an MCP tool
toolbox_version = project.toolboxes.create_version(
    name="my-toolbox",
    tools=[
        MCPToolboxTool(
            server_label="myserver",
            server_url="https://your-mcp-server.example.com",
            require_approval="always",  # "always" | "never"
            project_connection_id="my-connection",
        )
    ],
)
{
  "tools": [
    {
      "type": "mcp",
      "server_label": "myserver",
      "server_url": "https://your-mcp-server.example.com",
      "require_approval": "always",
      "project_connection_id": "my-connection"
    }
  ]
}
MCPToolboxTool mcpTool = new(serverLabel: "myserver")
{
  ServerUri = new Uri("https://your-mcp-server.example.com"),
  ToolCallApprovalPolicy = new McpToolCallApprovalPolicy(
    GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval),
};
const tools = [
  {
    type: "mcp",
    server_label: "myserver",
    server_url: "https://your-mcp-server.example.com",
    require_approval: "always",
    project_connection_id: "my-connection",
  },
];

Użyj karty Python, .NET, JavaScript, interfejsu API REST lub Azure Developer CLI, aby skonfigurować require_approval w definicji zestawu narzędzi. Omówiony w tym artykule przepływ pracy rozszerzenia Microsoft Foundry Toolkit for Visual Studio Code koncentruje się na tworzeniu i korzystaniu z przybornika w programie Visual Studio Code.

resources:
  - kind: toolbox
    name: my-toolbox
    tools:
      - type: mcp
        server_label: myserver
        server_url: https://your-mcp-server.example.com
        require_approval: always
        project_connection_id: my-connection

Zarządzaj wersjami przybornika

Uwaga

Wersje przybornika można usuwać tylko za pomocą zestawu SDK Python, zestawu SDK .NET, zestawu SDK języka JavaScript i interfejsu API REST. Interfejs wiersza polecenia Azure Developer CLI obsługuje operacje wyświetlania listy, pobierania i publikowania (promowanie wersji domyślnej).

Wersje przybornika to niezmienne migawki konfiguracji narzędzi tego przybornika. Każde wywołanie do tworzenia punktu końcowego tworzy nowy ToolboxVersionObjectelement . Element nadrzędny ToolboxObject ma default_version pole, które kontroluje, która wersja jest obsługiwana przez punkt końcowy MCP. Utworzenie nowej wersji nie powoduje jej automatycznego wprowadzenia — to ty decydujesz, kiedy zaktualizować default_version. Ten proces umożliwia przygotowanie zmian, przetestowanie nowej wersji i przeniesienie jej do środowiska produkcyjnego według własnego harmonogramu.

Uwaga

W przypadku interfejsu wiersza polecenia Azure Developer CLI każda operacja modyfikująca, która jest kierowana do bieżącej wersji domyślnej — azd ai toolbox connection add/remove i azd ai toolbox skill add/remove — tworzy nową wersję zestawu narzędzi, która zachowuje wszystkie wcześniej dołączone połączenia i umiejętności z uwzględnieniem żądanej zmiany. Żadne z tych poleceń nie zmienia automatycznie elementu default_version; uruchom azd ai toolbox publish <toolbox-name> <version>, gdy będziesz gotowy(-a) aktywować nową wersję. Aby sprawdzić oczekującą wersję (inną niż domyślna), użyj polecenia azd ai toolbox show <name> --version <n>.

Obiektu Pola klucza Opis
ToolboxObject id, name, default_version Skrzynka narzędziowa. default_version wskazuje aktywną wersję.
ToolboxVersionObject id, name, , version, description, created_at, , tools[]policies Niezmienna migawka listy narzędzi przybornika w danym momencie czasu. policies.rai_config.rai_policy_name określa opcjonalną blokadę zastosowaną do tej wersji.

Tworzenie nowej wersji

Każde wywołanie tworzenia tworzy nową wersję. Jeśli przybornik jeszcze nie istnieje, proces automatycznie go utworzy. Podczas tworzenia pierwszej wersji nowego przybornika domyślna wersja to v1 do momentu ręcznej aktualizacji do innej wersji.

# Create a new toolbox version
toolbox_version = project.toolboxes.create_version(
    name="my-toolbox",
    description="Updated tools v2",
    tools=[...],
)
print(f"Created version: {toolbox_version.version}")
ToolboxVersion toolboxVersion = await toolboxClient.CreateVersionAsync(
  name: "<toolbox-name>",
    tools: [tool],
    description: "Updated tools v2"
);
Console.WriteLine($"Created version: {toolboxVersion.Version}");

POST {project_endpoint}/toolboxes/<toolbox-name>/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{
  "description": "Updated tools v2",
  "tools": [...]
}
const toolboxVersion = await project.toolboxes.createVersion(
  "<toolbox-name>",
  [/* tools array */],
  { description: "Updated tools v2" },
);
console.log(`Created version: ${toolboxVersion.version}`);

Użyj karty interfejsu API Python, .NET, JavaScript lub REST, aby utworzyć nową wersję skrzynki narzędziowej. W tym artykule opisano przepływ pracy rozszerzenia Microsoft Foundry Toolkit for Visual Studio Code, koncentrujący się na tworzeniu zestawu narzędzi i wygenerowaniu szkieletu hostowanego agenta, który z niego korzysta.

Ta operacja nie jest obsługiwana w interfejsie wiersza polecenia dewelopera Azure. Aby utworzyć wersję przybornika, skorzystaj z zakładki Python, .NET, REST API lub JavaScript.

Odpowiedź jest zawierająca ToolboxVersionObject nowy version identyfikator.

Lista wersji

# List all toolbox versions
versions = list(project.toolboxes.list_toolbox_versions(name="<toolbox-name>"))
for v in versions:
    print(f"{v.version} — created {v.created_at}")
List<ToolboxVersion> versions = await toolboxClient
    .GetToolboxVersionsAsync("<toolbox-name>")
    .ToListAsync();
Console.WriteLine($"Found {versions.Count} toolbox version(s).");
foreach (ToolboxVersion v in versions)
{
    Console.WriteLine($"  - {v.Name} ({v.Version})");
}
GET {project_endpoint}/toolboxes/<toolbox-name>/versions?api-version=v1
Authorization: Bearer {token}
const versions = project.toolboxes.listVersions("<toolbox-name>");
for await (const v of versions) {
  console.log(`${v.version} — created ${v.created_at}`);
}

Użyj karty interfejsu API Python, .NET, JavaScript lub REST, aby wyświetlić listę wersji przybornika.

# The current default version is marked with *
azd ai toolbox version list <toolbox-name>

Uzyskaj określoną wersję

# Get a specific toolbox version
version_obj = project.toolboxes.get_toolbox_version(
    toolbox_name="<toolbox-name>",
    version="<version_id>",
)
ToolboxVersion versionObj = await toolboxClient.GetToolboxVersionAsync(
    "<toolbox-name>",
    "<version_id>"
);
Console.WriteLine($"Retrieved toolbox: {versionObj.Name} ({versionObj.Id})");
GET {project_endpoint}/toolboxes/<toolbox-name>/versions/{version}?api-version=v1
Authorization: Bearer {token}
const versionObj = await project.toolboxes.getVersion(
  "<toolbox-name>",
  "<version_id>",
);
console.log(`Retrieved version: ${versionObj.version}`);

Użyj zakładki API Python, .NET, JavaScript lub REST, aby uzyskać określoną wersję pakietu narzędzi.

azd ai toolbox version get <toolbox-name> <version_id>

Podwyższanie poziomu wersji do domyślnej

Punkt końcowy MCP zawsze obsługuje element default_version. Aby przełączyć aktywną wersję, zaktualizuj narzędziownię:

# Promote a version to default
toolbox = project.toolboxes.update(
    toolbox_name="<toolbox-name>",
    default_version="<version_id>",
)
print(f"Active version: {toolbox.default_version}")
ToolboxRecord record = await toolboxClient.UpdateToolboxAsync(
    "<toolbox-name>",
    "<version_id>"
);
Console.WriteLine($"Active version: {record.DefaultVersion}");
PATCH {project_endpoint}/toolboxes/<toolbox-name>?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{
  "default_version": "<version_id>"
}

default_version nie może być pusty. Zastąp ją nową wersją.

const toolbox = await project.toolboxes.update(
  "<toolbox-name>",
  "<version_id>",
);
console.log(`Active version: ${toolbox.default_version}`);

Użyj karty Python, .NET, JavaScript lub REST API, aby ustawić wersję przybornika jako domyślną.

Wersje zestawu narzędzi są niezmienialne. Użyj publish polecenia , aby ustawić dowolną istniejącą wersję jako nową domyślną:

# Roll back or forward to a specific version
azd ai toolbox publish <toolbox-name> <version_id> --no-prompt

publish jest jedyną ścieżką, która zmienia default_version z poziomu CLI; czasowniki modyfikujące (connection add/remove, skill add/remove) zawsze tworzą nową wersję bez promowania jej.

Usuń wersję

# Delete a toolbox version
project.toolboxes.delete_toolbox_version(
    toolbox_name="<toolbox-name>",
    version="<version_id>",
)
await toolboxClient.DeleteToolboxVersionAsync(
    "<toolbox-name>",
    "<version_id>"
);
DELETE {project_endpoint}/toolboxes/<toolbox-name>/versions/{version}?api-version=v1
Authorization: Bearer {token}
await project.toolboxes.deleteVersion(
  "<toolbox-name>",
  "<version_id>",
);

Użyj karty interfejsu API Python, .NET, JavaScript lub REST, aby usunąć wersję przybornika.

Ta operacja nie jest obsługiwana w interfejsie wiersza polecenia dewelopera Azure. Aby usunąć wersję przybornika, skorzystaj z zakładki Python, .NET, REST API lub JavaScript.

Zarządzaj przybornikami przy użyciu serwera Foundry MCP Server

Foundry MCP Server (wersja zapoznawcza) udostępnia funkcje zarządzania przybornikami jako narzędzia MCP, dzięki czemu można pobierać, wersjonować, aktualizować i usuwać przyborniki za pomocą klienta MCP, takiego jak GitHub Copilot w Visual Studio Code. Aby skonfigurować serwer, zobacz Get started with Foundry MCP Server (wersja zapoznawcza).

Narzędzie Dostęp Opis
toolbox_get odczyt Pobierz zestaw narzędzi i jego aktualną domyślną wersję.
toolbox_version_get odczyt Wyświetl listę wersji przybornika lub pobierz określoną wersję.
toolbox_version_create zachować Utwórz niemodyfikowalną wersję zestawu narzędzi. Jeśli zestaw narzędzi nie istnieje, to narzędzie również go utworzy.
toolbox_update zachować Utwórz lub zaktualizuj zestaw narzędzi wraz z jego wersją domyślną.
toolbox_delete zachować Usuń skrzynkę narzędziową.
toolbox_version_delete zachować Usuń konkretną wersję zestawu narzędzi.

Te same reguły przechowywania wersji mają zastosowanie co w przypadku zestawów SDK. Utworzenie wersji dla istniejącego zestawu narzędzi nie zmienia wersji domyślnej. Aby promować wersję, wywołaj toolbox_update, ustawiając defaultVersion na nową wersję. Przed usunięciem bieżącej wersji domyślnej ustaw inną wersję jako domyślną.

Przykładowe podpowiedzi:

  • Pokaż mi customer-support-tools zestaw narzędzi.
  • Pobierz wersję 2 customer-support-tools.
  • "Utwórz nową wersję elementu customer-support-tools."
  • "Ustaw wersję 2 customer-support-tools jako domyślną".
  • "Ustaw wersję 1 customer-support-tools jako domyślną, a następnie usuń wersję 2".
  • Usuń old-support-tools skrzynkę narzędziową.

Pełny opis narzędzi znajdziesz w dokumencie Dostępne narzędzia i przykładowe prompty dla serwera Foundry MCP.

Konfigurowanie narzędzi

Wybierz typ narzędzia i wzorzec uwierzytelniania zgodny ze scenariuszem. Wybierz kartę preferowanego zestawu SDK lub metody wdrażania.

Na poniższej karcie azd każdego narzędzia przedstawiono deklaratywny plik YAML zestawu narzędzi. Aby utworzyć zestaw narzędzi w sposób imperatywny bez projektu agenta, użyj przepływu pracy azd ai toolbox create --from-file i zastosuj dane dla poszczególnych narzędzi przedstawione w poniższych sekcjach. Aby wdrożyć zestaw narzędzi z hostowanym agentem, zamodeluj go jako usługę azure.ai.toolbox w azure.yaml i połącz z nią agenta za pomocą uses: lub toolboxes:.

Wiele typów narzędzi

Pojedynczy przybornik może łączyć różne typy narzędzi. Poniższy przykład łączy wyszukiwanie w sieci Web, Wyszukiwanie AI platformy Azure i serwer MCP w jednym przyborniku:

{
  "description": "Web search, knowledge base search, and custom MCP server",
  "tools": [
    {
      "type": "web_search",
      "description": "Search the web for current information"
    },
    {
      "type": "azure_ai_search",
      "name": "my_aisearch",
      "description": "Search internal product documentation",
      "azure_ai_search": {
        "indexes": [
          {
            "index_name": "<INDEX_NAME>",
            "project_connection_id": "<CONNECTION_NAME>"
          }
        ]
      }
    },
    {
      "type": "mcp",
      "server_label": "myserver",
      "server_url": "https://your-mcp-server.example.com",
      "require_approval": "never",
      "project_connection_id": "my-key-auth-connection"
    }
  ]
}

Uwaga

Każdy typ narzędzia (web_search, azure_ai_search, , code_interpreterfile_search) może być wyświetlany co najwyżej raz bez name pola. Aby uwzględnić wiele wystąpień tego samego typu, ustaw unikatowe name dla każdego wystąpienia — zobacz następny przykład.

Ograniczenia dotyczące wielu narzędzi

Można dodać co najwyżej jedną instancję każdego typu wbudowanego narzędzia bez pola name w przyborniku. Jeśli dołączysz dwa wystąpienia tego samego typu bez elementu name, interfejs API zwróci:

400 invalid_payload: Multiple tools without identifiers found...

Dwa wystąpienia tego samego typu narzędzia

Użyj pola name, aby uwzględnić wiele wystąpień tego samego typu narzędzia w jednym przyborniku. Każda nazwana instancja jest traktowana jako oddzielne narzędzie i musi mieć unikatową nazwę.

{
  "description": "Two Azure AI Search indexes in a single toolbox",
  "tools": [
    {
      "type": "azure_ai_search",
      "name": "product-search",
      "description": "Search product catalog and specifications",
      "azure_ai_search": {
        "indexes": [
          {
            "index_name": "<PRODUCT_INDEX_NAME>",
            "project_connection_id": "<PRODUCT_CONNECTION_NAME>"
          }
        ]
      }
    },
    {
      "type": "azure_ai_search",
      "name": "support-search",
      "description": "Search support tickets and troubleshooting guides",
      "azure_ai_search": {
        "indexes": [
          {
            "index_name": "<SUPPORT_INDEX_NAME>",
            "project_connection_id": "<SUPPORT_CONNECTION_NAME>"
          }
        ]
      }
    }
  ]
}

Każdy typ narzędzia ma własną konfigurację przybornika — typy uwierzytelniania połączeń, fragmenty kodu zestawu SDK dla poszczególnych języków i wszelkie zachowania specyficzne dla przybornika. Te szczegóły znajdują się w artykule referencyjnym każdego narzędzia. Zobacz tabelę obsługiwanych funkcji, aby znaleźć łącze do każdego narzędzia.

W przypadku zachowań specyficznych dla zestawu narzędzi — takich jak dynamiczny magazyn wektorów dla funkcji File Search (zastępowanie parametru) lub przesyłanie plików na poziomie zasobu dla Code Interpreter i File Search — zobacz artykuł podlinkowany przy danym narzędziu.

Konfigurowanie poręczy

Zastosuj nazwaną zasadę ochronną do wersji zestawu narzędzi, aby wymusić filtrowanie treści zgodnie z zasadami odpowiedzialnej sztucznej inteligencji dla danych wejściowych i wyjściowych narzędzi. Mechanizm zabezpieczający działa na poziomie warstwy zestawu narzędzi, niezależnie od jakiegokolwiek filtra treści na poziomie modelu.

Odwołuj się do mechanizmu Guardrails za pomocą nazwy jego zasad, skonfigurowanego w portalu Foundry na karcie Zabezpieczenia. Ustaw policies.rai_config.rai_policy_name na nazwę zasad podczas tworzenia wersji zestawu narzędzi.

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import WebSearchToolboxTool

endpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>"
project = AIProjectClient(endpoint=endpoint, credential=DefaultAzureCredential())

toolbox_version = project.toolboxes.create_version(
    name="my-toolbox",
    description="Toolbox with guardrail",
    tools=[WebSearchToolboxTool()],
    policies={
        "rai_config": {
            "rai_policy_name": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>"
        }
    },
)
print(f"Created version: {toolbox_version.version}")
POST {endpoint}/toolboxes/{toolbox_name}/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json

{
  "description": "Toolbox with guardrail",
  "tools": [{ "type": "web_search" }],
  "policies": {
    "rai_config": {
      "rai_policy_name": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>"
    }
  }
}
#pragma warning disable AAIP001
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;

var projectEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT");
DefaultAzureCredential credential = new();
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: credential);
AgentToolboxes toolboxClient = projectClient.AgentAdministrationClient.GetAgentToolboxes();

var toolboxVersion = toolboxClient.CreateVersion(
  name: "my-toolbox",
    description: "Toolbox with guardrail",
    tools: [new WebSearchToolboxTool()],
    policies: new ToolboxPolicies
    {
        RaiConfig = new RaiConfig { RaiPolicyName = "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>" }
    });
Console.WriteLine($"Created version: {toolboxVersion.Version}");
const toolboxVersion = await project.toolboxes.createVersion(
  "my-toolbox",
  [{ type: "web_search" }],
  {
    description: "Toolbox with guardrail",
    policies: {
      rai_config: {
        rai_policy_name: "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>",
      },
    },
  },
);
console.log(`Created version: ${toolboxVersion.version}`);
name: my-toolbox
description: Toolbox with guardrail
policies:
  rai_config:
    rai_policy_name: /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>
tools:
  - type: web_search

Konfiguracja poręczy nie jest jeszcze dostępna w rozszerzeniu programu VS Code. Użyj interfejsu API REST, zestawu SDK lub interfejsu wiersza polecenia dla deweloperów Azure, aby skonfigurować zabezpieczenia.

Dołącz umiejętności do zestawu narzędzi

Przypisz umiejętności do wersji zestawu narzędzi, aby udostępnić je agentom za pośrednictwem punktu końcowego MCP zestawu narzędzi. Każda dokumentacja umiejętności określa nazwę umiejętności i opcjonalną wersję. Pomiń version, aby użyć wersji umiejętności default_version; przypnij ciąg version, aby użyć niezmiennej migawki.

Wersja zestawu narzędzi może zawierać narzędzia, umiejętności lub jedno i drugie. Poniższe przykłady tworzą wersję zestawu narzędzi zawierającą pojedyncze odwołanie do umiejętności. Aby dodać umiejętności do przybornika, który ma już narzędzia, dołącz to samo tools, którego użyto w sekcji Utwórz wersję przybornika, razem z tablicą skills.

Ważne

Umiejętności przypisane do zestawu narzędzi muszą istnieć w tym samym projekcie Foundry. Odwołania między projektami nie są obsługiwane.

Gdy agent lub klient MCP łączy się z punktem końcowym toolboxa, umiejętności są udostępniane jako zasoby MCP. Platforma klienta lub agenta MCP musi obsługiwać protokół MCP Resources, aby automatycznie odnajdywać i ładować umiejętności. Aby sprawdzić, czy umiejętności są wykrywalne, wywołaj resources/list w punkcie końcowym MCP narzędzia toolbox i potwierdź, że nazwy umiejętności pojawiają się w odpowiedzi.

POST {endpoint}/toolboxes/{toolbox_name}/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
Foundry-Features: Skills=V1Preview

{
  "description": "Toolbox with a skill reference",
  "tools": [],
  "skills": [
    {
      "type": "skill_reference",
      "name": "greeting"
    }
  ]
}

Aby przypiąć określoną wersję:

{
  "skills": [
    {
      "type": "skill_reference",
      "name": "greeting",
      "version": "v1"
    }
  ]
}
from azure.ai.projects.models import ToolboxSkillReference

toolbox_version = project.toolboxes.create_version(
    name="my-toolbox",
    description="Toolbox with a skill reference",
    tools=[],
    skills=[
        ToolboxSkillReference(name="greeting"),              # use default version
        # ToolboxSkillReference(name="greeting", version="1"),  # pin to version 1
    ],
)
print(f"Created toolbox version: {toolbox_version.id}")
#pragma warning disable AAIP001
// Reuse the AgentToolboxes client (toolboxClient) from Step 1.
ToolboxSkillReference skillRef = new("greeting");
// To pin a version: new ToolboxSkillReference("greeting") { Version = "1" }

ToolboxVersion toolboxVersion = toolboxClient.CreateVersion(
    name: "my-toolbox",
    tools: [],
    skills: [skillRef],
    description: "Toolbox with a skill reference"
);
Console.WriteLine($"Created toolbox version: {toolboxVersion.Id}");
const toolboxVersion = await project.toolboxes.createVersion(
  "my-toolbox",
  [],
  {
    description: "Toolbox with a skill reference",
    skills: [
      { type: "skill_reference", name: "greeting" },
      // { type: "skill_reference", name: "greeting", version: "v1" },  // pin to v1
    ],
  },
);
console.log(`Created toolbox version: ${toolboxVersion.id}`);

Interfejs wiersza polecenia platformy Azure dla deweloperów obsługuje odwołania do umiejętności w dwóch miejscach: deklaratywnie jako blok najwyższego poziomu skills: w pliku YAML azd ai toolbox create --from-file oraz imperatywnie za pomocą czasowników azd ai toolbox skill add/list/remove. Każde odwołanie przyjmuje name (wymagane) oraz opcjonalnie version (ciąg znaków). Pomiń version, aby stosować default_version umiejętności; przypnij ciąg wersji, aby zablokować zestaw narzędzi do niezmiennej migawki.

Określ umiejętności podczas tworzenia przybornika

# my-toolbox.yaml
description: Toolbox with skill references
connections:
  - name: my-gh-conn
skills:
  - name: greeting              # follows the skill's default version
  - name: review-checklist
    version: "2"               # pin to skill version 2
azd ai toolbox create my-toolbox --from-file ./my-toolbox.yaml --no-prompt

Dodawanie, wyświetlanie i usuwanie umiejętności w istniejącym przyborniku

# Add a skill (follows default version)
azd ai toolbox skill add my-toolbox greeting

# Add a skill pinned to a specific version
azd ai toolbox skill add my-toolbox review-checklist@2

# Add multiple skills from a file (same shape as the create YAML's skills block)
azd ai toolbox skill add my-toolbox --from-file ./skills.yaml

# List skill references on the current default version
azd ai toolbox skill list my-toolbox --output table

# Remove a skill (--force skips the confirmation prompt; multiple names allowed)
azd ai toolbox skill remove my-toolbox greeting --force

skill list wyświetla tylko wersję domyślną. Przypięte umiejętności wyświetlają swoją wersję; nieprzypięte umiejętności wyświetlają (default). Aby sprawdzić skille w wersji oczekującej, uruchom azd ai toolbox show <toolbox> --version <n> --output json i odczytaj tablicę skills.

Ważne

skill add i skill remove — oba — tworzą nową wersję zestawu narzędzi, która zachowuje wszystkie wcześniej dodane połączenia i umiejętności, z uwzględnieniem żądanej zmiany. Nie podwyższają one poziomu nowej wersji do domyślnej, więc zmiany nie są widoczne dla klientów MCP, dopóki nie uruchomisz polecenia azd ai toolbox publish <toolbox> <version>. Aby zmienić przypiętą wersję umiejętności, która jest już dołączona — na przykład uaktualnij greeting z wersji 1 do wersji 2 — uruchom trzy polecenia w kolejności: skill remove, publish nową wersję, a następnie skill add <name>@<new-version> (skill add blokuje duplikaty w przypadku sprawdzania bieżącej wersji domyślnej).

Nazwy umiejętności muszą być zgodne z ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$ (małe litery, cyfry i łączniki; maksymalnie 64 znaki; bez łącznika na początku ani na końcu). Końcowe @ w <name>@<version> (pusta wersja) jest odrzucane.

Odwołań do umiejętności nie można obecnie konfigurować za pomocą rozszerzenia VS Code. Konfigurowanie umiejętności przy użyciu interfejsu API REST lub zestawu SDK.

Weryfikuj wykrywanie umiejętności

Po dołączeniu umiejętności do wersji przybornika sprawdź, czy można je wykryć za pośrednictwem punktu końcowego MCP przybornika przy użyciu zestawu MCP Python SDK:

import asyncio
from azure.identity import DefaultAzureCredential
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def list_skills():
    credential = DefaultAzureCredential()
    token = credential.get_token("https://ai.azure.com/.default").token
    toolbox_url = "{endpoint}/toolboxes/my-toolbox/mcp?api-version=v1"
    headers = {
        "Authorization": f"Bearer {token}",
    }
    async with streamablehttp_client(toolbox_url, headers=headers) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()
            resources = await session.list_resources()
            for resource in resources.resources:
                print(f"Skill: {resource.uri} - {resource.name}")

asyncio.run(list_skills())

Umiejętności są wyświetlane jako zasoby MCP z identyfikatorami URI w formacie skill://{name}.

Korzystanie z umiejętności agenta (Microsoft Agent Framework, .NET)

W .NET użyj AgentSkillsProviderBuilder().UseMcpSkills(mcpClient) z zestawu SDK Microsoft Agent Framework, aby odkrywać umiejętności oparte na MCP z punktu końcowego zestawu narzędzi i wstrzyknąć je do agenta jako AIContextProviders. Następnie agent ładuje instrukcje poszczególnych umiejętności w czasie wykonywania, gdy model zdecyduje, że jest to istotne. Poniższe Program.cs hostuje agenta z warstwą hostingu Responses (AddFoundryResponses i MapFoundryResponses).

using System.Net.Http.Headers;
using Azure.AI.Projects;
using Azure.Core;
using Azure.Identity;
using DotNetEnv;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;

// Load .env file if present (for local development).
Env.TraversePath().Load();

string projectEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
    ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT environment variable is not set.");

string deployment = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME")
    ?? throw new InvalidOperationException("AZURE_AI_MODEL_DEPLOYMENT_NAME environment variable is not set.");

string toolboxName = Environment.GetEnvironmentVariable("TOOLBOX_NAME")
    ?? throw new InvalidOperationException("TOOLBOX_NAME environment variable is not set.");

// Build the Foundry Toolbox MCP URL from the project endpoint and toolbox name.
string toolboxMcpServerUrl = $"{projectEndpoint.TrimEnd('/')}/toolboxes/{toolboxName}/mcp?api-version=v1";

TokenCredential credential = new DefaultAzureCredential();

// HttpClient that attaches a fresh Foundry bearer token to every request.
// CheckCertificateRevocationList = true satisfies CA5399.
using var httpClient = new HttpClient(
    new BearerTokenHandler(credential, "https://ai.azure.com/.default")
    {
        CheckCertificateRevocationList = true,
    });

Console.WriteLine($"Connecting to Foundry Toolbox '{toolboxName}' MCP server...");

// Connect to the Foundry Toolbox MCP endpoint.
await using var mcpClient = await McpClient.CreateAsync(
    new HttpClientTransport(
        new HttpClientTransportOptions
        {
            Endpoint = new Uri(toolboxMcpServerUrl),
            Name = toolboxName,
            TransportMode = HttpTransportMode.StreamableHttp,
        },
        httpClient));

// AgentSkillsProvider implements progressive disclosure over the MCP-discovered skills:
// names and descriptions are advertised in the system prompt, and the full skill body
// (and any supplementary resources) is loaded on demand when the model decides it is
// relevant.
var skillsProvider = new AgentSkillsProviderBuilder()
    .UseMcpSkills(mcpClient)
    .Build();

AIAgent agent = new AIProjectClient(new Uri(projectEndpoint), credential)
    .AsAIAgent(new ChatClientAgentOptions
    {
        Name = "foundry-toolbox-mcp-skills",
        Description = "Agent that discovers MCP-based skills from a Foundry Toolbox and exposes them via AgentSkillsProvider.",
        ChatOptions = new ChatOptions
        {
            ModelId = deployment,
            Instructions = "You are a helpful assistant.",
        },
        AIContextProviders = [skillsProvider],
    });

var builder = AgentHost.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.RegisterProtocol("responses", endpoints => endpoints.MapFoundryResponses());

var app = builder.Build();
app.Run();

// HttpClientHandler that attaches a fresh Foundry bearer token to every outgoing request.
internal sealed class BearerTokenHandler(TokenCredential credential, string scope) : HttpClientHandler
{
    private readonly TokenRequestContext _tokenContext = new([scope]);

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        AccessToken token = await credential.GetTokenAsync(this._tokenContext, cancellationToken).ConfigureAwait(false);
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.Token);
        return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
    }
}

Aby zapoznać się z kompletnym przykładem, w tym plikami projektu i instrukcjami wdrażania, zobacz Skills in Toolbox sample.

Przypomnienie

Narzędzie reminder_preview umożliwia hostowanym agentowi zaplanowanie ponownego uruchomienia w przyszłości. Gdy agent wywołuje to narzędzie, określa opóźnienie w minutach. Po tym opóźnieniu Foundry ponownie wywołuje tego samego agenta w ramach tej samej konwersacji.

Rozwiązywanie problemów

Objaw Prawdopodobna przyczyna Naprawić
tools/list zwraca zero narzędzi dla narzędzi MCP lub A2A Nieprawidłowe lub brakujące poświadczenia połączenia dla zdalnego serwera MCP lub agenta A2A. Przybornik nie może pobrać manifestów narzędzi z zdalnego punktu końcowego bez prawidłowego uwierzytelniania. Sprawdź, czy project_connection_id istnieje w projekcie Foundry, a poświadczenia są poprawne. Spróbuj nawiązać połączenie z serwerem MCP bezpośrednio, aby przetestować konfigurację uwierzytelniania. Jeśli używasz tożsamości zarządzanej (PMI, tożsamości agenta lub mi), sprawdź prawidłowe przypisania ról RBAC dla obiektu wywołującego w zasobie docelowym.
tools/list nie zwraca żadnych narzędzi dla OpenAPI Nieprawidłowa specyfikacja interfejsu OpenAPI. Przybornik konstruuje manifest narzędzia ze specyfikacji, która kończy się niepowodzeniem, jeśli specyfikacja jest źle sformułowana. Zweryfikuj zawartość specyfikacji interfejsu OpenAPI. Sprawdź, czy jest on zgodny ze specyfikacją OpenAPI 3.0 lub 3.1 i zawiera prawidłowe wartości paths oraz schematy parametrów operationId. Jeśli korzystasz z uwierzytelniania tożsamości zarządzanej, zweryfikuj również przypisania ról RBAC w usłudze docelowej.
tools/list zwraca mniej narzędzi niż oczekiwano Filtr allowed_tools zawiera niepoprawne lub błędnie napisane nazwy narzędzi. Nazwy narzędzi są rozróżnialne ze względu na wielkość liter i muszą być zgodne ze specyfikacją MCP dla nazw narzędzi (bez białych znaków i znaków specjalnych). Tymczasowo usuń allowed_tools i wywołaj tools/list , aby pobrać pełną listę narzędzi. Użyj dokładnych nazw z odpowiedzi, aby ustawić wartości dla elementu allowed_tools.
tools/list zwraca zero narzędzi (inne typy narzędzi) Przybornik nie został w pełni dostarczony ani typ narzędzia nie jest obsługiwany w regionie. W przypadku wbudowanych narzędzi (wyszukiwanie w sieci Web, wyszukiwanie sztucznej inteligencji, interpreter kodu, wyszukiwanie plików), manifesty narzędzi są konstruowane po stronie serwera i nie wymagają uwierzytelniania — jeśli zwracają puste, wersja przybornika może nie zostać jeszcze aprowizowana. Poczekaj 10 sekund i spróbuj ponownie.
400 Multiple tools without identifiers Dwa nienazwane typy narzędzi w jednym przyborniku Zachowaj co najwyżej jeden nienazwany typ; dodaj server_label do wszystkich narzędzi MCP.
CONSENT_REQUIRED (kod -32006) Połączenie OAuth wymaga zgody użytkownika Otwórz adres URL zgody w przeglądarce i ukończ przepływ OAuth, a następnie ponów próbę.
401 w przypadku wywołań MCP Wygasły token lub nieprawidłowy zakres Użyj zakresu https://ai.azure.com/.default i odśwież token.
Nazwy narzędzi nie pasują do siebie Nazwy narzędzi MCP są poprzedzone prefiksem server_label Użyj {server_label}.{tool_name} formatu (na przykład myserver.get_info).
500 na send_ping() Serwer MCP Toolbox nie implementuje metody MCP ping. Użyj klasy Microsoft Agent Framework FoundryToolbox, która obsługuje połączenie z Przybornikiem. Nie dzwonij send_ping() bezpośrednio.
500 na prompts/list Serwer MCP rozwiązania Foundry nie implementuje prompts/list. Przekaż load_prompts=False (lub równoważne) konstruktorowi klienta MCP.
500 z brakiem przesyłania strumieniowego tools/call Tryb nieprzesyłania strumieniowego (stream=False) nie jest obsługiwany w przypadku punktów końcowych MCP przybornika. Zawsze używaj stream=True podczas wywoływania narzędzi MCP zestawu narzędzi.
500 na tools/list Błąd przejściowy serwera Ponów próbę po kilku sekundach.
Zmienne środowiskowe zastąpione w czasie wykonywania Platforma rezerwuje wszystkie zmienne środowiskowe poprzedzone prefiksem FOUNDRY_ i może dyskretnie zastąpić wartości zdefiniowane przez użytkownika. Zmień nazwę niestandardowych zmiennych środowiskowych, aby uniknąć prefiksu FOUNDRY_ (na przykład zamiast TOOLBOX_MCP_ENDPOINTFOUNDRY_TOOLBOX_ENDPOINT).

Narzędzie przypomnienia jest dostępne tylko dla hostowanych agentów. Nie można używać narzędzia przypomnień z agentami promptów.

Aby uzyskać pełne instrukcje dotyczące konfiguracji, przykłady użycia i ograniczenia, zobacz Narzędzie przypomnienia dla agentów samodzielnego planowania.

Zgodność regionów i modeli

Dostępność przybornika zależy od dwóch czynników poza regionem projektu.

  • Region: niektóre typy narzędzi nie są dostępne w każdym regionie obsługującym usługę agenta. Na przykład region obsługujący punkt końcowy narzędziowni może nie obsługiwać wszystkich wbudowanych typów narzędzi.

Przed wdrożeniem narzędzia sprawdź, czy region docelowy obsługuje typy narzędzi, których planujesz użyć. Aby uzyskać pełną zgodność tabel, zobacz Temat Obsługa narzędzi według regionów i modelu.