Dataagent som Model Context Protocol-server

Model Context Protocol (MCP) er en fremvoksende standard i AI-landskapet som gjør det mulig for AI-systemer å koble seg til verktøy og data utenfor seg selv. Den definerer hvordan en AI-modell kan oppdage hva som er tilgjengelig og samhandle med det på en konsekvent måte. I stedet for å bygge enkeltstående integrasjoner, tilbyr MCP en standard måte å koble inn ting på som fungerer på tvers av ulike apper og tjenester. Denne tilnærmingen gjør det mye enklere for AI-systemer å gå utover sin innebygde kunnskap, samtidig som de holder ting konsistente. Det hjelper også teamene å bevege seg raskere, siden de slipper å finne opp de samme forbindelsene på nytt hver gang.

MCP har to hoveddeler: klienten og serveren.

En MCP-klient er appen eller opplevelsen brukeren interagerer med. Det er der du stiller spørsmål eller utløser handlinger. Klienten kontakter MCP-servere for å finne verktøy og bruke dem. For eksempel kan Visual Studio Code fungere som en MCP-klient når den kobler seg til eksterne verktøy for å hente data, eller hjelpe deg med å skrive og kjøre kode.

En MCP-server eksponerer verktøy, data eller tjenester slik at klienter kan bruke dem. Den forteller kunden hva som er tilgjengelig og hvordan det skal brukes. For eksempel kan en Fabric-dataagent fungere som en MCP-server ved å eksponere bedriftsdata og spørringer som et AI-system kan bruke.

Sammen gjør klient og server det enkelt å koble AI-systemer til ekte data og handlinger, uten å bygge tilpassede integrasjoner hver gang.

Viktig!

Når du bruker en Fabric-dataagent som en MCP-server, kan svarene som returneres av dataagenten bli sendt utenfor Fabric' samsvarsgrense eller geografiske område, og behandlet eller lagret i henhold til vilkårene og databehandlingspolicyene til MCP-klienten du bruker.

Forutsetninger

Slik fungerer det

Når du publiserer en Fabric-dataagent, blir den en MCP-server som eksponerer ett enkelt MCP-verktøy. Det verktøyet representerer selve dataagenten, så en MCP-klient sender et spørsmål til verktøyet og får tilbake et svar som er forankret i dataene dataagenten har tilgang til i Fabric OneLake.

Fordi klienten bestemmer når verktøyet skal kalles inn, er beskrivelsen av dataagenten viktig. Når du publiserer en dataagent, blir dens beskrivelse verktøybeskrivelsen som MCP-serveren reklamerer for. Klienter og orkestratorer leser denne beskrivelsen for å bestemme når og hvordan de skal kontakte dataagenten, så skriv en klar, detaljert og spesifikk beskrivelse som forklarer hva agenten vet og hvilke typer spørsmål den kan besvare.

Du kan bruke dataagentens MCP-server fra hvilken som helst MCP-klient, ikke bare et spesifikt verktøy eller editor. Så lenge klienten din støtter MCP over strømmer HTTP og kan autentisere seg med Fabric og knytte en gyldig Fabric bearer-token til sine forespørsler, kan den koble til serveren. Seksjonene som følger viser to klienter: et Python-skript og Visual Studio Code. Du kan bruke samme endepunkt og autentiseringsmetode med hvilken som helst annen MCP-klient du bygger eller tar i bruk.

Alt som snakker med MCP-serveren må snakke MCP, så per definisjon fungerer det som en MCP-klient. Begrepet «MCP-klient» betyr ikke et spesifikt produkt eller SDK. Det betyr hvilken som helst kode som følger protokollen. Endepunktet er ikke et vanlig REST-API som du kan sende en vilkårlig forespørsel til. En forbindelse følger MCP-meldingsstrømmen: et initialize håndtrykk, en samtale tools/list for å oppdage verktøyet, og en tools/call forespørsel om å stille et spørsmål. En SDK som MCP Python SDK håndterer denne flyten for deg, men du kan også implementere den selv over vanlig HTTP så lenge forespørslene dine følger protokollen. En generisk HTTP-klient som hopper over håndtrykk og meldingsformat vil ikke fungere.

Note

Dataagentens MCP-server støtter ikke dynamisk klientregistrering eller klientidentitetsmetadata. Denne begrensningen betyr at MCP-klienter som er avhengige av disse funksjonene for automatisk registrering og autentisering med en MCP-server ikke kan koble til. I stedet må klienten din bruke sin egen autentiseringsflyt for å hente en Fabric-token og knytte den til hver forespørsel, som vist i eksemplene i denne artikkelen.

Få detaljer om MCP-serveren

Etter at du har publisert dataagenten, åpne innstillingene dens og gå til fanen Model Context Protocol . Denne fanen viser:

  • Dataagent MCP servernavn
  • MCP-server-URL (kopier denne verdien; du bruker den i alle klienter)
  • Dataagent MCP-verktøynavn
  • MCP-serververktøybeskrivelse

Du kan også laste ned mcp.json-filen fra denne fanen for å konfigurere klienter som leser det formatet, for eksempel Visual Studio Code.

Skjermbilde som viser dataagentens MCP-serverinnstillingsfane.

Du kan også bygge URL-en selv fra arbeidsområdets ID og dataagent-ID:

https://api.fabric.microsoft.com/v1/mcp/workspaces/{WorkspaceId}/dataagents/{DataAgentId}/agent
Plassholder Beskrivelse
{WorkspaceId} ID-en til Fabric-arbeidsområdet som inneholder dataagenten.
{DataAgentId} ID-en til den publiserte dataagenten.

En manuelt bygget URL fungerer bare etter at du har publisert dataagenten. Hvis agenten ikke er publisert, returnerer endepunktet en feil selv om URL-en er korrekt.

Godkjenning

Hver forespørsel til MCP-endepunktet må autentiseres mot Fabric. Klienten din legger ved en bærertoken i Authorization headeren, og tokenet må ha tillatelse til å få tilgang til målarbeidsområdet og dataagenten. Tokenet kan representere enten en brukeridentitet eller en tjenesteprincipal.

Hvordan du får tak i tokenet avhenger av klienten din. Visual Studio Code ber deg logge inn interaktivt. I et Python-skript henter du tokenet gjennom et bibliotek som for eksempel azure-identity og legger det til i forespørselsheaderne selv. Uansett klient, be om tokenet for scopet https://api.fabric.microsoft.com/.default .

Langvarige forespørsler og MCP-oppgaver

Noen spørsmål tar lengre tid å besvare enn andre. Et spørsmål som skanner en stor tabell eller kjører flere spørringer kan ta lengre tid enn en klient eller en nettverksmellommann holder en forbindelse åpen. I disse tilfellene støtter dataagentens MCP-server oppgaver.

En oppgave lar serveren svare uten å holde forbindelsen åpen. Når dataagenten begynner å jobbe med et spørsmål, returnerer den en identifikator for det arbeidet i stedet for svaret. Klienten din bruker identifikatoren for å be om resultatet når den er klar. Hvis forbindelsen faller ut eller klienten starter på nytt, beholder klienten identifikatoren og fortsetter der den slapp.

Oppgavene følger utvidelsen io.modelcontextprotocol/tasks i MCP-spesifikasjonen. Kunden din ber om resultatet og tasks/get fortsetter å spørre til oppgaven rapporterer at arbeidet er ferdig. For å stoppe arbeid som ikke lenger trengs, sender tasks/cancelkunden din . Avbestilling skjer ikke umiddelbart, så en oppgave kan rapportere at den fortsatt fungerer en kort stund etter at du kansellerer den, og arbeid som nesten var ferdig kan fortsatt fullføres.

Klienter som støtter oppgaveutvidelsen får en oppgave. For alle andre klienter endrer ingenting seg. Dataagenten svarer på samme tilkobling, som vist andre steder i denne artikkelen.

For meldingsformatet og hele oppgavelivssyklusen, se MCP-oppgaveutvidelsen.

Koble til fra Python

Dette eksempelet kobles til dataagentens MCP-endepunkt fra et frittstående Python-skript, oppdager verktøyet, sender et spørsmål og skriver ut svaret. Den bruker MCP Python SDK og biblioteketazure-identity.

Forutsetninger for Python-klienten

  • Python 3.10 eller nyere.
  • Og mcpazure-identity pakkene.
  • En måte å logge inn på Fabric. Dette eksempelet bruker Azure CLI. Installer Azure CLI, kjør az login og logg inn med en konto som har tilgang til arbeidsområdet og dataagenten.

Installer pakkene:

pip install mcp azure-identity

Bygg klienten steg for steg

De følgende seksjonene bygger manuset én bit av gangen. Hver blokk fortsetter med samme fil, så du kan lime dem inn i rekkefølge til én fil .py og kjøre den.

Importer bibliotekene og sett verdiene dine. Erstatt arbeidsområdets ID, dataagent-ID og spørsmål med dine egne verdier. Dette mcp_url følger endepunktsformatet beskrevet tidligere.

import asyncio

from azure.identity import AzureCliCredential
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

workspace_id = "<your-workspace-id>"
data_agent_id = "<your-data-agent-id>"
question = "<your question>"

mcp_url = (
    f"https://api.fabric.microsoft.com/v1/mcp/workspaces/{workspace_id}"
    f"/dataagents/{data_agent_id}/agent"
)

Få tak i en token og bygg autentiseringsheaderen. AzureCliCredential Gjenbruker påloggingen fra az login. Hjelperen ber om en token for Fabric-scope og returnerer den som en Authorization header som alle forespørsler bærer.

credential = AzureCliCredential()


def get_auth_headers():
    token = credential.get_token("https://api.fabric.microsoft.com/.default")
    return {"Authorization": f"Bearer {token.token}"}

Åpne forbindelsen, oppdag verktøyet, og still spørsmålet. Denne funksjonen åpner en strømlinjebar HTTP-tilkobling med autentiseringsheaderen, kjører MCP-håndtrykket med initialize, lister verktøyene, og leser det ene verktøyet dataagenten eksponerer. Den finner navnet på spørsmålsargumentet fra verktøyets inndataskjema, så du hardkoder det ikke, så kaller den verktøyet og samler teksten fra svaret.

async def query_data_agent(question):
    headers = get_auth_headers()

    async with streamablehttp_client(mcp_url, headers=headers) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # The data agent exposes a single tool. Discover it, then call it.
            tools = await session.list_tools()
            tool = tools.tools[0]
            question_arg = next(iter(tool.inputSchema["properties"]))

            result = await session.call_tool(tool.name, {question_arg: question})

            answers = [block.text for block in result.content if block.type == "text"]
            return "\n".join(answers)

Kjør det og skriv ut svaret. query_data_agent er en korutine, så asyncio.run den drives til fullføring og returnerer resultatet.

answer = asyncio.run(query_data_agent(question))
print(answer)

Fordi skriptet leser det første verktøyet serveren annonserer og finner spørsmålsargumentet fra verktøyets inndataskjema, fortsetter det å fungere selv om verktøynavnet eller argumentnavnet endres. Du trenger ikke å hardkode noen av verdiene.

Tips

AzureCliCredential Leser påloggingen du opprettet med az login. For å kjøre uten tilsyn, for eksempel i en tjeneste eller en jobb, bruk i stedet en tjenesteprincipal-legitimasjon, for eksempel ClientSecretCredential eller DefaultAzureCredential. Resten av koden forblir den samme.

Koble til fra Visual Studio Code

Visual Studio Code kan fungere som en MCP-klient. Følgende steg legger til dataagentens MCP-server og stiller spørsmål fra editoren. Disse trinnene er ett eksempel; endepunktet og tokenet er de samme som alle andre MCP-klienter bruker.

Legg til MCP-serveren

  1. Åpne Visual Studio Code og velg en mappe å jobbe i.

  2. Lag en .vscode-mappe i den valgte mappen.

  3. Inne i .vscode, lag en fil kalt mcp.json.

  4. Visual Studio Code viser en blå Legg til server-knapp nederst til høyre i vinduet.

    Skjermbilde som viser JSON-filen for MCP-serveren.

  5. Velg Legg til server, og velg deretter HTTP. Når du blir bedt om en URL, lim inn MCP-serverens URL du kopierte tidligere.

    Skjermbilde som viser valget av HTTP.

    Skjermbilde som viser hvor du skal skrive inn URL-en til MCP-serveren.

  6. Trykk Enter og oppgi et navn på serveren. Visual Studio Code bruker dette navnet for å vise serveren.

  7. Visual Studio Code forsøker å autentisere. Velg Tillat og logg inn med dine legitimasjoner.

Serveren er opprettet.

Skjermbilde som viser MCP-filen til dataagenten.

Aktiver agentmodus

Etter at du har lagt til serveren, aktiver agentmodus slik at Visual Studio Code kan sende spørsmålene dine til dataagenten:

  1. Åpne kommandopaletten (Ctrl+Shift+P eller cmd+shift+P).

  2. Søk etter Aktiver agentmodus og velg det.

  3. Bekreft eventuelle forespørsler for å aktivere modusen.

    Skjermbilde som viser dataagenten i Visual Studio Code i agentmodus.

Når agentmodus er aktiv, velg en orkestrator til å håndtere spørsmålene dine. Orkestratoren styrer flyten mellom spørsmålene dine i editoren og dataagentens MCP-server. Tilgjengelige orkestratører inkluderer GPT-5, GPT-4.1, Claude Sonnet 4.5, Gemini 2.5 Pro og andre.

Still spørsmål

Med agentmodus på og en orkestrator valgt, still spørsmål direkte fra editoren. Orkestratoren ruter hvert spørsmål til dataagentens MCP-server, og agenten returnerer et svar basert på dataene den har tilgang til i OneLake. Du blir i editoren mens du bringer organisatorisk kunnskap inn i AI-arbeidsflytene dine.