Quando integriamo intelligenza artificiale nelle nostre applicazioni, ci chiediamo spesso come far sì che un modello possa eseguire realmente delle azioni nel mondo esterno. MCP (Model Context Protocol) nasce per questo scopo: fornisce un modo standard per descrivere i tool disponibili, i loro parametri e i risultati attesi, così che gli agent e gli LLM possano invocarli in modo sicuro e coerente.
Per ospitare questi tool in modo semplice e scalabile, possiamo affidarci a Azure Functions. Questo servizio serverless di Microsoft ci consente di eseguire codice senza preoccuparci dei server, con una fatturazione a consumo e uno scaling automatico.
Per utilizzare le funzionalità MCP è stato introdotto un nuovo supporto all'interno di Azure Functions. Per attivarlo all'interno di un progetto Function, è necessario modificare il file host.json e aggiungere la configurazione che abilita l'estensione. In questo modo comunichiamo al runtime di caricare il supporto MCP durante l'avvio.
{
"version": "2.0",
"extensions": {
"mcp": {
"instructions": "Some test instructions on how to use the server",
"serverName": "TestServer",
"serverVersion": "2.0.0",
"encryptClientState": true,
"messageOptions": {
"useAbsoluteUriForEndpoint": false
}
}
}
}Una volta aggiunta questa impostazione, installiamo il pacchetto Microsoft.Azure.Functions.Worker.Extensions.Mcp e definiamo una function che espone un endpoint MCP. In questo esempio, la funzione accetta due parametri, min e max, e restituisce un numero casuale compreso tra i due valori.
using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Extensions.Mcp; using System;
public class RandomTool
{
[Function(nameof(GetRandomNumber))]
public int GetRandomNumber(
[McpToolTrigger("getRandomNumber", "Restituisce un numero casuale tra min e max")] ToolInvocationContext ctx,
[McpToolProperty("min", "int[", "Valore minimo")] int min,
[McpToolProperty("max", "int", "Valore massimo")] int max) {
return Random.Shared.Next(min, max + 1);
}
}Dopo aver compilato il progetto, possiamo eseguirlo in locale. L'endpoint MCP sarà esposto in locale all'indirizzo testo semplice http://localhost:7071/runtime/webhooks/mcp di tipo Streamable HTTP. Da qui potremo collegarci tramite MCP Inspector o direttamente da VS Code e Copilot per testare l'invocazione del tool.
Quando pubblichiamo su Azure, l'endpoint diventa https://sito.azurewebsites.net/runtime/webhooks/mcp e richiede la una chiave speciale denominata mcp_extension. Possiamo recuperare questa chiave dal portale di Azure, aprendo la nostra Function App, selezionando App keys. Qui troveremo la voce e potremo copiarne il valore per utilizzarlo nelle chiamate API.

Dovremo di conseguenza passare un header di nome x-functions-key o come parametro code in query string.
Anche se al momento non sono supportati prompt o risorse all'interno dell'estensione MCP per Azure Functions, la configurazione che abbiamo descritto costituisce una base solida su cui costruire. Una volta impostato l'endpoint, possiamo infatti aggiungere nuovi trigger e definire ulteriori funzioni per arricchire i nostri tool, espandendo progressivamente le capacità del servizio MCP e adattandole alle esigenze della nostra applicazione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Montare Azure Blob Storage su Linux con BlobFuse2
Personalizzare le pagine di errore su Azure App Service
Blazor e Static Web Assets in .NET 10
.NET Aspire per applicazioni distribuite
Utilizzare Containers in .NET Aspire
Migrare applicazioni legacy nel cloud con Azure App Service Managed Instance
Evitare la compressione degli artefatti in un workflow di GitHub
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Usare la parola chiave field per semplificare la scrittura di proprietà in C#
Utilizzare noopener e noreferrer nei link HTML
Interagire con Azure DevOps tramite MCP Server




