Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj wyzwalacza zasobu MCP, aby zdefiniować punkty końcowe zasobów na serwerze protokołu MCP (Model Context Protocol). Klienci mogą używać zasobów do uzyskiwania dostępu do informacji dotyczących kontekstu, takich jak zawartość pliku, schematy bazy danych lub dokumentacja interfejsu API.
Aby uzyskać informacje na temat konfiguracji i konfiguracji, zobacz omówienie.
Kompletny przykład użycia wyzwalacza zasobów MCP można znaleźć w temacie
Example
Wsparcie Go nie jest obecnie dostępne dla tego przypisania.
Uwaga / Notatka
W przypadku języka C# rozszerzenie Azure Functions MCP obsługuje tylko model procesu roboczego isolated.
W tym pierwszym przykładzie pokazano, jak za pomocą zasobu zaimplementować element interfejsu użytkownika aplikacji MCP.
Poniższy kod tworzy punkt końcowy, aby uwidocznić zasób o nazwie Weather Widget , który służy interakcyjnemu wyświetlaniu pogody jako powiązanej zawartości HTML. Zasób używa schematu ui:// , aby wskazać, że jest to zasób interfejsu użytkownika aplikacji MCP.
// Optional resource metadata
private const string ResourceMetadata = """
{
"ui": {
"prefersBorder": true
}
}
""";
[Function(nameof(GetWeatherWidget))]
public string GetWeatherWidget(
[McpResourceTrigger(
"ui://weather/index.html",
"Weather Widget",
MimeType = "text/html;profile=mcp-app",
Description = "Interactive weather display for MCP Apps")]
[McpMetadata(ResourceMetadata)]
ResourceInvocationContext context)
{
var file = Path.Combine(AppContext.BaseDirectory, "app", "dist", "index.html");
return File.ReadAllText(file);
}
Narzędzie może odwoływać się do tego zasobu, deklarując resourceUri element w metadanych wskazujący wartość ui://weather/index.html. Po wywołaniu narzędzia host MCP pobiera zasób i renderuje go:
private const string ToolMetadata = """
{
"ui": {
"resourceUri": "ui://weather/index.html"
}
}
""";
[Function(nameof(GetWeather))]
public async Task<object> GetWeather(
[McpToolTrigger(nameof(GetWeather), "Returns current weather for a location via Open-Meteo.")]
[McpMetadata(ToolMetadata)]
ToolInvocationContext context,
[McpToolProperty("location", "City name to check weather for (e.g., Seattle, New York, Miami)")]
string location)
{
var result = await _weatherService.GetCurrentWeatherAsync(location);
return result;
}
Pełny przykład kodu można znaleźć w WeatherFunction.cs.
Ten przykładowy kod tworzy punkt końcowy w celu uwidocznienia zasobu o nazwie readme , który odczytuje plik markdown i zwraca jego zawartość jako zwykły tekst. Klienci mogą uzyskać dostęp do tego zasobu przy użyciu identyfikatora file://readme.md URI.
private const string ReadmeMetadata = """
{
"author": "John Doe",
"file": {
"version": 1.0,
"releaseDate": "2024-01-01"
},
"test": {
"example": ["list", "of", "values"]
}
}
""";
[Function(nameof(GetTextResource))]
public string GetTextResource(
[McpResourceTrigger(
"file://readme.md",
"readme",
Description = "Application readme file",
MimeType = "text/plain")]
[McpMetadata(ReadmeMetadata)]
ResourceInvocationContext context)
{
_logger.LogInformation("Reading text resource from local file storage");
var file = Path.Combine(AppContext.BaseDirectory, "assets", "readme.md");
return File.ReadAllText(file);
}
W tym przykładzie folder o nazwie assets zawierający readme element jest powiązany z aplikacją funkcji w czasie kompilacji, ponieważ w pliku znajduje .csproj się następująca dyrektywa:
<ItemGroup>
<None Update="assets\**\*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
Pełny przykład kodu można znaleźć w repozytorium rozszerzenia Azure Functions MCP.
Przykładowy kod dla języka JavaScript nie jest obecnie dostępny. Zapoznaj się z przykładem języka TypeScript, aby uzyskać ogólne wskazówki.
Poniższy kod rejestruje zasób o nazwie Weather Widget , który służy do interaktywnego wyświetlania pogody jako zawartości HTML w pakiecie. Zasób używa schematu ui:// , aby wskazać, że jest to zasób interfejsu użytkownika aplikacji MCP.
// Constants for the Weather Widget resource
const WEATHER_WIDGET_URI = "ui://weather/index.html";
const WEATHER_WIDGET_NAME = "Weather Widget";
const WEATHER_WIDGET_DESCRIPTION = "Interactive weather display for MCP Apps";
const WEATHER_WIDGET_MIME_TYPE = "text/html;profile=mcp-app";
// Metadata for the resource
const RESOURCE_METADATA = JSON.stringify({
ui: {
prefersBorder: true
}
});
app.mcpResource("getWeatherWidget", {
uri: WEATHER_WIDGET_URI,
resourceName: WEATHER_WIDGET_NAME,
description: WEATHER_WIDGET_DESCRIPTION,
mimeType: WEATHER_WIDGET_MIME_TYPE,
metadata: RESOURCE_METADATA,
handler: getWeatherWidget,
});
Poniższy kod to getWeatherWidget procedura obsługi:
export async function getWeatherWidget(
resourceContext: unknown,
context: InvocationContext
): Promise<string> {
context.log("Getting weather widget");
try {
const filePath = path.join(__dirname, "..", "..", "..", "src", "app", "dist", "index.html");
return fs.readFileSync(filePath, "utf-8");
} catch (error) {
context.log(`Error reading weather widget file: ${error}`);
return `<!DOCTYPE html>
<html>
<head><title>Weather Widget</title></head>
<body>
<h1>Weather Widget</h1>
<p>Widget content not found. Please ensure the app/dist/index.html file exists.</p>
</body>
</html>`;
}
}
Narzędzie może odwoływać się do tego zasobu, deklarując resourceUri element w metadanych. Po wywołaniu narzędzia host MCP pobiera zasób i renderuje go:
// Metadata for the tool (as valid JSON string)
const TOOL_METADATA = JSON.stringify({
ui: {
resourceUri: "ui://weather/index.html"
}
});
app.mcpTool("getWeather", {
toolName: "GetWeather",
description: "Returns current weather for a location via Open-Meteo.",
toolProperties: {
location: arg.string().describe("City name to check weather for (e.g., Seattle, New York, Miami)")
},
metadata: TOOL_METADATA,
handler: getWeather,
});
Pełny przykład kodu można znaleźć w weatherMcpApp.ts.
Ważne
Wyzwalacz zasobu MCP dla języka TypeScript wymaga wersji 4.12.0 lub nowszej @azure/functions pakietu.
Poniższy kod rejestruje zasób o nazwie Weather Widget , który służy do interaktywnego wyświetlania pogody jako zawartości HTML w pakiecie. Zasób używa schematu ui:// , aby wskazać, że jest to zasób interfejsu użytkownika aplikacji MCP.
# Constants for the Weather Widget resource
WEATHER_WIDGET_URI = "ui://weather/index.html"
WEATHER_WIDGET_NAME = "Weather Widget"
WEATHER_WIDGET_DESCRIPTION = "Interactive weather display for MCP Apps"
WEATHER_WIDGET_MIME_TYPE = "text/html;profile=mcp-app"
# Metadata for the resource
RESOURCE_METADATA = '{"ui": {"prefersBorder": true}}'
@app.mcp_resource_trigger(
arg_name="context",
uri=WEATHER_WIDGET_URI,
resource_name=WEATHER_WIDGET_NAME,
description=WEATHER_WIDGET_DESCRIPTION,
mime_type=WEATHER_WIDGET_MIME_TYPE,
metadata=RESOURCE_METADATA
)
def get_weather_widget(context) -> str:
"""Get the weather widget HTML content."""
logging.info("Getting weather widget")
current_dir = Path(__file__).parent
file_path = current_dir / "app" / "dist" / "index.html"
if file_path.exists():
return file_path.read_text(encoding="utf-8")
else:
logging.warning(f"Weather widget file not found at: {file_path}")
return """<!DOCTYPE html>
<html>
<head><title>Weather Widget</title></head>
<body>
<h1>Weather Widget</h1>
<p>Widget content not found. Please ensure the app/index.html file exists.</p>
</body>
</html>"""
Narzędzie może odwoływać się do tego zasobu, deklarując resourceUri element w metadanych wskazujący wartość ui://weather/index.html. Po wywołaniu narzędzia host MCP pobiera zasób i renderuje go:
# Metadata for the tool
TOOL_METADATA = '{"ui": {"resourceUri": "ui://weather/index.html"}}'
@app.mcp_tool(metadata=TOOL_METADATA)
@app.mcp_tool_property(arg_name="location", description="City name to check weather for (e.g., Seattle, New York, Miami)")
def get_weather(location: str) -> Dict[str, Any]:
"""Returns current weather for a location via Open-Meteo."""
logging.info(f"Getting weather for location: {location}")
result = weather_service.get_current_weather(location)
return json.dumps(result)
Pełny przykład kodu można znaleźć w function_app.py.
Uwaga / Notatka
Wyzwalacz zasobu MCP dla Python wymaga wersji 2.0.0 lub nowszej pakietu azure-functions i używania Python 3.13 lub nowszej.
Poniższy kod rejestruje zasób o nazwie Weather Widget , który służy do interaktywnego wyświetlania pogody jako zawartości HTML w pakiecie. Zasób używa schematu ui:// , aby wskazać, że jest to zasób interfejsu użytkownika aplikacji MCP.
private static final String RESOURCE_METADATA = """
{
"ui": {
"prefersBorder": true
}
}
""";
@FunctionName("GetWeatherWidget")
public String getWeatherWidget(
@McpResourceTrigger(
name = "context",
uri = "ui://weather/index.html",
resourceName = "Weather Widget",
title = "Weather Widget",
description = "Interactive weather display for MCP Apps",
mimeType = "text/html;profile=mcp-app")
@McpMetadata(
name = "context",
json = RESOURCE_METADATA)
String context,
final ExecutionContext executionContext) {
executionContext.getLogger().info("GetWeatherWidget: serving weather widget UI");
// Load the bundled HTML file from the CWD-relative path
java.io.File file = new java.io.File("app/dist/index.html");
if (file.exists()) {
return java.nio.file.Files.readString(file.toPath(), StandardCharsets.UTF_8);
}
return "<html><body><p>Weather widget UI not found.</p></body></html>";
}
Narzędzie może odwoływać się do tego zasobu, deklarując resourceUri element w metadanych wskazujący wartość ui://weather/index.html. Po wywołaniu narzędzia host MCP pobiera zasób i renderuje go:
private static final String TOOL_METADATA = """
{
"ui": {
"resourceUri": "ui://weather/index.html"
}
}
""";
@FunctionName("GetWeather")
public String getWeather(
@McpToolTrigger(
name = "GetWeather",
description = "Returns current weather for a location via Open-Meteo.")
@McpMetadata(
name = "GetWeather",
json = TOOL_METADATA)
String context,
@McpToolProperty(
name = "location",
propertyType = "string",
description = "City name to check weather for (e.g., Seattle, New York, Miami)")
String location,
final ExecutionContext executionContext) {
executionContext.getLogger().info("GetWeather: looking up weather for '" + location + "'");
Object result = weatherService.getCurrentWeather(location);
return MAPPER.writeValueAsString(result);
}
Pełny przykład kodu można znaleźć w WeatherFunction.java.
Ważne
Rozszerzenie MCP nie obsługuje obecnie aplikacji programu PowerShell.
Atrybuty
Biblioteki języka C# służą McpResourceTriggerAttribute do definiowania wyzwalacza funkcji.
Konstruktor atrybutu przyjmuje następujące parametry:
| Parameter | Opis |
|---|---|
| Uri | (Wymagane) Identyfikator URI zasobu, który definiuje adres zasobu. Na przykład ui://weather/index.html definiuje statyczny identyfikator URI zasobu. |
| ResourceName | (Wymagane) Nazwa zasobu uwidacznianego przez punkt końcowy wyzwalacza zasobu MCP. |
Atrybut obsługuje również następujące nazwane właściwości:
| Majątek | Opis |
|---|---|
| Opis | (Opcjonalnie) Przyjazny opis punktu końcowego zasobu dla klientów. |
| Nazwa | (Opcjonalnie) Czytelny dla człowieka tytuł do celów wyświetlania w interfejsach klienta MCP. |
| Typ MIME | (Opcjonalnie) Typ MIME zawartości zwróconej przez zasób. Na przykład w text/html;profile=mcp-app przypadku zasobów interfejsu użytkownika aplikacji MCP dla text/plain zwykłego tekstu lub application/json danych JSON. |
| rozmiar | (Opcjonalnie) Rozmiar zawartości zasobu w bajtach. |
| Metadane | (Opcjonalnie) Ciąg metadanych serializowany w formacie JSON dla zasobu. Możesz również użyć atrybutu McpMetadata jako alternatywnego sposobu podawania metadanych. |
Możesz użyć atrybutu [McpMetadata] , aby podać więcej metadanych dla zasobów. Te metadane są uwzględniane w polu meta każdego zasobu, gdy klienci wywołają resources/listmetodę , i mogą wpływać na sposób wyświetlania lub przetwarzania zawartości zasobu.
Zobacz Użycie , aby dowiedzieć się, jak wyzwalacz zasobu dostarcza dane do funkcji.
Dekoratory
Następujące właściwości wyzwalacza zasobów MCP są obsługiwane w systemie mcp_resource_trigger:
| Majątek | Opis |
|---|---|
| arg_name | Nazwa zmiennej (zwykle context) używana w kodzie funkcji w celu uzyskania dostępu do ładunku wyzwalacza. |
| Uri | (Wymagane) Unikatowy identyfikator URI zasobu. Musi być bezwzględnym identyfikatorem URI. |
| resource_name | (Wymagane) Czytelna dla człowieka nazwa zasobu. |
| tytuł | Opcjonalny tytuł do celów wyświetlania w interfejsach klienta MCP. |
| opis | Opis zasobu MCP uwidocznionego przez punkt końcowy funkcji. |
| mime_type | Typ MIME zawartości zwróconej przez zasób. Na przykład w text/html;profile=mcp-app przypadku zasobów interfejsu użytkownika aplikacji MCP dla text/plain zwykłego tekstu. |
| rozmiar | Oczekiwany rozmiar zawartości zasobu w bajtach, jeśli jest znany. |
| metadane | Ciąg serializowany w formacie JSON dodatkowych metadanych dla zasobu. |
Uwaga / Notatka
Dekoratory są dostępne tylko w modelu programowania Python w wersji 2.
Konfiguracja
Zdefiniuj opcje powiązania wyzwalacza w kodzie. Wyzwalacz obsługuje następujące opcje:
| Option | Opis |
|---|---|
| type | Ustaw wartość mcpResourceTrigger. Używaj tylko z definicjami ogólnymi. |
| Uri | (Wymagane) Identyfikator URI zasobu MCP uwidacznianego przez punkt końcowy funkcji. Musi być bezwzględnym identyfikatorem URI. |
| Resourcename | (Wymagane) Czytelna dla człowieka nazwa zasobu MCP uwidacznianego przez punkt końcowy funkcji. |
| tytuł | Opcjonalny tytuł do celów wyświetlania w interfejsach klienta MCP. |
| opis | Opis zasobu MCP uwidacznianego przez punkt końcowy funkcji. |
| mimeType | Typ MIME zawartości zwróconej przez zasób. Na przykład text/html;profile=mcp-app. |
| rozmiar | Oczekiwany rozmiar zawartości zasobu w bajtach, jeśli jest znany. |
| metadane | Ciąg serializowany w formacie JSON dodatkowych metadanych dla zasobu. |
| obsługi | Metoda zawierająca rzeczywisty kod funkcji. |
Atrybuty
Zastosuj adnotację do parametru @McpResourceTrigger funkcji, aby zdefiniować wyzwalacz zasobu MCP.
Adnotacja @McpResourceTrigger obsługuje następujące właściwości:
| Majątek | Opis |
|---|---|
name |
To jest wymagane. Nazwa powiązania parametru kontekstu wywołania zasobu. |
uri |
To jest wymagane. Identyfikator URI zasobu MCP (na przykład "file://readme.md" lub "ui://weather/index.html"). |
resourceName |
To jest wymagane. Nazwa wyświetlana zasobu MCP. |
title |
Opcjonalny. Czytelny dla człowieka tytuł do celów wyświetlania. W przeciwieństwie do resourceNameelementu , który jest identyfikatorem programowym, jest to przyjazna etykieta prezentacji interfejsu użytkownika. |
description |
Opcjonalny. Czytelny dla człowieka opis tego zasobu. |
mimeType |
Opcjonalny. Typ MIME zawartości zasobu (na przykład "text/plain", , "text/html""image/png", "text/html;profile=mcp-app"). |
size |
Opcjonalny. Rozmiar zasobu w bajtach. Wartości domyślne to -1 (nie określono). |
dataType |
Opcjonalny. Definiuje sposób traktowania wartości parametru przez środowisko uruchomieniowe usługi Functions. Możliwe wartości: "" (wartość domyślna, deserializacji do typu parametru), "string", "binary". |
Adnotacja metadanych
Opcjonalnie można zastosować ten @McpMetadata sam parametr co @McpResourceTrigger w celu dołączenia dowolnych metadanych JSON do zasobu. Te metadane są udostępniane w polu protokołu _meta MCP, gdy klienci wywołają metodę resources/list.
Adnotacja @McpMetadata obsługuje następujące właściwości:
| Majątek | Opis |
|---|---|
name |
To jest wymagane. Nazwa parametru powiązania. Powinna być zgodna z name wartością adnotacji wyzwalacza dla tego samego parametru. |
json |
To jest wymagane. Metadane jako prawidłowy ciąg JSON. Może zawierać dowolne pary klucz-wartość, takie jak informacje o autorze, numery wersji, wskazówki interfejsu użytkownika lub tagi. |
Example:
@McpResourceTrigger(
name = "context",
uri = "file://readme.md",
resourceName = "readme",
description = "Application readme file",
mimeType = "text/plain")
@McpMetadata(
name = "context",
json = "{\"author\": \"John Doe\", \"version\": 1.0}")
Wyzwalacz zasobu MCP może wiązać się z następującymi typami:
| Typ | Opis |
|---|---|
| ResourceInvocationContext | Obiekt reprezentujący żądanie zasobu, w tym identyfikator URI zasobu, identyfikator sesji i informacje o transporcie. |
Typ ResourceInvocationContext zawiera następujące właściwości:
| Majątek | Typ | Opis |
|---|---|---|
| Uri | string |
Identyfikator URI żądanego zasobu. |
| Identyfikator sesji | string? |
Identyfikator sesji skojarzony z wywołaniem bieżącego zasobu. |
| Transport | Transport? |
Informacje o transporcie dla bieżącego wywołania. |
Dekorator mcp_resource_trigger wiąże się z parametrem kontekstu reprezentującym żądanie zasobu z klienta MCP. Wyzwalacz może być powiązany z następującymi typami: str, dictlub bytes.
Funkcja obsługi zasobów ma dwa parametry:
| Parameter | Typ | Opis |
|---|---|---|
| wiadomości |
T (domyślnie to unknown) |
Ładunek wyzwalacza przekazany przez rozszerzenie MCP. (Powyższe przykładowe nazwy tego parametru resourceContext). |
| kontekst | InvocationContext |
Kontekst wywołania Azure Functions, który zapewnia rejestrowanie i inne informacje o środowisku uruchomieniowym. |
Wyzwalacz zasobu MCP wiąże kontekst wywołania zasobu z parametrem funkcji. Wyzwalacz może wiązać się z następującymi typami: Stringlub byte[] dla zawartości binarnej.
Identyfikatory URI zasobów
Zasoby MCP używają identyfikatorów URI do zdefiniowania adresu zasobu. Identyfikator URI jednoznacznie identyfikuje zasób i jest używany przez klientów do żądania. Możesz użyć dowolnego schematu identyfikatora URI odpowiedniego dla zasobu, takiego jak ui:// zasoby interfejsu użytkownika lub file:// zasoby oparte na plikach.
Metadane zasobu
Użyj atrybutu McpMetadata , aby podać dodatkowe metadane dla zasobów. Klienci MCP otrzymują te metadane i mogą mieć wpływ na sposób wyświetlania lub przetwarzania zawartości zasobu.
Aby zapewnić dodatkowe metadane dla zasobów, użyj parametru metadata w dekoratorze mcp_resource_trigger . Te metadane są ciągiem serializowanym w formacie JSON zawartym w meta polu każdego zasobu, gdy klienci wywołają metodę resources/list. Może to mieć wpływ na sposób wyświetlania lub przetwarzania zawartości zasobu.
metadata Użyj opcji , aby podać dodatkowe metadane dla zasobów. Te metadane są ciągiem serializowanym w formacie JSON zawartym w meta polu każdego zasobu, gdy klienci wywołają metodę resources/list. Może to mieć wpływ na sposób wyświetlania lub przetwarzania zawartości zasobu.
Użyj adnotacji @McpMetadata , aby udostępnić dodatkowe metadane dla zasobów. Te metadane są ciągiem serializowanym w formacie JSON zawartym w meta polu każdego zasobu, gdy klienci wywołają metodę resources/list. Może to mieć wpływ na sposób wyświetlania lub przetwarzania zawartości zasobu.
Typy zwracane
Wyzwalacz zasobu MCP obsługuje następujące typy zwracane:
| Typ | Opis |
|---|---|
string |
Zwrócone jako zawartość tekstowa w mcp ReadResourceResult. |
byte[] |
Zwrócony jako zawartość obiektu blob zakodowanego w formacie base64 w mcp ReadResourceResult. |
Wyzwalacz zasobu MCP obsługuje następujące typy zwracane:
| Typ | Opis |
|---|---|
str |
Zwrócone jako zawartość tekstowa w mcp ReadResourceResult. |
bytes |
Zwrócona jako zawartość binarna w mcp ReadResourceResult. |
Funkcja powinna zwracać string zawartość zasobu (na przykład HTML, JSON lub zwykły tekst).
Wyzwalacz zasobu MCP obsługuje następujące typy zwracane:
| Typ | Opis |
|---|---|
String |
Zwrócone jako zawartość tekstowa w mcp ReadResourceResult. |
byte[] |
Zwrócony jako zawartość binarną zakodowaną w formacie base64 w mcp ReadResourceResult. Ustaw dataType = "binary" adnotację podczas zwracania zawartości binarnej. |
Odnajdywanie zasobów
Po uruchomieniu aplikacji funkcji rejestruje wszystkie funkcje wyzwalacza zasobów na serwerze MCP. Klienci odnajdują dostępne zasoby, wywołując metodę MCP resources/list . Ta metoda zwraca identyfikator URI każdego zasobu, nazwę, opis, typ MIME, rozmiar i metadane (za pośrednictwem meta pola). Klienci odczytują zasób przez wywołanie resources/read identyfikatora URI zasobu.
Sessions
Właściwość SessionId na ResourceInvocationContext stronie identyfikuje sesję MCP wysyłającą żądanie. Użyj tej właściwości, aby zachować stan sesji lub zastosować logikę specyficzną dla sesji podczas obsługi zasobów.
Aby uzyskać więcej informacji, zobacz Przykłady.
ustawienia pliku host.json
Plik host.json zawiera ustawienia kontrolujące zachowania wyzwalacza MCP. Aby uzyskać szczegółowe informacje dotyczące dostępnych ustawień, zobacz sekcję host.json settings (Ustawienia host.json).
Powiązane artykuły
wyzwalacz narzędzia MCP dla Azure Functions