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 Context Protocol). Klientské jazykové modely a agenti můžou tyto nástroje použít 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.
Kompletní příklad použití triggeru nástroje MCP najdete v tématu Vytvoření vzdáleného serveru MCP pomocí Azure Functions.
Example
Podpora Go pro toto vázání momentálně není dostupná.
Poznámka:
V jazyce C# podporuje rozšíření Azure Functions MCP pouze isolated worker 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žívá literální ř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 tématu 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.",
isRequired = true
)
String snippetName,
@McpToolProperty(
name = "snippet",
propertyType = "string",
description = "The content of the snippet.",
isRequired = 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.",
isRequired = 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 tématu 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 tématu 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 tématu 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:
| Parameter | Description |
|---|---|
| ToolName | (Povinný) název nástroje, který koncový bod triggeru MCP zveřejňuje. |
| Description | (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
Pomocí poznámky @McpToolTrigger vytvořte funkci, která zveřejňuje koncový bod nástroje na vzdáleném serveru MCP.
Poznámka podporuje následující možnosti konfigurace:
| Parameter | Description |
|---|---|
| název | (Povinný) název nástroje, který koncový bod triggeru MCP zveřejňuje. |
| popis | (Volitelné) popis koncového bodu nástroje pro klienty. |
Pomocí poznámky @McpToolProperty můžete definovat jednotlivé vlastnosti pro vaše nástroje. Pomocí této poznámky můžete přidávat poznámky ke každému parametru vlastnosti ve vaší funkci.
Poznámka @McpToolProperty podporuje následující možnosti konfigurace:
| Parameter | Description |
|---|---|
| název | (Povinný) název vlastnosti nástroje, kterou klienti vidí. |
| propertyType | (Povinný) typ vlastnosti nástroje. Platné typy jsou: string, number, integer, boolean, object. |
| popis | (Volitelné) popis toho, co vlastnost nástroje dělá. |
| isRequired | (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. |
| isArray | (Volitelné) pokud je nastavena truena , vlastnost nástroje je pole zadaného typu vlastnosti. Výchozí hodnota je false. |
Dekoratéry
Applies pouze na programovací model Python 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í | Description |
|---|---|
| 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, který koncový bod funkce zveřejňuje. |
| tool_properties | Řetězcová reprezentace JSON jednoho nebo více objektů vlastností, které zpřístupňují vlastnosti nástroje klientům. |
Konfigurace
Definujte možnosti vazby triggeru v kódu. Jednotlivé možnosti jsou popsané v následující tabulce:
| Možnost | Description |
|---|---|
| type | Nastavte na mcpToolTrigger. Používejte pouze s obecnými definicemi. |
| toolName | (Povinné) Název nástroje serveru MCP, který koncový bod funkce zveřejňuje. |
| popis | Popis nástroje serveru MCP, který koncový bod funkce zveřejňuje. |
| 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.
Využití
Trigger nástroje MCP může svázat s následujícími typy:
| Typ | Description |
|---|---|
| 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, ve výchozím nastavení ji nastavte jako volitelnou. Klient ho může při vyvolání nástroje vynechat. Explicitně označte vlastnosti jako povinné, pokud nástroj nemůže bez nich pracovat.
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 od verze 1.0.0-preview.7. Nyní musíte vlastnosti explicitně označit 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.
Definujte jednu nebo více vlastností nástroje použitím atributu McpToolProperty na vstupní parametry stylu vazby ve vaší funkci.
Typ McpToolPropertyAttribute podporuje tyto vlastnosti:
| Vlastnictví | Description |
|---|---|
| PropertyName | Název vlastnosti nástroje, která se zobrazí klientům. |
| Description | 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 Java definujte vlastnosti nástroje pomocí @McpToolProperty poznámky k jednotlivým parametrům funkce. Označte každý parametr, který představuje vlastnost nástroje s touto poznámkou. Zadejte název vlastnosti, typ, popis a 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í | Description |
|---|---|
| Propertyname | Název vlastnosti nástroje, kterou zveřejňujete 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 .