Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Use o disparador de recurso MCP para definir endpoints de recursos num servidor Model Context Protocol (MCP ). Os clientes podem usar recursos para aceder a informações de contexto, como conteúdos de ficheiros, esquemas de bases de dados ou documentação da API.
Para obter informações sobre detalhes de instalação e configuração, consulte a visão geral.
Example
Observação
Para C#, a extensão Funções do Azure MCP suporta apenas o modelo de trabalhador isolado.
Este primeiro exemplo mostra como usar recursos para implementar o elemento UI das Apps MCP.
O código seguinte cria um endpoint para expor um recurso nomeado Weather Widget que serve uma visualização meteorológica interativa como conteúdo HTML agrupado. O recurso usa o ui:// esquema para indicar que é um recurso da interface da aplicação 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);
}
Uma ferramenta pode referenciar este recurso declarando a resourceUri nos seus metadados, apontando para ui://weather/index.html. Quando a ferramenta é invocada, o host MCP recupera o recurso e renderiza-o:
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;
}
Para o exemplo completo do código, veja WeatherFunction.cs.
Este exemplo de código cria um endpoint para expor um recurso nomeado readme que lê um ficheiro markdown e devolve o seu conteúdo como texto simples. Os clientes podem aceder a este recurso usando o 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);
}
Neste exemplo, uma pasta chamada assets contendo o readme é incluída com a aplicação de funções em tempo de compilação porque a seguinte diretiva está presente no .csproj ficheiro:
<ItemGroup>
<None Update="assets\**\*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
Para o exemplo completo do código, veja o repositório Funções do Azure MCP Extension.
O código de exemplo para JavaScript não está disponível no momento. Consulte o exemplo do TypeScript para orientações gerais.
O código abaixo regista um recurso nomeado Weather Widget que serve uma visualização meteorológica interativa como conteúdo HTML agrupado. O recurso usa o ui:// esquema para indicar que é um recurso da interface da aplicação 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,
});
O seguinte código é o getWeatherWidget handler:
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>`;
}
}
Uma ferramenta pode referenciar este recurso declarando a resourceUri nos seus metadados. Quando a ferramenta é invocada, o host MCP recupera o recurso e renderiza-o:
// 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,
});
Para o exemplo completo do código, veja weatherMcpApp.ts.
Importante
O disparador de recurso MCP para TypeScript requer uma versão 4.12.0 ou posterior do @azure/functions pacote.
O código seguinte regista um recurso nomeado Weather Widget que serve como um ecrã meteorológico interativo como conteúdo HTML agrupado. O recurso usa o ui:// esquema para indicar que é um recurso da interface da aplicação 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>"""
Uma ferramenta pode referenciar este recurso declarando a resourceUri nos seus metadados, apontando para ui://weather/index.html. Quando a ferramenta é invocada, o host MCP recupera o recurso e renderiza-o:
# 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)
Para o exemplo completo do código, veja function_app.py.
Observação
O disparador de recurso MCP para Python requer a versão 2.0.0 ou posterior do pacote azure-functions e o uso de Python 3.13 ou superior.
O código seguinte regista um recurso nomeado Weather Widget que serve como um ecrã meteorológico interativo como conteúdo HTML agrupado. O recurso usa o ui:// esquema para indicar que é um recurso da interface da aplicação 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");
return java.nio.file.Files.readString(file.toPath(), StandardCharsets.UTF_8);
}
Uma ferramenta pode referenciar este recurso declarando a resourceUri nos seus metadados, apontando para ui://weather/index.html. Quando a ferramenta é invocada, o host MCP recupera o recurso e renderiza-o:
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);
}
Para o exemplo completo do código, veja WeatherFunction.java.
Importante
Atualmente, a extensão MCP não oferece suporte a aplicativos do PowerShell.
Attributes
As bibliotecas C# são usadas McpResourceTriggerAttribute para definir o gatilho de função.
O construtor do atributo usa os seguintes parâmetros:
| Parâmetro | Description |
|---|---|
| Uri | (Obrigatório) O URI do recurso, que define o endereço do recurso. Por exemplo, ui://weather/index.html define um URI de recurso estático. |
| ResourceName | (Obrigatório) O nome do recurso que o endpoint de disparo do recurso MCP expõe. |
O atributo também suporta as seguintes propriedades nomeadas:
| Propriedade | Description |
|---|---|
| Descrição | (Opcional) Uma descrição amigável do endpoint de recursos para clientes. |
| Título | (Opcional) Um título legível por humanos para fins de visualização em interfaces cliente MCP. |
| MimeType | (Opcional) O tipo MIME do conteúdo devolvido pelo recurso. Por exemplo, text/html;profile=mcp-app para recursos da interface da aplicação MCP, text/plain para texto simples ou application/json para dados JSON. |
| Tamanho | (Opcional) O tamanho do conteúdo do recurso em bytes. |
| Metadados | (Opcional) Uma cadeia de metadados serializada em JSON para o recurso. Também pode usar o McpMetadata atributo como uma forma alternativa de fornecer metadados. |
Podes usar o [McpMetadata] atributo para fornecer mais metadados aos recursos. Estes metadados são incluídos no campo meta de cada recurso quando os clientes chamam resources/list, e podem influenciar a forma como o conteúdo do recurso é exibido ou processado.
Consulte Utilização para saber como o disparador de recurso fornece dados à sua função.
Decoradores
As seguintes propriedades de disparo de recurso MCP são suportadas em:mcp_resource_trigger
| Propriedade | Description |
|---|---|
| arg_name | O nome da variável (normalmente context) é usado no código da função para aceder à carga útil de disparo. |
| URI | (Obrigatório) Identificador URI único para o recurso. Deve ser um URI absoluto. |
| resource_name | (Obrigatório) Nome legível para humanos do recurso. |
| título | Um título opcional para fins de visualização nas interfaces de cliente MCP. |
| descrição | Uma descrição do recurso MCP exposto pelo endpoint da função. |
| mime_type | O tipo MIME do conteúdo devolvido pelo recurso. Por exemplo, text/html;profile=mcp-app para recursos da interface da aplicação MCP, text/plain para texto simples. |
| tamanho | O tamanho esperado do conteúdo do recurso em bytes, se conhecido. |
| metadados | Uma cadeia de metadados extra serializada em JSON para o recurso. |
Observação
Os decoradores só estão disponíveis no modelo de programação Python v2.
Configuração
Defina as opções de vinculação do gatilho no seu código. O gatilho suporta as seguintes opções:
| Opção | Description |
|---|---|
| type | Definido como mcpResourceTrigger. Use apenas com definições genéricas. |
| URI | (Obrigatório) O URI do recurso MCP que o endpoint da função expõe. Deve ser um URI absoluto. |
| Nome do Recurso. | (Obrigatório) O nome legível por humanos do recurso MCP que o endpoint da função expõe. |
| título | Um título opcional para fins de visualização nas interfaces de cliente MCP. |
| descrição | Uma descrição do recurso MCP que o endpoint da função expõe. |
| mimeType | O tipo MIME do conteúdo devolvido pelo recurso. Por exemplo, text/html;profile=mcp-app. |
| tamanho | O tamanho esperado do conteúdo do recurso em bytes, se conhecido. |
| metadados | Uma cadeia de metadados extra serializada em JSON para o recurso. |
| gestor | O método que contém o código da função real. |
Attributes
Aplicar a @McpResourceTrigger anotação a um parâmetro de função para definir um gatilho de recurso MCP.
A @McpResourceTrigger anotação suporta as seguintes propriedades:
| Propriedade | Description |
|---|---|
name |
Required. O nome de ligação para o parâmetro de contexto de invocação de recursos. |
uri |
Required. O URI do recurso MCP (por exemplo, "file://readme.md" ou "ui://weather/index.html"). |
resourceName |
Required. O nome de exibição do recurso MCP. |
title |
Opcional. Um título legível por humanos para fins de visualização. Ao contrário de resourceName, que é um identificador programático, este é um rótulo amigável para apresentação da interface. |
description |
Opcional. Uma descrição legível para humanos deste recurso. |
mimeType |
Opcional. O tipo MIME do conteúdo do recurso (por exemplo, "text/plain", "text/html", "image/png", "text/html;profile=mcp-app"). |
size |
Opcional. O tamanho do recurso em bytes. Por defeito ( -1 não especificado). |
dataType |
Opcional. Define como o tempo de execução da Função deve tratar o valor do parâmetro. Valores possíveis: "" (por defeito, desserializar para tipo de parâmetro), "string", "binary". |
Anotação de metadados
Podes, opcionalmente, aplicar @McpMetadata no mesmo parâmetro que @McpResourceTrigger para anexar metadados JSON arbitrários ao recurso. Estes metadados são apresentados no campo do _meta protocolo MCP quando os clientes chamam resources/list.
A @McpMetadata anotação suporta as seguintes propriedades:
| Propriedade | Description |
|---|---|
name |
Required. O nome do parâmetro de ligação. Deve corresponder ao name valor da anotação do gatilho no mesmo parâmetro. |
json |
Required. Os metadados como uma string JSON válida. Pode incluir quaisquer pares chave-valor arbitrários, como informações do autor, números de versão, dicas de interface ou etiquetas. |
Exemplo:
@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}")
Consulte a seção Exemplo para obter exemplos completos.
Usage
O disparador de recurso MCP pode ser ligado aos seguintes tipos:
| Tipo | Description |
|---|---|
| ResourceInvocationContext | Um objeto que representa o pedido de recurso, incluindo o URI do recurso, ID de sessão e informação de transporte. |
O ResourceInvocationContext tipo fornece as seguintes propriedades:
| Propriedade | Tipo | Description |
|---|---|---|
| Uri | string |
O URI do recurso solicitado. |
| SessionId | string? |
O ID da sessão associado à invocação atual do recurso. |
| Transportes | Transport? |
Informação de transporte para a invocação atual. |
O mcp_resource_trigger decorador liga-se a um parâmetro de contexto que representa o pedido de recurso do cliente MCP. O gatilho pode ligar-se aos seguintes tipos: str, dict, ou bytes.
A função de gestor de recursos tem dois parâmetros:
| Parâmetro | Tipo | Description |
|---|---|---|
| mensagens |
T (por defeito para unknown) |
A carga útil de gatilho passava pela extensão MCP. (O exemplo anterior nomeia este parâmetro resourceContext.) |
| contexto | InvocationContext |
O contexto de invocação Funções do Azure, que fornece registos e outras informações de tempo de execução. |
O disparador de recurso MCP liga o contexto de invocação de recurso a um parâmetro de função. O gatilho pode ligar-se aos seguintes tipos: String, ou byte[] para conteúdo binário.
URIs de recursos
Os recursos MCP utilizam URIs para definir o endereço do recurso. O URI identifica de forma única o recurso e é o que os clientes usam para o solicitar. Pode usar qualquer esquema de URI apropriado para o seu recurso, como ui:// para recursos de interface ou file:// para recursos baseados em ficheiros.
Metadados de recursos
Use o McpMetadata atributo para fornecer metadados extra para os recursos. Os clientes MCP recebem estes metadados, o que pode afetar a forma como o conteúdo do recurso é exibido ou processado.
Para fornecer metadados extra para os recursos, use o metadata parâmetro no mcp_resource_trigger decorador. Estes metadados são uma cadeia serializada em JSON incluída no meta campo de cada recurso quando os clientes chamam resources/list. Pode afetar a forma como o conteúdo do recurso é exibido ou processado.
Use a metadata opção para fornecer metadados extra para os recursos. Estes metadados são uma cadeia serializada em JSON incluída no meta campo de cada recurso quando os clientes chamam resources/list. Pode afetar a forma como o conteúdo do recurso é exibido ou processado.
Use a @McpMetadata anotação para fornecer metadados extra para os recursos. Estes metadados são uma cadeia serializada em JSON incluída no meta campo de cada recurso quando os clientes chamam resources/list. Pode afetar a forma como o conteúdo do recurso é exibido ou processado.
Tipos de devolução
O gatilho de recurso MCP suporta os seguintes tipos de retorno:
| Tipo | Description |
|---|---|
string |
Devolvido como conteúdo de texto no MCP ReadResourceResult. |
byte[] |
Devolvido como conteúdo blob codificado base64 no MCP ReadResourceResult. |
O gatilho de recurso MCP suporta os seguintes tipos de retorno:
| Tipo | Description |
|---|---|
str |
Devolvido como conteúdo de texto no MCP ReadResourceResult. |
bytes |
Devolvido como conteúdo binário no MCP ReadResourceResult. |
A função deve devolver a string contendo o conteúdo do recurso (por exemplo, HTML, JSON ou texto simples).
O gatilho de recurso MCP suporta os seguintes tipos de retorno:
| Tipo | Description |
|---|---|
String |
Devolvido como conteúdo de texto no MCP ReadResourceResult. |
byte[] |
Devolvido como conteúdo binário codificado base64 no MCP ReadResourceResult. Define dataType = "binary" a anotação ao devolver conteúdo binário. |
Descoberta de recursos
Quando uma aplicação de funções inicia, regista todas as funções de disparo de recursos no servidor MCP. Os clientes encontram recursos disponíveis ligando ao método MCP resources/list . Este método devolve o URI, nome, descrição, tipo MIME, tamanho e metadados de cada recurso (através do meta campo). Os clientes leem um recurso ligando resources/read com o URI do recurso.
Sessions
A SessionId propriedade em ResourceInvocationContext identifica a sessão MCP que faz o pedido. Use esta propriedade para manter o estado por sessão ou aplicar lógica específica da sessão ao servir recursos.
Para obter mais informações, consulte Exemplos.
configurações host.json
O arquivo host.json contém configurações que controlam comportamentos de gatilho MCP. Consulte a seção Configurações de host.json para obter detalhes sobre as configurações disponíveis.
Artigos relacionados
Disparo da ferramenta MCP para Funções do Azure