Byg plugins til Copilot Cowork

Microsoft Copilot Cowork understøtter udvidelse via M365-apppakker – den samme distributionsmekanisme, der bruges af Teams-apps, Copilot-agenter og Office-tilføjelsesprogrammer. Du kan udvide Cowork med:

  • Færdigheder: Promptbaserede arbejdsprocesser, der lærer Cowork ny domæneekspertise, f.eks. økonomisk analyse, juridisk research eller HR-arbejdsgange.
  • Forbindelser: Fjernservere, der giver Cowork adgang til eksterne datakilder og API'er.

Begge er pakket sammen i en standard Microsoft 365 app-pakke og distribueret via Microsoft 365 App Store.

Vigtig

Microsoft Purview Oplysningsbarrierer (IB) understøttes i øjeblikket ikke til plug-in eller færdighedsstyring og -deling. For tenants, hvor IB er aktiveret, blokeres upload af indlejrede vidensfiler på tenantniveau. Dette forhindrer, at berørte plugins og færdigheder uploades eller publiceres.

Microsoft opretter eller vedligeholder ikke nogen permanente indekser, vidensgrafer (herunder Microsoft Graph) eller databaser, der indeholder ISV-indhold, uanset om det sker ved gennemsøgning, skrabning, høst, masseeksport, indlæsning eller nogen anden metode (via API, MCP-server eller på anden måde). Microsoft kan midlertidigt behandle ISV-indhold i det omfang, det er nødvendigt for at besvare en brugers forespørgsel i realtid, men opbevarer ikke ISV-indhold ud over den pågældende sessions varighed. Efter skriftlig anmodning fra ISV sletter Microsoft senest 10 arbejdsdage efter alt ISV-indhold i Microsofts besiddelse eller kontrol og attesterer skriftligt denne sletning. Få mere at vide om beskyttelse af virksomhedsdata i Microsoft Copilot og Microsoft Copilot Chat.

Hvad vil du bygge

Et Cowork-plugin er en .zip pakke, der indeholder:

my-extension.zip
├── manifest.json          # M365 Unified App Manifest (v1.28)
├── color.png              # 192×192 full-color app icon
├── outline.png            # 32×32 outline icon
└── skills/                # Agent Skills (SKILL.md files)
    ├── skill-one/
    │   ├── SKILL.md
    │   └── references/    # Optional deep-dive docs
    └── skill-two/
        └── SKILL.md

Færdigheder bruger den åbne standard agentfærdigheder – det samme format, der understøttes af Claude Code, Visual Studio Code Copilot, Gemini kommandolinjegrænsefladen, markøren, JetBrains Junie og mere end 30 andre AI-værktøjer.

Vælg dit udgangspunkt

Byg dit plugin med wiqd CLI. CLI’et opretter pakken og holder manifest.json og dine skill-mapper synkroniseret. Det anvender også platformens egne valideringsregler, før du uploader, og provisionerer derefter og deler resultatet. CLI er i forhåndsvisning, så dens kommandoer og genererede output kan ændres før generel tilgængelighed. Alt, det genererer, er en almindelig Microsoft 365-apppakke, så du stadig kan åbne, redigere og versionsstyre filerne direkte.

Saml kun buildpakken manuelt, når du ikke kan installere værktøjer, eller når du bygger din egen pakkepipeline. I så fald er referencen til pakkeformat i denne artikel det, du har brug for – den beskriver præcis, hvad wiqd producerer.

Udgangspunkt Gør dette Tid til første pakke
Jeg starter fra bunden Opret plugin med wiqd ca. 10 minutter
Jeg har et eksisterende Claude Code-plugin Konverter det ca. 5 minutter
Jeg kan ikke installere værktøjer, eller jeg scripter min egen paketering Saml en pakke manuelt ca. 30 minutter

Byg et plug-in med wiqd

wiqd CLI gennemgår den samme livscyklus, som du ellers ville udføre manuelt – opret, tilføj egenskaber, valider, klargør, pak og del. Den pakke, der genereres, opfylder allerede valideringsreglerne i denne artikel.

Trin 1: Installér wiqd, og log på

Installér wiqd CLI ved at følge installationsvejledningen til wiqd, som dækker Windows, macOS og Linux. Log derefter på den Microsoft 365-lejer, du udvikler til, da både klargøring og deling involverer din lejer:

wiqd auth login --interactive

Installationsprogrammet registrerer også et GitHub Copilot CLI-plugin, så du kan styre den samme livscyklus samtalebaseret. For eksempel kan du sige, Opret et separat plugin kaldet Triage Helper eller Validér mit plugin. Den samtalebaserede proces kører de samme kommandoer som i dette afsnit. Brug kommandoerne direkte, når du scripter en pipeline eller ønsker reproducerbar, ikke-interaktiv automatisering.

Trin 2: Opret skabelonen for pluginet og tilføj funktioner

Opret pluginbeholderen, og tilføj derefter de egenskaber, du har brug for, i en hvilken som helst kombination:

wiqd plugin create --name my-plugin
wiqd plugin add skill --name "Contract Analysis"
wiqd plugin add connector --name "Contoso Legal" --description "Case law and statutes over MCP" --url https://api.contoso.com/legal/mcp

add skill opstiller appPackage/skills/contract-analysis/SKILL.md og registrerer det i agentSkills[]. add connector skriver agentConnectors[]-indlægget. Begge kommandoer gennemtvinger platformens navngivnings- og størrelsesloft før skrivning, så en uoverensstemmelse mellem mappenavne eller en overlængde id aldrig når manifestet.

Skriv din skill-logik i det genererede SKILL.md. Frontmatter-felterne, modellen med progressiv indlæsning og begrænsningerne for ledsagende filer er de samme, som er beskrevet i trin 1: Opret din første færdighed og Trin 2: Tilføj referencematerialer (valgfrit).

Vigtig

wiqd plugin create fastlåser pakken til manifestVersion: "1.29", mens de håndskrevne eksempler i denne artikel bruger 1.28. Forskellen har betydning for stik. Ved 1.28 er mcpToolDescription påkrævet, og den fil, det navngiver, skal være i ZIP-filen. I 1.29 er agentConnectors[]-poster kun URL-adresser, og mcpToolDescription er valgfri, så en pakke genereret af wiqd støder aldrig på denne overførselsfejl. wiqd understøtter ikke opsætning af connector-godkendelse endnu – konfigurer den direkte som beskrevet i Understøttede godkendelsestyper.

Trin 3: Valider, mens du bygger

Validér løbende i stedet for at samle en pakke og håbe på, at uploaden går igennem:

wiqd plugin validate
wiqd plugin validate --mode deep

validate er den statiske offlinekontrol over den deklarative agentoverflade. Et plugin, der kun indeholder skills eller kun connectorer, består det uden noget at tjekke, hvilket forventes – det er et tjek for dit build-loop, ikke fuld dækning. validate --mode deep pakker plug-in'et først og validerer derefter buildet .zip mod det samme App Validation Library, som uploaden bruger. Det er her ASKILL-koderne og forbindelsesreglerne dukker op.

Trin 4: Klargør, pakér og del

Kør disse tre kommandoer i rækkefølge:

wiqd plugin provision
wiqd plugin package
wiqd plugin share --scope users --email you@contoso.com

Kør provision først, fordi den skriver den miljøfil, som package og share begge afhænger af. Brug --scope users til at dele med de personer, du angiver, eller --scope tenant til at dele med alle i din organisation. Uanset hvad vises plugin'et i Delt med mig under Cowork>Kilder & færdigheder>Plugins. Hvis du vil angive den i sektionen Discover i stedet, overfører en administrator pakken. Få mere at vide i trin 8: Udgiv til din tenant. Kør provision for at fjerne det, der wiqd plugin delete --env local --yes blev oprettet.

Indsendelse af offentlig butik er stadig en manuel proces i Partnercenter. Få mere at vide i Trin 9: Udgiv til offentligheden.

Flyt et plugin til en anden host

Hvis du vil bruge dine færdigheder i Claude Code, Cursor eller en anden vært for Agentfærdigheder, skal du eksportere projektet i stedet for at kopiere mapper i hånden:

wiqd plugin export --format claude-plugin

export er som standard --format open-plugin og accepterer også cursor-plugin. Den skriver et ukomprimeret bibliotek under <path>/export/<format>.

Importér et eksisterende plugin

Hvis du allerede har et Claude Code-plugin med færdigheder og MCP-servere, har du to konverteringsruter. Den rute, du vælger, afhænger af, om du planlægger at fortsætte med at udvikle plugin'et eller bare sende det, du har.

Mål Anvendelse
Bliv ved med at udvikle, validere og levere plug-in'et fra Microsoft 365 wiqd plugin import
Lav en udgivelsesbar .zip fra et eksisterende Claude-plugin lige nu Konverteringsscriptet

Import med wiqd

wiqd plugin import genkender en Open Plugin-, Claude-plugin- eller Cursor-plugin-kilde og opretter et wiqd-plugin-projekt ud fra den. Det importerede plug-in slutter sig til den samme livscyklus som et, du oprettede med wiqd plugin create:

wiqd plugin import --path ./my-claude-plugin --privacy-url https://contoso.com/privacy --terms-url https://contoso.com/terms

--privacy-url og --terms-url er kun påkrævet ved et plugin's første import. Hvis kilden kom fra en tidligere wiqd plugin export, bærer tur-retur-metadataene dem allerede.

Vigtig

Et importeret projekt understøtter kun den skrivebeskyttede del af livscyklussen —wiqd plugin validate, show, og list. Den kan endnu ikke pakkes, klargøres eller deles, fordi importen ikke opretter de lokale deployfiler, som disse trin kræver. Dette er et sporet mellemrum. Se den aktuelle status i wiqd CLI-referencen. Hvis du har brug for en pakke, der kan publiceres i dag, kan du bruge konverteringsscriptet.

Konvertér med konverteringsscriptet

Konverteringsscriptet oversætter et Claude-plugin direkte til en M365-pakke, der kan publiceres:

  1. Installér CLI (kræver version 1.1.12 eller nyere):

    npm install -g @microsoft/m365agentstoolkit-cli
    
  2. Kontrollér versionen:

    atk --version
    
  3. Importer dit plugin:

    atk import openplugin --path ./my-claude-plugin --output ./my-plugin-project \
      --privacy-url https://contoso.com/privacy \
      --terms-url https://contoso.com/terms
    

Kommandoen læser dit plugins .claude-plugin/plugin.json (eller .cursor-plugin/plugin.json), .mcp.json og mappen skills/ og opretter derefter et Agents Toolkit-projekt, der indeholder appPackage/manifest.json, dine færdigheder og genererede ikoner.

Du skal medtage både --privacy-url og --terms-url, fordi plugin-manifester ikke har tilsvarende felter, og Microsoft 365-manifestet kræver begge dele.

Notat

atk import openplugin finder et plug-in-manifest i mappen med prik-præfiks -.claude-plugin/plugin.json, .cursor-plugin/plugin.json eller .plugin/plugin.json - ved siden af en .mcp.json. Agent Plugins 1.0.0-specifikationen placerer manifestet på et topniveau plugin.json og MCP-konfiguration på mcp.json. Hvis du vil importere et plug-in, der følger 1.0.0-layoutet, skal du flytte dets manifest til .plugin/plugin.json og omdøbe mcp.json til .mcp.json.

Pak resultatet i et uploadbart .zip:

cd my-plugin-project
atk package --manifest-file ./appPackage/manifest.json \
  --output-package-file ./appPackage/build/appPackage.zip \
  --output-folder ./appPackage/build

Notat

atk import openplugin genererer et devPreview manifest. Manifesteksemplerne andre steder i denne artikel målretter schema v1.28. Hvis du publicerer via en kanal, der kræver v1.28, skal du opdatere manifestVersion og $schema i den genererede appPackage/manifest.json.

Hvad der importeres

Plugin-artefakt M365-ækvivalent Bemærkninger
.claude-plugin/plugin.json manifest.json Navn-, beskrivelses- og udviklerfelter mappet; GUID automatisk genereret (deterministisk UUID v5)
skills/*/SKILL.md agentSkills[] elementer + skills/ mappe Kopieret ord for ord - identisk format
.mcp.json servere agentConnectors[] poster URL- og godkendelsestype registreret automatisk
color.png / outline.png Ikoner i pakken Bruges, hvis den er til stede. Pladsholdere genereres, hvis de mangler

Vigtig

For hver connector, der importeres fra .mcp.json, er den genererede authorization.referenceId en pladsholder, der er baseret på pluginet og servernavnet. Erstat det med dit faktiske OAuth-klientregistrerings-id, før du udgiver. Få mere at vide i Understøttede godkendelsestyper.

Hvad bliver ikke konverteret

Følgende Claude-pluginfunktioner understøttes endnu ikke i Microsoft 365-manifestet:

Claude pluginfunktion Status
commands/ (skråstreg-kommandoer) Understøttes endnu ikke
agents/ (underagenter) Understøttes endnu ikke
hooks/ (eventhandlere) Understøttes endnu ikke
settings.json Ikke tilgængelig
bin/ (eksekverbare filer) Ikke tilgængelig

Importindstillinger

Mulighed Beskrivende tekst
--path, -p Krævet. Plug-in-mappe, der indeholder .claude-plugin/plugin.json, .cursor-plugin/plugin.jsoneller .plugin/plugin.json
--output, -o Projektets destinationsmappe (standard: ./<plugin-name>)
--privacy-url developer.privacyUrl for det genererede manifest
--terms-url developer.termsOfUseUrl for det genererede manifest
--website-url developer.websiteUrl. Falder tilbage til homepage, og derefter author.url
--app-id Tilsidesætte det deterministiske UUID v5, der genereres for manifestet id
--default-auth-type Auto (standard), None, OAuthPluginVault, eller ApiKeyPluginVault

Automatisk registrering af godkendelsestype:

Source Standardgodkendelsestype Årsag
Eksterne HTTPS-webadresser OAuthPluginVault De fleste fjern-API'er kræver godkendelse
localhost og ikke-HTTPS URL-adresser None Lokale udviklingsservere

Hvis autodetekteringen ikke svarer til din konfiguration, skal du bruge --default-auth-type til at tilsidesætte den.

Eksporter tilbage til en pluginmappe

Hvis du vil flytte et Agents Toolkit-projekt tilbage til en plug-in-mappe – for eksempel for at holde et Claude Code-plugin og en Cowork-pakke synkroniseret – skal du brugeatk export openplugin:

atk export openplugin --path ./my-plugin-project \
  --output ./my-claude-plugin --manifest-kind claude-plugin
Mulighed Beskrivende tekst
--path, -p Krævet. Agents Toolkit-projektmappe, der indeholder appPackage/manifest.json
--output, -o Destinationspluginmappe (standard: ./<plugin-name>-openplugin)
--manifest-kind open-plugin (standard, skriver .plugin/plugin.json), claude-plugineller cursor-plugin

Eksportér skriver en x-microsoft-365-agents-toolkit blok i det genererede plugin.json. Denne blok indeholder manifestet id, udvikler-URL-adresser og forbindelsesindstillinger, så en senere atk import openplugin kan gennemføres tur-retur uden at kræve --privacy-url eller --terms-url igen.

Notat

x-microsoft-365-agents-toolkit-blokken er specifik for Agents Toolkit, og standard open-plugin-typen skriver manifestet til .plugin/plugin.json. Agent Plugins 1.0.0 bruger et topniveau plugin.json og bærer klientspecifikke data under en extensions nøgle med et omvendt domænenavneområde, så andre klienter ignorerer denne blok i stedet for at handle på den. Når dit mål er Claude Code eller Cursor, skal du bruge --manifest-kind claude-plugin eller cursor-plugin.

Forældet: PowerShell-konverteringsscript

Før atk understøttede import af plugins, blev der brugt et PowerShell-script kun til Windows til konvertering, som stadig er tilgængeligt som konverteringsscript:

.\Convert-ClaudePluginToMOS3.ps1 -PluginPath ./my-claude-plugin -OutputPath ./output

Brug atk import openplugin i stedet. Det fungerer på tværs af platforme, understøtter både Cursor og Claude Code-kilder og kan eksportere tilbage til en pluginmappe.

Saml en pakke manuelt

Dette afsnit er reference for pakkeformatet: det beskriver præcis, hvad Build a plugin with wiqd genererer, felt for felt. Følg den hele vejen igennem, når du ikke kan installere værktøjer, eller bygger din egen paketeringspipeline. Brug den som reference, når du har brug for at forstå eller fejlfinde en genereret pakke.

Trin 1: Opret din første færdighed

En færdighedspakke er en mappe, der indeholder en SKILL.md-fil. Opret følgende mappestruktur:

my-extension/
└── skills/
    └── contract-analysis/
        └── SKILL.md

Skriv SKILL.md med YAML frontmatter og en Markdown-brødtekst:

---
name: contract-analysis
description: |
  Analyzes contracts for key terms, risks, and obligations.
  Use when user asks to "review this contract", "find the liability clause",
  "summarize the key terms", or "compare these two agreements".
license: MIT
metadata:
  author: Contoso Legal Tech
  version: "1.0"
---

# Contract Analysis

## What This Skill Does

Guides Cowork through systematic contract review, identifying:
- Key commercial terms (pricing, payment, renewal)
- Risk clauses (indemnification, limitation of liability, IP)
- Obligations and deadlines
- Non-standard or unusual provisions

## Workflow

1. Read the uploaded contract document
2. Extract and categorize all clauses
3. Flag risk areas with severity ratings
4. Generate a structured summary with recommendations

## Output Format

Present findings in a structured table:

| Clause | Category | Risk Level | Summary |
|--------|----------|------------|---------|
| Section 4.2-Indemnification | Risk | High | Unlimited indemnification for IP claims |
| Section 7.1-Term | Commercial | Low | 12-month auto-renewal with 30-day notice |

SKILL.md's indledende metadatafelter

Obligatoriske felter:

Felt Begrænsninger Beskrivende tekst
name 1-64 tegn, kebab-case Færdigheds-id – skal svare nøjagtigt til mappenavnet
description 1-1024 tegn Hvornår skal du bruge denne færdighed – medtag udløserudtryk

Vigtig

  • Mappenavnet skal stemme overens med feltet name i frontmatter. Denne uoverensstemmelse er den mest almindelige årsag til fejl i skills.
  • Plugin-listefelter description bør ikke indeholde opfordringer til handling, der dirigerer brugerne til eksterne markedspladser for at købe abonnementer.
Mappesti name felt Gyldig? Hvorfor
skills/contract-analysis/SKILL.md contract-analysis Yes Mappe og navn matcher
skills/contract-analysis/SKILL.md ContractAnalysis No Navnet bruger PascalCase i stedet for at matche mappen
skills/my-skill/SKILL.md contract-analysis No Mappen er my-skill, men navnet er contract-analysis

Navngivningsregler (kebab-case): Brug kun små bogstaver, tal og bindestreger. Brug ikke fortløbende bindestreger, og brug ikke foranstillede eller efterstillede bindestreger.

Eksempel: Gyldig? Emne
bond-relative-value Yes Små bogstaver med bindestreger
fx-carry-trade Yes Små bogstaver med bindestreger
email Yes Et enkelt ord, ingen bindestreger nødvendige
Bond_Relative_Value No store og små bogstaver
--my-skill-- No Indledende og afsluttende bindestreger
my--skill No Sammenhængende bindestreger

Trin 2: Tilføj referencematerialer (valgfrit)

Ved komplekse færdigheder skal du holde den primære SKILL.md overskuelig og flytte detaljeret indhold til undermapper. Disse ekstra filer er ledsagende filer. Færdigheden indlæser dem, når det er nødvendigt.

skills/
└── contract-analysis/
    ├── SKILL.md               # Core workflow (~1,500-2,000 words ideal)
    ├── references/            # Deep-dive docs loaded on demand
    │   ├── clause-taxonomy.md
    │   └── risk-scoring.md
    └── scripts/               # Executable utilities
        └── extract-clauses.py

Begrænsninger for ledsagende filer

Hver færdighed kan indeholde op til 20 ledsagende filer (alle andre filer end SKILL.md). Der gælder følgende begrænsninger pr. færdighed:

Grænse Værdi
Maksimalt antal tilknyttede filer 20
Maksimal størrelse pr. tilknyttet fil 5 MB
Maksimal samlet størrelse på ledsagere 10 MB
Timeout for download (alle companion-enheder) 15 sekunder

Regler for ledsagende filer

Tilknyttede filstier skal følge disse regler:

  • Brug kun relative stier (ingen absolutte stier).
  • Ingen mappesti-traversering (..-segmenter).
  • Ingen omvendte skråstreger eller null-byte i filnavne.
  • Ingen skjulte filer (navne, der starter med .).
  • Ingen reserverede Windows-navne (CON, PRN, AUX, COM1, NUL–COM9, LPT9–LPT1).
  • Selve filen SKILL.md tæller ikke som en ledsagende fil.
  • Filnavne skal bruge sikre tegn: alfanumeriske tegn, bindestreger, understregningstegn, prikker, mellemrum og !.

For at holde kontekstvinduet effektivt indlæser systemet skills i tre lag:

Lag Når den er indlæst Målstørrelse
Indledende materiale (name + description) Altid - ved start ~100 tokens
SKILL.md brødtekst Når en færdighed aktiveres Mindre end 5.000 tokens (1.500-2.000 ord)
Referencer (references/) Efter anmodning fra agenten Ubegrænset
Scripts (scripts/) Kørt, ikke indlæst i konteksten Ikke tilgængelig

Henvis eksplicit til undermapperne i SKILL.md, så agenten ved, at de findes:

## Additional Resources

- **`references/clause-taxonomy.md`**-Full taxonomy of contract clause types
- **`references/risk-scoring.md`**-Risk scoring methodology and thresholds
- **`scripts/extract-clauses.py`**-Automated clause extraction utility

Trin 3: Tilføj en forbindelse (valgfrit)

Hvis din udvidelse skal have adgang til eksterne data, skal du tilføje en ekstern MCP-server. Dette trin er valgfrit. Pakker med kun færdigheder fungerer godt til promptbaserede arbejdsprocesser.

Tip

Hvis din server styrer værktøjssynlighed efter klient eller attributterer indgående trafik, skal du gå til Identificér Cowork-trafik til din server for den klientidentitet, Cowork præsenterer.

Notat

Brugerdefinerede plugins understøttes ikke i Cowork på mobil.

Krav til forbindelsesstik

Krav Detaljer
Transport HTTP, der kan streames (HTTPS påkrævet, TLS 1.2+)
Protokol JSON-RPC 2.0-meddelelsesformat
Søgning efter værktøj Understøt tools/list for dynamisk opdagelse (anbefales)
Værktøjsudførelse Understøttelse tools/call af påkaldelse
Tilgængelighed 99,9 % oppetids-SLA anbefales til apps, der er publiceret i butikken
Svartid Mindre end 30 sekunder pr. værktøjsopkald

Retningslinjer for værktøjsdesign

  • Ét værktøj pr. handling til små API'er (færre end 15 operationer): search_case_law, get_ruling, cite_precedent
  • Søg + udfør for store API'er (50+ handlinger): search_actions + execute_action
  • Beskrivende navne: get_bond_price ikke getData
  • Omfattende inputskemaer: Medtag en beskrivelse af hver parameter – det er, hvad agenten læser
  • Struktureret output: Returnér JSON, som agenten kan formatere til brugeren
  • Filinput: Hvis du vil acceptere en fil fra brugerens arbejdsområde, skal du erklære parameteren med contentEncoding: base64. Få mere at vide i Acceptér filer fra arbejdsområdet Cowork.

Beskriv din connectors værktøjer (mcpToolDescription)

En remoteMcpServer forbindelse kan også indeholde et mcpToolDescription objekt. Når den er angivet, peger dens indlejrede .zip egenskab på en værktøjsbeskrivelses-JSON-fil, som du pakker i din file og refererer til den via en relativ sti fra pakkeroden. Cowork opdager værktøjer dynamisk fra din MCP-server og bruger ikke denne fil, selv når den er til stede.

"remoteMcpServer": {
  "mcpServerUrl": "https://api.contoso.com/legal/mcp",
  "mcpToolDescription": {
    "file": "./tools/contoso-legal-tools.json"
  },
  "authorization": {
    "type": "OAuthPluginVault",
    "referenceId": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u"
  }
}

Hvis du medtager mcpToolDescription, beskriver den refererede fil (f.eks. tools/contoso-legal-tools.json) de værktøjer, som connectoren eksponerer, og skal være til stede i ZIP-pakken. Medtag det sammen med dine manifest.json- og skills/-mapper, når du pakker plugin'et.

Tip

Dette krav gælder for manifestversion 1.28. Pakker, der wiqd plugin create genererer mål 1.29, hvor agentConnectors[] posterne kun er URL-adresser, mcpToolDescription er valgfri, og der ikke er nogen værktøjsbeskrivelsesfil at glemme.

Understøttede godkendelsestyper

Godkendelsestype Hvornår bruges Brugeroplevelse
None Offentlige eller anonyme API'er, interne tjenester Gennemsigtig – ingen autentificeringsprompt
OAuthPluginVault OAuth 2.0 API'er (anbefales til produktion) Brugeren fuldfører OAuth-godkendelse kun én gang
ApiKeyPluginVault API-nøglebaserede tjenester Brugeren angiver en nøgle én gang

Notat

  • Understøttelse af API-nøglegodkendelse er ikke tilgængelig i Cowork endnu.
  • Hvis din MCP-server kræver en API-nøgle, skal du bruge OAuthPluginVault eller Dynamisk klientregistrering i stedet eller eksponere et slutpunkt, der accepterer None.

For OAuthPluginVault og ApiKeyPluginVault, peger referenceId på legitimationsoplysninger, der er gemt i Microsoft Enterprise Token Store – hemmeligheder vises aldrig i manifest- eller skill-filerne. Værdien referenceId er registrerings-id'et for OAuth-klienten, som du opretter, når du registrerer en OAuth-klient med Agents Toolkit.

Vigtig

Når du registrerer din OAuth-klient, skal du angive brugen efter organisation til Enhver Microsoft 365-organisation for at sikre, at din plug-in fungerer på tværs af tenants.

MCP-godkendelse

Hvis du vil bruge OAuth eller ApiKey til godkendelse, skal du se Konfigurer godkendelse for MCP- og API-plug-ins i agenter i Microsoft 365 Copilot for at få oplysninger om konfiguration og konfiguration.

Dynamisk klientregistrering

Hvis din MCP-server understøtter Dynamisk klientregistrering (DCR), kan du udelade en authentication konfiguration fra din forbindelsesdefinition, og Cowork opretter automatisk en OAuth-klient på dit plug-ins vegne.

Notat

Udeladelse af konfigurationen authentication understøttes kun i Cowork. Det understøttes ikke i Copilot Chat. Hvis dit plugin også skal fungere i Copilot Chat, skal du konfigurere OAuthPluginVault godkendelse som beskrevet i Understøttede godkendelsestyper.

Du kan udelade objektet authorization helt. Konfigurer din MCP-server-URL-adresse, så tager Cowork sig af OAuth-klienten:

"remoteMcpServer": {
  "mcpServerUrl": "https://api.contoso.com/legal/mcp"
}

Trin 4: Opret et manifest

Opret manifest.json i din pakkerod. I eksemplet bruges manifestversionen 1.28; wiqd plugin create fastlåser i stedet til 1.29, hvor forbindelsesposterne kun består af URL’er.

{
  "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.28/MicrosoftTeams.schema.json",
  "manifestVersion": "1.28",
  "version": "1.0.0",
  "id": "YOUR-GUID-HERE",
  "developer": {
    "name": "Contoso Legal Tech",
    "websiteUrl": "https://contoso.com",
    "privacyUrl": "https://contoso.com/privacy",
    "termsOfUseUrl": "https://contoso.com/terms"
  },
  "name": {
    "short": "Contoso Legal Tools",
    "full": "Contoso Legal Tools for Copilot Cowork"
  },
  "description": {
    "short": "Contract analysis, clause extraction, and legal research",
    "full": "Comprehensive legal tools for Copilot Cowork including contract analysis, clause extraction, risk assessment, and legal research capabilities."
  },
  "icons": {
    "color": "color.png",
    "outline": "outline.png"
  },
  "accentColor": "#2B579A",
  "agentSkills": [
    { "folder": "./skills/contract-analysis" }
  ]
}

Hvis du vil tilføje en connector, skal du inkludere agentConnectors:

{
  "agentConnectors": [
    {
      "id": "contoso-legal-api",
      "displayName": "Contoso Legal Database",
      "description": "Access to case law, statutes, and regulatory databases",
      "toolSource": {
        "remoteMcpServer": {
          "mcpServerUrl": "https://api.contoso.com/legal/mcp",
          "mcpToolDescription": {
            "file": "./tools/contoso-legal-tools.json"
          },
          "authorization": {
            "type": "OAuthPluginVault",
            "referenceId": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u"
          }
        }
      }
    }
  ]
}

I forbindelseskonfigurationen skal referenceId være OAuth-registrerings-id'et. Hvis du medtager mcpToolDescription, skal dets file henvise til en JSON-fil med værktøjsbeskrivelsen, der er inkluderet i ZIP-pakken.

Vigtig

Skemaet til v1.28-manifestet er strengt: det sætter additionalProperties: false ved roden, så alle felter, der ikke er defineret i skemaet, afvises. Felter, der er gyldige i standardmanifester for Teams-appen – som f.eks. packageName – får overførslen til at mislykkes med en fejl som f.eks. Property 'packageName' has not been defined and the schema does not allow additional properties.. Medtag kun de felter, der er vist her.

Trin 5: Tilføj ikoner

Opret to PNG-ikoner:

Ikon Størrelse Purpose
color.png 192×192 px Appikon i fuld farve, der vises i Store og på applisten
outline.png 32×32 px Konturikon i én farve til kompakte visninger

Hvis du endnu ikke har ikoner, genererer atk import openplugin pladsholdere i dækkende farver. Udskift dem før indsendelse til Store.

Trin 6: Pak

Opret en ZIP-fil med alt indhold i rodmappen. (wiqd plugin package producerer den samme struktur efter wiqd plugin provision.)

contoso-legal-tools.zip
├── manifest.json
├── color.png
├── outline.png
├── tools/
│   └── contoso-legal-tools.json   # Referenced by mcpToolDescription (optional, connectors only)
└── skills/
    └── contract-analysis/
        ├── SKILL.md
        └── references/
            └── clause-taxonomy.md

Hvis en connector omfatter mcpToolDescription, skal du medtage den JSON-fil med værktøjsbeskrivelse, den refererer til. Pakker, der ikke bruger mcpToolDescription, herunder pakker kun med færdigheder, behøver ikke en tools/ mappe.

Windows (PowerShell):

Compress-Archive -Path manifest.json, color.png, outline.png, tools, skills -DestinationPath contoso-legal-tools.zip

macOS/Linux:

zip -r contoso-legal-tools.zip manifest.json color.png outline.png tools/ skills/

Vælg Microsoft 365 Agentværktøjspakke.

 atk package --manifest-file ./appPackage/manifest.json \
       --output-package-file ./appPackage/build/appPackage.zip \
       --output-folder ./appPackage/build

Trin 7: Test

Hvis du vil teste din app, skal du uploade din app-pakke til Teams, som beskrevet i Upload din app til Teams.

Hvis du har bygget plug-in'et med wiqd, skal du i stedet køre wiqd plugin provision, da det registrerer plug-in'et for dig i din tenant. Til personlig test af en håndsamlet pakke skal du indlæse appen ved hjælp af kommandolinjegrænsefladen i Microsoft 365 Agents Toolkit:

  1. Installér @microsoft/m365agentstoolkit-cli fra npm:

    npm install -g @microsoft/m365agentstoolkit-cli
    
  2. Kontrollér installationen ved at køre:

    atk --version
    
  3. Log på med din Microsoft 365-arbejdskonto:

    atk auth login
    
  4. Log på din arbejdskonto, og installér agentpakken. Erstat filstien med placeringen af din ZIP-pakke:

    atk install --file-path "C:/Users/myuser/myPackage.zip" --scope Personal
    

    En vellykket installation returnerer output, der indeholder et TitleId og et AppId for din konto.

  5. Gem disse id'er til senere brug, når du opdaterer eller fjerner.

Få mere at vide om Microsoft 365 Agents Toolkit-kommandolinjegrænseflade.

Trin 8: Udgiv til din tenant

Upload pakken i administrationscenteret for at få vist dit plug-in i sektionen Opdag, hvor alle i organisationen kan finde det:

  1. Åbn M365 Administration>Administrer apps>Upload brugerdefineret app.
  2. Vælg ellipsisknappen (...) >Tilføj agent.
  3. Uploadér din .zip pakke.
  4. Åbn Cowork>Kilder & Færdigheder>Plug-ins. Pluginet vises i sektionen Opdag.

wiqd plugin share lægger pluginet i Delt med mig i stedet for Opdag. Brug den til test og til målrettet udrulning til bestemte personer. Upload fra Administration er det, der gør et plugin synligt.

Trin 9: Publicer offentligt

For plug-ins, der er beregnet til offentlig distribution, skal du sende dit plug-in til Microsoft 365 App Store via Partnercenter. Få mere at vide i Udgiv agenter til Microsoft 365 Copilot.

Test en forbindelse mod en lokal MCP-server

Connectorer kræver en HTTPS-forbindelse mcpServerUrl. Hvis du vil teste en server, der kører på din computer, skal du eksponere den over en offentlig HTTPS-URL. Udviklingstunneller leverer et relæ, der afslutter TLS for dig.

devtunnel port create <tunnel> -p <port> --protocol http

Vigtig

Brug --protocol http, ikke https. Parameteren --protocol beskriver den lokale tjeneste, som tunnelen videresender til, ikke den offentlige tunnels URL-adresse. De fleste lokale MCP-servere taler almindelig HTTP, så hvis du indstiller --protocol https , mens din server serverer HTTP, returnerer hver anmodning gennem tunnelen en 502 fejl. Relæet afslutter TLS og leverer den offentlige URL-adresse via HTTPS uanset dette flag.

Troubleshooting

Symptom Årsag Ret
Hver tunnelbaseret anmodning vender tilbage, 502 og den lokale server læser HTTP devtunnel port create blev kørt med --protocol https Genskab porten med --protocol http
Tunnelbaserede anmodninger returneres 502 på macOS, selvom den lokale server kører Serveren er bundet til 0.0.0.0 (kun IPv4), men tunnelopkaldene localhost, som først løses til ::1 (IPv6) Tilknyt serveren til ::, så den accepterer både IPv4- og IPv6-forbindelser
Upload mislykkes med Property '<field>' has not been defined and the schema does not allow additional properties Manifestet indeholder et felt, som v1.28-skemaet ikke tillader (f.eks. packageName) Fjern feltet; V1.28-skemaet bruger additionalProperties: false

Emballagemønstre

Vælg det mønster, der passer til din udvidelse:

Kun færdigheder (ingen forbindelse)

Bedst til promptbaserede arbejdsprocesser, dokumentanalyse og skrivehjælp.

my-skills-pack.zip
├── manifest.json          # agentSkills only, no agentConnectors
├── color.png
├── outline.png
└── skills/
    ├── skill-one/SKILL.md
    └── skill-two/SKILL.md

Færdigheder + fjernconnector

Bedst til dataanalyse, API-integrationer og virksomhedssystemer.

my-data-skills.zip
├── manifest.json          # agentSkills + agentConnectors
├── color.png
├── outline.png
├── tools/                 # Tool-description file(s) for mcpToolDescription (optional)
│   └── my-connector.json
└── skills/
    ├── analysis-workflow/SKILL.md
    └── reporting-workflow/SKILL.md

Kun connector (ingen tilpassee færdigheder)

Brug denne indstilling til datakilder, som Coworks indbyggede færdigheder allerede kan bruge.

my-connector.zip
├── manifest.json          # agentConnectors only, no agentSkills
├── color.png
├── outline.png
└── tools/                 # Tool-description file(s) for mcpToolDescription (optional)
    └── my-connector.json

Importeret Claude Code eller Cursor-plugin

Brug denne indstilling til eksisterende Claude-økosystemplugins, der er rettet mod Cowork. For at fortsætte udviklingen af plug-inet i Microsoft 365 skal du importere det:

wiqd plugin import --path ./claude-plugin --privacy-url https://contoso.com/privacy --terms-url https://contoso.com/terms

For at producere en publicerbar .zip fra plugin'et, som det ser ud i dag, skal du bruge konverteringsscriptet:

atk import openplugin --path ./claude-plugin --output ./my-plugin-project \
  --privacy-url https://contoso.com/privacy \
  --terms-url https://contoso.com/terms

Bedste praksis for oprettelse af skills

Følg disse retningslinjer for at oprette færdigheder, der aktiveres pålideligt og giver ensartede resultater.

Skriv effektive beskrivelser

Feltet description bestemmer, hvornår agenten aktiverer din færdighed. Vær specifik:

# Good-specific trigger phrases, concrete scenarios
description: |
  Analyzes bond relative value using Z-spreads, ASW spreads, and butterfly analysis.
  Use when user asks to "analyze bond spreads", "compare bonds",
  "rich-cheap analysis", "relative value", or "Z-spread calculation".

# Bad-vague, no trigger phrases
description: Provides bond analytics capabilities.

Skriv effektive arbejdsprocesser

  • Vær specifik i beskrivelsen. Medtag udløserudtryk: "Brug når brugeren beder om..." Denne beskrivelse er, hvordan agenten beslutter, hvilken færdighed der skal aktiveres.
  • Struktur som en arbejdsproces. Nummerér trinnene. Hvert trin skal knyttes til en konkret handling (læse en fil, kalde et værktøj, generere output).
  • Definér output format. Vis den nøjagtige tabel-, liste- eller dokumentstruktur, som brugerne kan forvente. Denne definition forbedrer konsistensen markant.
  • Referenceværktøjer ved navn. Hvis dine færdigheder afhænger af forbindelsesværktøjer, skal du navngive dem eksplicit: "Brug værktøjet search_case_law til at..."
  • Hold de vigtigste SKILL.md slanke. Flyt detaljeret referencemateriale til undermappen references/. Skillens brødtekst bør være arbejdsgangen, ikke en encyklopædi.

Undgå almindelige fejl

  • Indlejr ikke hemmeligheder i SKILL.md filer. Brug agentConnectors til godkendelse af API-legitimationsoplysninger.
  • Duplikér ikke indbyggede skills. Tjek den indbyggede liste over færdigheder før du bygger.
  • Gør ikke færdighederne for brede. "At gøre alt med juridiske dokumenter" er mindre effektivt end specifikke færdigheder til "kontraktanalyse", "klausuludtrækning" og "juridisk forskning".
  • Undlad at hardkode filstier eller systemkommandoer. Færdigheder skal kunne overføres på tværs af miljøer.
  • Læg ikke alt i SKILL.md. Hvis din brødtekst overstiger ~3.000 ord, kan du flytte detaljeret indhold til references/.

Valideringsregler

Når du indsender din pakke, validerer platformen den på flere niveauer. Ret disse fejl før indsendelse for at undgå afvisning.

Hvis du vil fange dem, mens du bygger i stedet for på uploadtidspunktet, skal du køre wiqd plugin validate --mode deep. Denne kommando pakker plugin'et og kører de samme regler lokalt. Få mere at vide i trin 3: Valider, mens du bygger.

Validering på manifestniveau

Kode Regel Sværhedsgraden
ASKILL-M001 folder er påkrævet ved hver agentSkills post Fejl
ASKILL-M002 agentSkills matrix kan have op til 20 elementer Fejl
ASKILL-M003 folder Sti kan bestå af op til 256 tegn Fejl

Validering på pakkeniveau

Kode Regel Typisk løsning Sværhedsgraden
ASKILL-P001 Mappe, der refereres til i manifestet, findes i ZIP Kontrollér din ZIP-struktur Fejl
ASKILL-P002 Mappen indeholder en SKILL.md fil Tilføj manglende SKILL.md Fejl
ASKILL-P003 SKILL.md har gyldig YAML-frontmatter mellem --- afgrænsere Ret YAML-syntaks Fejl
ASKILL-P004 Frontmatter inkluderer feltet name Føj name: til frontmatter Fejl
ASKILL-P005 Frontmatter inkluderer feltet description Føj description: til frontmatter Fejl
ASKILL-P006 name matcher mappenavnet (sidste stisegment) Omdøb mappe eller ret name: Fejl
ASKILL-P007 name is kebab-case Brug my-skill ikke MySkill eller my_skill Fejl
ASKILL-P008 Ingen dublerede folder værdier i arrayet Fjern dubletter Fejl

Validerer connector

Regel Sværhedsgraden
Hver konnektor kræver en id og en displayName Fejl
Alle connectorværdier id skal være entydige i manifestet Fejl
Præcis en af plugin eller remoteMcpServer Fejl
mcpServerUrl skal være en gyldig HTTPS-URL-adresse Fejl
Hvis mcpToolDescription findes, skal dets file findes i ZIP-filen. Fejl
authorization.referenceId Påkrævet, medmindre type er None Fejl
authorization.referenceId må ikke være til stede, når typen er None Fejl

Validering af tilknyttet fil

Portalen validerer ledsagende filer (referencematerialer, scripts og andre filer sammen med SKILL.md) på upload- og synkroniseringstidspunktet:

Regel Sværhedsgraden
Maksimalt 20 ledsagende filer pr. færdighed (udefra SKILL.md) Fejl
Hver tilknyttet fil skal være 5 MB eller mindre Fejl
Den samlede størrelse af tilknyttede filer skal være 10 MB eller mindre pr. færdighed Fejl
Filstier skal være relative (ingen absolutte stier) Fejl
Ingen path traversal-segmenter (..) Fejl
Ingen omvendte skråstreger eller null bytes i filnavne Fejl
Ingen skjulte filer (navne som starter med .) Fejl
Ingen reserverede Windows-navne (CON, PRN, AUX, COM1, NUL–COM9, LPT9–LPT1) Fejl
Filnavne må kun bruge sikre tegn (alfanumeriske, bindestreger, understregningstegn, prikker, mellemrum, !) Fejl

Kompatibilitet på tværs af platforme

Færdigheder bruger den åbne standard Agent Skills. De samme SKILL.md filer fungerer på tværs af flere værktøjer med kunstig intelligens:

Platform Kompatibilitet
Claude Code Præcis samme SKILL.md format
Claude.ai-projekter Fulde færdigheder kan uploades som projektfiler
VS Code/GitHub Copilot Full-Agent færdigheder, der understøttes i agenttilstand
Gemini CLI Færdigheder for fuld helpdesk-medarbejder understøttes
JetBrains Junie Færdigheder for fuld helpdesk-medarbejder understøttes
OpenAI Codex Færdigheder for fuld helpdesk-medarbejder understøttes
Markøren Færdigheder for fuld helpdesk-medarbejder understøttes

Hvis du udvikler færdigheder for både Claude Code og Copilot Cowork, skal du forfatte plugin'et med wiqd. Kør derefter wiqd plugin export --format claude-plugin for at generere Claude Code-layoutet. Hvis du hellere vil starte fra Claude Code-plugin-strukturen – det er supersættet – er layoutet:

my-plugin/
├── .claude-plugin/
│   └── plugin.json        # Claude plugin manifest
├── skills/
│   ├── skill-one/
│   │   ├── SKILL.md       # Works in both Claude Code AND M365
│   │   └── references/
│   └── skill-two/
│       └── SKILL.md
└── .mcp.json              # MCP server config (optional)

Overfør den derefter til Microsoft 365, når du er klar til at publicere i Microsoft 365 App Store, enten med wiqd plugin import eller med konverteringsscriptet:

atk import openplugin --path ./my-plugin --output ./my-plugin-project \
  --privacy-url https://contoso.com/privacy \
  --terms-url https://contoso.com/terms

Håndtering af MCP-annoteringer og bekræftelser

Copilot Cowork læser MCP-standardsobjektet annotations for værktøjer, som din server returnerer fra tools/list, og bruger det til at afgøre, om et værktøjskald kræver brugerbekræftelse, og hvilken etiket der skal vises i prompten.

Tilgængelige felter

Felt Type Effekt
readOnlyHint bool false: Bekræftelse kræves, før værktøjet kører.
destructiveHint bool true: Bekræftelse kræves, før værktøjet kører.
title streng Menneskeligt læsbar etiket, der vises i bekræftelsesdialogboksen. Bruger værktøjsnavnet som reserve, når det mangler.

Bekræftelsesregler

Bekræftelse er påkrævet, hvis readOnlyHint == false eller destructiveHint == true.

Alle værktøjer skal have sikkerhedsanmærkninger angivet. Værktøjer uden anmærkninger behandles som destruktive og kræver bekræftelse. Få mere at vide i MCP-skemareferencen.

Eksempler på MCP

En destruktiv handling med et venligt navn:

{
  "name": "send_email",
  "description": "Send an email message.",
  "annotations": {
    "title": "Send Email",
    "destructiveHint": true
  },
  "inputSchema": { ... }
}

En sikker læsning, der køres automatisk:

{
  "name": "search_docs",
  "annotations": {
    "title": "Search Documents",
    "readOnlyHint": true
  }
}

Hvad der er tilgængeligt nu

  • Microsoft-værktøjer (Graph, Dataverse og andre) er underlagt Coworks indbyggede politik uanset annoteringer.
  • For MCP-servere, der ikke er fra Microsoft, udrulles annotationsdrevet bekræftelse gradvist. At angive hintene nu er fremadkompatibelt, og der vises bekræftelsesprompter, efterhånden som udrulningen udvides, uden at det kræver ændringer fra udvikleren.

Accepter filer fra Cowork-arbejdsområdet

Et forbindelsesværktøj kan tage en fil fra brugerens Cowork-session som input – et dokument, som brugeren har vedhæftet, en vedhæftet fil i en mail, som Cowork har gemt, eller en fil, som et tidligere trin har produceret. Deklarer parameteren med standardnøgleordet contentEncoding: base64 JSON Schema, og Cowork håndterer resten. Der kræves ingen Microsoft-specifik skemaudvidelse, og serverens API-overflade ændres ikke.

Cowork finder frem til arbejdsområdefilen og base64-enkoder den før den kalder din server, så filbytes aldrig havner i agentens kontekst. Agenten ser og udsender udelukkende filstier i arbejdsområdet.

Notat

Instruer ikke agenten om at base64-kode en fil selv og indsætte blob'en i et værktøjskald. Denne tilgang indlæser hele filen i modellens kontekst og afhænger af, hvilken model der genskaber blob'en nøjagtigt. Det ser ud til at fungere på små testfiler og fejler på rigtige filer.

Definer en filparameter

En string-egenskab med contentEncoding: base64 genkendes som et filinput:

{
  "name": "analyze_contract",
  "description": "Extract key terms from a contract document.",
  "annotations": {
    "title": "Analyze Contract",
    "readOnlyHint": true
  },
  "inputSchema": {
    "type": "object",
    "properties": {
      "document": {
        "type": "string",
        "contentEncoding": "base64",
        "description": "The contract file to analyze."
      },
      "jurisdiction": {
        "type": "string",
        "description": "Two-letter country code governing the contract."
      }
    },
    "required": ["document"]
  }
}

En liste af sådanne strenge genkendes også for værktøjer, der accepterer flere filer:

"attachments": {
  "type": "array",
  "items": { "type": "string", "contentEncoding": "base64" },
  "description": "Receipt images to attach to the expense line."
}

Hvad agenten ser

For filparametre, der er deklareret på det øverste niveau af inputSchema.properties, erstatter Cowork dem i det modelviste skema med en enkelt direct_attachment_file_paths array – den samme parameter, som Coworks indbyggede værktøjer bruger, så agenten ved allerede, hvordan den skal udfyldes. Skemaet ovenfor præsenteres for agenten som:

{
  "type": "object",
  "properties": {
    "direct_attachment_file_paths": {
      "type": "array",
      "items": { "type": "string" },
      "description": "Workspace file paths to attach."
    },
    "jurisdiction": { "type": "string" }
  }
}

Hvis værktøjet erklærer mere end én filparameter på øverste niveau, kollapses de alle sammen i denne enkelt direct_attachment_file_paths matrix. Ved kaldet fordeler Cowork de løste filer tilbage til dine oprindelige parameternavne i erklæringsrækkefølgen.

Indlejrede filparametre

Agenten understøtter en filparameter, der er indlejret i et objekt eller et array af objekter. Agenten håndterer denne parameter anderledes: I stedet for at skjule den, omskriver agenten den på plads til en stistreng på sin egen placering. Med denne fremgangsmåde bevares tilknytningen mellem en fil og dens sidestillede felter. Du får f.eks. én kvittering pr. udgiftslinje:

"line_items": {
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "amount": { "type": "number" },
      "receipt": { "type": "string", "contentEncoding": "base64" }
    }
  }
}

Agenten udfyldes line_items[].receipt med en arbejdsområdesti, og Cowork bytter hver sti for base64-indhold på stedet, før opkaldet viderestilles.

Indlejringen gennemløbes til en dybde på fire niveauer under toppen af inputSchema. $ref henvisninger følges ikke – definer filparametre direkte i stedet for via en $ref.

Hvad din server modtager

Din server modtager en almindelig tools/call, hvor dine oprindelige parameternavne er udfyldt med base64-kodet data:

{
  "method": "tools/call",
  "params": {
    "name": "analyze_contract",
    "arguments": {
      "document": "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5...",
      "jurisdiction": "US"
    }
  }
}

Din server behøver ikke at vide, at agenten brugte en stibaseret grænseflade, og værktøjer, der ikke erklærer contentEncoding: base64 parametre, påvirkes ikke.

Grænser

Grænse Værdi
Files pr. værktøjskald. 8
Størrelse pr. fil 150 MiB
Samlet størrelse for hvert værktøjskald 150 MiB
Parametre for arrayfil for hvert værktøj 1 (kombiner det med et vilkårligt antal skalarfilparametre)
Maksimal indlejringsdybde 4 niveauer nede fra toppen af inputSchema

En anmodning, der overskrider grænsen for antal filer eller en størrelsesgrænse, mislykkes med en værktøjsfejl og når aldrig frem til din server. Tilpas dit API og dets timeouts med grænsen på 150 MiB i tankerne: base64 øger payloadstørrelsen med omtrent en tredjedel i forhold til den rå filstørrelse, og det kodede indhold sendes i brødteksten for JSON-RPC-anmodningen.

Anbefalinger

  • Beskriv parameteren, så den er forståelig for en læser. Agenten bruger beskrivelsen til at afgøre, hvilken fil der hører til under hvilken parameter. For eksempel fungerer "The signed contract PDF to analyze" bedre end "file".
  • Angiv de formater, du understøtter i parameterbeskrivelsen. Cowork videresender det, brugeren vedhæfter. Validér indholdstypen hos dig, og returnér en tydelig fejl fra værktøjet, hvis den ikke kan bruges.
  • Angiv annoteringer. Et værktøj, der modtager en fil og behandler den, er normalt ikke kun til læsning, så det beder om bekræftelse. Få mere at vide i MCP-annotering og bekræftelsesadministration.
  • Bevar filparametre integreret. En parameter bag et $ref, eller indlejret dybere end fire niveauer, omskrives ikke. Serveren ville modtage en streng med en sti, hvor den forventer indhold.
  • Angiv højst én array-filparameter for hvert værktøj. Med to eller flere kan Cowork ikke afgøre, hvilken fil der hører til hvilket array, og opkaldet mislykkes med en værktøjsfejl. Brug ét array, eller flere skalære parametre, eller en blanding af skalarer og et enkelt array.
  • Forvent et nøjagtigt antal for værktøjer, der kun understøtter skalarer. Hvis dit værktøj kun angiver filparametre af typen skalar, skal antallet af filer, som agenten sender videre, svare til det antal, der er angivet. Markér valgfrie filparametre tydeligt i deres beskrivelser, så agenten ikke angiver for få eller for mange.

Notat

Denne mekanisme går forud for Model Context Protocol's eget filinputarbejde, som standardiseres af MCP File Uploads Working Group. Cowork kan tilføje understøttelse af den standardiserede form for deklarative filinput, når det lander. Den contentEncoding: base64 kontrakt, der er beskrevet her, fungerer fortsat.

Identificér Cowork-trafik til din server

Hvis din MCP-server porter værktøjets synlighed efter klient, eller du vil tilskrive den trafik, den modtager, kan du genkende anmodninger, der kommer fra Cowork. Cowork præsenterer en stabil softwareidentitet på to kanaler:

Kanal Hvor det vises Værdi
User-Agent anmodningsheader Hver udgående anmodning Cowork sender til din server copilot-cowork/1.0
clientInfo i MCP-handshake initialize Kun initialize-anmodningen { "name": "copilot-cowork", "version": "<version>" }

Match på copilot-cowork præfiks

Match copilot-coworkpræfiks, hvor der ikke skelnes mellem store og små bogstaver, på begge kanaler. Sammenlign ikke den nøjagtige copilot-cowork/1.0 streng eller en bestemt clientInfo.version. Versionen følger klient-identitetskontrakten og forventes at blive ændret. Et præfiksmatch får din gateway til at fungere på tværs af versionsbump.

# Correct: case-insensitive prefix match
copilot-cowork

# Incorrect: exact match breaks when the version changes
copilot-cowork/1.0

Vælg den rigtige kanal til din port

De to kanaler har forskelligt omfang, så tag udgangspunkt i den, der passer til, hvordan serveren håndhæver sin adgangskontrol:

  • Headeren User-Agent er til stede på alle anmodninger, herunder tools/list og tools/call. Hvis du begrænser adgangen eller tilskriver pr. anmodning, skal du bruge denne header som nøgle.
  • clientInfo sendes kun ved initialize-handshaken. Hvis du begrænser pr. session på forbindelsestidspunktet, kan du læse det der, men det gentages ikke ved senere anmodninger.

Hvad identiteten omfatter, og hvad den ikke omfatter

Identiteten navngiver kun softwaren . Det er det samme for alle Cowork-brugere og -forbindelser, og det bærer aldrig brugeridentitet. Brugeridentiteten forbliver i det autoriseringsflow, som din forbindelses godkendelseskonfiguration definerer.

Identiteten omfatter Identiteten omfatter ikke
Et stabilt softwarenavn (copilot-cowork) og en kontraktversion Enhver tenant-, bruger-, sessions- eller samtaleidentifikator
Den samme værdi på alle anmodninger og hver forbindelse En kvalifikator pr. connector

Da der ikke er nogen kvalifikator pr. connector, kan du i øjeblikket ikke bruge denne identitet til at se, hvilken connector der har foretaget et kald, eller til at adskille et udgivet Microsoft-plug-in fra en sideloadet server, der peger på den samme URL-adresse. Hvis du har brug for denne sondring, skal du gennemtvinge den via din forbindelses godkendelseskonfiguration i stedet for klientidentiteten.

Almindelige spørgsmål

Kan jeg bruge færdigheder fra M365-pakken i Claude Code?

Ja. Færdighedsmapperne indeholder standard Agent Skills. Kør wiqd plugin export --format claude-plugin for at producere Claude Code-layoutet, eller kopiér skill-mapperne til .claude/skills/ i et hvilket som helst Claude Code-projekt.

Har jeg brug for en fjernforbindelse?

Nej. Pakker med kun færdigheder fungerer godt til promptbaserede arbejdsprocesser. Connectorer er kun nødvendige, når din skill kræver live-data fra et eksternt system.

Hvordan adskiller pluginfunktioner sig fra indbyggede funktioner?

Plug-in-færdigheder vises med source "package" i API'en. De kan ikke tilsidesætte indbyggede færdigheder med samme navn. Administratorinstallerede pakker viser isAdminDeployed: true.

Kan it-administratorer styre, hvilke plug-ins der er tilgængelige?

Ja. Standard M365-administrationskontrolelementer gælder: tilladelses-/blokeringslister på tenantniveau, administratorstyrede udrulninger og overholdelsespolitikker.

Hvad sker der, hvis et plugin tilbagekaldes?

I den næste synkroniseringscyklus fjernes færdigheder og forbindelser fra den pågældende pakke fra brugerens session. Aktive samtaler bliver ikke afbrudt, men nye sessioner har ikke pakkens egenskaber.

Hvad er det maksimale antal færdigheder pr. pakke?

Tyve (20) færdigheder (ifølge ASKILL-M002). For connectorer er grænsen 10 pr. pakke.

Kan færdigheder henvise til forbindelsesværktøjer fra den samme pakke?

Ja, og det bør de. Navngiv værktøjerne eksplicit i din SKILL.md-arbejdsgang (f.eks. "Brug værktøjet search_case_law til at..."). Agenten forbinder dem under kørsel.

Kan værktøjerne i mit plugin acceptere filer fra Cowork-arbejdsområdet?

Ja. Deklarer værktøjsparameteren med contentEncoding: base64, så konverterer Cowork brugerens workspace-fil til base64-indhold, før din server kaldes. Modellen videregiver filstier, ikke filindhold, så store filer forbruger ikke modellens kontekst. Du kan finde oplysninger om og begrænsninger for erklæringer ved at læse mere i Acceptér filer fra Cowork-arbejdsområdet.

Hvordan genererer jeg et deterministisk GUID for min pakke?

wiqd plugin create genererer og fastgør app-id'et for dig. Konverteringsscriptet bruger UUID v5 (SHA-1-baseret) fra dit plug-in-navn, så hvis du kører konverteringen to gange, får du det samme GUID. Brug en GUID-generator til manuel pakning. Sørg for at holde den stabil på tværs af versioner.

Hvilken version af manifestet skal jeg målrette mod?

Ret mod 1.29, hvis du bygger med wiqd, som låser versionen for dig. Ved 1,29 er agentConnectors[]-poster kun URL'er, og mcpToolDescription er valgfri. De håndskrevne eksempler i denne artikel bruger 1.28, hvor mcpToolDescription er påkrævet, og den fil, den navngiver, skal være i ZIP-filen. atk import openplugin bruger UUID v5 (SHA-1-baseret) fra dit plug-in-navn. Hvis du kører importen to gange, returneres det samme GUID. Hvis du vil angive dine egne, angiv --app-id. Brug en GUID-generator til manuel pakning. Sørg for at holde den stabil på tværs af versioner.