Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az MCP eszközindítóval definiálhat eszközvégpontokat a Model Content Protocol (MCP) kiszolgálón. Az ügyfél nyelvi modelljei és ügynökei eszközökkel végezhetnek bizonyos feladatokat, például kódrészleteket tárolhatnak vagy érhetnek el.
A beállítással és a konfigurációval kapcsolatos információkért tekintse meg az áttekintést.
példa
Megjegyzés:
C# esetén az Azure Functions MCP-bővítmény csak az izolált feldolgozómodellt támogatja.
Ez a kód létrehoz egy végpontot egy olyan eszköz SaveSnippet közzététele érdekében, amely egy elnevezett kódrészletet próbál meg tárolni a Blob Storage-ba.
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;
}
Ez a kód létrehoz egy végpontot, amely elérhetővé tesz egy olyan eszközt GetSnippet , amely név szerint próbál lekérni egy kódrészletet a Blob Storage-ból.
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;
}
A függvény eszköztulajdonságai a GetSnippet következőben Program.csvannak konfigurálva:
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();
Jótanács
A fenti példa literális sztringeket használt olyan dolgokhoz, mint a "get_snippets" eszköz neve mind Program.cs a függvényben. Fontolja meg inkább a megosztott állandó sztringek használatát, hogy a dolgok szinkronban maradjanak a projektben.
A teljes példakódért lásd: SnippetTool.cs.
Ez a kód létrehoz egy végpontot egy olyan eszköz SaveSnippets közzététele érdekében, amely egy elnevezett kódrészletet próbál meg tárolni a Blob Storage-ba.
@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.";
}
Ez a kód létrehoz egy végpontot, amely elérhetővé tesz egy olyan eszközt GetSnippets , amely név szerint próbál lekérni egy kódrészletet a Blob Storage-ból.
@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.";
}
}
A teljes példakódért lásd: Snippets.java.
A JavaScript példakódja jelenleg nem érhető el. A TypeScript-példákban általános útmutatást talál a Node.jshasználatával.
Ez a kód létrehoz egy végpontot egy olyan eszköz savesnippet közzététele érdekében, amely egy elnevezett kódrészletet próbál meg tárolni a Blob Storage-ba.
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,
});
Ez a kód kezeli az eseményindítót savesnippet :
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;
}
Ez a kód létrehoz egy végpontot, amely elérhetővé tesz egy olyan eszközt getsnippet , amely név szerint próbál lekérni egy kódrészletet a Blob Storage-ból.
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,
});
Ez a kód kezeli az eseményindítót getsnippet :
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;
}
A teljes példakódért lásd: snippetsMcpTool.ts.
Ez a kód a mcp_tool_trigger dekoratőr használatával hoz létre egy végpontot, amely egy elnevezett save_snippet eszközt tesz elérhetővé, amely egy elnevezett kódrészletet próbál meg őrizni a blobtárolóban.
@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"
Ez a kód a mcp_tool_trigger dekoratőr használatával hoz létre egy végpontot egy olyan eszköz elérhetővé get_snippet céljából, amely név szerint próbál lekérni egy kódrészletet a Blob Storage-ból.
@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
A teljes példakódért lásd: function_app.py.
Fontos
Az MCP-bővítmény jelenleg nem támogatja a PowerShell-alkalmazásokat.
Tulajdonságok
A C#-kódtárak a függvényindító definiálására használhatók McpToolTriggerAttribute .
Az attribútum konstruktora a következő paramétereket veszi fel:
| Paraméter | Leírás |
|---|---|
| ToolName | Az MCP-eseményindító végpontja által közzétett eszköz (kötelező) neve. |
| Leírás | (Nem kötelező) az eszközvégpont rövid leírása az ügyfelek számára. |
A Használat című cikkből megtudhatja, hogyan definiálhatja a végpont tulajdonságait bemeneti paraméterekként.
Megjegyzések
A @McpToolTrigger széljegyzet létrehoz egy függvényt, amely egy eszközvégpontot tesz elérhetővé a távoli MCP-kiszolgálón.
A széljegyzet a következő konfigurációs beállításokat támogatja:
| Paraméter | Leírás |
|---|---|
| név | Az MCP-eseményindító végpontja által közzétett eszköz (kötelező) neve. |
| leírás | (Nem kötelező) az eszközvégpont rövid leírása az ügyfelek számára. |
A @McpToolProperty széljegyzet az eszközök egyedi tulajdonságait határozza meg. A függvény minden tulajdonságparaméterét ezzel a jegyzettel kell széljegyzetekkel elfűzni.
A @McpToolProperty széljegyzet a következő konfigurációs beállításokat támogatja:
| Paraméter | Leírás |
|---|---|
| név | (Kötelező) annak az eszköztulajdonságnak a neve, amely az ügyfelek számára lesz közzétéve. |
| propertyType | Az eszköztulajdonság (kötelező) típusa. Az érvényes típusok a következők: string, number, integer, boolean. object |
| leírás | (Nem kötelező) az eszköztulajdonságok leírása. |
| szükséges | (Nem kötelező) ha be truevan állítva, az eszköztulajdonság az eszközhívások argumentumaként szükséges. Alapértelmezett érték: false. |
Dekorátorok
Csak a Python v2 programozási modellre vonatkozik.
A mcp_tool_trigger dekoratőrnek a csomag 1.24.0-s vagy újabb verzióját kell használniaazure-functions. A következő MCP-eseményindító-tulajdonságok támogatottak mcp_tool_trigger:
| Ingatlan | Leírás |
|---|---|
| arg_name | A függvénykódban a végrehajtási környezet eléréséhez használt változónév (általában context). |
| tool_name | (Kötelező) A függvényvégpont által közzétett MCP-kiszolgálóeszköz neve. |
| leírás | A függvényvégpont által közzétett MCP-kiszolgáló eszköz leírása. |
| tool_properties | Egy vagy több tulajdonságobjektum JSON-sztringje, amely az eszköz tulajdonságait teszi elérhetővé az ügyfelek számára. |
Konfiguráció
Az eseményindító támogatja a kódban definiált kötési beállításokat:
| Beállítások | Leírás |
|---|---|
| típus | A értéknek mcpToolTriggerkell lennie. Csak általános definíciókkal használható. |
| toolName | (Kötelező) A függvényvégpont által közzétett MCP-kiszolgálóeszköz neve. |
| leírás | A függvényvégpont által közzétett MCP-kiszolgáló eszköz leírása. |
| toolProperties | Objektumtömb toolProperty , amely az eszköz tulajdonságait teszi elérhetővé az ügyfelek számára. |
| extraOutputs | Ha definiálja, függvénykimenetet küld egy másik kötésnek. |
| kezelő | A tényleges függvénykódot tartalmazó metódus. |
A teljes példákért tekintse meg a Példa szakaszt .
Használat
Az MCP-eszköz eseményindítója a következő típusokhoz tud csatlakozni:
| Típus | Leírás |
|---|---|
| ToolInvocationContext | Az eszközhívást jelképező objektum, beleértve a hívás eszköznevét és argumentumait. |
| JSON szerializálható típusok | A Functions megpróbálja deszerializálni az eszközargumentumokat egy egyszerű régi CLR-objektum (POCO) típusba. Ez a típus az eszköztulajdonságok definiálására is használható. JSON-szerializálható típushoz való kötéskor opcionálisan egy ToolInvocationContext típusú paramétert is megadhat az eszköz hívási adatainak eléréséhez. |
Eszköztulajdonságok
Az MCP-ügyfelek argumentumokkal rendelkező eszközöket hívnak meg, hogy adatokat és kontextust adjanak az eszköz működéséhez. Az ügyfelek tudják, hogyan gyűjtsék össze és adják át ezeket az argumentumokat az eszköz által a protokoll részeként meghirdetett tulajdonságok alapján. Ezért meg kell határoznia az eszköz tulajdonságait a függvénykódban.
Amikor meghatároz egy eszköztulajdonságot, az alapértelmezés szerint nem kötelező, és az ügyfél kihagyhatja azt az eszköz meghívásakor. Szükség szerint meg kell jelölnie a tulajdonságokat, ha az eszköz nélkülük nem működik.
Megjegyzés:
Az MCP-bővítmény előzetes verziójának korábbi verziói alapértelmezés szerint minden eszköztulajdonság szükségesvé tették. Ez a viselkedés a verziótól 1.0.0-preview.7kezdve megváltozott, és most már explicit módon meg kell jelölnie a tulajdonságokat.
A C#-ban többféleképpen is definiálhat tulajdonságokat az eszközökhöz. A használt módszer a kódstílus-beállítások kérdése. A lehetőségek a következők:
- A függvény az attribútum használatával veszi át a
McpToolPropertybemeneti paramétereket. - Egyéni típust definiálhat a tulajdonságokkal, és a függvény ehhez a típushoz kötődik.
- A tulajdonságokat a
FunctionsApplicationBuilderfájlban definiálhatjaProgram.cs.
Egy vagy több eszköztulajdonság definiálásához alkalmazza az attribútumot a McpToolProperty függvény bemeneti kötésstílus-paramétereire.
A McpToolPropertyAttribute típus a következő tulajdonságokat támogatja:
| Ingatlan | Leírás |
|---|---|
| Tulajdonságnév | Az ügyfelek számára elérhető eszköztulajdonság neve. |
| Leírás | Az eszköztulajdonságok leírása. |
| Kötelező | (Nem kötelező) Ha be van trueállítva, az eszköztulajdonság argumentumként szükséges az eszközhívásokhoz. Alapértelmezett érték: false. |
A tulajdonság típusa annak a paraméternek a típusából származik, amelyre az attribútumot alkalmazza. Definiálhat például [McpToolProperty("snippetname", "The name of the snippet.", true)] string name egy kötelező eszköztulajdonságot, amely az MCP-üzenetekben típusként snippetname van elnevezvestring.
Ezeket az attribútumokat az SaveSnippet eszközben a Példákban tekintheti meg.
A Javában az eszköztulajdonságokat az @McpToolProperty egyes függvényparamétereken lévő széljegyzetek használatával határozhatja meg. Az eszköztulajdonságokat képviselő paramétereket ezzel a megjegyzéssel kell jegyzetelni, megadva a tulajdonság nevét, típusát, leírását, valamint azt, hogy szükséges-e.
A példákban ezeket a széljegyzeteket láthatja.
Az eszköztulajdonságokat az eseményindító definíciójának toolProperties mezőjében konfigurálhatja, amely egy objektumtömb sztring-ábrázolása ToolProperty .
Az ToolProperty objektumok struktúrája a következő:
{
"propertyName": "Name of the property",
"propertyType": "Type of the property",
"description": "Optional property description",
"isRequired": true|false,
"isArray": true|false
}
Egy objektum mezői ToolProperty a következők:
| Ingatlan | Leírás |
|---|---|
| propertyName | Az ügyfelek számára elérhető eszköztulajdonság neve. |
| propertyType | Az eszköztulajdonság típusa. Az érvényes típusok a következők: string, number, integer, boolean. object Tekintse meg isArray a tömbtípusokat. |
| leírás | Az eszköztulajdonságok leírása. |
| isRequired | (Nem kötelező) Ha be van trueállítva, az eszköztulajdonság argumentumként szükséges az eszközhívásokhoz. Alapértelmezett érték: false. |
| isArray | (Nem kötelező) Ha be van trueállítva, az eszköztulajdonság a megadott tulajdonságtípus tömbje. Alapértelmezett érték: false. |
Megadhatod a toolProperties mezőt objektumok tömbjeként ToolProperty , vagy a arg segédeket használhatod a tulajdonságok @azure/functions típusbiztonságosabb meghatározására:
toolProperties: {
[SNIPPET_NAME_PROPERTY_NAME]: arg.string().describe(SNIPPET_NAME_PROPERTY_DESCRIPTION)
}
További információ: Példák.
host.json beállítások
A host.json fájl az MCP-eseményindítók viselkedését vezérlő beállításokat tartalmaz. Az elérhető beállításokkal kapcsolatos részletekért tekintse meg a host.json beállítások szakaszát.