Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik de MCP-hulpprogrammatrigger om hulpprogramma-eindpunten te definiëren op een MCP-server (Model Content Protocol). Clienttaalmodellen en -agents kunnen hulpprogramma's gebruiken om specifieke taken uit te voeren, zoals het opslaan of openen van codefragmenten.
Zie het overzicht voor informatie over het instellen en configureren van details.
Voorbeeld
Opmerking
Voor C# ondersteunt de McP-extensie van Azure Functions alleen het geïsoleerde werkrolmodel.
Met deze code maakt u een eindpunt om een hulpprogramma met de naam SaveSnippet beschikbaar te maken dat probeert een benoemd codefragment op te slaan in blobopslag.
private const string BlobPath = "snippets/{mcptoolargs.snippetname}.json";
[Function(nameof(SaveSnippet))]
[BlobOutput(BlobPath)]
public string SaveSnippet(
[McpToolTrigger("save_snippet", "Saves a code snippet into your snippet collection.")]
ToolInvocationContext context,
[McpToolProperty("snippetname", "The name of the snippet.", isRequired: true)]
string name,
[McpToolProperty("snippet", "The code snippet.", isRequired: true)]
string snippet
)
{
return snippet;
}
Met deze code maakt u een eindpunt om een hulpprogramma beschikbaar te maken dat GetSnippet probeert een codefragment op naam op te halen uit blobopslag.
private const string BlobPath = "snippets/{mcptoolargs.snippetname}.json";
[Function(nameof(GetSnippet))]
public object GetSnippet(
[McpToolTrigger("get_snippets", "Gets code snippets from your snippet collection.")]
ToolInvocationContext context,
[BlobInput(BlobPath)] string snippetContent
)
{
return snippetContent;
}
De eigenschappen van het hulpprogramma voor de GetSnippet functie zijn geconfigureerd in Program.cs:
var builder = FunctionsApplication.CreateBuilder(args);
builder.ConfigureFunctionsWebApplication();
builder.Services
.AddApplicationInsightsTelemetryWorkerService()
.ConfigureFunctionsApplicationInsights();
builder
.ConfigureMcpTool("get_snippets")
.WithProperty("snippetname", "string", "The name of the snippet.", required: true);
builder.Build().Run();
Aanbeveling
In het bovenstaande voorbeeld zijn letterlijke tekenreeksen gebruikt voor zaken zoals de naam van het hulpprogramma 'get_snippets' in zowel Program.cs als de functie. Overweeg in plaats daarvan gedeelde constante tekenreeksen te gebruiken om dingen gesynchroniseerd te houden in uw project.
Zie SnippetTool.cs voor het volledige codevoorbeeld.
Met deze code maakt u een eindpunt om een hulpprogramma met de naam SaveSnippets beschikbaar te maken dat probeert een benoemd codefragment op te slaan in blobopslag.
@FunctionName("SaveSnippets")
@StorageAccount("AzureWebJobsStorage")
public String saveSnippet(
@McpToolTrigger(
name = "saveSnippets",
description = "Saves a text snippet to your snippets collection."
)
String mcpToolInvocationContext,
@McpToolProperty(
name = "snippetName",
propertyType = "string",
description = "The name of the snippet.",
required = true
)
String snippetName,
@McpToolProperty(
name = "snippet",
propertyType = "string",
description = "The content of the snippet.",
required = true
)
String snippet,
@BlobOutput(name = "outputBlob", path = "snippets/{mcptoolargs.snippetName}.json")
OutputBinding<String> outputBlob,
final ExecutionContext context
) {
// Log the entire incoming JSON for debugging
context.getLogger().info(mcpToolInvocationContext);
// 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);
return "Successfully saved snippet '" + snippetName + "' with " + snippet.length() + " characters.";
}
Met deze code maakt u een eindpunt om een hulpprogramma beschikbaar te maken dat GetSnippets probeert een codefragment op naam op te halen uit blobopslag.
@FunctionName("GetSnippets")
@StorageAccount("AzureWebJobsStorage")
public String getSnippet(
@McpToolTrigger(
name = "getSnippets",
description = "Gets a text snippet from your snippets collection."
)
String mcpToolInvocationContext,
@McpToolProperty(
name = "snippetName",
propertyType = "string",
description = "The name of the snippet.",
required = true
)
String snippetName,
@BlobInput(name = "inputBlob", path = "snippets/{mcptoolargs.snippetName}.json")
String inputBlob,
final ExecutionContext context
) {
// Log the entire incoming JSON for debugging
context.getLogger().info(mcpToolInvocationContext);
// 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);
// Return the snippet content or a not found message
if (inputBlob != null && !inputBlob.trim().isEmpty()) {
return inputBlob;
} else {
return "Snippet '" + snippetName + "' not found.";
}
}
Zie Snippets.java voor het volledige codevoorbeeld.
Voorbeeldcode voor JavaScript is momenteel niet beschikbaar. Zie de TypeScript-voorbeelden voor algemene richtlijnen met behulp van Node.js.
Met deze code maakt u een eindpunt om een hulpprogramma met de naam savesnippet beschikbaar te maken dat probeert een benoemd codefragment op te slaan in blobopslag.
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,
},
{
propertyName: SNIPPET_PROPERTY_NAME,
propertyType: PROPERTY_TYPE,
description: SNIPPET_PROPERTY_DESCRIPTION,
},
],
extraOutputs: [blobOutputBinding],
handler: saveSnippet,
});
Met deze code wordt de savesnippet trigger verwerkt:
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;
}
Met deze code maakt u een eindpunt om een hulpprogramma beschikbaar te maken dat getsnippet probeert een codefragment op naam op te halen uit blobopslag.
app.mcpTool("getSnippet", {
toolName: GET_SNIPPET_TOOL_NAME,
description: GET_SNIPPET_TOOL_DESCRIPTION,
toolProperties: [
{
propertyName: SNIPPET_NAME_PROPERTY_NAME,
propertyType: PROPERTY_TYPE,
description: SNIPPET_NAME_PROPERTY_DESCRIPTION,
},
],
extraInputs: [blobInputBinding],
handler: getSnippet,
});
Met deze code wordt de getsnippet trigger verwerkt:
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);
if (!snippetContent) {
return `Snippet '${snippetName}' not found`;
}
console.info(`Retrieved snippet: ${snippetName}`);
return snippetContent as string;
}
Zie snippetsMcpTool.ts voor het volledige codevoorbeeld.
Deze code maakt gebruik van de mcp_tool_trigger decorator om een eindpunt te maken om een hulpprogramma met de naam save_snippet beschikbaar te maken dat probeert een benoemd codefragment op te slaan in blobopslag.
@app.mcp_tool_trigger(
arg_name="context",
tool_name="save_snippet",
description="Save a snippet with a name.",
tool_properties=tool_properties_save_snippets_json,
)
@app.blob_output(arg_name="file", 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"
Deze code maakt gebruik van de mcp_tool_trigger decorator om een eindpunt te maken om een hulpprogramma met de naam get_snippet weer te geven dat probeert een codefragment op naam op te halen uit blobopslag.
@app.mcp_tool_trigger(
arg_name="context",
tool_name="get_snippet",
description="Retrieve a snippet by name.",
tool_properties=tool_properties_get_snippets_json,
)
@app.blob_input(arg_name="file", 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
Zie function_app.py voor het volledige codevoorbeeld.
Belangrijk
De MCP-extensie biedt momenteel geen ondersteuning voor PowerShell-apps.
Kenmerken
C#-bibliotheken gebruiken McpToolTriggerAttribute om de functietrigger te definiëren.
De constructor van het kenmerk gebruikt de volgende parameters:
| Kenmerk | Beschrijving |
|---|---|
| ToolName | (Vereist) de naam van het hulpprogramma dat wordt weergegeven door het MCP-triggereindpunt. |
| Beschrijving | (Optioneel) beschrijvende beschrijving van het eindpunt van het hulpprogramma voor clients. |
Zie Gebruik voor meer informatie over het definiëren van eigenschappen van het eindpunt als invoerparameters.
Aantekeningen
Met @McpToolTrigger de aantekening maakt u een functie die een hulpprogramma-eindpunt beschikbaar maakt op uw externe MCP-server.
De aantekening ondersteunt de volgende configuratieopties:
| Kenmerk | Beschrijving |
|---|---|
| name | (Vereist) de naam van het hulpprogramma dat wordt weergegeven door het MCP-triggereindpunt. |
| beschrijving | (Optioneel) beschrijvende beschrijving van het eindpunt van het hulpprogramma voor clients. |
Met @McpToolProperty de aantekening worden afzonderlijke eigenschappen voor uw hulpprogramma's gedefinieerd. Elke eigenschapsparameter in uw functie moet worden geannoteerd met deze aantekening.
De @McpToolProperty aantekening ondersteunt de volgende configuratieopties:
| Kenmerk | Beschrijving |
|---|---|
| name | (Vereist) de naam van de hulpprogramma-eigenschap die beschikbaar wordt gemaakt voor clients. |
| propertyType | (Vereist) type van de eigenschap van het hulpmiddel. Geldige typen zijn: string, number, integer, , boolean. object |
| beschrijving | (Optioneel) beschrijving van wat de eigenschap van het hulpprogramma doet. |
| Vereist | (Optioneel) als deze optie is ingesteld true, is de eigenschap van het hulpprogramma vereist als argument voor aanroepen van hulpprogramma's. Standaardwaarde is false. |
Decorateurs
Is alleen van toepassing op het Python v2-programmeermodel.
Voor mcp_tool_trigger de decorator is versie 1.24.0 of hoger van het azure-functions pakket vereist. De volgende MCP-triggereigenschappen worden ondersteund op mcp_tool_trigger:
| Vastgoed | Beschrijving |
|---|---|
| arg_name | De naam van de variabele (meestal context) die wordt gebruikt in functiecode voor toegang tot de uitvoeringscontext. |
| tool_name | (Vereist) De naam van het MCP-serverprogramma dat wordt weergegeven door het functie-eindpunt. |
| beschrijving | Een beschrijving van het MCP-serverhulpprogramma dat wordt weergegeven door het functie-eindpunt. |
| tool_properties | De JSON-tekenreeksweergave van een of meer eigenschapsobjecten die eigenschappen van het hulpprogramma beschikbaar maken voor clients. |
Configuratie
De trigger ondersteunt deze bindingsopties, die zijn gedefinieerd in uw code:
| Opties | Beschrijving |
|---|---|
| soort | Moet worden ingesteld op mcpToolTrigger. Alleen gebruikt met algemene definities. |
| toolName | (Vereist) De naam van het MCP-serverprogramma dat wordt weergegeven door het functie-eindpunt. |
| beschrijving | Een beschrijving van het MCP-serverhulpprogramma dat wordt weergegeven door het functie-eindpunt. |
| toolProperties | Een matrix met toolProperty objecten die eigenschappen van het hulpprogramma beschikbaar maken voor clients. |
| extraOutputs | Wanneer deze is gedefinieerd, verzendt u functie-uitvoer naar een andere binding. |
| beheerder | De methode die de werkelijke functiecode bevat. |
Zie de sectie Voorbeeld voor volledige voorbeelden.
Gebruik
De MCP-hulpprogrammatrigger kan worden verbonden met de volgende typen:
| Typologie | Beschrijving |
|---|---|
| ToolInvocationContext | Een object dat de aanroep van het hulpprogramma vertegenwoordigt, inclusief de naam van het hulpprogramma en de argumenten voor de aanroep. |
| JSON serialiseerbare typen | Functions probeert de argumentargumenten van het hulpprogramma te deserialiseren in een poCO-type (plain-old CLR object). Dit type wordt ook gebruikt om hulpprogramma-eigenschappen te definiëren. Wanneer u een JSON-serialiseerbare type bindt, kunt u desgewenst ook een parameter van het type ToolInvocationContext opnemen om toegang te krijgen tot de informatie over de aanroep van het hulpprogramma. |
Eigenschappen van hulpprogramma's
MCP-clients roepen hulpprogramma's aan met argumenten om gegevens en context te bieden voor de bewerking van het hulpprogramma. De clients weten hoe deze argumenten moeten worden verzameld en doorgegeven op basis van eigenschappen die het hulpprogramma als onderdeel van het protocol adverteert. Daarom moet u eigenschappen van het hulpprogramma definiëren in uw functiecode.
Wanneer u een eigenschap van een hulpprogramma definieert, is deze standaard optioneel en kan de client deze weglaten bij het aanroepen van het hulpprogramma. U moet eigenschappen expliciet markeren als vereist als het hulpprogramma niet zonder deze kan werken.
Opmerking
In eerdere versies van de PREVIEW van de MCP-extensie zijn standaard alle hulpprogramma-eigenschappen vereist. Dit gedrag is gewijzigd vanaf versie 1.0.0-preview.7en nu moet u eigenschappen expliciet markeren als vereist.
In C# kunt u op verschillende manieren eigenschappen voor uw hulpprogramma's definiëren. Welke benadering u gebruikt, is een kwestie van codestijlvoorkeur. De opties zijn:
- Uw functie gebruikt invoerparameters met behulp van het
McpToolPropertykenmerk. - U definieert een aangepast type met de eigenschappen en de functie wordt gekoppeld aan dat type.
- U gebruikt de
FunctionsApplicationBuilderopdracht om eigenschappen in uwProgram.csbestand te definiëren.
U kunt een of meer hulpprogramma-eigenschappen definiëren door het McpToolProperty kenmerk toe te passen op parameters in de bindingsstijl voor invoer in uw functie.
Het McpToolPropertyAttribute type ondersteunt deze eigenschappen:
| Vastgoed | Beschrijving |
|---|---|
| PropertyName- | De naam van de hulpprogramma-eigenschap die beschikbaar wordt gemaakt voor clients. |
| Beschrijving | Beschrijving van wat de eigenschap van het hulpprogramma doet. |
| IsVereist | (Optioneel) Als deze optie is ingesteld true, is de eigenschap van het hulpprogramma vereist als argument voor aanroepen van hulpprogramma's. Standaardwaarde is false. |
Het eigenschapstype wordt afgeleid van het type parameter waarop u het kenmerk toepast. Definieert bijvoorbeeld [McpToolProperty("snippetname", "The name of the snippet.", true)] string name een vereiste hulpprogramma-eigenschap met de naam snippetname van het type string in MCP-berichten.
U kunt deze kenmerken zien die worden gebruikt in het SaveSnippet hulpprogramma in de voorbeelden.
In Java definieert u hulpprogramma-eigenschappen met behulp van de @McpToolProperty aantekening voor afzonderlijke functieparameters. Elke parameter die een tooleigenschap vertegenwoordigt, moet worden voorzien van aantekeningen bij deze aantekening, waarbij u de naam van de eigenschap, het type, de beschrijving en of deze is vereist.
U kunt deze aantekeningen zien die worden gebruikt in de voorbeelden.
U kunt hulpprogramma-eigenschappen configureren in het veld van toolProperties de triggerdefinitie. Dit is een tekenreeksweergave van een matrix met ToolProperty objecten.
Een ToolProperty object heeft deze structuur:
{
"propertyName": "Name of the property",
"propertyType": "Type of the property",
"description": "Optional property description",
"isRequired": true|false,
"isArray": true|false
}
De velden van een ToolProperty object zijn:
| Vastgoed | Beschrijving |
|---|---|
| propertyName | De naam van de hulpprogramma-eigenschap die beschikbaar wordt gemaakt voor clients. |
| propertyType | Type van de eigenschap van het hulpprogramma. Geldige typen zijn: string, number, integer, , boolean. object Zie isArray voor matrixtypen. |
| beschrijving | Beschrijving van wat de eigenschap van het hulpprogramma doet. |
| isRequired | (Optioneel) Als deze optie is ingesteld true, is de eigenschap van het hulpprogramma vereist als argument voor aanroepen van hulpprogramma's. Standaardwaarde is false. |
| isArray | (Optioneel) Als deze optie is ingesteld true, is de eigenschap van het hulpprogramma een matrix van het opgegeven eigenschapstype. Standaardwaarde is false. |
Zie Voorbeeldenvoor meer informatie.
host.json-instellingen
Het bestand host.json bevat instellingen waarmee het gedrag van MCP-triggers wordt bepaald. Zie de sectie host.json instellingen voor meer informatie over beschikbare instellingen.