# Copilot Connectors - Implementation Patterns **Last updated:** 2026-04 | Verified: MCP 2026-04-10 **Status:** GA (Synced Connectors) / Early Access Preview (Federated Connectors) **Category:** Copilot Extensibility & Integration --- ## Introduksjon Copilot-koblinger (tidligere Microsoft Graph-koblinger) er Microsofts primære mønster for å bringe eksterne data inn i Microsoft 365-økosystemet. De utvider rekkevidden til Microsoft 365 Copilot, Microsoft Search, Context IQ og andre intelligente opplevelser ved å koble til data utover Microsoft 365-grensene. Det finnes to fundamentalt forskjellige arkitekturer for Copilot-koblinger: **synced connectors** (synkroniserte koblinger) som indekserer data inn i Microsoft Graph, og **federated connectors** (fødererte koblinger) som henter data i sanntid uten indeksering. Valget mellom disse påvirker sikkerhetsmodellen, ytelsen, kostnadene og brukeropplevelsen. I tillegg finnes det spesialiserte implementeringsmønstre for integrasjon med Copilot Studio (via Power Platform connectors) og for people data-scenarier. Denne kunnskapsreferansen dekker alle implementeringsmønstrene med fokus på når hvert mønster passer, tekniske kompromisser, og offentlig sektor-konsekvenser. ## Kjernekomponenter ### Connector-typer og forskjeller | Feature | Synced Connectors | Federated Connectors (Preview) | Power Platform Connectors | |---------|-------------------|--------------------------------|---------------------------| | **Data-håndtering** | Indeksert i Microsoft Graph | Hentet live uten indeksering | Brukt via Power Platform actions | | **Tilgangsmodell** | Organisasjonsnivå (org-wide) | Brukernivå (per-user) | Agent-nivå (Copilot Studio) | | **Oppsett** | Admin konfigurerer | Admin enabler, brukere autentiserer | Maker/developer konfigurerer | | **Status** | GA (Generally Available) | Early Access Preview (Frontier) | GA | | **Bruksscenario** | Bred indeksering, static data | Sensitiv, dynamisk, live data | Low-code bot-integrasjon | | **Skriveoperasjoner** | Nei (read-only) | Nei (read-only) | Ja (via actions) | | **Custom connector-støtte** | Ja (Graph API, SDK) | Nei (kun Microsoft-leverte) | Ja (OpenAPI, custom code) | | **Kostnadsmodell** | Item quota (indekserte items) | Ukjent (preview) | Per API-kall (variable) | ### Microsoft 365 Copilot Connector-arkitektur **Synced connector-flyt:** ``` Eksterne data → Connector (crawl/index) → Microsoft Graph → Copilot/Search ``` **Federated connector-flyt:** ``` Brukerforespørsel → Copilot → MCP API → Ekstern kilde (live) → Respons til Copilot ``` **Power Platform connector-flyt:** ``` Brukerforespørsel → Copilot Studio agent → Power Platform connector → ISV API → Respons til agent ``` ### Byggeklosser for custom synced connector Fire obligatoriske steg (via Microsoft Graph API): 1. **Entra ID app-registrering** Oppretter applikasjonidentitet med nødvendige Graph-tillatelser (`ExternalConnection.ReadWrite.OwnedBy`, `ExternalItem.ReadWrite.OwnedBy`). 2. **External connection** Logisk container for eksterne data. Krever unikt ID, navn og beskrivelse. 3. **Schema-registrering** Definerer strukturen på eksterne data (properties, attributter, semantic labels). Langvarig operasjon (async). 4. **Item ingestion** Transformerer og sender eksterne items til Microsoft Graph med ACL (access control list). ### Semantic labels og property attributes **Semantic labels** (viktige for ranking og relevans): | Label | Formål | Påkrevd for | |-------|--------|-------------| | `title` | Dokumenttittel | Search, Context IQ, Copilot | | `url` | Link til originaldokument | Search, Context IQ | | `iconUrl` | Ikon for dokument | Context IQ | | `authors` | Forfatter(e) | Search relevance | | `lastModifiedBy` | Sist endret av | Search, audit | | `lastModifiedDateTime` | Sist endret | Ranking, freshness | **Property attributes** (søkefunksjonalitet): | Attribute | Beskrivelse | Eksempel | |-----------|-------------|----------| | `isSearchable` | Fulltext-søkbar | Dokumentinnhold | | `isQueryable` | Kan filtreres/sorteres | Dato, forfatter | | `isRetrievable` | Vises i resultater | Tittel, sammendrag | | `isRefinable` | Faceted search | Kategori, avdeling | ## Arkitekturmønstre ### Mønster 1: Synced Connector (Broad Indexing) **Beskrivelse:** Crawl og indekser eksterne data inn i Microsoft Graph for bred søkbarhet og Copilot-resonnering. Dataen blir indeksert én gang og er deretter tilgjengelig for alle Microsoft 365-opplevelser. **Når å bruke:** - Du har **statiske eller semi-statiske data** (dokumenter, policies, FAQs, knowledge bases) - Dataene er **ikke svært sensitive** (kan indekseres i Microsoft 365) - Du trenger **høy ytelse** (Copilot trenger ikke vente på ekstern API) - Du vil **samle data fra flere kilder** til én søkeindeks - Du har **tilstrekkelig item quota** (lisensiert) **Fordeler:** - Rask responstid (data er pre-indeksert) - Rik semantic search med AI-resonnering - Støtter full-text search, facets, ranking - Enhetlig brukeropplevelse på tvers av M365-apps - Ingen run-time avhengighet av kildesystemet **Ulemper:** - Data kan bli utdatert mellom crawls (latency) - Krever item quota (kostnad per 1000 items) - Dataen kopieres inn i Microsoft 365 (data residency-bekymringer) - Kompleks ACL-modellering hvis kilde har finkornet tilgangskontroll **Implementering:** ```csharp // Steg 1: Opprett connection var connection = new ExternalConnection { Id = "contoso-policies", Name = "Contoso Internal Policies", Description = "Company policies and procedures" }; await graphClient.External.Connections.PostAsync(connection); // Steg 2: Registrer schema var schema = new Schema { BaseType = "microsoft.graph.externalItem", Properties = new List { new Property { Name = "title", Type = PropertyType.String, IsSearchable = true }, new Property { Name = "url", Type = PropertyType.String }, new Property { Name = "lastModified", Type = PropertyType.DateTime, IsQueryable = true } } }; await graphClient.External.Connections["contoso-policies"].Schema.PatchAsync(schema); // Steg 3: Ingest items var item = new ExternalItem { Id = "policy-001", Acl = new List { new Acl { Type = AclType.Everyone, Value = "everyone", AccessType = AccessType.Grant } }, Properties = new { title = "Remote Work Policy", url = "https://intranet.contoso.com/policies/remote-work", lastModified = DateTime.UtcNow }, Content = new ExternalItemContent { Type = ExternalItemContentType.Text, Value = "Full policy text here..." } }; await graphClient.External.Connections["contoso-policies"].Items[item.Id].PutAsync(item); ``` **Beslutningsveiledning:** - ✅ Bruk hvis data endrer sjeldnere enn hver time - ✅ Bruk hvis du trenger faceted search eller ranking - ❌ Ikke bruk for sanntidsdata (stock prices, live inventory) - ❌ Ikke bruk hvis data ikke kan forlate kildesystemet (legal/compliance) --- ### Mønster 2: Federated Connector (Real-Time Access) **Beskrivelse:** Koble til eksterne data i sanntid via Model Context Protocol (MCP) uten å indeksere innhold i Microsoft 365. Data forblir i kildesystemet og hentes kun når brukeren spør. **Når å bruke:** - Du har **svært sensitive data** (må ikke indekseres i M365) - Du trenger **sanntidsdata** (live priser, inventory, status) - Du har **dynamiske data** som endrer kontinuerlig - Du vil **minimere data residency-risiko** (data forblir i kilden) - Du har **strenge compliance-krav** (GDPR, Schrems II) **Fordeler:** - Data forblir i kildesystemet (data sovereignty) - Alltid oppdatert (ingen stale data) - Ingen item quota-kostnad (ingen indeksering) - Enklere ACL-modell (kildesystemet håndterer autorisasjon) - OAuth 2.0-basert brukernivå-autentisering **Ulemper:** - Krever live-tilkobling til kildesystemet (latency + availability) - Begrenset til Microsoft-leverte connectors (ingen custom) - Ingen faceted search eller avansert ranking - Kun i Early Access Preview (ikke produksjonsgaranti) - Potensielt dyrere (per-query API-kall til kilde) **Arkitektur:** ``` [M365 Copilot] ↓ (brukerforespørsel) [MCP Protocol] ↓ (OAuth 2.0 token) [Federated Connector] ↓ (API-kall) [Ekstern datakilde] ↓ (live data) [Respons til Copilot] ``` **Tekniske krav:** - Ekstern kilde må støtte OAuth 2.0 - API må returnere data i MCP-kompatibelt format - Admin må enable connector i M365 admin center - Brukere må autentisere individuelt **Beslutningsveiledning:** - ✅ Bruk for PII, financial data, health records - ✅ Bruk hvis data endrer kontinuerlig (live dashboards) - ✅ Bruk hvis kildesystemet allerede har robust ACL - ❌ Ikke bruk hvis du trenger historical search eller trending - ❌ Ikke bruk hvis kildesystemet har lav availability (< 99%) --- ### Mønster 3: Power Platform Connector (Low-Code Agents) **Beskrivelse:** Bruk Power Platform custom connectors til å utvide Copilot Studio-agenter med ISV-data og actions. Lavkodemønster for rask integrasjon med eksisterende APIer. **Når å bruke:** - Du bygger **Copilot Studio-agenter** (ikke M365 Copilot-plugins) - Du trenger **read + write-operasjoner** (ikke bare søk) - Du har **REST APIer med OpenAPI-spec** (swagger) - Du vil ha **rask time-to-value** (low-code) - Du trenger **workflow-integrasjon** (Power Automate flows) **Fordeler:** - Lavkode-utvikling (visual designer) - Støtter både read og write operations - 500+ forhåndsbygde connectors tilgjengelig (standard og premium) - Kan bruke Power Automate flows som actions - **Maker-provided credentials**: Maker kan konfigurere connector med egne credentials — brukere behøver ikke autentisere seg individuelt **Ulempler:** - Kun for Copilot Studio (ikke M365 Copilot direkte) - Krever Power Platform-lisens (standard connectors inkludert, premium connectors krever plan) - Ikke fullt integrert med M365 Search - Lavere semantic search-kvalitet enn Graph connectors - **SSO-begrensning (Verified):** SSO støttes IKKE for connectors når agenten bruker custom Active Directory-autentisering og er deployert til Microsoft Teams — brukere må autentisere manuelt **Connector-typer:** - **Standard connectors**: Inkludert i alle Copilot Studio-planer (f.eks. SharePoint, Office 365) - **Premium connectors**: Krever spesifikk Copilot Studio-plan (f.eks. Salesforce, ServiceNow) - **Custom connectors**: Bygd fra egne OpenAPI-spesifikasjoner **Implementering:** ```yaml # OpenAPI spec for custom connector openapi: 3.0.0 info: title: Contoso CRM Connector version: 1.0.0 paths: /customers/{id}: get: summary: Get customer details operationId: GetCustomer parameters: - name: id in: path required: true schema: type: string responses: '200': description: Customer data content: application/json: schema: type: object properties: name: { type: string } email: { type: string } status: { type: string } ``` **Copilot Studio-integrasjon:** 1. Opprett custom connector i Power Apps (fra OpenAPI) 2. Legg til connector som "tool" i Copilot Studio agent 3. Konfigurer authentication (OAuth, API key, eller maker credentials) 4. Test action i agent-dialog **Beslutningsveiledning:** - ✅ Bruk for chat bots med business logic - ✅ Bruk hvis du allerede har Power Platform - ✅ Bruk for workflows (create ticket, update record) - ❌ Ikke bruk for M365 Copilot-extensibility (bruk Graph connector) - ❌ Ikke bruk kun for read-only search (synced connector er bedre) --- ### Mønster 4: Copilot Connector for People Data **Beskrivelse:** Spesialiserte connectors for å berike profiler i Microsoft 365 med HR-data fra eksterne systemer (Workday, SAP SuccessFactors, etc.). Unifier people-data på tvers av kilder. **Når å bruke:** - Du vil **berike M365-profiler** med HR-data - Du har **autoritativ people data** i eksternt system - Du trenger **unified identity view** (org chart, skills, location) - Du vil **forbedre Copilot-resonnering** om folk **Fordeler:** - Oppdaterer profile cards i M365 - Forbedrer Org Explorer - Bedre Copilot-svar på "who"-spørsmål - Synkronisert view (data forblir authoritative i kilde) **Ulempler:** - Kun for people data (ikke dokumenter eller andre entiteter) - Krever identity mapping (Entra ID ↔ HR system) **Beslutningsveiledning:** - ✅ Bruk hvis HR-system har mer data enn Entra ID - ❌ Ikke bruk for non-people data ## Beslutningsveiledning ### Velg riktig connector-type ``` Har du sensitiv data som ikke kan indekseres i M365? Ja → Federated Connector Nei → ↓ Trenger du write operations eller workflows? Ja → Power Platform Connector Nei → ↓ Er data people-centric (HR, skills, org chart)? Ja → People Data Connector Nei → ↓ Er data statisk eller semi-statisk? Ja → Synced Connector Nei → Federated Connector (hvis live data) ``` ### Vanlige feil | Feil | Konsekvens | Løsning | |------|------------|---------| | Indekserer sensitive PII i synced connector | GDPR-brudd, data residency-risiko | Bruk federated connector | | Bruker federated for static data | Dårlig ytelse, høye API-kostnader | Bruk synced connector | | Glemmer å sette semantic labels | Dårlig ranking, ingen Context IQ | Legg til `title`, `url`, `iconUrl` | | Feil ACL-modellering | Brukere ser data de ikke skal | Test ACL med ulike brukerroller | | Ikke planlegger for item quota | Løper tom for quota | Kjøp mer quota eller prioriser innhold | ### Røde flagg ⚠️ **Data residency-risiko:** Synced connectors kopierer data til Microsoft Graph. Hvis kildesystemet er on-prem eller i annet land, kan dette bryte compliance. ⚠️ **Latency i federated connectors:** Hvis kildesystemet har >500ms responstid, vil Copilot oppleves treg. ⚠️ **Bing Custom Search i Copilot Studio:** Bing Custom Search kan brukes som knowledge source i Copilot Studio, men er IKKE tilgjengelig i generativ modus (generative answers node). For Bing Custom Search: bruk klassisk modus med eksplisitt generative answers-node i et topic. ⚠️ **ACL-kompleksitet:** Hvis kildesystemet har finkornet ACL (document-level, paragraph-level), kan det være vanskelig å modellere i Graph connector. ⚠️ **Item quota-kostnad:** 1 million items koster ~$5000/år (varierer). Plan for volumet. ## Integrasjon med Microsoft-stakken ### Hvor Copilot connectors brukes | Microsoft-produkt | Connector-type | Bruksscenario | |-------------------|----------------|---------------| | **Microsoft 365 Copilot** | Synced, Federated | Grounding for Copilot-svar (citations) | | **Microsoft Search** | Synced | Søk på Office.com, Bing at Work, SharePoint | | **Context IQ (Outlook)** | Synced | Inline suggestions i epost (/) | | **Copilot Studio** | Power Platform | Custom agents, workflows | | **Profile cards** | People Data | Berike profilkort med HR-data | ### Integrasjon med Semantic Kernel Semantic Kernel kan bruke Graph connectors som **data sources** for RAG-mønster: ```csharp // Semantic Kernel + Graph Connector var kernel = Kernel.CreateBuilder() .AddAzureOpenAIChatCompletion(deploymentName, endpoint, apiKey) .Build(); // Hent data fra Graph connector via Microsoft Graph API var graphClient = new GraphServiceClient(credentials); var searchResults = await graphClient.Search.Query(new SearchRequestBody { Requests = new List { new SearchRequest { EntityTypes = new List { EntityType.ExternalItem }, Query = new SearchQuery { QueryString = "remote work policy" }, From = 0, Size = 5 } } }).PostAsync(); // Bruk resultater som context i Semantic Kernel var context = string.Join("\n", searchResults.Value[0].HitsContainers[0].Hits.Select(h => h.Summary)); var result = await kernel.InvokePromptAsync($"Basert på dette: {context}\n\nSpørsmål: {userQuestion}"); ``` ### M365 Copilot + Copilot Studio-kombinasjon Du kan kombinere: - **M365 Copilot** med synced/federated connectors (for search/grounding) - **Copilot Studio agent** som plugin i M365 Copilot (via Power Platform connector) Dette gir både search-grounding OG business logic i samme Copilot-opplevelse. ## Offentlig sektor (Norge) ### GDPR og Schrems II **Synced connectors:** Kopierer data til Microsoft Graph (US eller EU-region avhengig av tenant). Dette kan være Schrems II-problematisk hvis kildesystemet er on-prem eller i Norge. **Løsning:** - Bruk **federated connectors** hvis data må forbli i Norge - Valider at Microsoft 365 tenant er i EU-region (ikke US) - Vurder on-prem Graph connector agent (for hybrid) ### AI Act-konsekvenser EU AI Act krever **transparens** om AI-beslutninger. Copilot connectors må logge: - Hvilken connector ble brukt for et svar? - Hvilke items ble returnert (audit trail)? - Har brukeren tilgang til kildedata? Microsoft Graph har innebygd **audit logging** for connector-queries. ### Forvaltningsloven §13a (automatiserte vedtak) Hvis Copilot-svar brukes til **vedtak i offentlig sektor**, må: - Kilde-data være verifiserbar (citations) - Copilot-svar ikke være eneste grunnlag (menneske må validere) - Synced connectors være bedre enn federated (audit trail i Graph) ### Datasuverenitet **Kritisk:** Offentlig sektor må verifisere: - Hvor er Microsoft Graph datasenteret? (EU vs US) - Kan data forlate Norge? (compliance-vurdering) - Hvilke Microsoft-underleverandører har tilgang? **Anbefaling for DDT:** - **Synced connectors** kun for ikke-sensitive data (public policies, FAQs) - **Federated connectors** for sensitive data (saksdokumenter, brukerdata) - **On-prem connector agent** for høyeste data sovereignty ## Kostnad og lisensiering ### Synced Connector-kostnader | Komponent | Kostnad | Basis | |-----------|---------|-------| | **Item quota (base)** | Inkludert | 500-10 000 items per M365 Copilot-lisens (varierer) | | **Ekstra quota** | ~$5/1000 items/år | Per indexed item | | **Development** | Gratis | Graph API er inkludert i M365-lisenser | | **Connector agent** | Gratis | Hvis du bruker Microsoft SDK | **Estimering:** - 10 000 policies → ~$50/år (hvis utover base quota) - 1 million documents → ~$5000/år ### Federated Connector-kostnader Ingen item quota (ingen indeksering), men: - **API-kostnader** til kildesystem (per query) - **Latency-kostnad** (brukere venter på svar) ### Power Platform Connector-kostnader - **Power Apps/Automate-lisens** påkrevd ($20-40/bruker/måned) - **Premium connectors** kan ha ekstra kostnad - **API-kall** til eksternt system (variabelt) ### Optimaliseringstips 1. **Synced connectors:** - Bruk `isRetrievable: false` for properties som ikke trengs i resultater - Crawl kun nødvendige dokument-typer (filtrer ut bilder, store filer) - Bruk incremental crawl fremfor full crawl 2. **Federated connectors:** - Cache API-respons i kildesystem (reduser redundante kall) - Implementer rate limiting på kildesystem-API 3. **Power Platform connectors:** - Bruk "maker-provided credentials" for å unngå per-user auth - Kombiner flere API-kall i én action (reduser round-trips) ## For arkitekten (Cosmo) ### Spørsmål å stille 1. **Data-sensitivitet:** "Er dataene sensitive nok til at de ikke kan indekseres i Microsoft 365?" (GDPR, PII, Schrems II) 2. **Data-dynamikk:** "Hvor ofte endrer dataene seg? Timer, dager, eller måneder?" (Synced vs Federated) 3. **Tilgangsmodell:** "Har kildesystemet finkornet ACL (document-level), eller er det org-wide?" (ACL-kompleksitet) 4. **Integrasjonsmål:** "Er målet søk (M365 Copilot) eller workflow (Copilot Studio)?" (Connector-type) 5. **Volumestimering:** "Hvor mange items skal indekseres? 1000, 100 000, eller 1 million?" (Quota-planlegging) 6. **Kildesystem-API:** "Har kildesystemet REST API med OAuth 2.0?" (Federated/Power Platform feasibility) 7. **Compliance-krav:** "Er det juridiske begrensninger på hvor data kan lagres?" (Data residency) 8. **Kostnadsbudsjett:** "Hva er budsjettet for item quota og API-kall?" (TCO-analyse) ### Fallgruver per modenhetsnivå **Begynner (pilot):** - ❌ Starter med custom connector (komplisert). Start med Microsoft-leverte connectors først. - ❌ Indekserer alt (quota-sprekk). Start med 100-1000 items. - ❌ Glemmer å teste ACL. Alltid test med restricted-user. **Middels (produksjon):** - ❌ Ikke planlegger for schema changes. Schema er vanskelig å endre etter deployment. - ❌ Ikke overvåker crawl failures. Sett opp alerting i M365 admin center. - ❌ Hardcoder credentials. Bruk Entra ID managed identity eller Key Vault. **Avansert (enterprise-scale):** - ❌ Ikke optimaliserer for latency. Federated connectors må ha <500ms responstid. - ❌ Ikke planlegger for multi-geo. Hvis organisasjon er i flere land, trenger du multi-geo strategy. - ❌ Ikke integrerer med Purview. Connector-data må inkluderes i Purview DLP policies. ### Anbefalinger per modenhetsnivå **Pilot (1-3 måneder):** 1. Start med **synced connector** til SharePoint eller knowledge base (Microsoft-levert) 2. Test med 100-500 items 3. Valider ACL med 3-5 test-brukere 4. Mål Copilot-respons-kvalitet (feedback survey) **Produksjon (3-12 måneder):** 1. Bygg **custom synced connector** til primary line-of-business system 2. Skalér til 10 000-100 000 items 3. Implementér incremental crawl (hver time/dag) 4. Sett opp Purview-integrasjon (DLP, retention) **Enterprise (12+ måneder):** 1. Kombiner **synced** (documents) + **federated** (live data) 2. Integrér med Semantic Kernel for custom RAG 3. Multi-geo deployment 4. Custom connector SDK for on-prem sources ## Kilder og verifisering **Microsoft Learn (Verified - MCP-research):** - [Microsoft 365 Copilot connectors overview](https://learn.microsoft.com/en-us/microsoftsearch/connectors-overview) — Authoritative oversikt over connector-typer - [Work with the Copilot connectors API](https://learn.microsoft.com/en-us/graph/connecting-external-content-connectors-api-overview) — Graph API-detaljer - [Search and retrieval patterns (Copilot Studio)](https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/architecture/search-retrieval-patterns) — Arkitekturmønstre - [Power Platform Connectors in Copilot Studio](https://learn.microsoft.com/en-us/microsoft-copilot-studio/advanced-connectors) — Low-code connector-integrasjon - [Copilot connectors for people data](https://learn.microsoft.com/en-us/graph/peopleconnectors) — People data-spesialisering - [Federated connectors overview](https://learn.microsoft.com/en-us/microsoftsearch/federated-connectors-overview) — MCP-baserte connectors (preview) **Code samples (Verified - MCP):** - [Microsoft Graph connector samples](https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/samples#microsoft-365-copilot-connector-samples) — TypeScript, .NET, Python-implementeringer **Konfidensnivå per seksjon:** - Introduksjon, Kjernekomponenter, Arkitekturmønstre: **Verified** (fra MCP-research) - Offentlig sektor, Kostnad: **Baseline** (modellkunnskap + Microsoft-prising) - Semantic Kernel-integrasjon: **Baseline** (custom pattern, ikke Microsoft-dokumentert) --- *Denne referansen er oppdatert basert på Microsoft Learn-dokumentasjon per april 2026. Federated connectors er i preview og kan endre seg før GA. Maker-provided credentials og SSO-begrensninger verifisert MCP 2026-04-10.*