Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí triggeru nástroje MCP definujte koncové body nástrojů na serveru MCP (Model Content Protocol). Klientské jazykové modely a agenti můžou používat nástroje k provádění konkrétních úloh, jako je ukládání nebo přístup k fragmentům kódu.
Informace o nastavení a konfiguraci najdete v přehledu.
Příklad
Poznámka:
V jazyce C# rozšíření Azure Functions MCP podporuje pouze izolovaný pracovní model.
Tento kód vytvoří koncový bod pro zveřejnění nástroje s názvem SaveSnippet , který se pokusí zachovat pojmenovaný fragment kódu do úložiště objektů blob.
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;
}
Tento kód vytvoří koncový bod pro zveřejnění nástroje s názvem GetSnippet , který se pokusí načíst fragment kódu podle názvu z úložiště objektů blob.
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;
}
Vlastnosti nástroje pro GetSnippet funkci jsou nakonfigurovány v 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();
Návod
Výše uvedený příklad použil literálové řetězce pro věci, jako je název nástroje "get_snippets" v obou Program.cs i funkci. Zvažte místo toho použití sdílených konstantních řetězců, abyste měli všechno synchronizované v rámci projektu.
Úplný příklad kódu najdete v SnippetTool.cs.
Tento kód vytvoří koncový bod pro zveřejnění nástroje s názvem SaveSnippets , který se pokusí zachovat pojmenovaný fragment kódu do úložiště objektů blob.
@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.";
}
Tento kód vytvoří koncový bod pro zveřejnění nástroje s názvem GetSnippets , který se pokusí načíst fragment kódu podle názvu z úložiště objektů blob.
@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.";
}
}
Úplný příklad kódu najdete v Snippets.java.
Ukázkový kód pro JavaScript není momentálně k dispozici. Obecné pokyny pro Node.jsnajdete v příkladech TypeScriptu.
Tento kód vytvoří koncový bod pro zveřejnění nástroje s názvem savesnippet , který se pokusí zachovat pojmenovaný fragment kódu do úložiště objektů blob.
import { app, InvocationContext, input, output, arg } from "@azure/functions";
app.mcpTool("saveSnippet", {
toolName: SAVE_SNIPPET_TOOL_NAME,
description: SAVE_SNIPPET_TOOL_DESCRIPTION,
toolProperties: {
[SNIPPET_NAME_PROPERTY_NAME]: arg.string().describe(SNIPPET_NAME_PROPERTY_DESCRIPTION),
[SNIPPET_PROPERTY_NAME]: arg.string().describe(SNIPPET_PROPERTY_DESCRIPTION)
},
extraOutputs: [blobOutputBinding],
handler: saveSnippet,
});
Tento kód zpracovává savesnippet trigger:
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;
}
Tento kód vytvoří koncový bod pro zveřejnění nástroje s názvem getsnippet , který se pokusí načíst fragment kódu podle názvu z úložiště objektů blob.
import { app, InvocationContext, input, output, arg } from "@azure/functions";
app.mcpTool("getSnippet", {
toolName: GET_SNIPPET_TOOL_NAME,
description: GET_SNIPPET_TOOL_DESCRIPTION,
toolProperties: {
[SNIPPET_NAME_PROPERTY_NAME]: arg.string().describe(SNIPPET_NAME_PROPERTY_DESCRIPTION)
},
extraInputs: [blobInputBinding],
handler: getSnippet,
});
Tento kód zpracovává getsnippet trigger:
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;
}
Úplný příklad kódu najdete v snippetsMcpTool.ts.
Tento kód pomocí dekorátoru mcp_tool_trigger vytvoří koncový bod pro zveřejnění nástroje s názvem save_snippet , který se pokusí zachovat pojmenovaný fragment kódu do úložiště objektů blob.
@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"
Tento kód pomocí dekorátoru mcp_tool_trigger vytvoří koncový bod pro zveřejnění nástroje s názvem get_snippet , který se pokusí načíst fragment kódu podle názvu z úložiště objektů blob.
@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
Úplný příklad kódu najdete v function_app.py.
Důležité
Rozšíření MCP v současné době nepodporuje aplikace PowerShellu.
Atributy
Knihovny jazyka C# slouží McpToolTriggerAttribute k definování triggeru funkce.
Konstruktor atributu přebírá následující parametry:
| Parametr | Popis |
|---|---|
| ToolName | (Povinný) název nástroje, který je vystavený koncovým bodem triggeru MCP. |
| Popis | (Volitelné) popis koncového bodu nástroje pro klienty. |
Informace o definování vlastností koncového bodu jako vstupních parametrů najdete v tématu Využití .
Anotace
Poznámka @McpToolTrigger vytvoří funkci, která zveřejňuje koncový bod nástroje na vzdáleném serveru MCP.
Poznámka podporuje následující možnosti konfigurace:
| Parametr | Popis |
|---|---|
| název | (Povinný) název nástroje, který je vystavený koncovým bodem triggeru MCP. |
| popis | (Volitelné) popis koncového bodu nástroje pro klienty. |
Poznámka @McpToolProperty definuje jednotlivé vlastnosti pro vaše nástroje. Každý parametr vlastnosti ve vaší funkci by měl být opatřen poznámkami.
Poznámka @McpToolProperty podporuje následující možnosti konfigurace:
| Parametr | Popis |
|---|---|
| název | (Povinný) název vlastnosti nástroje, která se zobrazí klientům. |
| propertyType | (Povinný) typ vlastnosti nástroje. Platné typy jsou: string, number, integer, boolean, object. |
| popis | (Volitelné) popis toho, co vlastnost nástroje dělá. |
| požadovaný | (Volitelné) pokud je nastavena na true, vlastnost nástroje je vyžadována jako argument pro volání nástroje. Výchozí hodnota je false. |
Dekoratéry
Platí pouze pro programovací model Pythonu v2.
Dekorátor mcp_tool_trigger vyžaduje verzi 1.24.0 nebo novější balíčkuazure-functions. Následující vlastnosti triggeru MCP jsou podporovány v mcp_tool_trigger:
| Vlastnictví | Popis |
|---|---|
| arg_name | Název proměnné (obvykle context) používaný v kódu funkce pro přístup k kontextu provádění. |
| tool_name | (Povinné) Název nástroje serveru MCP vystaveného koncovým bodem funkce. |
| popis | Popis nástroje serveru MCP vystaveného koncovým bodem funkce. |
| tool_properties | Řetězcová reprezentace JSON jednoho nebo více objektů vlastností, které zpřístupňují vlastnosti nástroje klientům. |
Konfigurace
Trigger podporuje tyto možnosti vazby, které jsou definované v kódu:
| Možnosti | Popis |
|---|---|
| typ | Musí být nastavena na mcpToolTrigger. Používá se pouze s obecnými definicemi. |
| toolName | (Povinné) Název nástroje serveru MCP vystaveného koncovým bodem funkce. |
| popis | Popis nástroje serveru MCP vystaveného koncovým bodem funkce. |
| toolProperties | Pole toolProperty objektů, které zpřístupňují vlastnosti nástroje klientům. |
| extraOutputs | Při definování odešle výstup funkce do jiné vazby. |
| obslužná rutina | Metoda, která obsahuje skutečný kód funkce. |
Kompletní příklady najdete v části Příklad.
Použití
Trigger nástroje MCP může svázat s následujícími typy:
| Typ | Popis |
|---|---|
| ToolInvocationContext | Objekt představující volání nástroje, včetně názvu a argumentů pro volání. |
| Serializovatelné typy JSON | Funkce se pokusí deserializovat argumenty nástroje do prostého typu OBJEKT CLR (POCO). Tento typ slouží také k definování vlastností nástroje. Při vytváření vazby na serializovatelný typ JSON můžete volitelně zahrnout také parametr typu ToolInvocationContext pro přístup k informacím o volání nástroje. |
Vlastnosti nástroje
Klienti MCP volají nástroje s argumenty, které poskytují data a kontext pro operaci nástroje. Klienti vědí, jak shromažďovat a předávat tyto argumenty na základě vlastností, které nástroj inzeruje jako součást protokolu. Proto je potřeba definovat vlastnosti nástroje v kódu funkce.
Když definujete vlastnost nástroje, je ve výchozím nastavení volitelná a klient ji může při vyvolání nástroje vynechat. Pokud nástroj nemůže bez nich pracovat, musíte vlastnosti explicitně označit jako povinné.
Poznámka:
Ve starších verzích náhledu rozšíření MCP byly všechny vlastnosti nástrojů vyžadované ve výchozím nastavení. Toto chování se změnilo jako verze 1.0.0-preview.7a nyní musíte explicitně označit vlastnosti jako povinné.
V jazyce C# můžete definovat vlastnosti pro své nástroje několika způsoby. Který přístup použijete, je otázkou předvolby stylu kódu. Možnosti jsou následující:
- Funkce přebírá vstupní parametry pomocí atributu
McpToolProperty. - Definujete vlastní typ s vlastnostmi a funkce se sváže s tímto typem.
- Slouží
FunctionsApplicationBuilderk definování vlastností vProgram.cssouboru.
Jednu nebo více vlastností nástroje můžete definovat použitím atributu McpToolProperty na vstupní parametry stylu vazby ve vaší funkci.
Typ McpToolPropertyAttribute podporuje tyto vlastnosti:
| Vlastnictví | Popis |
|---|---|
| Název_vlastnosti | Název vlastnosti nástroje, která se zobrazí klientům. |
| Popis | Popis, co vlastnost nástroje dělá. |
| Je vyžadováno | (Volitelné) Pokud je nastavena na truehodnotu , vlastnost nástroje je vyžadována jako argument pro volání nástroje. Výchozí hodnota je false. |
Typ vlastnosti je odvozen z typu parametru, na který použijete atribut. Například [McpToolProperty("snippetname", "The name of the snippet.", true)] string name definuje požadovanou vlastnost nástroje s názvem snippetname typu string ve zprávách MCP.
Tyto atributy použité v SaveSnippet můžete zobrazit v příkladech.
V Javě definujete vlastnosti nástroje pomocí poznámky @McpToolProperty k jednotlivým parametrům funkce. Každý parametr, který představuje vlastnost nástroje, by měl být opatřen poznámkami a zadat název vlastnosti, typ, popis a to, zda je požadován.
Tyto poznámky můžete zobrazit v příkladech.
Vlastnosti nástroje můžete nakonfigurovat v poli definice toolProperties triggeru, což je řetězcová reprezentace pole ToolProperty objektů.
Objekt ToolProperty má tuto strukturu:
{
"propertyName": "Name of the property",
"propertyType": "Type of the property",
"description": "Optional property description",
"isRequired": true|false,
"isArray": true|false
}
Pole objektu ToolProperty jsou:
| Vlastnictví | Popis |
|---|---|
| propertyName | Název vlastnosti nástroje, která se zobrazí klientům. |
| propertyType | Typ vlastnosti nástroje. Platné typy jsou: string, number, integer, boolean, object. Viz isArray typy polí. |
| popis | Popis, co vlastnost nástroje dělá. |
| isRequired | (Volitelné) Pokud je nastavena na truehodnotu , vlastnost nástroje je vyžadována jako argument pro volání nástroje. Výchozí hodnota je false. |
| isArray | (Volitelné) Pokud je nastavená hodnota true, vlastnost nástroje je pole zadaného typu vlastnosti. Výchozí hodnota je false. |
Pole můžete poskytnout toolProperties jako pole ToolProperty objektů, nebo arg použít pomocníky z k @azure/functions definování vlastností více typově bezpečným způsobem:
toolProperties: {
[SNIPPET_NAME_PROPERTY_NAME]: arg.string().describe(SNIPPET_NAME_PROPERTY_DESCRIPTION)
}
Další informace viz příklady.
nastavení host.json
Soubor host.json obsahuje nastavení, která řídí chování triggerů MCP. Podrobnosti o dostupných nastaveních najdete v části nastavení host.json .