Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Protokol Konteks Model adalah standar terbuka yang menentukan bagaimana aplikasi menyediakan alat dan data kontekstual ke model bahasa besar (LLM). Ini memungkinkan integrasi alat eksternal yang konsisten dan dapat diskalakan ke dalam alur kerja model.
Microsoft Agent Framework mendukung integrasi dengan server Protokol Konteks Model (MCP), memungkinkan agen Anda mengakses alat dan layanan eksternal. Panduan ini menunjukkan cara terhubung ke server MCP dan menggunakan alatnya dalam agen Anda.
Pertimbangan untuk menggunakan server MCP pihak ketiga
Penggunaan Server Protokol Konteks Model Anda tunduk pada persyaratan antara Anda dan penyedia layanan. Saat Anda tersambung ke layanan non-Microsoft, beberapa data Anda (seperti konten permintaan) diteruskan ke layanan non-Microsoft, atau aplikasi Anda mungkin menerima data dari layanan non-Microsoft. Anda bertanggung jawab atas penggunaan layanan dan data non-Microsoft, bersama dengan biaya apa pun yang terkait dengan penggunaan tersebut.
Server MCP jarak jauh yang Anda putuskan untuk digunakan dengan alat MCP yang dijelaskan dalam artikel ini dibuat oleh pihak ketiga, bukan Microsoft. Microsoft belum menguji atau memverifikasi server ini. Microsoft tidak bertanggung jawab kepada Anda atau orang lain sehubungan dengan penggunaan Server MCP jarak jauh apa pun.
Kami menyarankan agar Anda meninjau dan melacak server MCP apa yang Anda tambahkan ke aplikasi berbasis Agent Framework Anda. Kami juga menyarankan agar Anda mengandalkan server yang dihosting oleh penyedia layanan tepercaya itu sendiri daripada proksi.
Alat MCP memungkinkan Anda meneruskan header kustom, seperti kunci autentikasi atau skema, yang mungkin diperlukan server MCP jarak jauh. Sebaiknya tinjau semua data yang dibagikan dengan server MCP jarak jauh dan Anda mencatat data untuk tujuan audit. Perhatikan praktik retensi dan lokasi data yang tidak menggunakan Microsoft.
Penting
Anda hanya dapat menentukan header dengan menyertakannya dalam tool_resources di setiap eksekusi. Dengan cara ini, Anda dapat menempatkan kunci API, token akses OAuth, atau kredensial lainnya langsung dalam permintaan Anda. Header yang Anda masukkan hanya tersedia selama proses berjalan dan tidak disimpan.
Untuk informasi selengkapnya tentang keamanan MCP, lihat:
- Praktik Terbaik Keamanan di situs web Protokol Konteks Model.
- Memahami dan mengurangi risiko keamanan dalam implementasi MCP di Blog Komunitas Keamanan Microsoft.
Versi .NET dari Agent Framework dapat digunakan bersama dengan MCP C# SDK resmi untuk memungkinkan agen Anda memanggil alat MCP.
Contoh berikut menunjukkan cara:
- Menyiapkan dan server MCP
- Mengambil daftar alat yang tersedia dari Server MCP
- Mengonversi alat MCP menjadi
AIFunction's sehingga dapat ditambahkan ke agen - Memanggil alat dari agen menggunakan panggilan fungsi
Menyiapkan Klien MCP
Pertama, buat klien MCP yang terhubung ke server MCP yang Anda inginkan:
// Create an MCPClient for the GitHub server
await using var mcpClient = await McpClientFactory.CreateAsync(new StdioClientTransport(new()
{
Name = "MCPServer",
Command = "npx",
Arguments = ["-y", "--verbose", "@modelcontextprotocol/server-github"],
}));
Dalam contoh ini:
- Nama: Nama yang mudah diingat untuk koneksi server MCP Anda
- Perintah: Executable untuk menjalankan server MCP (di sini menggunakan npx untuk menjalankan paket Node.js)
- Argumen: Argumen baris perintah diteruskan ke server MCP
Mengambil Alat yang Tersedia
Setelah tersambung, ambil daftar alat yang tersedia dari server MCP:
// Retrieve the list of tools available on the GitHub server
var mcpTools = await mcpClient.ListToolsAsync().ConfigureAwait(false);
Metode ini ListToolsAsync() mengembalikan kumpulan alat yang diekspos server MCP. Alat-alat ini secara otomatis dikonversi ke objek AITool yang dapat digunakan oleh agen Anda.
Membuat Agen dengan Alat MCP
Buat agen Anda dan berikan alat MCP selama inisialisasi:
AIAgent agent = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
.AsAIAgent(
instructions: "You answer questions related to GitHub repositories only.",
tools: [.. mcpTools.Cast<AITool>()]);
Peringatan
DefaultAzureCredential nyaman untuk pengembangan tetapi membutuhkan pertimbangan yang cermat dalam produksi. Dalam produksi, pertimbangkan untuk menggunakan kredensial tertentu (misalnya, ManagedIdentityCredential) untuk menghindari masalah latensi, pemeriksaan kredensial yang tidak diinginkan, dan potensi risiko keamanan dari mekanisme fallback.
Poin utama:
- Petunjuk: Berikan instruksi yang jelas yang selaras dengan kemampuan alat MCP Anda
-
Alat: Mentransmisikan alat MCP ke
AIToolobjek dan menyebarkannya ke dalam array alat - Agen akan secara otomatis memiliki akses ke semua alat yang disediakan oleh server MCP
Menggunakan Agen
Setelah dikonfigurasi, agen Anda dapat secara otomatis menggunakan alat MCP untuk memenuhi permintaan pengguna:
// Invoke the agent and output the text result
Console.WriteLine(await agent.RunAsync("Summarize the last four commits to the microsoft/semantic-kernel repository?"));
Agen akan:
- Menganalisis permintaan pengguna
- Menentukan alat MCP mana yang diperlukan
- Memanggil alat yang sesuai melalui server MCP
- Mensintesis hasil menjadi respons koheren
Konfigurasi Lingkungan
Pastikan untuk menyiapkan variabel lingkungan yang diperlukan:
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ??
throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
Manajemen Sumber Daya
Selalu buang sumber daya klien MCP dengan benar:
await using var mcpClient = await McpClientFactory.CreateAsync(...);
Menggunakan await using memastikan koneksi klien MCP ditutup dengan benar ketika keluar dari cakupan.
Server MCP Umum
Server MCP populer meliputi:
-
@modelcontextprotocol/server-github: Mengakses repositori dan data GitHub -
@modelcontextprotocol/server-filesystem: Operasi sistem file -
@modelcontextprotocol/server-sqlite: Akses database SQLite
Setiap server menyediakan berbagai alat dan kemampuan yang memperluas fungsionalitas agen Anda. Integrasi ini memungkinkan agen Anda untuk mengakses data dan layanan eksternal dengan lancar sambil mempertahankan manfaat keamanan dan standarisasi Protokol Konteks Model.
Kode sumber lengkap dan instruksi untuk menjalankan sampel ini tersedia di https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/GettingStarted/ModelContextProtocol/Agent_MCP_Server.
Petunjuk / Saran
Lihat sampel .NET untuk contoh lengkap yang dapat dijalankan.
Ini memungkinkan agen Anda mengakses alat dan layanan eksternal dengan mulus.
Jenis Alat MCP
Agent Framework mendukung tiga jenis koneksi MCP:
MCPStdioTool - Server MCP Lokal
Gunakan MCPStdioTool untuk menyambungkan ke server MCP yang berjalan sebagai proses lokal menggunakan input/output standar:
import asyncio
from agent_framework import Agent, MCPStdioTool
from agent_framework.openai import OpenAIChatClient
async def local_mcp_example():
"""Example using a local MCP server via stdio."""
async with (
MCPStdioTool(
name="calculator",
command="uvx",
args=["mcp-server-calculator"]
) as mcp_server,
Agent(
chat_client=OpenAIChatClient(),
name="MathAgent",
instructions="You are a helpful math assistant that can solve calculations.",
) as agent,
):
result = await agent.run(
"What is 15 * 23 + 45?",
tools=mcp_server
)
print(result)
if __name__ == "__main__":
asyncio.run(local_mcp_example())
MCPStreamableHTTPTool - Server HTTP/SSE MCP
Gunakan MCPStreamableHTTPTool untuk menyambungkan ke server MCP melalui HTTP dengan peristiwa Server-Sent:
import asyncio
from agent_framework import Agent, MCPStreamableHTTPTool
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import AzureCliCredential
async def http_mcp_example():
"""Example using an HTTP-based MCP server."""
async with (
AzureCliCredential() as credential,
MCPStreamableHTTPTool(
name="Microsoft Learn MCP",
url="https://learn.microsoft.com/api/mcp",
headers={"Authorization": "Bearer your-token"},
) as mcp_server,
Agent(
chat_client=AzureAIAgentClient(async_credential=credential),
name="DocsAgent",
instructions="You help with Microsoft documentation questions.",
) as agent,
):
result = await agent.run(
"How to create an Azure storage account using az cli?",
tools=mcp_server
)
print(result)
if __name__ == "__main__":
asyncio.run(http_mcp_example())
MCPWebsocketTool - Server MCP WebSocket
Gunakan MCPWebsocketTool untuk menyambungkan ke server MCP melalui koneksi WebSocket:
import asyncio
from agent_framework import Agent, MCPWebsocketTool
from agent_framework.openai import OpenAIChatClient
async def websocket_mcp_example():
"""Example using a WebSocket-based MCP server."""
async with (
MCPWebsocketTool(
name="realtime-data",
url="wss://api.example.com/mcp",
) as mcp_server,
Agent(
chat_client=OpenAIChatClient(),
name="DataAgent",
instructions="You provide real-time data insights.",
) as agent,
):
result = await agent.run(
"What is the current market status?",
tools=mcp_server
)
print(result)
if __name__ == "__main__":
asyncio.run(websocket_mcp_example())
Server MCP Populer
Server MCP umum yang dapat Anda gunakan dengan Python Agent Framework:
-
Kalkulator:
uvx mcp-server-calculator- Komputasi matematika -
Sistem file:
uvx mcp-server-filesystem- Operasi sistem file -
GitHub:
npx @modelcontextprotocol/server-github- Akses repositori GitHub -
SQLite:
uvx mcp-server-sqlite- Operasi database
Setiap server menyediakan berbagai alat dan kemampuan yang memperluas fungsionalitas agen Anda sambil mempertahankan manfaat keamanan dan standarisasi Protokol Konteks Model.
Contoh lengkap
# Copyright (c) Microsoft. All rights reserved.
import os
from agent_framework import Agent, MCPStreamableHTTPTool
from agent_framework.openai import OpenAIResponsesClient
from httpx import AsyncClient
"""
MCP Authentication Example
This example demonstrates how to authenticate with MCP servers using API key headers.
For more authentication examples including OAuth 2.0 flows, see:
- https://github.com/modelcontextprotocol/python-sdk/tree/main/examples/clients/simple-auth-client
- https://github.com/modelcontextprotocol/python-sdk/tree/main/examples/servers/simple-auth
"""
async def api_key_auth_example() -> None:
"""Example of using API key authentication with MCP server."""
# Configuration
mcp_server_url = os.getenv("MCP_SERVER_URL", "your-mcp-server-url")
api_key = os.getenv("MCP_API_KEY")
# Create authentication headers
# Common patterns:
# - Bearer token: "Authorization": f"Bearer {api_key}"
# - API key header: "X-API-Key": api_key
# - Custom header: "Authorization": f"ApiKey {api_key}"
auth_headers = {
"Authorization": f"Bearer {api_key}",
}
# Create HTTP client with authentication headers
http_client = AsyncClient(headers=auth_headers)
# Create MCP tool with the configured HTTP client
async with (
MCPStreamableHTTPTool(
name="MCP tool",
description="MCP tool description",
url=mcp_server_url,
http_client=http_client, # Pass HTTP client with authentication headers
) as mcp_tool,
Agent(
client=OpenAIResponsesClient(),
name="Agent",
instructions="You are a helpful assistant.",
tools=mcp_tool,
) as agent,
):
query = "What tools are available to you?"
print(f"User: {query}")
result = await agent.run(query)
print(f"Agent: {result.text}")
Mengekspos Agen sebagai Server MCP
Anda dapat mengekspos agen sebagai server MCP, memungkinkannya digunakan sebagai alat oleh klien yang kompatibel dengan MCP (seperti Agen GitHub Copilot Visual Studio Code atau agen lain). Nama dan deskripsi agen menjadi metadata server MCP.
Bungkus agen dalam alat fungsi menggunakan .AsAIFunction(), buat McpServerTool, dan daftarkan dengan server MCP:
using System;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Server;
// Create the agent
AIAgent agent = new AzureOpenAIClient(
new Uri("https://<myresource>.openai.azure.com"),
new AzureCliCredential())
.GetChatClient("gpt-4o-mini")
.AsAIAgent(instructions: "You are good at telling jokes.", name: "Joker");
// Convert the agent to an MCP tool
McpServerTool tool = McpServerTool.Create(agent.AsAIFunction());
// Set up the MCP server over stdio
HostApplicationBuilder builder = Host.CreateEmptyApplicationBuilder(settings: null);
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithTools([tool]);
await builder.Build().RunAsync();
Instal paket NuGet yang diperlukan:
dotnet add package Microsoft.Extensions.Hosting --prerelease
dotnet add package ModelContextProtocol --prerelease
Panggil .as_mcp_server() agen untuk mengeksposnya sebagai server MCP:
from agent_framework.openai import OpenAIResponsesClient
from typing import Annotated
def get_specials() -> Annotated[str, "Returns the specials from the menu."]:
return "Special Soup: Clam Chowder, Special Salad: Cobb Salad"
# Create an agent with tools
agent = OpenAIResponsesClient().as_agent(
name="RestaurantAgent",
description="Answer questions about the menu.",
tools=[get_specials],
)
# Expose the agent as an MCP server
server = agent.as_mcp_server()
Siapkan server MCP untuk mendengarkan input/output standar:
import anyio
from mcp.server.stdio import stdio_server
async def run():
async with stdio_server() as (read_stream, write_stream):
await server.run(read_stream, write_stream, server.create_initialization_options())
if __name__ == "__main__":
anyio.run(run)