Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för: Azure Logic Apps (Standard)
Anmärkning
Följande funktion är i förhandsversion och omfattas av kompletterande användningsvillkor för Förhandsversioner av Microsoft Azure.
Vanligtvis fungerar stora språkmodeller (LLM: er) med AI-agenter som hanterar och uppfyller begäranden med hjälp av fördefinierade verktyg som agenter anropar för att slutföra uppgifter, till exempel skicka ett e-postmeddelande, fråga en databas eller utlösa ett arbetsflöde. I Azure Logic Apps kan du snabbt komma igång med att bygga dessa verktyg genom att konfigurera om en standardlogikapp som en eller flera fjärr-MCP-servrar (Model Context Protocol). Den här funktionen innebär att du kan exponera befintliga arbetsflöden som verktyg som LLM:er, AI-agenter och MCP-klienter kan använda för att interagera med företagsresurser och tillgångar. I det här sammanhanget innebär fjärranslutning att MCP-servern körs utanför miljön där gränssnittet för AI-agentgränssnittet.
Den här guiden visar hur du konfigurerar en standardlogikappresurs med en eller flera MCP-servrar och testar dina servrar med en MCP-klient.
Varför konfigurera logikappar som MCP-servrar
MCP är en öppen standard som låter LLM:er, AI-agenter och MCP-klienter arbeta med externa system och verktyg på ett säkert, upptäckbart och strukturerat sätt. Den här standarden definierar hur du beskriver, kör och autentiserar åtkomst till verktyg så att agenter kan interagera med verkliga system som databaser, API:er och affärsarbetsflöden. Överväg en MCP-server som en brygga mellan en LLM-, AI-agent eller MCP-klient och de verktyg som de använder.
Anta till exempel att du har en standardlogikappbaserad MCP-server som körs i Azure. På den lokala datorn har Visual Studio Code en MCP-klient som du använder för fjärranslutning till MCP-servern. Det här scenariot skiljer sig från lokala MCP-servrar som körs på datorn. I följande lista visar ett diagram relationerna mellan de olika komponenter som fungerar tillsammans i det här scenariot:
- Interaktionerna mellan MCP-klienten och MCP-servern, som tillhandahåller arbetsflöden för logikappar som verktyg
- Interaktionerna mellan MCP-klienten och agenten eller modellen
- Indata som går in via MCP-klienten till agenten eller modellen
- Utdata från agenten eller modellen som går ut via MCP-klienten
När du logiskt grupperar flera MCP-servrar i en enda standardlogikapp ger den här metoden ett mer skalbart, organiserat och flexibelt sätt att exponera arbetsflöden som verktyg. Varje MCP-server fungerar som en oberoende arbetsflödesgrupp som MCP-klienten kan identifiera och anropa individuellt.
Mer information finns i:
- Vad är en AI-agent?
- Om LLM:er
- MCP-serverbegrepp
- MCP-klientbegrepp
- Introduktion – Kom igång med MCP (Model Context Protocol)
I följande tabell beskrivs fördelarna med att konfigurera standardlogikappar som fjärranslutna MCP-servrar:
| Förmån | Description |
|---|---|
| Återanvändning | Anropa befintliga arbetsflöden, anslutningsappar och kodfulla funktioner från en AI-agent, vilket ger dig extra avkastning på dina investeringar. |
| Flexibilitet | Välj mellan fler än 1 400 anslutningsappar som ger åtkomst och åtgärder för att arbeta med företagstillgångar och resurser i molnet eller lokalt. |
| Åtkomstpunkter | Azure Logic Apps stöder olika anslutningsmodeller för att köra MCP-servern. Du kan köra servern i molnet, exponera servern som en privat slutpunkt eller ansluta till virtuella nätverk och lokala resurser. |
| Security | När du exponerar logikappen som en MCP-server konfigurerar du en stark säkerhetsstatus så att du kan uppfylla företagets säkerhetskrav. Som standard använder MCP-slutpunkter OAuth 2.0 för autentisering och auktorisering. Mer information finns i Vad är OAuth? Du kan använda Easy Auth för att skydda mcp-servern och standardarbetsflödena. Easy Auth är det aktuella namnet på de inbyggda autentiserings- och auktoriseringsfunktionerna i Azure App Service, Azure Functions och Azure Container Apps. Mer information finns i Autentisering och auktorisering i Azure App Service och Azure Functions. |
| Övervakning, styrning och efterlevnad | Azure Logic Apps tillhandahåller arbetsflödeskörningshistorik och integrering med Application Insights eller Log Analytics så att du får de data som krävs för att hantera och övervaka mcp-serververktygen och stödja diagnostik, felsökning, rapportering, spårning och granskning. |
| Skalbarhet | Värd för flera logiska MCP-servrar i en enda logikapp. Varje logisk MCP-servergrupp innehåller relaterade arbetsflöden. |
Standardlogikappsbaserade MCP-servrar stöder Streamable HTTP- och Server-Sent Events-transporter (SSE) för MCP.
Förutsättningar
Ett Azure-konto med en aktiv prenumeration. Skaffa ett kostnadsfritt Azure-konto.
Standardlogikappens resurs och arbetsflöden som du vill konfigurera som en MCP-server med verktyg som agenter eller modeller kan använda.
Den här funktionen gäller endast för standardarbetsflöden som använder alternativet Arbetsflödestjänstplan eller App Service Environment v3.
Arbetsflöden måste starta med utlösaren med namnet När en HTTP-begäran tas emot och inkludera åtgärden Svar.
Kontrollera att logikappresursen körs och att arbetsflödet är aktiverat.
Mer information finns i:
En appregistrering som ska användas i Easy Auth-installationen för logikappen.
Den här appregistreringen är en identitet som din logikappresurs använder för att delegera identitets- och åtkomsthanteringsfunktioner till Microsoft Entra-ID.
Anvisningar finns i Skapa en appregistrering.
En MCP-klient för att testa konfigurationen av MCP-servern.
Den här guiden använder Visual Studio Code.
Anmärkning
Se till att använda den senaste versionen av Visual Studio Code för MCP-servertestning. Visual Studio Code innehåller allmänt tillgängligt MCP-stöd i versioner efter 1.102. Mer information finns i MCP-servrar i Visual Studio Code.
I testexemplet behöver du GitHub Copilot-tillägget. Mer information finns i:
Det finns inga andra krav för att använda Streamable HTTP-transporten. Men om du vill använda SSE-transporten (Server-Sent Events) måste logikappen uppfylla följande krav:
Logikappen kräver integrering av virtuella nätverk. Se Skydda trafik mellan standardlogikappar och virtuella Azure-nätverk med privata slutpunkter.
I logikappresursen kräver host.json-filen att du lägger till och anger
Runtime.Backend.EdgeWorkflowRuntimeTriggerListener.AllowCrossWorkerCommunicationinställningen tilltrue.
Överväganden för arbetsflöden som verktyg
När du skapar arbetsflöden som ska användas som MCP-verktyg läser du dessa överväganden och metodtips:
För att hjälpa agenter eller modeller att hitta och köra verktyg lägger du till följande metadata i utlösaren för begäran och begär nyttolaster. Dessa metadata förbättrar agentens tillförlitlighet och noggrannhet när du använder verktyg.
Tips/Råd
Följande steg använder Azure-portalen, men du kan också använda Visual Studio Code.
Beskrivning av utlösare
MCP-servern använder dessa metadata som verktygsbeskrivning för att visa slutanvändarna och dirigera begäranden till rätt verktyg, till exempel:
Följ dessa steg för att lägga till den här beskrivningen:
Öppna resursen och arbetsflödet för standardlogikappen i Azure-portalen.
I arbetsflödets sidofält går du till Verktyg och väljer designern för att öppna arbetsflödet.
I designern väljer du utlösaren Förfrågning .
I fönstret utlösarinformation, under utlösarnamnet, beskriver du syftet med utlösaren och arbetsflödet.
Beskrivningar av indataparameter
Dessa metadata förbättrar agentens noggrannhet vid överföring av rätt indata till verktyg vid körning, till exempel:
Följ dessa steg om du vill lägga till en beskrivning för varje indataparameter:
Öppna resursen och arbetsflödet för standardlogikappen i Azure-portalen.
I arbetsflödets sidofält går du till Verktyg och väljer designern för att öppna arbetsflödet.
Anmärkning
Du kan också använda kodvyn för att lägga till den här informationen.
I designern väljer du utlösaren Förfrågning .
I fönstret utlösaresinformation, under JSON-schema för begärandetext, anger du ett schema för den förväntade nyttolasten för begärandeinnehåll.
För varje indataparameter lägger du till
descriptionattributet och motsvarande beskrivning.Om verktyget kräver specifika parametrar för att köras ska du inkludera dem som obligatoriska parametrar genom att lägga till
requiredobjektet och en matris med dessa parametrar.
I följande exempel visas exempel på indataparametrar, beskrivningar och obligatoriska parametrar:
{ "type": "object", "properties": { "TicketNumber": { "type": "string", "description": "The ticket number for the IT issue." }, "OpenedBy_FirstName": { "type": "string", "description": "The first name for the person who reported the issue." }, "OpenedBy_LastName": { "type": "string", "description": "The last name for the person who reported the issue." }, "Notes": { "type": "string", "description": "Other information to include in the ticket about the issue." } }, "required": [ "TicketNumber", "OpenedBy_FirstName", "OpenedBy_LastName", "Notes" ] }Tips/Råd
Om du får inkonsekventa resultat när en agent anropar och kör verktyget kontrollerar du om du kan göra utlösaren och parameterbeskrivningarna mer unika. Prova till exempel att beskriva formatet för parameterindata. Om en parameter förväntar sig en base64-kodad sträng tar du med den här informationen i parameterbeskrivningen.
Du kan också konfigurera felhantering och använda
runAfteregenskapen för att returnera rätt felmeddelande till anroparen. Mer information finns i Hantera beteendet "kör efter".
Skapa en appregistrering
Följ dessa steg för att skapa en appregistrering för logikappen som ska användas i installationen av Easy Auth:
I sökrutan i Azure-portalen anger du appregistreringar.
På sidan Appregistreringar väljer du Ny registrering.
På sidan Registrera ett program anger du följande information:
Fastighet Krävs Description Namn Yes Namnet på din appregistrering. Kontotyper som stöds Yes De konton som kan använda eller komma åt din logikapp. Omdirigerings-URI Nej Hoppa över det här avsnittet. När du är klar väljer du Registrera.
På appregistreringssidan kopierar och sparar du det program-ID (klient)-ID som ska användas för att konfigurera Easy Auth.
I sidofältet för appregistrering går du till Hantera och väljer Exponera ett API.
Bredvid Program-ID-URI väljer du Lägg till. Behåll standardvärdet. Kopiera och spara det här värdet för senare användning för att åsidosätta standardvärdet och välj Spara.
Under Omfång som definieras av det här API:et väljer du Lägg till ett omfång för att ge detaljerade behörigheter till appens användare.
I fönstret Lägg till ett omfång anger du följande information:
Fastighet Krävs Description Omfångsnamn Yes Ett relevant namn för behörighetsomfånget. Som rekommendation använder du namnet user_impersonation, som är standardomfånget som stöds i Azure Logic Apps-skyddade resursdata i MCP-serverkontexten.
Om du använder ett annat omfång måste du åsidosätta standardomfånget i logikappens konfigurationsfil (host.json) och använda följande format:
<resource>.<operation>.<constraint>
Mer information finns i Omfång och behörigheter på Microsofts identitetsplattform.Vem kan samtycka Yes Om användarna också kan samtycka till det här omfånget eller om endast administratörer kan samtycka. Använd endast administratörer för behörigheter med högre privilegier. Välj det alternativ som bäst överensstämmer med dina principer baserat på organisationens principer. I det här exemplet väljs Administratörer och användare. Visningsnamn för administratörsmedgivande Yes En kort beskrivning av omfångets syfte som endast administratörer kan se. Beskrivning av administratörsmedgivande Yes En mer detaljerad beskrivning av behörigheten som beviljas av det omfång som endast administratörer kan se. Visningsnamn för användarmedgivande Nej En kort beskrivning av omfångets syfte. Visas endast för användare om du anger Vem kan samtycka till administratörer och användare. Ange den här informationen om det är relevant. Beskrivning av användarmedgivande Nej En mer detaljerad beskrivning av behörigheten som beviljas av omfånget. Visas endast för användare om du anger Vem kan samtycka till administratörer och användare. Ange den här informationen om det är relevant. State Yes Om omfånget är aktiverat eller inaktiverat. Välj Aktiverad. Mer information finns i Lägga till ett omfång.
När du är klar väljer du Lägg till omfång.
Mer information finns i Registrera ett program i Microsoft Entra ID.
När du är klar med de här stegen har du följande värden att använda senare med logikappen:
- Katalog-ID (hyresgäst)
- App-ID (klient-ID)
- Program-ID-URI
Konfigurera Easy Auth för MCP-servern
Konfigurera nu Easy Auth-autentisering på den standardlogikapp som du vill använda som MCP-server.
Öppna din standard-logikappresurs i Azure-portalen.
Välj Autentisering under Inställningar i sidofältet för resursen.
På sidan Autentisering väljer du Lägg till identitetsprovider.
På sidan Lägg till en identitetsprovider går du till fliken Grundinställningar och väljer Microsoft för Identitetsprovider.
I avsnittet Appregistrering anger du följande information:
Fastighet Krävs Description Applikations-ID (klient) Yes Program-ID:t (klient) från din tidigare skapade appregistrering. Utfärdar-URL Yes Följande URL där du ersätter <klient-ID> med GUID för din katalog (klientorganisation):
https://login.microsoftonline.com/<tenant-ID>/v2.0Tillåtna token-målgrupper Yes Program-ID-URI:n från din tidigare skapade appregistrering i följande format: api://<application-ID-URI>/
Viktigt: Se till att du inkluderar det avslutande snedstrecket i slutet av URI:n, till exempel:api://11112222-bbbb-3333-cccc-4444dddd5555/I avsnittet Ytterligare kontroller väljer du följande alternativ eller anger information för att ytterligare kontrollera autentisering och åtkomst:
Fastighet Krävs Description Krav för klientprogram Yes Välj ett alternativ:
- Tillåt endast begäranden från det här programmet: Gäller inte för MCP-servern.
- Tillåt begäranden från specifika klientprogram: Om du vet vilka klientprogram som anropar MCP-servern kan du välja dessa program i listan Tillåtna klientprogram . Om du till exempel använder Visual Studio Code kan du lägga till ID:t för det här klientprogrammet genom att redigera listan Tillåtna klientprogram . Följ dessa steg för att hitta det här värdet:
1. I sökrutan i Azure-portalen letar du upp och väljer Företagsprogram.
2. På sidan Alla program söker du efter och väljer program-ID:t för Visual Studio Code.
- Tillåt begäranden från alla program (rekommenderas inte): Endast när du är osäker på vilka program som anropar MCP-servern.Identitetskrav Yes Om du vill begränsa vilka användare som kan anropa din MCP-server väljer du Tillåt begäranden från specifika identiteter och väljer sedan objekt-ID:n för de identiteter som du tillåter från Microsoft Entra-ID:t i listan Tillåtna identiteter . Annars väljer du Tillåt begäranden från valfri identitet. Krav för klientorganisation Yes Om du vill neka anrop från externa klienter till MCP-servern väljer du Tillåt begäranden från utfärdarens klientorganisation. I avsnittet Inställningar för App Service-autentisering för Begränsa åtkomst väljer du Tillåt oautentiserad åtkomst.
Viktigt!
Kontrollera att App Service-autentisering (Enkel autentisering) tillåter oautentiserad åtkomst eller begäranden.
Slutför genom att välja Lägg till.
Fortsätt att konfigurera en enskild eller flera MCP-servrar i logikappen.
Konfigurera en eller flera MCP-servrar i en logikapp
För den här uppgiften måste du skapa en mcpservers.json fil för din standardlogikappresurs. Den här filen innehåller konfigurationen för MCP-servrarna.
Öppna din standard-logikappresurs i Azure-portalen.
I sidofältet för resursen går du till Utvecklingsverktyg och väljer Avancerade verktyg>Gå. Om du uppmanas att göra det samtycker du till att lämna Azure-portalen.
I Verktygsfältet Kudu går du till menyn Felsökningskonsol och väljer CMD.
Från katalogtabellen går du till följande mapp: site/wwwroot
Om mcpservers.json filen inte finns skapar du den här filen genom att följa dessa steg:
I verktygsfältet .../wwwroot väljer du plustecknet (+) >Ny fil.
För filnamnet anger du
mcpservers.json.Leta reda på den nya mcpservers.json filen i fillistan. Bredvid filnamnet väljer du Redigera (pennikon).
Lägg till konfigurationen för en eller flera MCP-servrar i redigeringsprogrammet, till exempel:
{ "mcpServers": [ { "name": "mcp-server1", "description": "First MCP server", "tools": [ { "name": "CreateTicket" }, { "name": "CloseTicket" } ] }, { "name": "mcp-server2", "description": "Second MCP server", "tools": [ { "name": "SubmitLeave" }, { "name": "ApproveLeave" } ] } ] }Fält Typ Krävs Description mcpServersArray Yes Listan över MCP-serverdefinitioner där var och en representerar en logisk MCP-server. mcpServers[].nameString Yes MCP-servernamnet, som visas i endpunktssökvägen för följande server: /api/mcpservers/{name}/mcp.mcpServers[].descriptionString Nej Den valfria vänliga beskrivningen för den här servern. mcpServers[].toolsArray Yes Listan över de verktyg som är arbetsflöden för logikappar och som exponeras av den här servern. mcpServers[].tools[].nameString Yes Verktygsnamnet, som måste matcha motsvarande arbetsflödesnamn i logikappen. Varje arbetsflöde är ett anropbart MCP-serververktyg. När du är klar sparar du filenmcpservers.json .
Leta upp och redigera filenhost.json i samma mapp. Bredvid filnamnet väljer du Redigera (pennikon).
I redigeraren, som följer
extensionBundleJSON-objektet, lägger du tillextensionsJSON-objektet på samma nivå somextensionBundle.Ange egenskapen
extensions.workflow.McpServerEndpoints.enabletilltrue.Den här egenskapen aktiverar MCP-serverspecifika API:er i logikappen och är det enda egenskapsvärde som du måste ändra. Alla andra egenskapsvärden kräver inte ändringar om du inte vill använda SSE-transport eller åsidosätta standardvärdena.
Om du vill åsidosätta standardvärdena för egenskaperna i
ProtectedResourceMetadataersätter du platshållarvärdena med följande värden som du sparade tidigare:- Namn på logikapp
- Program-ID-URI
Om du åsidosätter standardvärdena i
McpServerEndpointsellerProtectedResourceMetadataska du följa dessa regler:Om du vill ta bort autentiseringstypen helt måste du ändra typen till
"anonymous".För
Resourcemåste värdet vara samma som MCP-serverns URL.BearerMethodsSupportedochScopesSupportedstöder endast de angivna värdena.För
ScopesSupportedär"api://<client-ID>/"den tillåtna tokenpubliken . Se till att inkludera det avslutande snedstrecket om du inte vet att det här tecknet inte finns i tokens målgruppsanspråk.AuthorizationServersanger det rekommenderade värdet för din klientorganisation.Du kan åsidosätta värdena
ProtectedResourceMetadatasom returneras med http-WWW-Authenticate-svarshuvudet, men bara om de övergripande värdena följer standarderna i 3.3 Validering av skyddade resursmetadata – OAuth 2.0 Skyddade resursmetadata.
I följande exempel visas en minimal host.json fil där
extensionsJSON-objektet verkar göra det möjligt för MCP-servern att använda strömmande HTTP-transport:"extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows", "version": "<version-number>" }, "extensions": { "workflow": { "McpServerEndpoints": { "enable": true } } }I följande exempel visas en host.json fil där
extensionsJSON-objektet visas med alla standardvärden som du kan åsidosätta:"extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows", "version": "<version-number>" }, "extensions": { "workflow": { "Settings": { "Runtime.McpServerToMcpClientPingIntervalInSeconds": 30, // Optional: Available for enabling SSE transport. Overrides the ping interval default value, which is 30 seconds. "Runtime.Backend.EdgeWorkflowRuntimeTriggerListener.AllowCrossWorkerCommunication": false // Available and required for SSE transport. You must set this property to `true`. }, "McpServerEndpoints": { "enable": true, "authentication": { "type": "oauth2" // Defaults to "oauth2" if not provided. Optional: To remove authentication, change to "anonymous". }, // The following section applies only if you want to override the default values. "ProtectedResourceMetadata": { "BearerMethodsSupported": ["header"], "ScopesSupported": ["api://<application-ID-URI>/user_impersonation"], "Resource": "https://<logic-app-name>.azurewebsites.net/api/mcp", "AuthorizationServers": ["https://login.microsoftonline.com/<tenant-ID>/v2.0"] } } } }När du är klar sparar du filenhost.json .
Testa konfigurationen av MCP-servrar
Hämta URL:erna för mcp-servrarna.
I dinmcpservers.json-fil har varje MCP-serverdefinition en unik slutpunkts-URL. Du kan hämta alla URL:er genom att anropa LIST-API:et FÖR MCP-servrar.
Med ett verktyg som kan skicka HTTPS-begäranden skickar du en HTTPS-begäran med post-metoden och följande URL:
https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.Web/sites/<logic-app-name>/hostruntime/runtime/webhooks/workflow/api/management/listMcpServers?api-version=<version-number>I följande exempel visas en exempelbegäran och ett svar:
POST https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/fabrikam-resource-group/providers/Microsoft.Web/sites/fabrikam-mcpserver/hostruntime/runtime/webhooks/workflow/api/management/listMcpServers?api-version=2021-02-01{ "values": [ { "name": "MyEmailsManagementMCPServer", "description": "My email MCP server", "url": "https://fabrikam-mcpserver.azurewebsites.net/api/mcpservers/myemailsmanagementmcpserver/mcp", "tools": [ { "name": "SendEmailToVendors" }, { "name": "SendApprovalEmailForOrder" }, { "name": "StatefulWorkflow1" } ] }, { "name": "MyCalendarManagementMCPServer", "description": "My calendar MCP server", "url": "https://fabrikam-mcpserver.azurewebsites.net/api/mcpservers/mycalendarManagementMCPServer/mcp", "tools": [ { "name": "GetCalendars" }, { "name": "GetCalendar" }, { "name": "GetMeetingInfo" } ] } ] }I Visual Studio Code går du till menyn Visa och väljer Kommandopalett. Leta upp och välj MCP: Lägg till server.
Välj HTTP (HTTP eller Server-Sent-händelser). Ange URL:en för din MCP-server för Ange server-URL.
Ange ett beskrivande namn för MCP-servern för Ange server-ID.
När du lägger till en MCP-server för första gången måste du välja var mcp-konfigurationen ska lagras. Du får följande alternativ, så välj det bästa alternativet för ditt scenario:
-
Global: Din användarkonfiguration, som är
c:\users\<your-username>\AppData\Roaming\Code\Userkatalogen och tillgänglig på alla arbetsytor. - Arbetsyta: Din aktuella arbetsyta i Visual Studio Code.
Den här guiden väljer Global för att lagra MCP-serverinformationen i användarkonfigurationen. Därför skapar och öppnar Visual Studio Code en mcp.json fil som visar mcp-serverinformationen.
-
Global: Din användarkonfiguration, som är
I filenmcp.json väljer du länken Starta eller Starta om för att upprätta en anslutning för MCP-servern, till exempel:
När autentiseringsprompten visas väljer du Tillåt och väljer sedan det konto som ska användas för autentisering.
Logga in och ge medgivande för att anropa din MCP-server.
När autentiseringen är klar visar filenmcp.jsonKörs som MCP-serverstatus.
Som ett test kan du prova att anropa MCP-servern från GitHub Copilot:
Öppna Copilot-listan i visual Studio Code-namnlisten och välj Öppna chatt.
I rutan chattinmatning går du till listan Inbyggda lägen och väljer Agent.
I LLM-listan väljer du den LLM som ska användas.
Om du vill bläddra bland de verktyg som är tillgängliga på MCP-servern väljer du Konfigurera verktyg.
I verktygslistan väljer eller rensar du verktyg efter behov, men se till att den nya MCP-servern är vald.
Nu kan du interagera med MCP-servern via Copilot-chattgränssnittet.