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.
Dalam panduan memulai cepat ini, Anda membuat server Protokol Konteks Model (MCP) kustom jarak jauh dari proyek templat menggunakan Azure Developer CLI (azd). Server MCP menggunakan ekstensi server MCP Azure Functions untuk menyediakan alat untuk model, agen, dan asisten AI. Setelah menjalankan proyek secara lokal dan memverifikasi kode Anda menggunakan GitHub Copilot, Anda menyebarkannya ke aplikasi fungsi tanpa server baru di Azure Functions yang mengikuti praktik terbaik saat ini untuk penyebaran yang aman dan dapat diskalakan.
Tip
Functions juga memungkinkan Anda untuk menyebarkan proyek kode server MCP yang ada ke aplikasi paket Konsumsi Flex tanpa harus membuat perubahan pada proyek kode Anda. Untuk informasi selengkapnya, lihat Mulai Cepat: Menghosting server MCP yang ada di Azure Functions.
Karena aplikasi baru berjalan pada paket Konsumsi Flex, yang mengikuti model penagihan bayar untuk apa yang Anda gunakan, menyelesaikan panduan memulai cepat ini hanya menghabiskan biaya kecil beberapa sen USD atau kurang di akun Azure Anda.
Penting
Membuat server MCP kustom didukung untuk semua bahasa pemrograman Functions, namun skenario mulai cepat ini contohnya hanya ada untuk C#, Python, dan TypeScript. Untuk menyelesaikan panduan cepat ini, di bagian atas artikel, pilih salah satu bahasa yang didukung.
Artikel ini mendukung model pemrograman Node.js versi 4 untuk Azure Functions.
Artikel ini mendukung model pemrograman Python versi 2 untuk Azure Functions.
Prasyarat
-
Kit Pengembang Java 17
- Jika Anda menggunakan versi Java lain yang didukung, Anda harus memperbarui file pom.xml proyek.
- Atur
JAVA_HOMEvariabel lingkungan ke lokasi penginstalan versi Java Development Kit (JDK) yang benar.
- Apache Maven 3.8.x
Visual Studio Code dengan ekstensi ini:
Ekstensi Azure Functions. Ekstensi ini memerlukan Azure Functions Core Tools dan mencoba menginstalnya saat tidak tersedia.
Azure CLI. Anda juga dapat menjalankan perintah Azure CLI di Azure Cloud Shell.
Sebuah akun Azure dengan langganan aktif. Buat akun secara gratis.
Menginisialisasi proyek
azd init Gunakan perintah untuk membuat proyek kode Azure Functions lokal dari templat.
- Di Visual Studio Code, buka folder atau ruang kerja tempat Anda ingin membuat proyek.
Di Terminal, jalankan perintah ini
azd init:azd init --template remote-mcp-functions-dotnet -e mcpserver-dotnetPerintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder saat ini. Bendera
-emenetapkan nama untuk lingkungan saat ini. Diazd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama grup sumber daya yang Anda buat di Azure.
Di terminal lokal atau prompt perintah Anda, jalankan perintah ini
azd init:azd init --template remote-mcp-functions-java -e mcpserver-javaPerintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder saat ini. Bendera
-emenetapkan nama untuk lingkungan saat ini. Diazd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama sumber daya yang Anda buat di Azure.
Di terminal lokal atau prompt perintah Anda, jalankan perintah ini
azd init:azd init --template remote-mcp-functions-typescript -e mcpserver-tsPerintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder saat ini. Bendera
-emenetapkan nama untuk lingkungan saat ini. Diazd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama sumber daya yang Anda buat di Azure.
Di terminal lokal atau prompt perintah Anda, jalankan perintah ini
azd init:azd init --template remote-mcp-functions-python -e mcpserver-pythonPerintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder saat ini. Bendera
-emenetapkan nama untuk lingkungan saat ini. Diazd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama sumber daya yang Anda buat di Azure.
Memulai emulator penyimpanan
Gunakan emulator Azurite untuk mensimulasikan koneksi akun Azure Storage saat menjalankan proyek kode Anda secara lokal.
Jika Anda belum melakukannya, instal Azurite.
Tekan F1. Di palet perintah, cari dan jalankan perintah
Azurite: Startuntuk memulai emulator penyimpanan lokal.
Jalankan server MCP Anda secara lokal
Visual Studio Code terintegrasi dengan alat Azure Functions Core untuk memungkinkan Anda menjalankan proyek ini di komputer pengembangan lokal Anda dengan menggunakan emulator Azurite.
Untuk memulai fungsi secara lokal, tekan F5 atau ikon Jalankan dan Debug di bilah Aktivitas sisi kiri. Panel Terminal menampilkan output dari Core Tools. Aplikasi Anda dimulai di panel Terminal , dan Anda dapat melihat nama fungsi yang berjalan secara lokal.
Catat titik akhir server MCP lokal (seperti
http://localhost:7071/runtime/webhooks/mcp), yang Anda gunakan untuk mengonfigurasi GitHub Copilot di Visual Studio Code.
Verifikasi menggunakan GitHub Copilot
Untuk memverifikasi kode Anda, tambahkan proyek yang sedang berjalan sebagai server MCP untuk GitHub Copilot di Visual Studio Code:
Tekan F1. Di palet perintah, cari dan jalankan MCP: Tambahkan Server.
Pilih HTTP (Server-Sent Events) untuk jenis transport.
Masukkan URL titik akhir MCP yang Anda salin di langkah sebelumnya.
Gunakan ID Server yang dihasilkan dan pilih Ruang Kerja untuk menyimpan koneksi server MCP ke pengaturan Ruang Kerja Anda.
Buka palet perintah dan jalankan MCP: Daftar Server dan verifikasi bahwa server yang Anda tambahkan tercantum dan berjalan.
Di obrolan Copilot, pilih mode Agen dan jalankan perintah ini:
Say HelloSaat diminta untuk menjalankan alat, pilih Izinkan di Ruang Kerja ini sehingga Anda tidak perlu terus memberikan izin. Perintah dijalankan, mengembalikan
Hello Worldrespons, dan informasi mengenai eksekusi fungsi ditulis ke dalam log.Sekarang, pilih beberapa kode di salah satu file proyek Anda dan jalankan perintah ini:
Save this snippet as snippet1Copilot menyimpan cuplikan dan merespons permintaan Anda dengan informasi tentang cara mengambil cuplikan dengan menggunakan
getSnippetsalat . Sekali lagi, Anda dapat meninjau eksekusi fungsi di log dan memverifikasi bahwasaveSnippetsfungsi berjalan.Di Obrolan Copilot, jalankan prompt ini:
Retrieve snippet1 and apply to NewFileCopilot mengambil cuplikan, menambahkannya ke file yang disebut
NewFile, dan melakukan apa pun yang menurutnya diperlukan untuk membuat cuplikan kode berfungsi dalam proyek Anda. Log Functions menunjukkan bahwa endpointgetSnippetstelah dipanggil.Setelah selesai menguji, tekan Ctrl+C untuk menghentikan host Functions.
Meninjau kode (opsional)
Anda dapat meninjau kode yang menentukan alat server MCP:
Kode fungsi untuk alat server MCP didefinisikan dalam src folder. Atribut McpToolTrigger mengekspos fungsi sebagai alat MCP Server:
[Function(nameof(SayHello))]
public string SayHello(
[McpToolTrigger(HelloToolName, HelloToolDescription)] ToolInvocationContext context
)
{
logger.LogInformation("Saying hello");
return "Hello I am MCP Tool!";
}
[Function(nameof(GetSnippet))]
public object GetSnippet(
[McpToolTrigger(GetSnippetToolName, GetSnippetToolDescription)]
ToolInvocationContext context,
[BlobInput(BlobPath)] string snippetContent
)
{
return snippetContent;
}
[Function(nameof(SaveSnippet))]
[BlobOutput(BlobPath)]
public string SaveSnippet(
[McpToolTrigger(SaveSnippetToolName, SaveSnippetToolDescription)]
ToolInvocationContext context,
[McpToolProperty(SnippetNamePropertyName, SnippetNamePropertyDescription, true)]
string name,
[McpToolProperty(SnippetPropertyName, SnippetPropertyDescription, true)]
string snippet
)
{
return snippet;
}
}
Anda dapat melihat templat proyek lengkap di repositori GitHub Azure Functions .NET MCP Server .
Kode fungsi untuk alat server MCP didefinisikan dalam src/main/java/com/function/ folder. Anotasi @McpToolTrigger mengekspos fungsi sebagai alat MCP Server:
description = "The messages to be logged.",
isRequired = true,
isArray = true)
String messages,
final ExecutionContext functionExecutionContext
) {
functionExecutionContext.getLogger().info("Hello, World!");
functionExecutionContext.getLogger().info("Tool Name: " + mcpToolInvocationContext.getName());
functionExecutionContext.getLogger().info("Transport Type: " + mcpToolInvocationContext.getTransportType());
// Handle different transport types
if (mcpToolInvocationContext.isHttpStreamable()) {
functionExecutionContext.getLogger().info("Session ID: " + mcpToolInvocationContext.getSessionid());
} else if (mcpToolInvocationContext.isHttpSse()) {
if (mcpToolInvocationContext.getClientinfo() != null) {
functionExecutionContext.getLogger().info("Client: " +
mcpToolInvocationContext.getClientinfo().get("name").getAsString() + " v" +
// Write the snippet content to the output blob
outputBlob.setValue(snippet);
return "Successfully saved snippet '" + snippetName + "' with " + snippet.length() + " characters.";
}
/**
* Azure Function that handles retrieving a text snippet from Azure Blob Storage.
* <p>
* The function is triggered by an MCP Tool Trigger. The snippet name is provided
* as an MCP tool property, and the snippet content is read from the blob at the
* path derived from the snippet name.
*
* @param mcpToolInvocationContext The JSON input from the MCP tool trigger.
* @param snippetName The name of the snippet to retrieve, provided as an MCP tool property.
* @param inputBlob The Azure Blob input binding that fetches the snippet content.
* @param functionExecutionContext The execution context for logging.
*/
@FunctionName("GetSnippets")
@StorageAccount("AzureWebJobsStorage")
public String getSnippet(
@McpToolTrigger(
name = "getSnippets",
description = "Gets a text snippet from your snippets collection.")
String mcpToolInvocationContext,
@McpToolProperty(
name = SNIPPET_NAME_PROPERTY_NAME,
propertyType = "string",
description = "The name of the snippet.",
isRequired = true)
String snippetName,
@BlobInput(name = "inputBlob", path = BLOB_PATH)
String inputBlob,
final ExecutionContext functionExecutionContext
) {
// Log the entire incoming JSON for debugging
functionExecutionContext.getLogger().info(mcpToolInvocationContext);
// Log the snippet name and the fetched snippet content from the blob
Anda dapat melihat templat proyek lengkap di repositori GitHub Azure Functions Java MCP Server .
Kode fungsi untuk alat server MCP didefinisikan dalam src/function_app.py file. Anotasi fungsi MCP mengekspos fungsi-fungsi ini sebagai alat MCP Server:
tool_properties_save_snippets_json = json.dumps([prop.to_dict() for prop in tool_properties_save_snippets_object])
tool_properties_get_snippets_json = json.dumps([prop.to_dict() for prop in tool_properties_get_snippets_object])
@app.generic_trigger(
arg_name="context",
type="mcpToolTrigger",
toolName="hello_mcp",
description="Hello world.",
toolProperties="[]",
)
def hello_mcp(context) -> None:
"""
@app.generic_trigger(
arg_name="context",
type="mcpToolTrigger",
toolName="save_snippet",
description="Save a snippet with a name.",
toolProperties=tool_properties_save_snippets_json,
)
@app.generic_output_binding(arg_name="file", type="blob", connection="AzureWebJobsStorage", path=_BLOB_PATH)
def save_snippet(file: func.Out[str], context) -> str:
content = json.loads(context)
snippet_name_from_args = content["arguments"][_SNIPPET_NAME_PROPERTY_NAME]
snippet_content_from_args = content["arguments"][_SNIPPET_PROPERTY_NAME]
if not snippet_name_from_args:
return "No snippet name provided"
if not snippet_content_from_args:
return "No snippet content provided"
file.set(snippet_content_from_args)
logging.info(f"Saved snippet: {snippet_content_from_args}")
return f"Snippet '{snippet_content_from_args}' saved successfully"
Anda dapat melihat templat proyek lengkap di repositori GitHub Azure Functions Python MCP Server .
Kode fungsi untuk alat server MCP didefinisikan dalam src folder. Pendaftaran fungsi MCP mengekspos fungsi-fungsi ini sebagai alat MCP Server:
export async function mcpToolHello(_toolArguments:unknown, context: InvocationContext): Promise<string> {
console.log(_toolArguments);
// Get name from the tool arguments
const mcptoolargs = context.triggerMetadata.mcptoolargs as {
name?: string;
};
const name = mcptoolargs?.name;
console.info(`Hello ${name}, I am MCP Tool!`);
return `Hello ${name || 'World'}, I am MCP Tool!`;
}
// Register the hello tool
app.mcpTool('hello', {
toolName: 'hello',
description: 'Simple hello world MCP Tool that responses with a hello message.',
toolProperties:{
name: arg.string().describe('Required property to identify the caller.').optional()
},
handler: mcpToolHello
});
// SaveSnippet function - saves a snippet with a name
export async function saveSnippet(
_toolArguments: unknown,
context: InvocationContext
): Promise<string> {
console.info("Saving snippet");
// Get snippet name and content from the tool arguments
const mcptoolargs = context.triggerMetadata.mcptoolargs as {
snippetname?: string;
snippet?: string;
};
const snippetName = mcptoolargs?.snippetname;
const snippet = mcptoolargs?.snippet;
if (!snippetName) {
return "No snippet name provided";
}
if (!snippet) {
return "No snippet content provided";
}
// Save the snippet to blob storage using the output binding
context.extraOutputs.set(blobOutputBinding, snippet);
console.info(`Saved snippet: ${snippetName}`);
return snippet;
}
Anda dapat melihat templat proyek lengkap di repositori GitHub Azure Functions TypeScript MCP Server .
Setelah memverifikasi alat server MCP secara lokal, Anda dapat menerbitkan proyek ke Azure.
Sebarkan ke Azure
Proyek ini dikonfigurasi untuk menggunakan azd up perintah untuk menyebarkan proyek ini ke aplikasi fungsi baru dalam paket Konsumsi Flex di Azure. Proyek ini mencakup sekumpulan file Bicep yang azd digunakan untuk membuat penyebaran aman ke dalam rencana konsumsi Flex yang mengikuti praktik terbaik.
Di Visual Studio Code, tekan F1 untuk membuka palet perintah. Cari dan jalankan perintah
Azure Developer CLI (azd): Package, Provison and Deploy (up). Kemudian, masuk dengan menggunakan akun Azure Anda.Jika Anda belum masuk, autentikasi dengan akun Azure Anda.
Saat diminta, berikan parameter penyebaran yang diperlukan ini:
Pengaturan Description langganan Azure Langganan tempat sumber daya Anda dibuat. Lokasi Azure Wilayah Azure untuk membuat grup sumber daya yang berisi sumber daya Azure baru. Hanya wilayah yang saat ini mendukung paket Konsumsi Flex yang ditampilkan. Setelah perintah berhasil diselesaikan, Anda akan melihat tautan ke sumber daya yang Anda buat.
Menyambungkan ke server MCP jarak jauh Anda
Server MCP Anda sekarang berjalan di Azure. Saat mengakses alat, Anda perlu menyertakan kunci sistem dalam permintaan Anda. Kunci ini menyediakan tingkat kontrol akses untuk klien yang mengakses server MCP jarak jauh Anda. Setelah mendapatkan kunci ini, Anda dapat menyambungkan GitHub Copilot ke server jarak jauh Anda.
Jalankan skrip ini yang menggunakan
azddan Azure CLI untuk mencetak URL server MCP dan kunci sistem (mcp_extension) yang diperlukan untuk mengakses alat:eval $(azd env get-values --output dotenv) MCP_EXTENSION_KEY=$(az functionapp keys list --resource-group $AZURE_RESOURCE_GROUP \ --name $AZURE_FUNCTION_NAME --query "systemKeys.mcp_extension" -o tsv) printf "MCP Server URL: %s\n" "https://$SERVICE_API_NAME.azurewebsites.net/runtime/webhooks/mcp" printf "MCP Server key: %s\n" "$MCP_EXTENSION_KEY"Di Visual Studio Code, tekan F1 untuk membuka palet perintah, cari dan jalankan perintah
MCP: Open Workspace Folder MCP Configuraton, yang membukamcp.jsonfile konfigurasi.mcp.jsonDalam konfigurasi, temukan server MCP bernama yang Anda tambahkan sebelumnya, ubahurlnilai ke URL server MCP jarak jauh Anda, dan tambahkanheaders.x-functions-keyelemen, yang berisi kunci akses server MCP yang disalin, seperti dalam contoh ini:{ "servers": { "remote-mcp-function": { "type": "http", "url": "https://contoso.azurewebsites.net/runtime/webhooks/mcp", "headers": { "x-functions-key": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u..." } } } }Pilih tombol Mulai di atas nama server Anda di tempat terbuka
mcp.jsonuntuk memulai ulang server MCP jarak jauh, kali ini menggunakan aplikasi yang Anda sebarkan.
Verifikasi penerapan Anda
Anda sekarang dapat meminta GitHub Copilot menggunakan alat MCP jarak jauh seperti yang Anda lakukan secara lokal, tetapi sekarang kode berjalan dengan aman di Azure. Putar ulang perintah yang sama dengan yang Anda gunakan sebelumnya untuk memastikan semuanya berfungsi dengan benar.
Membersihkan sumber daya
Setelah selesai bekerja dengan server MCP dan sumber daya terkait, gunakan perintah ini untuk menghapus aplikasi fungsi dan sumber daya terkait dari Azure untuk menghindari timbulnya biaya lebih lanjut:
azd down --no-prompt
Nota
Opsi ini --no-prompt menginstruksikan azd untuk menghapus grup sumber daya Anda tanpa konfirmasi dari Anda. Perintah ini tidak memengaruhi proyek kode lokal Anda.