Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez le déclencheur d’outil MCP pour définir des points de terminaison d’outil dans un serveur MCP (Model Content Protocol) accessible par des modèles de langage client et des agents pour effectuer des tâches spécifiques, telles que le stockage ou l’accès à des extraits de code. Les clients MCP peuvent également s’abonner à votre application de fonction pour recevoir des notifications sur les modifications apportées aux outils exposés.
Important
L’extension MCP Azure Functions est actuellement en préversion. Vous pouvez vous attendre à des modifications apportées aux API de déclencheur et de liaison jusqu’à ce que l’extension devienne en disponibilité générale.
Vous devez éviter d’utiliser des extensions en préversion dans les applications de production.
Pour plus d’informations sur les détails d’installation et de configuration, consultez la vue d’ensemble.
Exemple :
Remarque
L’extension MCP Azure Functions prend uniquement en charge le modèle worker isolé.
Ce code crée un point de terminaison pour exposer un outil nommé GetSnippet
qui tente de récupérer un extrait de code par nom à partir du stockage d’objets blob.
private const string BlobPath = "snippets/{mcptoolargs." + SnippetNamePropertyName + "}.json";
[Function(nameof(GetSnippet))]
public object GetSnippet(
[McpToolTrigger(GetSnippetToolName, GetSnippetToolDescription)]
ToolInvocationContext context,
[BlobInput(BlobPath)] string snippetContent
)
{
return snippetContent;
}
Ce code crée un point de terminaison pour exposer un outil nommé SaveSnippet
qui tente de conserver un extrait de code nommé dans le stockage d’objets blob.
private const string BlobPath = "snippets/{mcptoolargs." + SnippetNamePropertyName + "}.json";
[Function(nameof(SaveSnippet))]
[BlobOutput(BlobPath)]
public string SaveSnippet(
[McpToolTrigger(SaveSnippetToolName, SaveSnippetToolDescription)]
ToolInvocationContext context,
[McpToolProperty(SnippetNamePropertyName, PropertyType, SnippetNamePropertyDescription)]
string name,
[McpToolProperty(SnippetPropertyName, PropertyType, SnippetPropertyDescription)]
string snippet
)
{
return snippet;
}
Pour obtenir l’exemple de code complet, consultez SnippetTool.cs.
Ce code crée un point de terminaison pour exposer un outil nommé GetSnippets
qui tente de récupérer un extrait de code par nom à partir du stockage d’objets blob.
@FunctionName("GetSnippets")
@StorageAccount("AzureWebJobsStorage")
public void getSnippet(
@McpToolTrigger(
toolName = "getSnippets",
description = "Gets a text snippet from your snippets collection.",
toolProperties = GET_SNIPPET_ARGUMENTS
)
String toolArguments,
@BlobInput(name = "inputBlob", path = BLOB_PATH)
String inputBlob,
final ExecutionContext context
) {
// Log the entire incoming JSON for debugging
context.getLogger().info(toolArguments);
// Parse the JSON and get the snippetName field
String snippetName = JsonParser.parseString(toolArguments)
.getAsJsonObject()
.getAsJsonObject("arguments")
.get(SNIPPET_NAME_PROPERTY_NAME)
.getAsString();
// Log the snippet name and the fetched snippet content from the blob
context.getLogger().info("Retrieving snippet with name: " + snippetName);
context.getLogger().info("Snippet content:");
context.getLogger().info(inputBlob);
}
Ce code crée un point de terminaison pour exposer un outil nommé SaveSnippets
qui tente de conserver un extrait de code nommé dans le stockage d’objets blob.
@FunctionName("SaveSnippets")
@StorageAccount("AzureWebJobsStorage")
public void saveSnippet(
@McpToolTrigger(
toolName = "saveSnippets",
description = "Saves a text snippet to your snippets collection.",
toolProperties = SAVE_SNIPPET_ARGUMENTS
)
String toolArguments,
@BlobOutput(name = "outputBlob", path = BLOB_PATH)
OutputBinding<String> outputBlob,
final ExecutionContext context
) {
// Log the entire incoming JSON for debugging
context.getLogger().info(toolArguments);
// Parse the JSON and extract the snippetName/snippet fields
JsonObject arguments = JsonParser.parseString(toolArguments)
.getAsJsonObject()
.getAsJsonObject("arguments");
String snippetName = arguments.get(SNIPPET_NAME_PROPERTY_NAME).getAsString();
String snippet = arguments.get(SNIPPET_PROPERTY_NAME).getAsString();
// Log the snippet name and content
context.getLogger().info("Saving snippet with name: " + snippetName);
context.getLogger().info("Snippet content:\n" + snippet);
// Write the snippet content to the output blob
outputBlob.setValue(snippet);
}
Pour obtenir l’exemple de code complet, consultez Snippets.java.
L’exemple de code pour JavaScript n’est actuellement pas disponible. Consultez les exemples TypeScript pour obtenir des conseils généraux à l’aide de Node.js.
Ce code crée un point de terminaison pour exposer un outil nommé getsnippet
qui tente de récupérer un extrait de code par nom à partir du stockage d’objets blob.
}
// Save the snippet to blob storage using the output binding
context.extraOutputs.set(blobOutputBinding, snippet);
console.info(`Saved snippet: ${snippetName}`);
return snippet;
}
// Register the GetSnippet tool
app.mcpTool("getSnippet", {
toolName: GET_SNIPPET_TOOL_NAME,
description: GET_SNIPPET_TOOL_DESCRIPTION,
Il s’agit du code qui gère le getsnippet
déclencheur :
// GetSnippet function - retrieves a snippet by name
export async function getSnippet(
_toolArguments: unknown,
context: InvocationContext
): Promise<string> {
console.info("Getting snippet");
// Get snippet name from the tool arguments
const mcptoolargs = context.triggerMetadata.mcptoolargs as {
snippetname?: string;
};
const snippetName = mcptoolargs?.snippetname;
console.info(`Snippet name: ${snippetName}`);
if (!snippetName) {
return "No snippet name provided";
}
// Get the content from blob binding - properly retrieving from extraInputs
const snippetContent = context.extraInputs.get(blobInputBinding);
Ce code crée un point de terminaison pour exposer un outil nommé savesnippet
qui tente de conserver un extrait de code nommé dans le stockage d’objets blob.
propertyName: SNIPPET_NAME_PROPERTY_NAME,
propertyType: PROPERTY_TYPE,
description: SNIPPET_NAME_PROPERTY_DESCRIPTION,
},
],
extraInputs: [blobInputBinding],
handler: getSnippet,
});
// Register the SaveSnippet tool
app.mcpTool("saveSnippet", {
toolName: SAVE_SNIPPET_TOOL_NAME,
description: SAVE_SNIPPET_TOOL_DESCRIPTION,
toolProperties: [
{
propertyName: SNIPPET_NAME_PROPERTY_NAME,
propertyType: PROPERTY_TYPE,
description: SNIPPET_NAME_PROPERTY_DESCRIPTION,
Il s’agit du code qui gère le savesnippet
déclencheur :
}
console.info(`Retrieved snippet: ${snippetName}`);
return snippetContent as string;
}
// 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";
}
Pour obtenir l’exemple de code complet, consultez snippetsMcpTool.ts.
Ce code utilise le generic_trigger
décorateur pour créer un point de terminaison pour exposer un outil nommé get_snippet
qui tente de récupérer un extrait de code par nom à partir du stockage d’objets blob.
@app.generic_trigger(
arg_name="context",
type="mcpToolTrigger",
toolName="get_snippet",
description="Retrieve a snippet by name.",
toolProperties=tool_properties_get_snippets_json,
)
@app.generic_input_binding(arg_name="file", type="blob", connection="AzureWebJobsStorage", path=_BLOB_PATH)
def get_snippet(file: func.InputStream, context) -> str:
"""
Retrieves a snippet by name from Azure Blob Storage.
Args:
file (func.InputStream): The input binding to read the snippet from Azure Blob Storage.
context: The trigger context containing the input arguments.
Returns:
str: The content of the snippet or an error message.
"""
snippet_content = file.read().decode("utf-8")
logging.info(f"Retrieved snippet: {snippet_content}")
return snippet_content
Ce code utilise le generic_trigger
décorateur pour créer un point de terminaison pour exposer un outil nommé save_snippet
qui tente de conserver un extrait de code nommé dans le stockage d’objets blob.
@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"
Pour obtenir l’exemple de code complet, consultez function_app.py.
Important
L’extension MCP ne prend actuellement pas en charge les applications PowerShell.
Attributs
Les bibliothèques C# utilisent McpToolTriggerAttribute
pour définir le déclencheur de fonction.
Le constructeur de l’attribut accepte les paramètres suivants :
Paramètre | Descriptif |
---|---|
ToolName | (Obligatoire) nom de l’outil exposé par le point de terminaison du déclencheur MCP. |
Description | (Facultatif) description conviviale du point de terminaison d’outil pour les clients. |
Consultez Utilisation pour savoir comment définir les propriétés du point de terminaison en tant que paramètres d’entrée.
Commentaires
L’annotation McpTrigger
crée une fonction qui expose un point de terminaison d’outil dans votre serveur MCP distant.
L’annotation prend en charge les options de configuration suivantes :
Paramètre | Descriptif |
---|---|
toolName | (Obligatoire) nom de l’outil exposé par le point de terminaison du déclencheur MCP. |
description | (Facultatif) description conviviale du point de terminaison d’outil pour les clients. |
toolProperties | Représentation sous forme de chaîne JSON d’un ou plusieurs objets de propriété qui exposent les propriétés de l’outil aux clients. |
Décorateurs
S'applique uniquement au modèle de programmation Python v2.
Remarque
À ce stade, vous devez utiliser un décorateur générique pour définir un déclencheur MCP.
Les propriétés de déclencheur MCP suivantes sont prises en charge sur generic_trigger
:
Propriété | Descriptif |
---|---|
type | (Obligatoire) Doit être défini mcpToolTrigger dans le generic_trigger décorateur. |
arg_name | Nom de variable (généralement context ) utilisé dans le code de fonction pour accéder au contexte d’exécution. |
toolName | (Obligatoire) Nom de l’outil serveur MCP exposé par le point de terminaison de fonction. |
description | Description de l’outil serveur MCP exposé par le point de terminaison de fonction. |
toolProperties | Représentation sous forme de chaîne JSON d’un ou plusieurs objets de propriété qui exposent les propriétés de l’outil aux clients. |
Paramétrage
Le déclencheur prend en charge ces options de liaison, qui sont définies dans votre code :
Paramètres | Descriptif |
---|---|
type | Cette propriété doit être définie sur mcpToolTrigger . Utilisé uniquement avec les définitions génériques. |
toolName | (Obligatoire) Nom de l’outil serveur MCP exposé par le point de terminaison de fonction. |
description | Description de l’outil serveur MCP exposé par le point de terminaison de fonction. |
toolProperties | Tableau d’objets toolProperty qui exposent les propriétés de l’outil aux clients. |
extraOutputs | Quand elle est définie, envoie la sortie de la fonction à une autre liaison. |
gestionnaire | Méthode qui contient le code de fonction réel. |
Pour obtenir des exemples complets, consultez la section Exemple.
Utilisation
Le protocole MCP permet à un serveur MCP de faire connaître les autres propriétés d’un point de terminaison d’outil aux clients. En C#, vous pouvez définir des propriétés de vos outils en tant que paramètres d’entrée à l’aide de l’attribut McpToolProperty
à votre code de fonction de déclencheur ou à l’aide du FunctionsApplicationBuilder
démarrage de l’application.
Vous pouvez définir une ou plusieurs propriétés d’outil en appliquant l’attribut McpToolProperty
aux paramètres de style de liaison d’entrée dans votre fonction.
Le McpToolPropertyAttribute
type prend en charge ces propriétés :
Propriété | Descriptif |
---|---|
PropertyName | Nom de la propriété outil qui est exposée aux clients. |
PropertyType | Type de données de la propriété outil, par string exemple . |
Description | (Facultatif) Description de ce que fait la propriété de l’outil. |
Vous pouvez voir ces attributs utilisés dans l’outil SaveSnippet
dans les exemples.
Les propriétés d’un outil exposé par votre serveur MCP distant sont définies à l’aide des propriétés de l’outil. Ces propriétés sont retournées par le toolProperties
champ, qui est une représentation sous forme de chaîne d’un tableau d’objets ToolProperty
.
Un ToolProperty
objet a cette structure :
{
"propertyName": "Name of the property",
"propertyType": "Type of the property",
"description": "Optional property description",
}
Les propriétés d’un outil exposé par votre serveur MCP distant sont définies à l’aide des propriétés de l’outil. Ces propriétés sont retournées par le toolProperties
champ, qui est une représentation sous forme de chaîne d’un tableau d’objets ToolProperty
.
Un ToolProperty
objet a cette structure :
{
"propertyName": "Name of the property",
"propertyValue": "Type of the property",
"description": "Optional property description",
}
Pour plus d’informations, consultez Exemples.
Paramètres host.json
Le fichier host.json contient des paramètres qui contrôlent les comportements des déclencheurs MCP. Consultez la section Paramètres host.json pour plus d’informations concernant les paramètres disponibles.